@zambon-dev/shared 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -23,6 +23,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
23
23
 
24
24
  ### ⚠ Breaking Changes / Migration
25
25
 
26
+ ## [3.0.1] - 2026-09-21
27
+
28
+ ### Changed
29
+
30
+ - `LoginLayoutComponent`, `HomeComponent`, `BrandComponent` and `EnvironmentBadgeComponent` now
31
+ use `ChangeDetectionStrategy.OnPush`. Behaviour is unchanged; they render from inputs or from
32
+ immutable application config.
33
+
34
+ - **Accessibility.** The operations-history row opens its detail modal from the keyboard as well as
35
+ the mouse.
36
+
26
37
  ## [3.0.0] - 2026-09-21
27
38
 
28
39
  ### Changed
@@ -46,6 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
46
57
 
47
58
  **Requires `@zambon-dev/library` 2.x and `@zambon-dev/framework` 2.x.** Both peer ranges moved to
48
59
  `^2.0.0`. See the library changelog for the `FormInputComponent` output renames.
60
+
49
61
  ## [2.1.1] - 2026-09-15
50
62
 
51
63
  ### Fixed
@@ -61,8 +73,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
61
73
  is decidable up front, so `ExternalContentComponent` now compares the page’s protocol with the
62
74
  destination’s and shows a message naming the real reason. **Open in a new browser tab keeps
63
75
  working and is the way out:** a top-level navigation to `http://` is not mixed content. For a
64
- destination that only speaks `http`, configure the menu item as *external, new tab* rather than
65
- *external, embedded*; to embed it, put it behind an `https` reverse proxy.
76
+ destination that only speaks `http`, configure the menu item as _external, new tab_ rather than
77
+ _external, embedded_; to embed it, put it behind an `https` reverse proxy.
66
78
 
67
79
  Two new keys, `ExternalContent-Insecure-Title` and `ExternalContent-Insecure-Message`, ship in
68
80
  `en` and `pt`. An application that overrides this feature’s translations needs to add them.
@@ -127,7 +139,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
127
139
 
128
140
  The tab URL is `/external-content/<menu id>` and never carries the destination, so no one can
129
141
  hand-craft a link that makes your application frame an arbitrary site. Pressing F5 on an embedded
130
- tab restores both the frame and the tab title from `sessionStorage`. Opening that URL in a *fresh*
142
+ tab restores both the frame and the tab title from `sessionStorage`. Opening that URL in a _fresh_
131
143
  browser tab can only work if your `SidebarService.getMenuFromUrl()` resolves
132
144
  `/external-content/<id>`; otherwise the view says the content is unavailable and asks the user to
133
145
  reopen it from the menu.
@@ -186,6 +198,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
186
198
  detail-views through the real hosts (`DefaultTabViewComponent` /
187
199
  `DefaultDetailsTabViewComponent`, `TabViewList` / `FormView`, and the `framework-button-*`
188
200
  ribbon buttons). It covers:
201
+
189
202
  - a branded top bar (logo, app name, subtitle, environment badge and a working notifications
190
203
  bell) and a versioned sidebar footer;
191
204
  - a mocked audit/history view, reachable from the detail views' Views button;
@@ -210,7 +223,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
210
223
  `IServicesHistoryList` and `IOperationsHistoryList` declared an `ID` property, and
211
224
  `IOperationsHistoryList` declared `entityId`. Neither key is ever sent. The audit endpoints
212
225
  (`POST /{controller}/{entityID}/Audit` and `.../Audit/{serviceHistoryID}`) serialize under
213
- ASP.NET Core's default camelCase policy, which lowercases only a *leading* run of capitals — so the
226
+ ASP.NET Core's default camelCase policy, which lowercases only a _leading_ run of capitals — so the
214
227
  backend's `ID` goes out as `id` and its `EntityID` goes out as `entityID`. Typing a row against
215
228
  `.ID` or `.entityId` therefore compiled fine and read `undefined` at run time. See
216
229
  **⚠ Breaking Changes / Migration** below.
