{"_id":"@arely.sgtw/angular-arquetipo","_rev":"11-372e8e64f04de14848c4535e02690fba","name":"@arely.sgtw/angular-arquetipo","dist-tags":{"latest":"0.0.14"},"versions":{"0.0.3":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.3","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.3","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"13061b6bc3610b151d78c1a24d290f861f0901c0","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.3.tgz","fileCount":31,"integrity":"sha512-9pxdXoDcn0cinewiacuOpuw1f3hL7/jZALWYsFk/u2iMVXnqO3+9ueBl2A4fEweSSA04x+wCtBuZVO4nIYOeow==","signatures":[{"sig":"MEUCIQC+94j2SLVxlITyoMWyMviOJlj28vsbOjuspRXwU+nGrAIgdbsdZ2f5fBmu2blLzwhVdJF7O/P2YNg8aNM0s01WC90=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30153},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.3_1752304067468_0.6869886917594401","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.4","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.4","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"4f3eda1560b22e6a4e11a7058bc0effb89decad5","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.4.tgz","fileCount":31,"integrity":"sha512-gW83BbwbsWCr9MMEXL1N2kGVv+H6PN6iHBdGfly95ndMYr5ctdVCGSq8f0/rfFwa3WifsWi/qFxeZwVAjzLDkQ==","signatures":[{"sig":"MEQCIFKOqJ7neaC9gIgUCi2ATet37cCHw17dC133c0N549X/AiB7uFgKTOqcu2mryf/Cmuxp6VZIWQzhEZJzNNa2WPPZXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30153},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.4_1752305131076_0.6564157438013933","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.5","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.5","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"f44236d958b689ef040b06b58129eb04a549cb55","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.5.tgz","fileCount":32,"integrity":"sha512-qvGQxwqmUNoZ2Y6jERMMJiG9V2AOycyL1+8autWE+HZSrV1A7CW4xA3vZRVP4MXR3IR+lfpJ0RMDB4+SLeooQQ==","signatures":[{"sig":"MEQCIFRAEvosToEaruwRFP92T6v3tHzVjUHJlmGKPVP/MIF7AiB5W66ZZqlANT+3EY5JmQg9oekljM19WF56cOEw8i1rlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364028},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.5_1752511363701_0.35297092967160304","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.6","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.6","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"f22855deea466e06c5e0d77d58cd2a5c7f3f46bb","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.6.tgz","fileCount":32,"integrity":"sha512-EkHu3HDOBG4RX5K5fyJ8h2rJPBwo+gJlD3VFkjA6+LGHI2sIfuQ6AiEnXJcH9b114SVtYJtX7hRZno4zxvpRDQ==","signatures":[{"sig":"MEYCIQDRs4pHCslsEAgQiH/bf/tcO7yIFOtd3SwTSuFDoXxcgQIhAIZcZNQchHVVBhOFdoTfAG/SNVOLhjqtGQ2bm25krMml","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374252},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.6_1752514012086_0.9008227502532868","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.7","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.7","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"206e263faa1bccfdbc8ac95826e437a7053ea444","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.7.tgz","fileCount":34,"integrity":"sha512-+3vxgVSisYZ/GbphDdXe548uiBC3RCrKFrnXbeZSvQi3Rd0y0qn9iUKYQ4pnAk60PCaXOtsqrnsP2oGIdhPvHQ==","signatures":[{"sig":"MEUCIQDFwPrARI4RUvr8fVEHt9S9G1x0k95f6+vtC4mXgYx79AIgHnIZzCkQHvXiQRRKeNm5vKSspoYl2srYS9voz1Ef+Vs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375954},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.7_1752514353037_0.8120197812730234","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.8","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.8","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"ec18579c82c3df537b37be32247b19d6b78c5f74","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.8.tgz","fileCount":54,"integrity":"sha512-n4oMBMYCxr6MZRYXVwjiq9cXmQGaZ9XUEUoLSzjxKIlrCILw75j1Pyc//xYEIb4Wzh7h1S062wNriFaXde9qOA==","signatures":[{"sig":"MEUCIE6sXxNOmXaGcgmqAelj/k2s+RRkhQV12GojgrEjJeVoAiEAuEM+fS5nTxyH07cF/qwOJWjB7oaPcVV6aBwqW0MLH/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383454},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.8_1752514569834_0.35090727526058907","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.9","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.9","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"170749b94aa5686e775b5ad749e33616fa020056","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.9.tgz","fileCount":54,"integrity":"sha512-zpA9fBbixUX30cyJKowvfY0nOKYQPodPvNIx8tLxF6vu1+ENO9R+hjxtNxGmMLLGdut+wUP2HBywTjwuzbnQ9Q==","signatures":[{"sig":"MEYCIQDpiFfQpvRbwUCNmp/PUMx4fBYYtILy8ShgUp1AAy+wkQIhANHlDLFEvdyjL0tNGAbOlOYYO4c3EeCN1gKRDgyePx74","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383454},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.9_1752514919464_0.8226874350637543","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.10","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.10","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"84392f4e9d82c9dd0db38f80995f426f13ed6546","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.10.tgz","fileCount":54,"integrity":"sha512-OLuD+kXD2m/iHhQYARUF32igucmNnxafdXGyv48QQ0guRRMP4vk7mb78dt1QDDMbMNvXLXd7bVDmrVPiHoCjgw==","signatures":[{"sig":"MEQCIDm/0QPm7zVCPlK0hdt4CzzXHIrArH8mOjE2pd9f0rswAiBxvtSVBku45TPZPohsJ8hxE3J/DcNjKKNf7SiUV+WopQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383490},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.10_1752515064215_0.9729213246040846","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.11","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.11","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"6c55e4ac74591719dde456fbd94e31e110d72c99","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.11.tgz","fileCount":54,"integrity":"sha512-nA6IgkPK7OWHbjytInA99Z2OwI+g9s4Z83OTQWQOx7klZGpMevHnqiq6XUIfWEJpGfQYAZFBmp1oXvUixLiGWQ==","signatures":[{"sig":"MEQCIC+YmS/YPcbekNozX6+i7wzSD2wgHJFy3VyLugsT4ZxpAiBlI+VmMzRNmJQztYE0l8jWW3fhyebwgfoIr9pSkVz8Vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383490},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.11_1752515262488_0.7349979303793379","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.12","keywords":["schematics"],"author":"","license":"MIT","_id":"@arely.sgtw/angular-arquetipo@0.0.12","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"dist":{"shasum":"589126cebf53cb1bc84577f868e9595e5ef5c6b5","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.12.tgz","fileCount":54,"integrity":"sha512-34whjJlrJ47S+x/NyXfoYrJ3LSzVV2Z/WAG3XefoR9q/ayS/wGAI+N40G25+vMq93TXSSNz22JVUldJ7XzXgYA==","signatures":[{"sig":"MEUCIQDxFyJQTN9uasINAKFfMtcPbUAcbTK1P3YiwwQGhVTzhAIgNiw6VvunYa4dUkFXal6l4KJ6KEIt23axSH+DnX8wF1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":383794},"scripts":{"test":"npm run build && jasmine src/**/*_spec.js","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"schematics":"./src/collection.json","_npmVersion":"10.8.2","description":"A blank schematics","directories":{},"_nodeVersion":"20.19.0","dependencies":{"typescript":"~5.8.2","@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^5.0.0","@types/node":"^20.17.19","@types/jasmine":"~5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-arquetipo_0.0.12_1752516853627_0.3285226692041914","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@arely.sgtw/angular-arquetipo","version":"0.0.14","description":"A blank schematics","publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","test":"npm run build && jasmine src/**/*_spec.js"},"keywords":["schematics"],"author":"","license":"MIT","schematics":"./src/collection.json","dependencies":{"@angular-devkit/core":"^20.1.0","@angular-devkit/schematics":"^20.1.0","typescript":"~5.8.2"},"devDependencies":{"@types/node":"^20.17.19","@types/jasmine":"~5.1.0","jasmine":"^5.0.0"},"_id":"@arely.sgtw/angular-arquetipo@0.0.14","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-PrbdlP1LoRXOqNKvi+BFzaShjP5K0MkrS1tGmvmRi6RHJbB3eFi6S0LafiMh3QlyPpd+haI6KgqPkNog+wHTIg==","shasum":"97fa88613d293f248888000e52a6551419adb55f","tarball":"https://registry.npmjs.org/@arely.sgtw/angular-arquetipo/-/angular-arquetipo-0.0.14.tgz","fileCount":54,"unpackedSize":383796,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQClfaeyHQanLpZ3euDi3/9Ju7QW2PXe3kFxifUXdSFfjAIhALNV1tdkdo9e+FvP4hMGKdPBZ1+387cCaSxPv2uSxOPp"}]},"_npmUser":{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"},"directories":{},"maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/angular-arquetipo_0.0.14_1752517238668_0.8869995749576345"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-12T07:07:47.352Z","modified":"2025-07-14T18:20:39.020Z","0.0.3":"2025-07-12T07:07:47.634Z","0.0.4":"2025-07-12T07:25:31.273Z","0.0.5":"2025-07-14T16:42:43.880Z","0.0.6":"2025-07-14T17:26:52.289Z","0.0.7":"2025-07-14T17:32:33.221Z","0.0.8":"2025-07-14T17:36:09.997Z","0.0.9":"2025-07-14T17:41:59.686Z","0.0.10":"2025-07-14T17:44:24.443Z","0.0.11":"2025-07-14T17:47:42.673Z","0.0.12":"2025-07-14T18:14:13.897Z","0.0.14":"2025-07-14T18:20:38.857Z"},"license":"MIT","keywords":["schematics"],"description":"A blank schematics","maintainers":[{"name":"arely.sgtw","email":"arely.sgtw@gmail.com"}],"readme":"# Angular Arquetipo\n\nEsquema base para proyectos Angular con arquitectura modular y componentes core predefinidos.\n\n## 📦 Cómo instalar\n\n### Instalación global\n```bash\nnpm install -g @arely.sgtw/angular-arquetipo\n```\n\n### Crear nuevo proyecto\n```bash\nng new mi-proyecto --collection=@arely.sgtw/angular-arquetipo\n```\n\n### Instalación local para desarrollo\n```bash\ngit clone <repository-url>\ncd angular-arquetipo\nnpm install\nnpm run build\n```\n\n## 🚀 Cómo extender (agregar feature module)\n\n### Estructura de módulos\nCada feature module debe seguir esta estructura:\n\n```\nsrc/app/modules/[feature-name]/\n├── pages/\n│   └── [page-name]/\n│       ├── [page-name].component.ts\n│       ├── [page-name].component.html\n│       ├── [page-name].component.scss\n│       └── [page-name].component.spec.ts\n├── [feature-name]-module.ts\n└── [feature-name]-routing-module.ts\n```\n\n### Ejemplo: Agregar módulo \"productos\"\n\n1. **Crear estructura de carpetas:**\n```bash\nmkdir src/app/modules/productos\nmkdir src/app/modules/productos/pages\nmkdir src/app/modules/productos/pages/lista-productos\n```\n\n2. **Crear componente de página:**\n```typescript\n// productos/pages/lista-productos/lista-productos.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'app-lista-productos',\n  templateUrl: './lista-productos.component.html',\n  styleUrls: ['./lista-productos.component.scss']\n})\nexport class ListaProductosComponent {}\n```\n\n3. **Crear módulo:**\n```typescript\n// productos/productos-module.ts\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductosRoutingModule } from './productos-routing-module';\nimport { ListaProductosComponent } from './pages/lista-productos/lista-productos.component';\n\n@NgModule({\n  declarations: [ListaProductosComponent],\n  imports: [CommonModule, ProductosRoutingModule]\n})\nexport class ProductosModule {}\n```\n\n4. **Configurar rutas:**\n```typescript\n// productos/productos-routing-module.ts\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ListaProductosComponent } from './pages/lista-productos/lista-productos.component';\n\nconst routes: Routes = [\n  { path: '', component: ListaProductosComponent }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class ProductosRoutingModule {}\n```\n\n5. **Registrar en app-routing:**\n```typescript\n// app-routing-module.ts\nconst routes: Routes = [\n  { path: 'productos', loadChildren: () => import('./modules/productos/productos-module').then(m => m.ProductosModule) }\n];\n```\n\n## 📋 Convenciones de código\n\n### Nomenclatura\n- **Archivos:** kebab-case (`mi-componente.component.ts`)\n- **Clases:** PascalCase (`MiComponente`)\n- **Variables/métodos:** camelCase (`miVariable`)\n- **Constantes:** UPPER_SNAKE_CASE (`MI_CONSTANTE`)\n\n### Estructura de archivos\n- **Componentes:** `[nombre].component.ts|html|scss|spec.ts`\n- **Módulos:** `[nombre]-module.ts`\n- **Routing:** `[nombre]-routing-module.ts`\n- **Servicios:** `[nombre].service.ts`\n\n### Organización de carpetas\n```\nsrc/app/\n├── core/                 # Componentes compartidos\n│   └── components/\n├── modules/             # Feature modules\n│   ├── [feature]/\n│   │   ├── pages/\n│   │   ├── components/  # Componentes específicos del módulo\n│   │   └── services/    # Servicios específicos del módulo\n└── shared/              # Utilidades compartidas\n```\n\n### Reglas de código\n- Un componente por archivo\n- Máximo 400 líneas por archivo\n- Usar TypeScript strict mode\n- Implementar OnDestroy para subscripciones\n- Usar trackBy en *ngFor para listas grandes\n\n## 🏗️ Diagrama de arquitectura\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        APP MODULE                           │\n├─────────────────────────────────────────────────────────────┤\n│                     APP ROUTING                             │\n├─────────────────────────────────────────────────────────────┤\n│  CORE COMPONENTS                                            │\n│  ├── Header Component                                       │\n│  └── Footer Component                                       │\n├─────────────────────────────────────────────────────────────┤\n│  FEATURE MODULES (Lazy Loading)                             │\n│  ├── Home Module                                            │\n│  │   └── Home Page Component                                │\n│  ├── Login Module                                           │\n│  │   └── Login Page Component                               │\n│  └── [Custom Modules]                                       │\n│      ├── Pages/                                             │\n│      ├── Components/                                        │\n│      └── Services/                                          │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### Flujo de datos\n1. **App Module** carga componentes core\n2. **Routing** maneja navegación con lazy loading\n3. **Feature Modules** se cargan bajo demanda\n4. **Componentes** comunican via servicios o @Input/@Output\n\n## 🧪 Testing\n\n```bash\nnpm run test\n```\n\n## 🔧 Desarrollo\n\n```bash\nnpm run build\nnpm publish\n```","readmeFilename":"README.md"}