@zambon-dev/ui 1.0.0 → 1.1.0
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 +173 -0
- package/fesm2022/zambon-dev-ui-framework.mjs +65 -13
- package/fesm2022/zambon-dev-ui-framework.mjs.map +1 -1
- package/fesm2022/zambon-dev-ui-library.mjs +250 -34
- package/fesm2022/zambon-dev-ui-library.mjs.map +1 -1
- package/fesm2022/zambon-dev-ui-shared.mjs +304 -51
- package/fesm2022/zambon-dev-ui-shared.mjs.map +1 -1
- package/fesm2022/zambon-dev-ui.mjs +3 -0
- package/i18n/shared/login/en.json +2 -0
- package/i18n/shared/login/pt.json +2 -0
- package/i18n/shared/top-bar/en.json +3 -0
- package/i18n/shared/top-bar/pt.json +3 -0
- package/package.json +1 -1
- package/styles/common.scss +0 -1
- package/styles/components/card.scss +9 -3
- package/styles/components/dropdown-static.scss +15 -17
- package/styles/components/input-group.scss +7 -3
- package/styles/components/input.scss +38 -17
- package/styles/components/label.scss +4 -1
- package/styles/theme.css +232 -0
- package/styles/variables.scss +79 -53
- package/types/zambon-dev-ui-framework.d.ts +15 -4
- package/types/zambon-dev-ui-library.d.ts +83 -1
- package/types/zambon-dev-ui-shared.d.ts +68 -1
- package/types/zambon-dev-ui.d.ts +4 -1
- package/styles/components/button.scss +0 -101
package/CHANGELOG.md
CHANGED
|
@@ -23,6 +23,179 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
23
23
|
|
|
24
24
|
### ⚠ Breaking Changes / Migration
|
|
25
25
|
|
|
26
|
+
## [1.1.0] - 2026-10-25
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- **A button component, `lib-button`.** One component with an `intent` -- `primary`, `secondary`,
|
|
31
|
+
`danger`, `ghost` -- in place of a class that named a colour. It carries the loading, success and
|
|
32
|
+
error states the old classes carried, and it blocks activation with the `disabled` attribute
|
|
33
|
+
rather than `pointer-events: none`, so the keyboard cannot fire an action the mouse cannot. There
|
|
34
|
+
is no click output: the element inside is a real `<button>`, so `(click)` on `<lib-button>`
|
|
35
|
+
receives the bubbled event and `type="submit"` works inside a form with no wiring. Every button is at
|
|
36
|
+
least 2.25rem tall -- the height of the user block in the top bar -- and one with no label is a
|
|
37
|
+
square of that size, because the padding that suits text would leave a lone glyph in a box wider
|
|
38
|
+
than it is tall.
|
|
39
|
+
|
|
40
|
+
- **At the root barrel the new button is `LibButtonComponent`.** Both layers now define a
|
|
41
|
+
`ButtonComponent` -- the library's `lib-button` and the framework's long-standing
|
|
42
|
+
`framework-button` -- so `@zambon-dev/ui` exports the framework one under the bare name it
|
|
43
|
+
already had and the library one under an alias. From the layer entry points
|
|
44
|
+
(`@zambon-dev/ui/library`, `@zambon-dev/ui/framework`) both are just `ButtonComponent`,
|
|
45
|
+
which is how they read in context and what the examples below use.
|
|
46
|
+
|
|
47
|
+
- **A semantic token core.** 59 tokens that name a role -- a surface, a piece of content, a line, a
|
|
48
|
+
state, a shape, a duration -- defined in `@zambon-dev/ui/styles/theme.css`. Each is also a
|
|
49
|
+
Tailwind utility: `bg-surface-glass`, `text-content-secondary`, `rounded-surface`. The
|
|
50
|
+
[design tokens guide](https://github.com/RicardoZambon/ZLibraries/blob/main/docs/guides/design-tokens.md)
|
|
51
|
+
lists them and explains what is safe to override.
|
|
52
|
+
|
|
53
|
+
- **A dark theme, and a switch for it in the top bar.** The slot reserved there since July is
|
|
54
|
+
filled. The switch steps light, dark, follow-the-system, and `ThemeService` exposes the same
|
|
55
|
+
thing to your code: `preference()` for what the user chose, `resolved()` for what is applied.
|
|
56
|
+
Your application opts in by adding one snippet to `index.html`; leave it out and every screen
|
|
57
|
+
stays light. The guide above has the snippet and explains why it cannot be an Angular service.
|
|
58
|
+
|
|
59
|
+
- **`AppConfig.loginLogoUrl` and `AppConfig.loginBackgroundUrl`.** The sign-in screen used to load
|
|
60
|
+
`/logo-login.png` and `/background.jpg` from fixed absolute paths that no application ships, so
|
|
61
|
+
in practice it rendered a broken image over no background. Both are optional: without a logo the
|
|
62
|
+
card simply has none, and without a background the app backdrop shows through.
|
|
63
|
+
|
|
64
|
+
- **`LoginLayoutComponent` projects content.** It rendered a `<router-outlet>` and nothing else,
|
|
65
|
+
so a sign-in screen placed inside the element was silently dropped. It now renders projected
|
|
66
|
+
content beside the outlet, which lets an application host a sign-in screen that is not reached
|
|
67
|
+
through the router.
|
|
68
|
+
|
|
69
|
+
- **The two login translation keys that were missing.** `Login-Title` and `Login-Copyright` were
|
|
70
|
+
used by the template and defined in neither language file, so the card's heading and its footer
|
|
71
|
+
rendered the raw key. Both now exist in English and Portuguese, and `Login-SelectLanguage` --
|
|
72
|
+
which had been sitting unused -- labels the language picker on that screen.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- **Every component now draws from the tokens**, so a theme moves them all at once. The data grid,
|
|
77
|
+
the group containers, the modal, the multi-select, the catalog select, the ribbon and the form
|
|
78
|
+
controls had their colours, radii, shadows and durations written into their stylesheets; they now
|
|
79
|
+
name a role instead. Expect small shifts where a literal and its nearest token were not identical
|
|
80
|
+
-- borders settle on one grey, selection on one blue.
|
|
81
|
+
|
|
82
|
+
- **`--sidebar-*` and `--tabs-*` derive from that core.** They are still the names you override and
|
|
83
|
+
they still compute the same values. They moved into `@layer tokens`, which means an override of
|
|
84
|
+
yours now wins whatever the import order -- previously it only won if your stylesheet came last.
|
|
85
|
+
Write the override without a layer.
|
|
86
|
+
|
|
87
|
+
- **Focus is shown on `:focus-visible` and is thinner.** Fields and buttons used `focus:ring-4` on
|
|
88
|
+
plain `:focus`, so a four-pixel halo appeared on every mouse click. The ring is now two pixels,
|
|
89
|
+
reads `--color-focus-ring`, and appears when focus is actually worth showing.
|
|
90
|
+
|
|
91
|
+
- **Form labels are no longer uppercase, bold and letter-spaced.** They are a quiet caption at the
|
|
92
|
+
same size. This is the single change that most alters how a dense form reads; labels also get
|
|
93
|
+
narrower, so field columns gain a little width.
|
|
94
|
+
|
|
95
|
+
- **Transitions read duration tokens**, which collapse to 1ms under `prefers-reduced-motion:
|
|
96
|
+
reduce`. There is nothing to configure.
|
|
97
|
+
|
|
98
|
+
- **The sign-in screen was rebuilt.** It had had no design decision since May 2025 and used the
|
|
99
|
+
brand colour nowhere: an amber frame around the logo, slate field icons, a generic blue border.
|
|
100
|
+
It is now the same glass card as the rest of the product. Concretely:
|
|
101
|
+
|
|
102
|
+
- The logo sits inside the card instead of hanging above it on a -160px margin over a fixed
|
|
103
|
+
160px height, so a logo that is not square no longer skews everything around it.
|
|
104
|
+
- The card has a maximum width that shrinks. The previous `w-10/12 md:w-8/12 xl:w-5/12`
|
|
105
|
+
resolved against an absolutely positioned parent with no width of its own, so those
|
|
106
|
+
breakpoints never did what their names suggested.
|
|
107
|
+
- The page scrolls when the card does not fit. On a 768px-tall laptop it used to be cut off at
|
|
108
|
+
both ends with no way to reach what was missing.
|
|
109
|
+
- Both fields carry `autocomplete`, so password managers recognise them; the error block is a
|
|
110
|
+
live region, so it is announced; and the submit button is genuinely disabled while signing in
|
|
111
|
+
rather than only unclickable.
|
|
112
|
+
|
|
113
|
+
- **The application toolbar joined the glass language.** It was the one surface of the shell still
|
|
114
|
+
outside the token system -- opaque white, square, with a hairline under it, directly above a
|
|
115
|
+
rounded translucent panel. The hairline is gone: in this language surfaces are separated by
|
|
116
|
+
elevation.
|
|
117
|
+
|
|
118
|
+
- **The ribbon, the top bar, the notifications panel, the language picker and the audit history
|
|
119
|
+
views draw from the design tokens**, as does the environment badge -- it keeps its four hues, but
|
|
120
|
+
fill, text and ring are now derived from one of them, so the badge stays readable when the
|
|
121
|
+
surface behind it goes dark.
|
|
122
|
+
|
|
123
|
+
- **The top bar's controls on the right are one size, in two groups.** Notifications, language
|
|
124
|
+
and theme came out at three different heights with three different paddings -- the language
|
|
125
|
+
toggle wrapped the button in padding of its own, on top of the button's, which made the smallest
|
|
126
|
+
control the widest -- and all five sat 12px apart. They are now identical squares, shoulder to
|
|
127
|
+
shoulder, with the user and the way out as their own group beside them.
|
|
128
|
+
|
|
129
|
+
- **The confirmation buttons render `lib-button`.** Their own API is unchanged apart from
|
|
130
|
+
`ButtonConfirmComponent` below; what changed is that their modal footers no longer depend on the
|
|
131
|
+
global `.btn` classes.
|
|
132
|
+
|
|
133
|
+
### Removed
|
|
134
|
+
|
|
135
|
+
- **The global `.btn` classes.** See the migration note below.
|
|
136
|
+
|
|
137
|
+
### Fixed
|
|
138
|
+
|
|
139
|
+
- **The sidebar's collapse handle no longer disappears into the page.** It is a disc that
|
|
140
|
+
straddles the sidebar's edge, so most of it sits on the app backdrop, and two things hid it: its
|
|
141
|
+
outline was a hairline the weight of a divider, and hovering it swapped the solid fill for a 40%
|
|
142
|
+
tint -- which let the rail show through one half of the handle and the page through the other.
|
|
143
|
+
The outline is the stronger line colour now, and the hover wash sits over the fill rather than
|
|
144
|
+
replacing it.
|
|
145
|
+
|
|
146
|
+
- **Hovering a secondary button now shows something.** It went from a 40% tint of one grey to a 6%
|
|
147
|
+
wash of another, and those land on nearly the same colour, so on a white page nothing happened;
|
|
148
|
+
on any other surface the button faded instead. That wash also layers over the fill now.
|
|
149
|
+
|
|
150
|
+
### ⚠ Breaking Changes / Migration
|
|
151
|
+
|
|
152
|
+
- **`.btn` and its 154 colour variants are gone.** They were generated by interpolating Tailwind
|
|
153
|
+
colour names in a loop, so a button's appearance was a palette decision rather than a statement
|
|
154
|
+
of what it was for, and none of them could follow a theme. Replace each one with `lib-button`
|
|
155
|
+
from `@zambon-dev/ui/library`:
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<!-- before -->
|
|
159
|
+
<button type="button" class="btn blue-500" (click)="save()">Save</button>
|
|
160
|
+
|
|
161
|
+
<!-- after -->
|
|
162
|
+
<lib-button intent="primary" (click)="save()">Save</lib-button>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
| Class | Intent |
|
|
166
|
+
| ----------------------------------------------------- | ----------- |
|
|
167
|
+
| `blue-*`, `green-*`, any brand colour | `primary` |
|
|
168
|
+
| `red-*` | `danger` |
|
|
169
|
+
| `gray-*`, `slate-*`, `neutral-*`, `stone-*`, `zinc-*` | `secondary` |
|
|
170
|
+
| a bare `.btn` inside a toolbar | `ghost` |
|
|
171
|
+
|
|
172
|
+
The state classes move to inputs: `[class.loading]` becomes `[loading]`, `.success` becomes
|
|
173
|
+
`[success]`, `.error` becomes `[error]`. `[disabled]` is unchanged. `(click)` still works, since
|
|
174
|
+
the component renders a real button and the event bubbles.
|
|
175
|
+
|
|
176
|
+
- **`ButtonConfirmComponent.modalConfirmButtonColor` is now `modalConfirmButtonIntent`.** It took a
|
|
177
|
+
Tailwind palette name, which said nothing about what the button was for and could not follow a
|
|
178
|
+
theme. Replace the colour with the intent it stood for:
|
|
179
|
+
|
|
180
|
+
| Before | After |
|
|
181
|
+
| ------------------------------------- | -------------------------------------- |
|
|
182
|
+
| `modalConfirmButtonColor="red-500"` | `modalConfirmButtonIntent="danger"` |
|
|
183
|
+
| `modalConfirmButtonColor="blue-500"` | `modalConfirmButtonIntent="primary"` |
|
|
184
|
+
| `modalConfirmButtonColor="green-500"` | `modalConfirmButtonIntent="primary"` |
|
|
185
|
+
| any grey | `modalConfirmButtonIntent="secondary"` |
|
|
186
|
+
|
|
187
|
+
The input now has a default of `danger`, so a confirmation that deletes something needs nothing
|
|
188
|
+
at all.
|
|
189
|
+
|
|
190
|
+
- **`@zambon-dev/ui/styles/theme.css` is now required** in your global stylesheet. It already was
|
|
191
|
+
in practice for anything using the sidebar; it now carries every component's colours, and
|
|
192
|
+
without it they resolve to nothing and render transparent.
|
|
193
|
+
|
|
194
|
+
- **Component tokens moved into `@layer tokens`.** Not a break, but worth knowing: an override of
|
|
195
|
+
`--sidebar-bg` or `--tabs-*` now wins whatever the import order, where before it only won if your
|
|
196
|
+
stylesheet came after ours. Write overrides without a layer. A static override holds in both
|
|
197
|
+
themes; to vary one by theme, write it under `:root[data-theme='dark']`.
|
|
198
|
+
|
|
26
199
|
## [1.0.0] - 2026-10-24
|
|
27
200
|
|
|
28
201
|
### ⚠ Breaking Changes / Migration
|
|
@@ -2,7 +2,7 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import { ApplicationRef, Component, EventEmitter, Inject, Injectable, InjectionToken, Input, NgModule, Output, ViewChild, afterEveryRender, computed, effect, forwardRef, inject, input, model, output, signal, viewChild } from "@angular/core";
|
|
3
3
|
import { toObservable, toSignal } from "@angular/core/rxjs-interop";
|
|
4
4
|
import * as i2 from "@zambon-dev/ui/library";
|
|
5
|
-
import { DataGridConfigsProvider, DataGridDataset, DataProviderService, DateValidators, DisplayControls, FormService, GroupContainerComponent, ModalComponent, MultiEditorComponent, MultiEditorDataset, MultiSelectComponent, MultiSelectResultDataset, RibbonButtonComponent, RibbonComponent, RibbonGroupChild, RibbonGroupComponent, RouterFormatter } from "@zambon-dev/ui/library";
|
|
5
|
+
import { ButtonComponent as ButtonComponent$1, DataGridConfigsProvider, DataGridDataset, DataProviderService, DateValidators, DisplayControls, FormService, GroupContainerComponent, ModalComponent, MultiEditorComponent, MultiEditorDataset, MultiSelectComponent, MultiSelectResultDataset, RibbonButtonComponent, RibbonComponent, RibbonGroupChild, RibbonGroupComponent, RouterFormatter } from "@zambon-dev/ui/library";
|
|
6
6
|
import { ReplaySubject, Subject, filter, map, of, skip, startWith, switchMap, take, takeUntil, tap, throwError } from "rxjs";
|
|
7
7
|
import { __decorate } from "tslib";
|
|
8
8
|
import * as i1$1 from "@angular/common";
|
|
@@ -1291,7 +1291,7 @@ var ButtonConfirmComponent = class ButtonConfirmComponent extends BaseButton {
|
|
|
1291
1291
|
color = input("text-primary-500", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
|
|
1292
1292
|
icon = input("", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
|
|
1293
1293
|
label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
1294
|
-
|
|
1294
|
+
modalConfirmButtonIntent = input("danger", ...ngDevMode ? [{ debugName: "modalConfirmButtonIntent" }] : /* istanbul ignore next */ []);
|
|
1295
1295
|
modalConfirmButtonLabel = input("", ...ngDevMode ? [{ debugName: "modalConfirmButtonLabel" }] : /* istanbul ignore next */ []);
|
|
1296
1296
|
modalMessage = input("", ...ngDevMode ? [{ debugName: "modalMessage" }] : /* istanbul ignore next */ []);
|
|
1297
1297
|
modalMessageIcon = input("fa-solid fa-circle-question", ...ngDevMode ? [{ debugName: "modalMessageIcon" }] : /* istanbul ignore next */ []);
|
|
@@ -1363,9 +1363,9 @@ var ButtonConfirmComponent = class ButtonConfirmComponent extends BaseButton {
|
|
|
1363
1363
|
isRequired: false,
|
|
1364
1364
|
transformFunction: null
|
|
1365
1365
|
},
|
|
1366
|
-
|
|
1367
|
-
classPropertyName: "
|
|
1368
|
-
publicName: "
|
|
1366
|
+
modalConfirmButtonIntent: {
|
|
1367
|
+
classPropertyName: "modalConfirmButtonIntent",
|
|
1368
|
+
publicName: "modalConfirmButtonIntent",
|
|
1369
1369
|
isSignal: true,
|
|
1370
1370
|
isRequired: false,
|
|
1371
1371
|
transformFunction: null
|
|
@@ -1419,8 +1419,23 @@ var ButtonConfirmComponent = class ButtonConfirmComponent extends BaseButton {
|
|
|
1419
1419
|
}],
|
|
1420
1420
|
usesInheritance: true,
|
|
1421
1421
|
ngImport: i0,
|
|
1422
|
-
template: "@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [icon]=\"icon()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n [message]=\"modalMessage()\"\n [messageIcon]=\"modalMessageIcon()\"\n [messageIconColor]=\"modalMessageIconColor()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button
|
|
1422
|
+
template: "@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [icon]=\"icon()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n [message]=\"modalMessage()\"\n [messageIcon]=\"modalMessageIcon()\"\n [messageIconColor]=\"modalMessageIconColor()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <lib-button [intent]=\"modalConfirmButtonIntent()\" [loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel() | translate }}\n </lib-button>\n </div>\n</framework-confirm-modal>\n",
|
|
1423
1423
|
dependencies: [
|
|
1424
|
+
{
|
|
1425
|
+
kind: "component",
|
|
1426
|
+
type: ButtonComponent$1,
|
|
1427
|
+
selector: "lib-button",
|
|
1428
|
+
inputs: [
|
|
1429
|
+
"intent",
|
|
1430
|
+
"type",
|
|
1431
|
+
"disabled",
|
|
1432
|
+
"loading",
|
|
1433
|
+
"success",
|
|
1434
|
+
"error",
|
|
1435
|
+
"icon",
|
|
1436
|
+
"ariaLabel"
|
|
1437
|
+
]
|
|
1438
|
+
},
|
|
1424
1439
|
{
|
|
1425
1440
|
kind: "component",
|
|
1426
1441
|
type: ConfirmModalComponent,
|
|
@@ -1472,6 +1487,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1472
1487
|
args: [{
|
|
1473
1488
|
selector: "framework-button-confirm",
|
|
1474
1489
|
imports: [
|
|
1490
|
+
ButtonComponent$1,
|
|
1475
1491
|
ConfirmModalComponent,
|
|
1476
1492
|
RibbonButtonComponent,
|
|
1477
1493
|
TranslatePipe
|
|
@@ -1480,7 +1496,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1480
1496
|
provide: RibbonGroupChild,
|
|
1481
1497
|
useExisting: forwardRef(() => ButtonConfirmComponent)
|
|
1482
1498
|
}],
|
|
1483
|
-
template: "@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [icon]=\"icon()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n [message]=\"modalMessage()\"\n [messageIcon]=\"modalMessageIcon()\"\n [messageIconColor]=\"modalMessageIconColor()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button
|
|
1499
|
+
template: "@if (isVisible()) {\n <lib-ribbon-button\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [icon]=\"icon()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n [message]=\"modalMessage()\"\n [messageIcon]=\"modalMessageIcon()\"\n [messageIconColor]=\"modalMessageIconColor()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <lib-button [intent]=\"modalConfirmButtonIntent()\" [loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel() | translate }}\n </lib-button>\n </div>\n</framework-confirm-modal>\n"
|
|
1484
1500
|
}]
|
|
1485
1501
|
}],
|
|
1486
1502
|
ctorParameters: () => [],
|
|
@@ -1521,11 +1537,11 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1521
1537
|
required: false
|
|
1522
1538
|
}]
|
|
1523
1539
|
}],
|
|
1524
|
-
|
|
1540
|
+
modalConfirmButtonIntent: [{
|
|
1525
1541
|
type: i0.Input,
|
|
1526
1542
|
args: [{
|
|
1527
1543
|
isSignal: true,
|
|
1528
|
-
alias: "
|
|
1544
|
+
alias: "modalConfirmButtonIntent",
|
|
1529
1545
|
required: false
|
|
1530
1546
|
}]
|
|
1531
1547
|
}],
|
|
@@ -1665,8 +1681,23 @@ var ButtonDeleteComponent = class ButtonDeleteComponent extends BaseButton {
|
|
|
1665
1681
|
}],
|
|
1666
1682
|
usesInheritance: true,
|
|
1667
1683
|
ngImport: i0,
|
|
1668
|
-
template: "@if (isVisible()) {\n <lib-ribbon-button\n color=\"text-red-500\"\n icon=\"fa-trash-alt\"\n [disabled]=\"disabled()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n messageIcon=\"fa-solid fa-circle-exclamation\"\n messageIconColor=\"text-red-500\"\n [message]=\"modalMessage()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button
|
|
1684
|
+
template: "@if (isVisible()) {\n <lib-ribbon-button\n color=\"text-red-500\"\n icon=\"fa-trash-alt\"\n [disabled]=\"disabled()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n messageIcon=\"fa-solid fa-circle-exclamation\"\n messageIconColor=\"text-red-500\"\n [message]=\"modalMessage()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <lib-button intent=\"danger\" [loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel() | translate }}\n </lib-button>\n </div>\n</framework-confirm-modal>\n",
|
|
1669
1685
|
dependencies: [
|
|
1686
|
+
{
|
|
1687
|
+
kind: "component",
|
|
1688
|
+
type: ButtonComponent$1,
|
|
1689
|
+
selector: "lib-button",
|
|
1690
|
+
inputs: [
|
|
1691
|
+
"intent",
|
|
1692
|
+
"type",
|
|
1693
|
+
"disabled",
|
|
1694
|
+
"loading",
|
|
1695
|
+
"success",
|
|
1696
|
+
"error",
|
|
1697
|
+
"icon",
|
|
1698
|
+
"ariaLabel"
|
|
1699
|
+
]
|
|
1700
|
+
},
|
|
1670
1701
|
{
|
|
1671
1702
|
kind: "component",
|
|
1672
1703
|
type: ConfirmModalComponent,
|
|
@@ -1718,6 +1749,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1718
1749
|
args: [{
|
|
1719
1750
|
selector: "framework-button-delete",
|
|
1720
1751
|
imports: [
|
|
1752
|
+
ButtonComponent$1,
|
|
1721
1753
|
ConfirmModalComponent,
|
|
1722
1754
|
RibbonButtonComponent,
|
|
1723
1755
|
TranslatePipe
|
|
@@ -1726,7 +1758,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1726
1758
|
provide: RibbonGroupChild,
|
|
1727
1759
|
useExisting: forwardRef(() => ButtonDeleteComponent)
|
|
1728
1760
|
}],
|
|
1729
|
-
template: "@if (isVisible()) {\n <lib-ribbon-button\n color=\"text-red-500\"\n icon=\"fa-trash-alt\"\n [disabled]=\"disabled()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n messageIcon=\"fa-solid fa-circle-exclamation\"\n messageIconColor=\"text-red-500\"\n [message]=\"modalMessage()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <button
|
|
1761
|
+
template: "@if (isVisible()) {\n <lib-ribbon-button\n color=\"text-red-500\"\n icon=\"fa-trash-alt\"\n [disabled]=\"disabled()\"\n [label]=\"label()\"\n [loading]=\"loading()\"\n (action)=\"onButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<framework-confirm-modal\n #modal\n messageIcon=\"fa-solid fa-circle-exclamation\"\n messageIconColor=\"text-red-500\"\n [message]=\"modalMessage()\"\n [title]=\"modalTitle()\"\n>\n <div footer>\n <lib-button intent=\"danger\" [loading]=\"modal.isLoading()\" (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel() | translate }}\n </lib-button>\n </div>\n</framework-confirm-modal>\n"
|
|
1730
1762
|
}]
|
|
1731
1763
|
}],
|
|
1732
1764
|
ctorParameters: () => [],
|
|
@@ -2248,9 +2280,24 @@ var ButtonFiltersComponent = class ButtonFiltersComponent extends BaseButton {
|
|
|
2248
2280
|
}],
|
|
2249
2281
|
usesInheritance: true,
|
|
2250
2282
|
ngImport: i0,
|
|
2251
|
-
template: "<lib-ribbon-button\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-filter'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters'\"\n [loading]=\"loading()\"\n (action)=\"onFiltersButtonClicked()\"\n>\n</lib-ribbon-button>\n\n@if (hasFiltersApplied) {\n <lib-ribbon-button\n [color]=\"'text-red-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-broom'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters-Clear'\"\n [loading]=\"loading()\"\n (action)=\"onResetButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<lib-modal\n position=\"top\"\n [size]=\"modalSize()\"\n [title]=\"modalTitle() | translate\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n>\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <button type=\"submit\"
|
|
2283
|
+
template: "<lib-ribbon-button\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-filter'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters'\"\n [loading]=\"loading()\"\n (action)=\"onFiltersButtonClicked()\"\n>\n</lib-ribbon-button>\n\n@if (hasFiltersApplied) {\n <lib-ribbon-button\n [color]=\"'text-red-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-broom'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters-Clear'\"\n [loading]=\"loading()\"\n (action)=\"onResetButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<lib-modal\n position=\"top\"\n [size]=\"modalSize()\"\n [title]=\"modalTitle() | translate\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n>\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <lib-button type=\"submit\" intent=\"primary\" (click)=\"onFiltersSubmitClicked()\">\n {{ 'Button-Filters-Modal-Confirm' | translate }}\n </lib-button>\n </div>\n</lib-modal>\n",
|
|
2252
2284
|
styles: [":host{display:grid;grid-auto-columns:auto;grid-auto-flow:column}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"],
|
|
2253
2285
|
dependencies: [
|
|
2286
|
+
{
|
|
2287
|
+
kind: "component",
|
|
2288
|
+
type: ButtonComponent$1,
|
|
2289
|
+
selector: "lib-button",
|
|
2290
|
+
inputs: [
|
|
2291
|
+
"intent",
|
|
2292
|
+
"type",
|
|
2293
|
+
"disabled",
|
|
2294
|
+
"loading",
|
|
2295
|
+
"success",
|
|
2296
|
+
"error",
|
|
2297
|
+
"icon",
|
|
2298
|
+
"ariaLabel"
|
|
2299
|
+
]
|
|
2300
|
+
},
|
|
2254
2301
|
{
|
|
2255
2302
|
kind: "component",
|
|
2256
2303
|
type: ModalComponent,
|
|
@@ -2304,6 +2351,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
2304
2351
|
args: [{
|
|
2305
2352
|
selector: "framework-button-filters",
|
|
2306
2353
|
imports: [
|
|
2354
|
+
ButtonComponent$1,
|
|
2307
2355
|
ModalComponent,
|
|
2308
2356
|
RibbonButtonComponent,
|
|
2309
2357
|
TranslatePipe
|
|
@@ -2312,7 +2360,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
2312
2360
|
provide: RibbonGroupChild,
|
|
2313
2361
|
useExisting: forwardRef(() => ButtonFiltersComponent)
|
|
2314
2362
|
}],
|
|
2315
|
-
template: "<lib-ribbon-button\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-filter'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters'\"\n [loading]=\"loading()\"\n (action)=\"onFiltersButtonClicked()\"\n>\n</lib-ribbon-button>\n\n@if (hasFiltersApplied) {\n <lib-ribbon-button\n [color]=\"'text-red-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-broom'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters-Clear'\"\n [loading]=\"loading()\"\n (action)=\"onResetButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<lib-modal\n position=\"top\"\n [size]=\"modalSize()\"\n [title]=\"modalTitle() | translate\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n>\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <button type=\"submit\"
|
|
2363
|
+
template: "<lib-ribbon-button\n [color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-filter'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters'\"\n [loading]=\"loading()\"\n (action)=\"onFiltersButtonClicked()\"\n>\n</lib-ribbon-button>\n\n@if (hasFiltersApplied) {\n <lib-ribbon-button\n [color]=\"'text-red-500'\"\n [disabled]=\"disabled()\"\n [icon]=\"'fa-broom'\"\n [iconSize]=\"iconSize()\"\n [label]=\"'Button-Filters-Clear'\"\n [loading]=\"loading()\"\n (action)=\"onResetButtonClicked()\"\n >\n </lib-ribbon-button>\n}\n\n<lib-modal\n position=\"top\"\n [size]=\"modalSize()\"\n [title]=\"modalTitle() | translate\"\n [closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n>\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <lib-button type=\"submit\" intent=\"primary\" (click)=\"onFiltersSubmitClicked()\">\n {{ 'Button-Filters-Modal-Confirm' | translate }}\n </lib-button>\n </div>\n</lib-modal>\n",
|
|
2316
2364
|
styles: [":host{display:grid;grid-auto-columns:auto;grid-auto-flow:column}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
|
|
2317
2365
|
}]
|
|
2318
2366
|
}],
|
|
@@ -4762,6 +4810,8 @@ var AppConfig = class {
|
|
|
4762
4810
|
companyName;
|
|
4763
4811
|
environment;
|
|
4764
4812
|
logoUrl;
|
|
4813
|
+
loginBackgroundUrl;
|
|
4814
|
+
loginLogoUrl;
|
|
4765
4815
|
notificationsEnabled;
|
|
4766
4816
|
notificationsUrl;
|
|
4767
4817
|
version;
|
|
@@ -4771,6 +4821,8 @@ var AppConfig = class {
|
|
|
4771
4821
|
this.companyName = options?.companyName ?? "";
|
|
4772
4822
|
this.environment = options?.environment ?? "";
|
|
4773
4823
|
this.logoUrl = options?.logoUrl;
|
|
4824
|
+
this.loginBackgroundUrl = options?.loginBackgroundUrl;
|
|
4825
|
+
this.loginLogoUrl = options?.loginLogoUrl;
|
|
4774
4826
|
this.notificationsEnabled = options?.notificationsEnabled ?? false;
|
|
4775
4827
|
this.notificationsUrl = options?.notificationsUrl ?? "";
|
|
4776
4828
|
this.version = options?.version ?? "";
|