@@ -239,10 +252,10 @@ Two properties on the audit history models were renamed to the keys the backend
239
252
  models are exported from the package root, so anything typed against the old names will now fail to
240
253
  compile. Nothing in `@shared` changes behaviour at run time — the fix is to the declared types.
241
254
 
242
- | Model | Before | After |
243
- |-------|--------|-------|
244
- | `IServicesHistoryList` | `ID: number` | `id: number` |
245
- | `IOperationsHistoryList` | `ID: number` | `id: number` |
255
+ | Model | Before | After |
256
+ | ------------------------ | ------------------- | ------------------- |
257
+ | `IServicesHistoryList` | `ID: number` | `id: number` |
258
+ | `IOperationsHistoryList` | `ID: number` | `id: number` |
246
259
  | `IOperationsHistoryList` | `entityId?: number` | `entityID?: number` |
247
260
 
248
261
  To upgrade:
@@ -344,7 +357,8 @@ URL) in `AppConfig`, and implement a hub that pushes the notification list to cl
344
357
  available via [GitHub Releases](https://github.com/RicardoZambon/ZLibraries/releases) and the
345
358
  `shared-v*` tags.
346
359
 
347
- [Unreleased]: https://github.com/RicardoZambon/ZLibraries/compare/shared-v3.0.0...HEAD
360
+ [Unreleased]: https://github.com/RicardoZambon/ZLibraries/compare/shared-v3.0.1...HEAD
361
+ [3.0.1]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v3.0.1
348
362
  [3.0.0]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v3.0.0
349
363
  [2.1.3]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v2.1.3
350
364
  [2.1.2]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v2.1.2
package/README.md CHANGED
@@ -17,20 +17,20 @@ npm install @zambon-dev/shared
17
17
 
18
18
  All peers must be present in the consuming application:
19
19
 
20
- | Package | Range |
21
- | --- | --- |
22
- | `@angular/common` | `^19.1.0` |
23
- | `@angular/core` | `^19.1.0` |
24
- | `@angular/forms` | `^19.1.0` |
25
- | `@angular/platform-browser` | `^19.1.0` |
26
- | `@angular/router` | `^19.1.0` |
27
- | `@auth0/angular-jwt` | `^5.2.0` |
28
- | `@microsoft/signalr` | `^10.0.0` |
29
- | `@ngx-translate/core` | `^16.0.4` |
30
- | `@zambon-dev/framework` | `^1.0.0` |
31
- | `@zambon-dev/library` | `^1.0.0` |
20
+ | Package | Range |
21
+ | --------------------------------- | --------- |
22
+ | `@angular/common` | `^19.1.0` |
23
+ | `@angular/core` | `^19.1.0` |
24
+ | `@angular/forms` | `^19.1.0` |
25
+ | `@angular/platform-browser` | `^19.1.0` |
26
+ | `@angular/router` | `^19.1.0` |
27
+ | `@auth0/angular-jwt` | `^5.2.0` |
28
+ | `@microsoft/signalr` | `^10.0.0` |
29
+ | `@ngx-translate/core` | `^16.0.4` |
30
+ | `@zambon-dev/framework` | `^1.0.0` |
31
+ | `@zambon-dev/library` | `^1.0.0` |
32
32
  | `ngx-translate-multi-http-loader` | `^19.0.2` |
33
- | `rxjs` | `^7.8.0` |
33
+ | `rxjs` | `^7.8.0` |
34
34
 
35
35
  ## Usage
36
36
 
@@ -51,9 +51,7 @@ Route protection uses the exported guard:
51
51
  ```ts
52
52
  import { AuthGuard } from '@zambon-dev/shared';
53
53
 
54
- export const routes: Routes = [
55
- { path: 'orders', component: OrdersComponent, canActivate: [AuthGuard] },
56
- ];
54
+ export const routes: Routes = [{ path: 'orders', component: OrdersComponent, canActivate: [AuthGuard] }];
57
55
  ```
58
56
 
59
57
  Unauthenticated visitors are redirected to `/login` with a `returnUrl` query parameter.