@zambon-dev/shared 2.1.3 → 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,24 @@ 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
+
37
+ ## [3.0.0] - 2026-09-21
38
+
39
+ ### Changed
40
+
41
+ - **Accessibility.** The operations-history row opens its detail modal from the keyboard as well as
42
+ the mouse.
43
+
26
44
  ## [2.1.3] - 2026-09-21
27
45
 
28
46
  - Maintenance release (no consumer-facing changes were documented).
@@ -35,6 +53,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
35
53
  `ExternalContentComponent` and `BypassHtmlSanitizerPipe`, but neither package was declared.
36
54
  - Added a README to the published package.
37
55
 
56
+ ### ⚠ Breaking Changes / Migration
57
+
58
+ **Requires `@zambon-dev/library` 2.x and `@zambon-dev/framework` 2.x.** Both peer ranges moved to
59
+ `^2.0.0`. See the library changelog for the `FormInputComponent` output renames.
60
+
38
61
  ## [2.1.1] - 2026-09-15
39
62
 
40
63
  ### Fixed
@@ -50,8 +73,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
50
73
  is decidable up front, so `ExternalContentComponent` now compares the page’s protocol with the
51
74
  destination’s and shows a message naming the real reason. **Open in a new browser tab keeps
52
75
  working and is the way out:** a top-level navigation to `http://` is not mixed content. For a
53
- destination that only speaks `http`, configure the menu item as *external, new tab* rather than
54
- *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.
55
78
 
56
79
  Two new keys, `ExternalContent-Insecure-Title` and `ExternalContent-Insecure-Message`, ship in
57
80
  `en` and `pt`. An application that overrides this feature’s translations needs to add them.
@@ -116,7 +139,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
116
139
 
117
140
  The tab URL is `/external-content/<menu id>` and never carries the destination, so no one can
118
141
  hand-craft a link that makes your application frame an arbitrary site. Pressing F5 on an embedded
119
- 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_
120
143
  browser tab can only work if your `SidebarService.getMenuFromUrl()` resolves
121
144
  `/external-content/<id>`; otherwise the view says the content is unavailable and asks the user to
122
145
  reopen it from the menu.
@@ -175,6 +198,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
175
198
  detail-views through the real hosts (`DefaultTabViewComponent` /
176
199
  `DefaultDetailsTabViewComponent`, `TabViewList` / `FormView`, and the `framework-button-*`
177
200
  ribbon buttons). It covers:
201
+
178
202
  - a branded top bar (logo, app name, subtitle, environment badge and a working notifications
179
203
  bell) and a versioned sidebar footer;
180
204
  - a mocked audit/history view, reachable from the detail views' Views button;
@@ -199,7 +223,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
199
223
  `IServicesHistoryList` and `IOperationsHistoryList` declared an `ID` property, and
200
224
  `IOperationsHistoryList` declared `entityId`. Neither key is ever sent. The audit endpoints
201
225
  (`POST /{controller}/{entityID}/Audit` and `.../Audit/{serviceHistoryID}`) serialize under
202
- 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
203
227
  backend's `ID` goes out as `id` and its `EntityID` goes out as `entityID`. Typing a row against
204
228
  `.ID` or `.entityId` therefore compiled fine and read `undefined` at run time. See
205
229
  **⚠ Breaking Changes / Migration** below.
@@ -228,10 +252,10 @@ Two properties on the audit history models were renamed to the keys the backend
228
252
  models are exported from the package root, so anything typed against the old names will now fail to
229
253
  compile. Nothing in `@shared` changes behaviour at run time — the fix is to the declared types.
230
254
 
231
- | Model | Before | After |
232
- |-------|--------|-------|
233
- | `IServicesHistoryList` | `ID: number` | `id: number` |
234
- | `IOperationsHistoryList` | `ID: number` | `id: number` |
255
+ | Model | Before | After |
256
+ | ------------------------ | ------------------- | ------------------- |
257
+ | `IServicesHistoryList` | `ID: number` | `id: number` |
258
+ | `IOperationsHistoryList` | `ID: number` | `id: number` |
235
259
  | `IOperationsHistoryList` | `entityId?: number` | `entityID?: number` |
236
260
 
237
261
  To upgrade:
@@ -333,7 +357,9 @@ URL) in `AppConfig`, and implement a hub that pushes the notification list to cl
333
357
  available via [GitHub Releases](https://github.com/RicardoZambon/ZLibraries/releases) and the
334
358
  `shared-v*` tags.
335
359
 
336
- [Unreleased]: https://github.com/RicardoZambon/ZLibraries/compare/shared-v2.1.3...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
362
+ [3.0.0]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v3.0.0
337
363
  [2.1.3]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v2.1.3
338
364
  [2.1.2]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v2.1.2
339
365
  [2.1.1]: https://github.com/RicardoZambon/ZLibraries/releases/tag/shared-v2.1.1
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.
@@ -93,6 +91,10 @@ Components, models and pipes are exported from the package root as well.
93
91
 
94
92
  ## Documentation
95
93
 
94
+ Browse the published Storybook at [https://ricardozambon.github.io/ZLibraries/shared/](https://ricardozambon.github.io/ZLibraries/shared/).
95
+
96
+ To run it locally:
97
+
96
98
  ```bash
97
99
  npm run storybook:shared
98
100
  ```