{"_id":"@bernierllc/email-ui","_rev":"8-f7cc83790935c982903e5b94c1b37c06","name":"@bernierllc/email-ui","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@bernierllc/email-ui","version":"0.1.0","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"author":{"name":"Bernier LLC"},"license":"Bernier LLC","_id":"@bernierllc/email-ui@0.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"56eb06ce7d7c35a1c19655eee03c442dd2cd9331","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.1.0.tgz","fileCount":34,"integrity":"sha512-gqT0jx09zzgqcoMmRSzNhJcBmxhgoUPjlbrhub/C2mp+isvS3LvP6bQFxO3CVa/46e8tfI3V1Sin/OAlIA0i7Q==","signatures":[{"sig":"MEUCIQCIdKOceszthioe0RbZn4n7NmQE5v7UAJpF5uqcGqffCwIgK9B45cQrEJosJOlfIjpQv/Tof4QXiyZmPAhZ3JNg758=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44527},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","bernier":{"security":{"csp":true,"auditLogging":true,"inputSanitization":true},"integrations":{"logger":"optional","neverhub":"optional"}},"gitHead":"f7091f40315c6c560be3b52c699eb1d6a90e068c","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"tsc","clean":"rimraf dist","lint:fix":"eslint src/**/*.{ts,tsx} --fix","prebuild":"npm run clean","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/ui/email-ui"},"_npmVersion":"11.6.2","description":"React UI components for email management, templates, scheduling, and analytics","directories":{},"_nodeVersion":"25.2.0","dependencies":{"zod":"^3.22.4","react":"^18.2.0","react-dom":"^18.2.0"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@storybook/react":"^7.4.0","@types/react-dom":"^18.2.0","eslint-plugin-react":"^7.33.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.6.4","@testing-library/jest-dom":"^6.1.0","@typescript-eslint/parser":"^6.7.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.4.0","@testing-library/user-event":"^14.4.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-ui_0.1.0_1764170617314_0.03525989215291614","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bernierllc/email-ui","version":"0.1.2","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"author":{"name":"Bernier LLC"},"license":"Bernier LLC","_id":"@bernierllc/email-ui@0.1.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"680554dd16bf363d89920494a792b23a591dd38b","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.1.2.tgz","fileCount":34,"integrity":"sha512-mgB+zaKabqeoGwY/ZHhO5FlTH1zKOaR50heAJIcS6CRMRIpiOGfspmh3ioe6yc4ztMoAsgJ1OKqlmBxm6EPqJg==","signatures":[{"sig":"MEYCIQDrCxwHztfGH+5vYkPwiqzgQ45LRZly9BTye4SBLBpPsQIhALsgoQm37ydVaJosaVraCYCV5E+KaBtr5vUFPiiJd4VT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44632},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","bernier":{"security":{"csp":true,"auditLogging":true,"inputSanitization":true},"integrations":{"logger":"optional","neverhub":"optional"}},"gitHead":"683786f5b043d9a96c9f49ed1f04f9dccd79eed3","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"tsc","clean":"rimraf dist","lint:fix":"eslint src/**/*.{ts,tsx} --fix","prebuild":"npm run clean","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf90982e-1c6f-409a-afff-9293b08ed9c2"}},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/ui/email-ui"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"React UI components for email management, templates, scheduling, and analytics","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^3.22.4","react":"^18.2.0","react-dom":"^18.2.0"},"publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@storybook/react":"^7.4.0","@types/react-dom":"^18.2.0","eslint-plugin-react":"^7.33.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.6.4","@testing-library/jest-dom":"^6.1.0","@typescript-eslint/parser":"^6.7.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.4.0","@testing-library/user-event":"^14.4.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-ui_0.1.2_1767644255108_0.32686400994378206","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bernierllc/email-ui","version":"0.1.3","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"author":{"name":"Bernier LLC"},"license":"Bernier LLC","_id":"@bernierllc/email-ui@0.1.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"7641cd0e9e56434993e869b6d133aa02ca4c359a","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.1.3.tgz","fileCount":34,"integrity":"sha512-rUG2GglAnAljNwYgk9ZSB/kkcYHl5O1nDcKKk+K5n+hcgwe71KdtYogpML+xwShcFa30Xuhm7aVhRp4OGCZJBg==","signatures":[{"sig":"MEUCIQD/FM3nqXyZpfyUcwLA6a89CV7bYlY67JlHNEtlH3enzAIgdmAKj/w4UVrwn1AJ6l55OmZXIYG8+Z5mC4++imQ85hw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44570},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-ui-0.1.3.tgz","types":"dist/index.d.ts","bernier":{"security":{"csp":true,"auditLogging":true,"inputSanitization":true},"integrations":{"logger":"optional","neverhub":"optional"}},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"tsc","clean":"rimraf dist","lint:fix":"eslint src/**/*.{ts,tsx} --fix","prebuild":"npm run clean","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf90982e-1c6f-409a-afff-9293b08ed9c2"}},"_resolved":"/tmp/ed2cbd37f8a1630a844be151d8c3010a/bernierllc-email-ui-0.1.3.tgz","_integrity":"sha512-rUG2GglAnAljNwYgk9ZSB/kkcYHl5O1nDcKKk+K5n+hcgwe71KdtYogpML+xwShcFa30Xuhm7aVhRp4OGCZJBg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/ui/email-ui"},"_npmVersion":"11.11.0","description":"React UI components for email management, templates, scheduling, and analytics","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.4","react":"^18.2.0","react-dom":"^18.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@storybook/react":"^7.4.0","@types/react-dom":"^18.2.0","eslint-plugin-react":"^7.33.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.6.4","@testing-library/jest-dom":"^6.1.0","@typescript-eslint/parser":"^6.7.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.4.0","@testing-library/user-event":"^14.4.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-ui_0.1.3_1773078144420_0.34658434277371253","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bernierllc/email-ui","version":"0.1.4","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"author":{"name":"Bernier LLC"},"license":"Bernier LLC","_id":"@bernierllc/email-ui@0.1.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"8050c296681627d28328bddf2726d68cd977e112","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.1.4.tgz","fileCount":34,"integrity":"sha512-4fEI8bAHE7ZqXVOhcLCRPHJQwHZxQSE9YU9EIJPX478HG1KchBQJE7GsldpMz76VtKl/jQysvZuw6aYvFfu23A==","signatures":[{"sig":"MEYCIQCnPvCwP1sDhRuVXf3Yv03S5p2P/E/pWOH/D5fgK7OYsAIhAJw+YVjh2luFwLA349U+RWwJFJ/5HLxjMBjnR/P0HffZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44570},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-ui-0.1.4.tgz","types":"dist/index.d.ts","bernier":{"security":{"csp":true,"auditLogging":true,"inputSanitization":true},"integrations":{"logger":"optional","neverhub":"optional"}},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"tsc","clean":"rimraf dist","lint:fix":"eslint src/**/*.{ts,tsx} --fix","prebuild":"npm run clean","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf90982e-1c6f-409a-afff-9293b08ed9c2"}},"_resolved":"/home/runner/work/tools/tools/packages/ui/email-ui/bernierllc-email-ui-0.1.4.tgz","_integrity":"sha512-4fEI8bAHE7ZqXVOhcLCRPHJQwHZxQSE9YU9EIJPX478HG1KchBQJE7GsldpMz76VtKl/jQysvZuw6aYvFfu23A==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/ui/email-ui"},"_npmVersion":"11.11.0","description":"React UI components for email management, templates, scheduling, and analytics","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.4","react":"^18.2.0","react-dom":"^18.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@storybook/react":"^7.4.0","@types/react-dom":"^18.2.0","eslint-plugin-react":"^7.33.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.6.4","@testing-library/jest-dom":"^6.1.0","@typescript-eslint/parser":"^6.7.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.4.0","@testing-library/user-event":"^14.4.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-ui_0.1.4_1773163802341_0.1490494394619737","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bernierllc/email-ui","version":"0.2.0","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"author":{"name":"Bernier LLC"},"license":"Bernier LLC","_id":"@bernierllc/email-ui@0.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"e3a0cac2cc7a5e4c54ec2bbcc5a647d946f1ef55","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.2.0.tgz","fileCount":34,"integrity":"sha512-6QcvJpqGoS8sUpkB+o6gWDr2xocKXA3xpyptMH1o9xQdVFESiiVUzhNkov1vHSIbv1ZTIo/SX4se5rNZVMuBzg==","signatures":[{"sig":"MEYCIQDHSo7GEYWrbWJEuKFORPlgYGo+zVZPDk0mw5H1hwetlAIhALPPRrSeL7VH8EPz8n0nJ1MTgL7JJ2sdvebuLJgQbpO7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44570},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-ui-0.2.0.tgz","types":"dist/index.d.ts","bernier":{"security":{"csp":true,"auditLogging":true,"inputSanitization":true},"integrations":{"logger":"optional","neverhub":"optional"}},"scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"tsc","clean":"rimraf dist","lint:fix":"eslint src/**/*.{ts,tsx} --fix","prebuild":"npm run clean","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf90982e-1c6f-409a-afff-9293b08ed9c2"}},"_resolved":"/home/runner/work/tools/tools/packages/ui/email-ui/bernierllc-email-ui-0.2.0.tgz","_integrity":"sha512-6QcvJpqGoS8sUpkB+o6gWDr2xocKXA3xpyptMH1o9xQdVFESiiVUzhNkov1vHSIbv1ZTIo/SX4se5rNZVMuBzg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git","directory":"packages/ui/email-ui"},"_npmVersion":"11.14.1","description":"React UI components for email management, templates, scheduling, and analytics","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.4","react":"^18.2.0","react-dom":"^18.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","eslint":"^8.50.0","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@storybook/react":"^7.4.0","@types/react-dom":"^18.2.0","eslint-plugin-react":"^7.33.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.6.4","@testing-library/jest-dom":"^6.1.0","@typescript-eslint/parser":"^6.7.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.4.0","@testing-library/user-event":"^14.4.0","@typescript-eslint/eslint-plugin":"^6.7.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-ui_0.2.0_1779242008293_0.3683926588678519","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/email-ui","version":"0.4.0","description":"React UI components for email management, templates, scheduling, and analytics","type":"module","main":"dist/index.js","types":"dist/index.d.ts","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"bernier":{"integrations":{"logger":"optional","neverhub":"optional"},"security":{"inputSanitization":true,"csp":true,"auditLogging":true}},"author":{"name":"Bernier LLC"},"license":"Bernier LLC","dependencies":{"react":"^18.2.0","react-dom":"^18.2.0","zod":"^3.22.4"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"devDependencies":{"@storybook/addon-essentials":"^7.4.0","@storybook/react":"^7.4.0","@testing-library/jest-dom":"^6.1.0","@testing-library/react":"^14.0.0","@testing-library/user-event":"^14.4.0","@types/jest":"^29.5.5","@types/node":"^20.6.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@typescript-eslint/eslint-plugin":"^6.7.0","@typescript-eslint/parser":"^6.7.0","eslint":"^8.50.0","eslint-plugin-react":"^7.33.0","eslint-plugin-react-hooks":"^4.6.0","jest":"^29.6.4","jest-environment-jsdom":"^29.6.4","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.2.2"},"repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git","directory":"packages/ui/email-ui"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src/**/*.{ts,tsx}","lint:fix":"eslint src/**/*.{ts,tsx} --fix","clean":"rimraf dist","prebuild":"npm run clean","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_id":"@bernierllc/email-ui@0.4.0","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"homepage":"https://github.com/bernier-llc/tools#readme","_integrity":"sha512-R/P8b+ephcH+odGc9kUmu/FA6dyOREs47fGqqbCwYOR0gG1SYIy9dAfmE9VU8tjdZ+UZV2tVXZtp6jJPUQXjNQ==","_resolved":"/home/runner/work/tools/tools/packages/ui/email-ui/bernierllc-email-ui-0.4.0.tgz","_from":"file:bernierllc-email-ui-0.4.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-R/P8b+ephcH+odGc9kUmu/FA6dyOREs47fGqqbCwYOR0gG1SYIy9dAfmE9VU8tjdZ+UZV2tVXZtp6jJPUQXjNQ==","shasum":"afc333c5a1fda69acff21f3952595dce1e919118","tarball":"https://registry.npmjs.org/@bernierllc/email-ui/-/email-ui-0.4.0.tgz","fileCount":35,"unpackedSize":42741,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEyat0Q3SA8x0Al/khYVYwQHiI6qRLRm/EeYquf18IPuAiEAygOqIIT55MEcp4Eeq3ctQO6z0kJOxTptxMDN6LRLUp0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf90982e-1c6f-409a-afff-9293b08ed9c2"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/email-ui_0.4.0_1779250759947_0.9028348702084206"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-26T15:23:37.245Z","modified":"2026-05-20T04:19:20.293Z","0.1.0":"2025-11-26T15:23:37.552Z","0.1.2":"2026-01-05T20:17:35.249Z","0.1.3":"2026-03-09T17:42:24.566Z","0.1.4":"2026-03-10T17:30:02.483Z","0.2.0":"2026-05-20T01:53:28.463Z","0.4.0":"2026-05-20T04:19:20.145Z"},"bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"Bernier LLC","homepage":"https://github.com/bernier-llc/tools#readme","keywords":["email","ui","react","components","admin","templates","scheduling","analytics","bernierllc","logger-integration","neverhub-integration"],"repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git","directory":"packages/ui/email-ui"},"description":"React UI components for email management, templates, scheduling, and analytics","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/email-ui\n\nReact UI components for email management, templates, scheduling, and analytics.\n\n## Installation\n\n```bash\nnpm install @bernierllc/email-ui\n```\n\n## Usage\n\n```typescript\nimport { TemplateEditor, EmailComposer, AnalyticsDashboard } from '@bernierllc/email-ui';\n\n// Basic template editor\n<TemplateEditor\n  onSave={handleSaveTemplate}\n  onCancel={() => setEditing(false)}\n/>\n\n// Email composer with scheduling\n<EmailComposer\n  templates={templates}\n  onSend={handleSendEmail}\n  onSchedule={handleScheduleEmail}\n  onSaveDraft={handleSaveDraft}\n/>\n\n// Analytics dashboard\n<AnalyticsDashboard\n  analytics={analyticsData}\n  onRefresh={handleRefresh}\n  onExport={handleExport}\n/>\n```\n\n## Components\n\n### TemplateEditor\n\nFull-featured email template editor with variable detection and preview mode.\n\n#### Props\n\n- `template?: Partial<EmailTemplate>` - Existing template to edit\n- `onSave: (template: TemplateFormData) => Promise<void>` - Save handler\n- `onCancel?: () => void` - Cancel handler\n- `isLoading?: boolean` - Loading state\n- `className?: string` - Custom CSS class\n- `style?: React.CSSProperties` - Inline styles\n\n#### Features\n\n- Variable extraction from content (`{{variable}}` syntax)\n- Live preview mode\n- Form validation\n- Category and tag management\n\n### EmailComposer\n\nComprehensive email composition interface with template integration.\n\n#### Props\n\n- `templates?: EmailTemplate[]` - Available templates\n- `onSend: (email: EmailComposition) => Promise<void>` - Send handler\n- `onSchedule?: (email: EmailComposition) => Promise<void>` - Schedule handler\n- `onSaveDraft?: (email: Partial<EmailComposition>) => Promise<void>` - Draft handler\n- `isLoading?: boolean` - Loading state\n- `className?: string` - Custom CSS class\n- `style?: React.CSSProperties` - Inline styles\n\n#### Features\n\n- Template selection and variable population\n- File attachments\n- Email scheduling\n- Draft saving\n- Form validation\n\n### AnalyticsDashboard\n\nComprehensive email analytics visualization with multiple view modes.\n\n#### Props\n\n- `analytics: EmailAnalytics[]` - Analytics data array\n- `isLoading?: boolean` - Loading state\n- `onRefresh?: () => Promise<void>` - Refresh handler\n- `onExport?: (format: 'csv' | 'pdf') => Promise<void>` - Export handler\n- `className?: string` - Custom CSS class\n- `style?: React.CSSProperties` - Inline styles\n\n#### Features\n\n- Overview metrics with calculated rates\n- Trends visualization\n- Detailed breakdown tables\n- Export functionality\n- Multiple view modes\n\n## API Reference\n\n## Type Definitions\n\n### EmailTemplate\n```typescript\ninterface EmailTemplate {\n  id: string;\n  name: string;\n  subject: string;\n  content: string;\n  variables: string[];\n  category?: string;\n  tags?: string[];\n  createdAt: Date;\n  updatedAt: Date;\n  isActive: boolean;\n}\n```\n\n### EmailComposition\n```typescript\ninterface EmailComposition {\n  to: string[];\n  cc?: string[];\n  bcc?: string[];\n  subject: string;\n  content: string;\n  templateId?: string;\n  variables?: Record<string, any>;\n  attachments?: File[];\n  scheduleTime?: Date;\n}\n```\n\n### EmailAnalytics\n```typescript\ninterface EmailAnalytics {\n  templateId?: string;\n  sent: number;\n  delivered: number;\n  opened: number;\n  clicked: number;\n  bounced: number;\n  complained: number;\n  openRate: number;\n  clickRate: number;\n  bounceRate: number;\n  period: {\n    start: Date;\n    end: Date;\n  };\n}\n```\n\n## Integration\n\n### Logger Integration\n\nComponents support optional logger integration for debugging and monitoring:\n\n```typescript\nimport { Logger } from '@bernierllc/logger';\n\nconst logger = new Logger({ service: 'email-ui' });\n\n// Components automatically detect and use logger when available\n<TemplateEditor onSave={handleSave} />\n```\n\n**Integration Status**: ✅ **Ready** - Components automatically detect logger presence and provide enhanced debugging capabilities including:\n- Component lifecycle logging\n- User interaction tracking  \n- Error reporting and debugging\n- Performance monitoring\n\n### NeverHub Integration\n\nComponents support optional NeverHub integration for enhanced functionality:\n\n```typescript\nimport { NeverHubAdapter } from '@bernierllc/neverhub-adapter';\n\n// Components automatically detect NeverHub presence\n// and enable enhanced capabilities when available\n```\n\n**Integration Status**: ✅ **Ready** - Components automatically detect NeverHub availability and enable:\n- Real-time email event notifications\n- Cross-component state synchronization\n- Enhanced metrics collection\n- Distributed debugging and monitoring\n\n### Integration Documentation\n\nThis package follows the **graceful degradation** pattern:\n- All components work independently without any integrations\n- Logger integration adds debugging and monitoring capabilities  \n- NeverHub integration adds real-time and distributed features\n- No breaking changes when integrations are added or removed\n\n## Security\n\n### Input Sanitization\n\nAll user inputs are properly sanitized:\n- Email addresses validated with RFC-compliant patterns\n- HTML content sanitized to prevent XSS attacks\n- File uploads validated for type and size\n- Template variables escaped to prevent injection\n\n### Content Security Policy\n\nComponents are designed to work with strict CSP:\n- No inline styles or scripts\n- All dynamic content properly escaped\n- External resource loading controlled\n- Event handlers use proper event delegation\n\n### Data Protection\n\nComponents handle sensitive data securely:\n- Email content encrypted in transit\n- Temporary files cleaned up automatically  \n- No sensitive data stored in browser storage\n- Audit logging for security events (when logger integration enabled)\n\n## Styling\n\nComponents use BEM CSS methodology for consistent styling:\n\n```css\n.email-composer {\n  /* Component root */\n}\n\n.email-composer__header {\n  /* Component header */\n}\n\n.email-composer__form {\n  /* Form container */\n}\n\n.form-group {\n  /* Form field group */\n}\n\n.form-input {\n  /* Input fields */\n}\n\n.btn {\n  /* Base button styles */\n}\n\n.btn--primary {\n  /* Primary button variant */\n}\n\n.btn--secondary {\n  /* Secondary button variant */\n}\n```\n\n## Development\n\n### Building\n\n```bash\nnpm run build\n```\n\n### Testing\n\n```bash\nnpm test\nnpm run test:coverage\nnpm run test:watch\n```\n\n### Linting\n\n```bash\nnpm run lint\nnpm run lint:fix\n```\n\n## Dependencies\n\n- React 18+\n- Zod for validation\n- DOM APIs for browser functionality\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\nThis package is licensed under the Bernier LLC license. See LICENSE file for details.\n\n## Support\n\nFor support and questions, please contact Bernier LLC or refer to the project documentation.","readmeFilename":"README.md"}