{"_id":"@dwmkerr/lifeline","_rev":"5-c7ccf65f87c8de1c73385b6702901574","name":"@dwmkerr/lifeline","dist-tags":{"latest":"0.2.3"},"versions":{"2.3.0":{"name":"@dwmkerr/lifeline","version":"2.3.0","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","identity-obj-proxy":"^3.0.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@2.3.0","gitHead":"2a8c3afb2d6e0f61a3549fa6b8070925f5a166ac","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-i7w+C5SGo93T+LfZLiJ1pWw9AIdSfDG3JWWNCFsAgkw1iFBURyobbEgB2J66L0eB6r+Yv7pTkgsqwfze2yjFhQ==","shasum":"738f9dcc5dbb63d2296af5acf688c5e43de2fde7","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-2.3.0.tgz","fileCount":70,"unpackedSize":209577,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNYGWsCutLFYvMO8fRfpiLA6Q/+3CznzJ5OY4eM2anXgIgHv5izopAswDVQp3cnZ43ICjQyyBu+ke537zTi7H7o10="}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_2.3.0_1707885803355_0.8043343351021763"},"_hasShrinkwrap":false},"2.5.0":{"name":"@dwmkerr/lifeline","version":"2.5.0","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","emoji-picker-react":"^4.7.17","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","identity-obj-proxy":"^3.0.0","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@2.5.0","gitHead":"03a532707e509fd9e1c1a6d747014854c6790af0","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-6CaAGGqOOn8GHmkwEKp7AmosWytgvb2sM0ICFevHIr72WKnnzg8pM3J7/SdhLw12GYSznBJpqRs1zjyMkEdwYA==","shasum":"fa23dc51359e73f9af0d43e7a05bb08db9efad5c","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-2.5.0.tgz","fileCount":79,"unpackedSize":3209957,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPdIhlswAxAoon+gohM5qWvhF8b2XgYE6XFO81gju3yAiBMR9ioFlLZMU6QdstiUOqA6Nam3DihXdF+MBQZS37Qiw=="}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_2.5.0_1708281002872_0.7064818155540915"},"_hasShrinkwrap":false},"2.6.0":{"name":"@dwmkerr/lifeline","version":"2.6.0","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","emoji-picker-react":"^4.7.17","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","identity-obj-proxy":"^3.0.0","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@2.6.0","gitHead":"54dd75ef311b037f6e3b17ae59b2abc65f9a71ec","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-VCjmwwhrMIt9n53cf0UfM642vcqidjAg2qzK/pjhfzm4cMLLQ1WXYllTKJl8mAj4OssQsLrb2GMwu6tySsL7IA==","shasum":"75d226d779b825f04b78d83103a91ae6a5f1dd2f","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-2.6.0.tgz","fileCount":81,"unpackedSize":3216735,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDCge07k8MhumUKz/5KKjWdN8FByvRyX1gSOMrDCX8RQAiEAy8ijOxqmAR7dFZT1P8JXIU2JWj2x/fOZqnXzCrNslPo="}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_2.6.0_1708286896808_0.41828880564507154"},"_hasShrinkwrap":false},"0.2.1":{"name":"@dwmkerr/lifeline","version":"0.2.1","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","emoji-picker-react":"^4.7.17","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","identity-obj-proxy":"^3.0.0","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@0.2.1","gitHead":"9550294e45b984c48e28de892ecc938a1b3cf509","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-P7Cc7zbqFurGMAGzt2/soGSWGilQJVQo09hxk3HMHqa+InrnZbMsgJTZoTfFnkQkErAmCIrbtKT2+UgPV/yHhw==","shasum":"2b0841026fa41464746f26dd090ee788a2562fba","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-0.2.1.tgz","fileCount":81,"unpackedSize":3219456,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDhEYBt3SGAwAGVgQUxMYpQnyU7fRW0tYj3114h3h8QWAiEAxkpQKiQflBU/hSf4RZA3nFAjtk4tQlIUz8tdMVWVj7E="}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_0.2.1_1708307384809_0.387138888259031"},"_hasShrinkwrap":false},"0.2.2":{"name":"@dwmkerr/lifeline","version":"0.2.2","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","emoji-picker-react":"^4.7.17","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","identity-obj-proxy":"^3.0.0","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@0.2.2","gitHead":"00151bdd7dacf2c40969b029b631e96a16a6f7b1","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-o4BC1el8wpk3sDwK5h58M/DEcKS2wId5kSrq5H3MGGG4dwqnXQ3s0G2KuiaqDoltHdr2fL7+pcpFF1q69Me8Yg==","shasum":"9db2592e9668f0fd10b97cb2ad70a9aba0412356","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-0.2.2.tgz","fileCount":79,"unpackedSize":3218755,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJ6t+DMwBPC3+IyOL9LcnrBOxGjbmNBr42Fiegv4NU1AiEAyUaKhSHwq/zvTy+1g3i9v9YKUOm5HV+5XgN74X0e4+M="}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_0.2.2_1708494882362_0.639480118757032"},"_hasShrinkwrap":false},"0.2.3":{"name":"@dwmkerr/lifeline","version":"0.2.3","private":false,"scripts":{"start":"node scripts/start.js","build":"node scripts/build.js","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"eslint .","lint:fix":"eslint --fix .","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch --no-coverage","test:debug":"NODE_OPTIONS=--experimental-vm-modules node --inspect-brk ./node_modules/.bin/jest --runInBand --watch","tsc":"tsc"},"dependencies":{"@babel/core":"^7.16.0","@babel/plugin-proposal-private-property-in-object":"^7.21.11","@emotion/react":"^11.11.3","@emotion/styled":"^11.11.0","@mui/icons-material":"^5.15.7","@mui/joy":"^5.0.0-beta.25","@mui/lab":"^5.0.0-alpha.163","@mui/material":"^5.15.7","@pmmmwh/react-refresh-webpack-plugin":"^0.5.3","@svgr/webpack":"^5.5.0","@testing-library/jest-dom":"^5.17.0","@testing-library/react":"^13.4.0","@testing-library/user-event":"^13.5.0","@types/jest":"^27.5.2","@types/node":"^16.18.79","@types/react":"^18.2.52","@types/react-dom":"^18.2.18","babel-jest":"^29.7.0","babel-loader":"^8.2.3","babel-plugin-named-asset-import":"^0.3.8","babel-preset-react-app":"^10.0.1","bfj":"^7.0.2","browserslist":"^4.18.1","buffer":"^6.0.3","camelcase":"^6.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","css-loader":"^6.5.1","css-minimizer-webpack-plugin":"^3.2.0","csv-parse":"^5.5.3","csv-stringify":"^6.4.5","dotenv":"^10.0.0","dotenv-expand":"^5.1.0","emoji-picker-react":"^4.7.17","eslint":"^8.3.0","eslint-config-react-app":"^7.0.1","eslint-plugin-html":"^7.1.0","eslint-webpack-plugin":"^3.1.1","file-loader":"^6.2.0","firebase":"^10.8.0","fs-extra":"^10.0.0","html-webpack-plugin":"^5.5.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-resolve":"^27.4.2","jest-watch-typeahead":"^2.2.2","mini-css-extract-plugin":"^2.4.5","node-polyfill-webpack-plugin":"^3.0.0","postcss":"^8.4.4","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^6.2.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^7.0.1","prompts":"^2.4.2","react":"^18.2.0","react-app-polyfill":"^3.0.0","react-dev-utils":"^12.0.1","react-dom":"^18.2.0","react-refresh":"^0.11.0","resolve":"^1.20.0","resolve-url-loader":"^4.0.0","sass-loader":"^12.3.0","semver":"^7.3.5","source-map-loader":"^3.0.0","style-loader":"^3.3.1","tailwindcss":"^3.0.2","terser-webpack-plugin":"^5.2.5","ts-jest":"^29.1.2","typescript":"^4.9.5","web-vitals":"^2.1.4","webpack":"^5.64.4","webpack-dev-server":"^4.6.0","webpack-manifest-plugin":"^4.0.2","workbox-webpack-plugin":"^6.4.1"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","identity-obj-proxy":"^3.0.0","ts-jest-resolver":"^2.0.1"},"babel":{"presets":["react-app"]},"_id":"@dwmkerr/lifeline@0.2.3","gitHead":"3b476355dc9bc3f3eefa298a10de831afb675bec","description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","_nodeVersion":"18.19.1","_npmVersion":"10.2.4","dist":{"integrity":"sha512-Iv+kPD6+4geC4AgszpQ3NDMQ2pQYfJmywh3FOFEjQmyg8bVHH0yXuXUwRCaaH5bYyx1qRhD3BrEgr3Ya7IFwGQ==","shasum":"239e0d562f1e33ab47a52033aadf1de9e3b6af10","tarball":"https://registry.npmjs.org/@dwmkerr/lifeline/-/lifeline-0.2.3.tgz","fileCount":79,"unpackedSize":3219191,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDszZxW+n5kc+kLQDju0oH4t7VWNaVwEJLwai8K9PyRXQIhANSn8M9vbolSu38+yXXiCHO1y+OYhCDReqXWt3gp5+WA"}]},"_npmUser":{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"},"directories":{},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lifeline_0.2.3_1709296689312_0.578027341775762"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-14T04:43:23.281Z","2.3.0":"2024-02-14T04:43:23.562Z","modified":"2024-03-01T12:38:09.949Z","2.5.0":"2024-02-18T18:30:03.227Z","2.6.0":"2024-02-18T20:08:17.037Z","0.2.1":"2024-02-19T01:49:45.075Z","0.2.2":"2024-02-21T05:54:42.664Z","0.2.3":"2024-03-01T12:38:09.499Z"},"maintainers":[{"name":"dwmkerr-admin","email":"dwmkerr@gmail.com"}],"description":"[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/","readme":"# lifeline\n\n[![main](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml/badge.svg)](https://github.com/dwmkerr/lifeline/actions/workflows/main.yaml) [![codecov](https://codecov.io/gh/dwmkerr/lifeline/graph/badge.svg?token=lI5Swxa2tj)](https://codecov.io/gh/dwmkerr/lifeline)\n\nVisualise and track key life events with an interactive timeline.\n\nhttps://lifeline.rocks\n\n<!-- vim-markdown-toc GFM -->\n\n- [Developer Guide](#developer-guide)\n    - [Firebase](#firebase)\n- [Releasing](#releasing)\n- [Goals](#goals)\n- [Building the line](#building-the-line)\n- [TODO](#todo)\n    - [Epic - Blur Categories](#epic---blur-categories)\n    - [Epic - Demo lifelines](#epic---demo-lifelines)\n    - [Epic - Manage Categories](#epic---manage-categories)\n    - [Epic Import Preview](#epic-import-preview)\n    - [Events to add](#events-to-add)\n    - [Feedback](#feedback)\n\n<!-- vim-markdown-toc -->\n\n## Developer Guide\n\n| Command | Description |\n| ------- | ----------- |\n| `npm run lint` | Lint the code with eslint/prettier |\n| `npm run lint:fix` | Fix the code with eslint/prettier |\n\n### Firebase\n\nUse the [Firebase Local Emulator Suite](https://firebase.google.com/docs/emulator-suite) to help when working with Firebase.\n\nSetup looks like this:\n\n```bash\n# Install firebase CLI tools, then login.\ncurl -sL firebase.tools | bash\nfirebase login\n\n# Initialise the firebase project (not needed for most users, only if you are\n# forking and building your own project from scratch).\n#\n# firebase init\n#\n# Choose: Firestore, Emulators. Lifeline project. Default options seem to be fine.\n\n# Start the emulator, optionally open the web interface.\nfirebase emulators:start\nopen http://localhost:4000\n```\n\nDeploy indexes and rules with:\n\n```bash\nfirebase deploy --only firestore:rules firestore:indexes\n\n```\n\n## Releasing\n\nThis project uses [Release Please](https://github.com/googleapis/release-please) to manage releases. As long as you use [Conventional Commit messages](https://www.conventionalcommits.org/en/v1.0.0/), release please will open up a 'release' pull request on the `main` branch when changes are merged. Merging the release pull request will trigger a full release to NPM.\n\n```bash\nVERSION=\"0.1.0\" git commit --allow-empty -m \"chore: release ${VERSION}\" -m \"Release-As: ${VERSION}\"\n```\n\nNote that currently firestore configuration (security rules and indexes) is not deployed as part of this process, to avoid unexpected downtime while indexes rebuild. Manually deploy these changes as needed.\n\n## Goals\n\n- Build multiple timelines of key life events\n- Events might be: where I lived, work, travel, holidays, climbing, medical, etc\n- Events can be major or minor, to allow a high level view or detailed view\n- Filter that lets you choose which lifelines to show\n\n## Building the line\n\nCould be text based:\n\n```\n2021-01-01: home - *moved to UK*\n2021-02-03: home - lived in US for a week\n```\n\n## TODO\n\nQuick and dirty task list:\n\n- [x] refactor: initial page structure with joyui\n- [x] feat: setup firebase login\n- [x] feat: setup firebase collection and repository\n- [x] feat: csv import\n- [x] feat: sort events, sort option in UI for direction\n- [x] feat: filter by category\n- [x] feat: color category codes\n- [x] build: coverage badge\n- [x] feat: release please and badge\n- [x] feat: edit event\n- [x] feat: delete event\n- [x] chore: close dialog button on filters\n- [x] feat: dialog for import\n- [x] feat: delete existing events\n- [x] bug: if cancel during import the menu stays open\n- [x] refactor: cleanup import button and fix styles\n- [x] build: fix up main build\n- [x] favicon (heart?)\n- [x] add event as modal to save space\n- [x] add event / edit event modal errors\n- [x] add/edit event required fields\n- [x] retire 'add event' from the top bar\n- [x] feat: deploy to firebase on build\n- [x] search bar\n- [x] feat: major/minor events\n- [x] feat: user settings (DOB, show age)\n- [x] feat: show age in timeline\n- [x] feat: filter by date, refactor into a filters object\n- [x] feat: emoji for categories\n- [x] feat: emoji in category dot\n- [x] feat: filters select all select none\n- [x] bug: add events resets filters (e.g. category)\n- [ ] bug: cannot key in a category in add/edit event\n\n**Demoable**\n\n- [x] feat: welcome page\n- [x] feat: on start, show welcome screen if not logged in\n- [x] feat: loading spinner\n- [x] feat: show warning to regularly export events\n- [x] feat: use cloud firestore rather than local\n- [x] feat: feedback option\n- [x] feat: show version number in menu\n- [ ] fix: all events are viewable by all users\n- [ ] build: 'yes/no' step on build to deploy firebase changes - can you dry-run firebase for changes? If so the website deploy should also be gated in the same 'yes/no' step\n- [ ] feat: fix up autocomplete to use the same style of text entry as for tripweather\n\n**v0.3**\n\n- [ ] chore: fix version number to 0.x series\n\n- [ ] feat: watch for firestore errors, test with new site\n- [ ] feat: consider moving search and filters into a filters context so it can be set from anywhere, e.g. on a dropdown from the life events letting you filter to similar events\n- [ ] feat: filters button on navbar, side drawer without overlay / close panel icon\n\n- [ ] bug: hard bug - category selection in the filters should be preserved when adding/deleting/changing events, first try caused them all to blank out, next try didn't pick up new ones, etc\n\n- [ ] minor bug: prevent focus for emoji picker?\n\n- [ ] feat: for emotional impact, option to toggle between category and impact in the timeline view\n\nLink domain\n“Search” category for events that need research\n“Don’t know” emoji for impact / severity\nadd starting therapy in uk\nadd cheltenham\n\n### Epic - Blur Categories\n\nOption to 'blur' categories so when sharing the screen the details are kept private.\n\n### Epic - Demo lifelines\n\nOn new user sign up show a demo lifeline and add a user setting 'demo', when this setting is on offer an alert on startup showing it is a demo with the option to remove all values.\n\n### Epic - Manage Categories\n\n- [ ] feat: suggest categories in drop down list for new events\n- [ ] feat: for category select in add/edit, consider the categories in autocomplete with an 'add' button to add a new category\n\n### Epic Import Preview\n\n- [ ] feat: import preview / back to column map\n- [ ] feat: show warning messages on import preview\n- [ ] bug: check autofocus on import/export\n\n### Events to add\n\n- adopted\n- remarry / ruth\n- remarry / guy\n- meet / patrick\n\n### Feedback\n\nIdeas from Michelle:\n\nAdverse child experiences scoring. For life events, can you categorise the event as e.g. 'moving', 'depression', 'psychiatric event', 'relationship'. These could be thought of as life-transitions. You could then see that for example prior to a depressive episode there were a series of life transitions that were stressful.\n\nIn terms of your own attitude about things that happened; was this event for you happy or dreadful? Could you also add how you feel about it.\n\nAlso look at 'impact' as major/minor. The size of the icon could be the majority of the event. Things could be color coded or icons could be sized to see how impactful the event is but also then what the impact is.\n\nWhen you click and collapse into chronological order. Consider an emoji for how you feel about it.\n\n- [ ] feat: 'major' should be re-classified as 'impact', which could be minor/intense/etc, this should be an emoji based system\n- [ ] feat: 'category' should offer an emoji, major events should show larger so that they can be more easily seen\n","readmeFilename":"README.md"}