{"_id":"@anarchitects/identity-angular","_rev":"3-538c6653743b3eaeabd66459ada08d1a","name":"@anarchitects/identity-angular","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@anarchitects/identity-angular","version":"0.0.1","_id":"@anarchitects/identity-angular@0.0.1","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"homepage":"https://github.com/anarchitects/anarchitecture-bricks-3tier/tree/main/libs/identity/angular","bugs":{"url":"https://github.com/anarchitects/anarchitecture-bricks-3tier/issues"},"dist":{"shasum":"19e177ffb2830105e48e890a46b75ddd2f520684","tarball":"https://registry.npmjs.org/@anarchitects/identity-angular/-/identity-angular-0.0.1.tgz","fileCount":20,"integrity":"sha512-wy0d3jMv0JPvwMAZGdh4+f3WVOWMfxnt8taQHIx+RGXp/qVKD7WHwu9I5SVnPxaSvIyPQ0It+vmrKIYuqDkLtg==","signatures":[{"sig":"MEUCIQChVk+Q9BQ05mU/dKTDplj2ktWX2NVMZKb4WEMHyxG5EQIgb/wNoeG80sbn1Lwv6dSgl6kmFUswrfx481tX2VxQXws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55261},"module":"fesm2022/anarchitects-identity-angular.mjs","exports":{".":{"types":"./types/anarchitects-identity-angular.d.ts","default":"./fesm2022/anarchitects-identity-angular.mjs"},"./ui":{"types":"./types/anarchitects-identity-angular-ui.d.ts","default":"./fesm2022/anarchitects-identity-angular-ui.mjs"},"./state":{"types":"./types/anarchitects-identity-angular-state.d.ts","default":"./fesm2022/anarchitects-identity-angular-state.mjs"},"./config":{"types":"./types/anarchitects-identity-angular-config.d.ts","default":"./fesm2022/anarchitects-identity-angular-config.mjs"},"./feature":{"types":"./types/anarchitects-identity-angular-feature.d.ts","default":"./fesm2022/anarchitects-identity-angular-feature.mjs"},"./data-access":{"types":"./types/anarchitects-identity-angular-data-access.d.ts","default":"./fesm2022/anarchitects-identity-angular-data-access.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"7d880553c94f848401b390cb7828e7bc813d752f","typings":"types/anarchitects-identity-angular.d.ts","_npmUser":{"name":"vrxj81","email":"johan@anarchitects.dev"},"repository":{"url":"git+https://github.com/anarchitects/anarchitecture-bricks-3tier.git","type":"git","directory":"libs/identity/angular"},"_npmVersion":"11.19.0","description":"Angular profile data access, explicitly scoped signal state, and reusable profile UI for the Anarchitecture identity domain.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"tslib":"^2.3.0","@anarchitects/identity-ts":"^0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"~7.8.0","@angular/core":"^21.1.0","@angular/forms":"^21.1.0","@angular/common":"^21.1.0"},"_npmOperationalInternal":{"tmp":"tmp/identity-angular_0.0.1_1788257341603_0.5560853626227455","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@anarchitects/identity-angular","version":"0.0.2","_id":"@anarchitects/identity-angular@0.0.2","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"homepage":"https://github.com/anarchitects/anarchitecture-bricks-3tier/tree/main/libs/identity/angular","bugs":{"url":"https://github.com/anarchitects/anarchitecture-bricks-3tier/issues"},"dist":{"shasum":"caee1ffbda96712de4bc38a086f763b465a2fab2","tarball":"https://registry.npmjs.org/@anarchitects/identity-angular/-/identity-angular-0.0.2.tgz","fileCount":20,"integrity":"sha512-cqLQvsymxbg7wHTNIneqdEdJTcvZqwVm4ptq3tAIR5/NszPYj00O8oHAThMXg8gwGNyCoDAHawjxSftispqU4w==","signatures":[{"sig":"MEUCIQCMAZi9nfWyYQF7a4Vi6SY7qZ9qtvX0WgLPbs4ubGCc0gIgVVoqKlo3TDA0ylTWffVujv2uuwHNLOeNmFrmVV1soYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICUuu0MmDw522NXIT/YfJ5Z2gT6LPSteLviG4L8EjTLDAiEAvGKkIc6wI+a+HgKiAPSIgyRHPFN8A1jULo+ocHPY8Vs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55864},"type":"module","module":"fesm2022/anarchitects-identity-angular.mjs","exports":{".":{"types":"./types/anarchitects-identity-angular.d.ts","default":"./fesm2022/anarchitects-identity-angular.mjs"},"./ui":{"types":"./types/anarchitects-identity-angular-ui.d.ts","default":"./fesm2022/anarchitects-identity-angular-ui.mjs"},"./state":{"types":"./types/anarchitects-identity-angular-state.d.ts","default":"./fesm2022/anarchitects-identity-angular-state.mjs"},"./config":{"types":"./types/anarchitects-identity-angular-config.d.ts","default":"./fesm2022/anarchitects-identity-angular-config.mjs"},"./feature":{"types":"./types/anarchitects-identity-angular-feature.d.ts","default":"./fesm2022/anarchitects-identity-angular-feature.mjs"},"./data-access":{"types":"./types/anarchitects-identity-angular-data-access.d.ts","default":"./fesm2022/anarchitects-identity-angular-data-access.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"01c1b71ebfa5a6e42599cd00af64bf3ce99cb0a5","typings":"types/anarchitects-identity-angular.d.ts","_npmUser":{"name":"vrxj81","email":"johan@anarchitects.dev"},"repository":{"url":"git+https://github.com/anarchitects/anarchitecture-bricks-3tier.git","type":"git","directory":"libs/identity/angular"},"_npmVersion":"11.19.0","description":"Angular profile data access, explicitly scoped signal state, and reusable profile UI for the Anarchitecture identity domain.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"tslib":"^2.3.0","@anarchitects/identity-ts":"^0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"~7.8.0","@angular/core":"^21.1.0 || ^22.0.0","@angular/forms":"^21.1.0 || ^22.0.0","@angular/common":"^21.1.0 || ^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/identity-angular_0.0.2_1788340144078_0.1499204211485321","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"_id":"@anarchitects/identity-angular@0.1.0","bugs":{"url":"https://github.com/anarchitects/anarchitecture-bricks-3tier/issues"},"dist":{"shasum":"e2089dc3ae451c9ae7d3fcf4d7c9d0136e30def7","tarball":"https://registry.npmjs.org/@anarchitects/identity-angular/-/identity-angular-0.1.0.tgz","fileCount":20,"integrity":"sha512-0j6BsrMSJZY+xQOJt1WqVYgCnAGp6jlFwXObWwIx6Oy3YueB+WJENTLGyMb5Jfvz1cHWzLm8A+4st82M1LmcuA==","signatures":[{"sig":"MEYCIQCIycnb7+iwxgWAiiAaQpsiTzL/sI4c4VCGh+alh4Ng9AIhAKComxS9ik2G/YwOAGcmWwzh9PoGtPsDhgStG9QoqU3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHNmH1/ycbtpsNPfwAWFcBSNGrFiiHuhVOKl4vQI/F6bAiBZ7AM4reEY+Sb+eDnr9+5/7OxkQ9zX7U6SxzpLSvS/Dg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anarchitects%2fidentity-angular@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55864},"name":"@anarchitects/identity-angular","type":"module","module":"fesm2022/anarchitects-identity-angular.mjs","exports":{".":{"types":"./types/anarchitects-identity-angular.d.ts","default":"./fesm2022/anarchitects-identity-angular.mjs"},"./ui":{"types":"./types/anarchitects-identity-angular-ui.d.ts","default":"./fesm2022/anarchitects-identity-angular-ui.mjs"},"./state":{"types":"./types/anarchitects-identity-angular-state.d.ts","default":"./fesm2022/anarchitects-identity-angular-state.mjs"},"./config":{"types":"./types/anarchitects-identity-angular-config.d.ts","default":"./fesm2022/anarchitects-identity-angular-config.mjs"},"./feature":{"types":"./types/anarchitects-identity-angular-feature.d.ts","default":"./fesm2022/anarchitects-identity-angular-feature.mjs"},"./data-access":{"types":"./types/anarchitects-identity-angular-data-access.d.ts","default":"./fesm2022/anarchitects-identity-angular-data-access.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"fe0603339f56fcc4ecc1156ca51f676366d72104","typings":"types/anarchitects-identity-angular.d.ts","version":"0.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d527de10-a0a4-4808-a621-83eea5a03846"}},"homepage":"https://github.com/anarchitects/anarchitecture-bricks-3tier/tree/main/libs/identity/angular","repository":{"url":"git+https://github.com/anarchitects/anarchitecture-bricks-3tier.git","type":"git","directory":"libs/identity/angular"},"_npmVersion":"11.17.0","description":"Angular profile data access, explicitly scoped signal state, and reusable profile UI for the Anarchitecture identity domain.","directories":{},"maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"tslib":"^2.3.0","@anarchitects/identity-ts":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"~7.8.0","@angular/core":"^21.1.0 || ^22.0.0","@angular/forms":"^21.1.0 || ^22.0.0","@angular/common":"^21.1.0 || ^22.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/identity-angular_0.1.0_1788341645870_0.348289097689338"}}},"time":{"created":"2026-09-01T10:09:01.390Z","modified":"2026-09-02T09:34:06.291Z","0.0.1":"2026-09-01T10:09:01.737Z","0.0.2":"2026-09-02T09:09:04.167Z","0.1.0":"2026-09-02T09:34:05.965Z"},"bugs":{"url":"https://github.com/anarchitects/anarchitecture-bricks-3tier/issues"},"homepage":"https://github.com/anarchitects/anarchitecture-bricks-3tier/tree/main/libs/identity/angular","repository":{"url":"git+https://github.com/anarchitects/anarchitecture-bricks-3tier.git","type":"git","directory":"libs/identity/angular"},"description":"Angular profile data access, explicitly scoped signal state, and reusable profile UI for the Anarchitecture identity domain.","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"readme":"# @anarchitects/identity-angular\n\nAngular profile data access, explicitly scoped signal state, and reusable profile UI for the Anarchitecture identity domain.\n\n## Developer + AI Agent Start Here\n\n- Use the root package for routine setup and the secondary entry points for targeted composition.\n- Keep state explicitly provided through helper functions; do not add `providedIn: 'root'` stores.\n- Avoid deep imports from internal source files.\n\n## Features\n\n- Root barrel for `config`, `data-access`, `feature`, `state`, and `ui`\n- Typed profile HTTP operations backed by `@anarchitects/identity-ts`\n- Explicit provider helpers for config, data-access, and state composition\n- Signal-based loading, saving, error, and current-profile state\n- Standalone profile view and Signal Forms editor components\n- Feature-level profile composition for loading and updating the current user profile\n\n## Installation\n\n```bash\nnpm install @anarchitects/identity-angular\n# or\nyarn add @anarchitects/identity-angular\n# or\npnpm add @anarchitects/identity-angular\n```\n\n## Entry points\n\n| Import path                                  | Description                                     |\n| -------------------------------------------- | ----------------------------------------------- |\n| `@anarchitects/identity-angular`             | Root barrel for routine app wiring              |\n| `@anarchitects/identity-angular/config`      | Config tokens and provider helpers              |\n| `@anarchitects/identity-angular/data-access` | Typed `IdentityApi` and data-access providers   |\n| `@anarchitects/identity-angular/feature`     | Feature providers and `UserProfileFeature`      |\n| `@anarchitects/identity-angular/state`       | Explicitly provided `IdentityStore`             |\n| `@anarchitects/identity-angular/ui`          | Profile view and Signal Forms editor components |\n\n## Usage\n\n### Easy mode\n\nConfigure Angular HTTP once at the application root, compose the identity providers, and render the feature with the authenticated user id:\n\n```ts\nimport { provideHttpClient } from '@angular/common/http';\nimport { provideIdentityFeature } from '@anarchitects/identity-angular';\n\nexport const appConfig = {\n  providers: [\n    provideHttpClient(),\n    ...provideIdentityFeature({\n      apiResourcePath: 'identity',\n    }),\n  ],\n};\n```\n\n```ts\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { UserProfileFeature } from '@anarchitects/identity-angular';\n\n@Component({\n  selector: 'app-profile-page',\n  imports: [UserProfileFeature],\n  template: `<anarchitects-user-profile [authUserId]=\"authUserId\" />`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProfilePage {\n  readonly authUserId = 'authenticated-user-id';\n}\n```\n\nThe default API route is `/api/identity/profiles`. Set `apiBaseUrl` when the API is hosted on another origin.\n\n### Advanced composition\n\nApplications can compose the layers independently and provide state at application, route, or component scope:\n\n```ts\nimport { provideIdentityConfig } from '@anarchitects/identity-angular/config';\nimport { provideIdentityDataAccess } from '@anarchitects/identity-angular/data-access';\nimport { provideIdentityState } from '@anarchitects/identity-angular/state';\n\nexport const profileRoute = {\n  path: 'profile',\n  providers: [...provideIdentityConfig({ apiBaseUrl: 'https://api.example.com' }), ...provideIdentityDataAccess(), ...provideIdentityState()],\n  loadComponent: () => import('@anarchitects/identity-angular/feature').then(({ UserProfileFeature }) => UserProfileFeature),\n};\n```\n\nFor custom orchestration, inject `IdentityStore` and use `loadProfile(authUserId)` and `updateProfile(dto)`. The store exposes readonly `profile`, `loading`, `saving`, `error`, and `hasProfile` signals.\n\nThe editor keeps non-null string values internally and maps blank values back to the nullable fields defined by `UpdateUserProfileRequestDTO` at submission time.\n\n## Scripts\n\n- `yarn nx run identity-angular:build`\n- `yarn nx run identity-angular:test`\n- `yarn nx run identity-angular:lint`\n\n## Development notes\n\n- Configure `HttpClient` once in the consuming application; identity data access does not own the shared transport setup.\n- `IdentityStore` has no `providedIn: 'root'`; scope it explicitly with `provideIdentityState()` or `provideIdentityFeature()`.\n- The package does not depend on the legacy Common Angular UI packages.\n- Extend public secondary entry points instead of adding internal-path imports.\n\n## Contributing\n\nPreserve the `ui <- feature -> state -> data-access` layering and keep configuration shared through public provider helpers.\n\n## License\n\nLicensed under the Apache License, Version 2.0.\n","readmeFilename":"README.md"}