@weeehaoooz/talos-ui 0.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/LICENSE +21 -0
- package/README.md +85 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs +237 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +93 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs +438 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +233 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +361 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +312 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +235 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +462 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +805 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +267 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +351 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +566 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +534 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +446 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +376 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +242 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +514 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +548 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +692 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +761 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +872 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +119 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +135 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +666 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +33 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +455 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +379 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +297 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +661 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +346 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +252 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +916 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs +851 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs +897 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs +17058 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -0
- package/package.json +203 -0
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.d.ts +3 -0
- package/schematics/ng-add/index.js +99 -0
- package/schematics/ng-add/schema.d.ts +10 -0
- package/schematics/ng-add/schema.js +2 -0
- package/schematics/ng-add/schema.json +52 -0
- package/styles/_alert.scss +56 -0
- package/styles/_badge.scss +279 -0
- package/styles/_button-group.scss +470 -0
- package/styles/_buttons.scss +442 -0
- package/styles/_card.scss +18 -0
- package/styles/_dialog.scss +116 -0
- package/styles/_drop-zone.scss +19 -0
- package/styles/_form-controls.scss +660 -0
- package/styles/_slide-toggle.scss +171 -0
- package/styles/_status-tag.scss +108 -0
- package/styles/_timeline.scss +19 -0
- package/styles/_tooltip.scss +32 -0
- package/styles/_typography.scss +279 -0
- package/styles/_variables.scss +590 -0
- package/styles/index.scss +15 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts +59 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts +38 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-core.d.ts +95 -0
- package/types/weeehaoooz-talos-ui-core.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +119 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +135 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +83 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +255 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +204 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +101 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +161 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +212 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +259 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +147 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +32 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts +88 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +113 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +165 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts +152 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +148 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +44 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +48 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +227 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts +42 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts +15 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts +111 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts +145 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts +84 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts +181 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts +110 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts +195 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +79 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +192 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts +286 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts +384 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui.d.ts +5050 -0
- package/types/weeehaoooz-talos-ui.d.ts.map +1 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, TemplateRef, Injectable, Directive, input, output, computed, Component, inject, NgModule } from '@angular/core';
|
|
3
|
+
import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { LucideInfo, LucideCheckCircle2, LucideAlertTriangle, LucideCircleAlert, LucideAlertOctagon, LucideShieldAlert, LucideX } from '@lucide/angular';
|
|
5
|
+
|
|
6
|
+
class TalosAlertService {
|
|
7
|
+
/** Reactive list of currently active programmatic alerts */
|
|
8
|
+
alerts = signal([], /* @ts-ignore */
|
|
9
|
+
...(ngDevMode ? [{ debugName: "alerts" }] : /* istanbul ignore next */ []));
|
|
10
|
+
/** Reactive list of currently active top-level banner alerts */
|
|
11
|
+
bannerAlerts = signal([], /* @ts-ignore */
|
|
12
|
+
...(ngDevMode ? [{ debugName: "bannerAlerts" }] : /* istanbul ignore next */ []));
|
|
13
|
+
idCounter = 0;
|
|
14
|
+
/** Default global configurations */
|
|
15
|
+
defaultConfig = {
|
|
16
|
+
severity: 'success',
|
|
17
|
+
appearance: 'subtle',
|
|
18
|
+
size: 'md',
|
|
19
|
+
showIcon: true,
|
|
20
|
+
dismissible: true
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Override default global configurations.
|
|
24
|
+
*/
|
|
25
|
+
setDefaultConfig(config) {
|
|
26
|
+
this.defaultConfig = { ...this.defaultConfig, ...config };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Main entry point to create a programmatic alert instance.
|
|
30
|
+
*/
|
|
31
|
+
show(messageOrConfig, configOverrides = {}) {
|
|
32
|
+
let fullConfig;
|
|
33
|
+
if (typeof messageOrConfig === 'string' ||
|
|
34
|
+
messageOrConfig instanceof TemplateRef) {
|
|
35
|
+
fullConfig = {
|
|
36
|
+
message: messageOrConfig,
|
|
37
|
+
...configOverrides
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
fullConfig = {
|
|
42
|
+
...messageOrConfig,
|
|
43
|
+
...configOverrides
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const instance = {
|
|
47
|
+
id: fullConfig.id || `talos-alert-${++this.idCounter}-${Date.now()}`,
|
|
48
|
+
severity: fullConfig.severity ?? this.defaultConfig.severity ?? 'success',
|
|
49
|
+
variant: fullConfig.variant,
|
|
50
|
+
appearance: fullConfig.appearance ?? this.defaultConfig.appearance ?? 'subtle',
|
|
51
|
+
size: fullConfig.size ?? this.defaultConfig.size ?? 'md',
|
|
52
|
+
showIcon: fullConfig.showIcon ?? this.defaultConfig.showIcon ?? true,
|
|
53
|
+
icon: fullConfig.icon,
|
|
54
|
+
showSeverityBadge: fullConfig.showSeverityBadge ?? false,
|
|
55
|
+
dismissible: fullConfig.dismissible ?? this.defaultConfig.dismissible ?? true,
|
|
56
|
+
title: fullConfig.title,
|
|
57
|
+
message: fullConfig.message,
|
|
58
|
+
actionLabel: fullConfig.actionLabel,
|
|
59
|
+
onAction: fullConfig.onAction,
|
|
60
|
+
onDismiss: fullConfig.onDismiss,
|
|
61
|
+
customClass: fullConfig.customClass,
|
|
62
|
+
bordered: fullConfig.bordered,
|
|
63
|
+
duration: fullConfig.duration,
|
|
64
|
+
data: fullConfig.data,
|
|
65
|
+
createdAt: Date.now()
|
|
66
|
+
};
|
|
67
|
+
this.alerts.update((current) => [...current, instance]);
|
|
68
|
+
if (instance.duration && instance.duration > 0) {
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
this.dismiss(instance.id);
|
|
71
|
+
}, instance.duration);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
id: instance.id,
|
|
75
|
+
dismiss: () => this.dismiss(instance.id)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Display a high-visibility global banner alert.
|
|
80
|
+
*/
|
|
81
|
+
banner(messageOrConfig, configOverrides = {}) {
|
|
82
|
+
let fullConfig;
|
|
83
|
+
if (typeof messageOrConfig === 'string' ||
|
|
84
|
+
messageOrConfig instanceof TemplateRef) {
|
|
85
|
+
fullConfig = {
|
|
86
|
+
message: messageOrConfig,
|
|
87
|
+
appearance: 'filled',
|
|
88
|
+
severity: 'info',
|
|
89
|
+
...configOverrides
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
fullConfig = {
|
|
94
|
+
appearance: 'filled',
|
|
95
|
+
severity: 'info',
|
|
96
|
+
...messageOrConfig,
|
|
97
|
+
...configOverrides
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const instance = {
|
|
101
|
+
id: fullConfig.id || `talos-banner-alert-${++this.idCounter}-${Date.now()}`,
|
|
102
|
+
severity: fullConfig.severity ?? 'info',
|
|
103
|
+
variant: fullConfig.variant,
|
|
104
|
+
appearance: fullConfig.appearance ?? 'filled',
|
|
105
|
+
size: fullConfig.size ?? 'md',
|
|
106
|
+
showIcon: fullConfig.showIcon ?? true,
|
|
107
|
+
icon: fullConfig.icon,
|
|
108
|
+
showSeverityBadge: fullConfig.showSeverityBadge ?? false,
|
|
109
|
+
dismissible: fullConfig.dismissible ?? true,
|
|
110
|
+
title: fullConfig.title,
|
|
111
|
+
message: fullConfig.message,
|
|
112
|
+
actionLabel: fullConfig.actionLabel,
|
|
113
|
+
onAction: fullConfig.onAction,
|
|
114
|
+
onDismiss: fullConfig.onDismiss,
|
|
115
|
+
customClass: fullConfig.customClass,
|
|
116
|
+
bordered: fullConfig.bordered,
|
|
117
|
+
duration: fullConfig.duration,
|
|
118
|
+
data: fullConfig.data,
|
|
119
|
+
createdAt: Date.now()
|
|
120
|
+
};
|
|
121
|
+
this.bannerAlerts.update((current) => [...current, instance]);
|
|
122
|
+
if (instance.duration && instance.duration > 0) {
|
|
123
|
+
setTimeout(() => {
|
|
124
|
+
this.dismissBanner(instance.id);
|
|
125
|
+
}, instance.duration);
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
id: instance.id,
|
|
129
|
+
dismiss: () => this.dismissBanner(instance.id)
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Convenience method for Success alerts (Default severity) */
|
|
133
|
+
success(message, config) {
|
|
134
|
+
return this.show(message, { ...config, severity: 'success' });
|
|
135
|
+
}
|
|
136
|
+
/** Convenience method for Info alerts */
|
|
137
|
+
info(message, config) {
|
|
138
|
+
return this.show(message, { ...config, severity: 'info' });
|
|
139
|
+
}
|
|
140
|
+
/** Convenience method for Warning alerts */
|
|
141
|
+
warning(message, config) {
|
|
142
|
+
return this.show(message, { ...config, severity: 'warning' });
|
|
143
|
+
}
|
|
144
|
+
/** Convenience method for Error alerts */
|
|
145
|
+
error(message, config) {
|
|
146
|
+
return this.show(message, { ...config, severity: 'error' });
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Dismiss a specific programmatic alert by ID, or the oldest if no ID is provided.
|
|
150
|
+
*/
|
|
151
|
+
dismiss(id) {
|
|
152
|
+
if (!id) {
|
|
153
|
+
const current = this.alerts();
|
|
154
|
+
if (current.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
id = current[0].id;
|
|
157
|
+
}
|
|
158
|
+
const target = this.alerts().find((a) => a.id === id);
|
|
159
|
+
if (target?.onDismiss) {
|
|
160
|
+
target.onDismiss();
|
|
161
|
+
}
|
|
162
|
+
this.alerts.update((current) => current.filter((item) => item.id !== id));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Dismiss a banner alert by ID.
|
|
166
|
+
*/
|
|
167
|
+
dismissBanner(id) {
|
|
168
|
+
if (!id) {
|
|
169
|
+
const current = this.bannerAlerts();
|
|
170
|
+
if (current.length === 0)
|
|
171
|
+
return;
|
|
172
|
+
id = current[0].id;
|
|
173
|
+
}
|
|
174
|
+
const target = this.bannerAlerts().find((a) => a.id === id);
|
|
175
|
+
if (target?.onDismiss) {
|
|
176
|
+
target.onDismiss();
|
|
177
|
+
}
|
|
178
|
+
this.bannerAlerts.update((current) => current.filter((item) => item.id !== id));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Dismiss all currently active alerts and banners.
|
|
182
|
+
*/
|
|
183
|
+
dismissAll() {
|
|
184
|
+
this.alerts().forEach((a) => a.onDismiss?.());
|
|
185
|
+
this.bannerAlerts().forEach((b) => b.onDismiss?.());
|
|
186
|
+
this.alerts.set([]);
|
|
187
|
+
this.bannerAlerts.set([]);
|
|
188
|
+
}
|
|
189
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
190
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertService, providedIn: 'root' });
|
|
191
|
+
}
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertService, decorators: [{
|
|
193
|
+
type: Injectable,
|
|
194
|
+
args: [{
|
|
195
|
+
providedIn: 'root'
|
|
196
|
+
}]
|
|
197
|
+
}] });
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Structural / Slot directive for alert title projection.
|
|
201
|
+
*
|
|
202
|
+
* Usage:
|
|
203
|
+
* ```html
|
|
204
|
+
* <talos-alert>
|
|
205
|
+
* <div talosAlertTitle>System Maintenance</div>
|
|
206
|
+
* <div talosAlertDescription>All services will undergo updates tonight.</div>
|
|
207
|
+
* </talos-alert>
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
class TalosAlertTitleDirective {
|
|
211
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
212
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosAlertTitleDirective, isStandalone: true, selector: "[talosAlertTitle], talos-alert-title", host: { classAttribute: "talos-alert-title-directive" }, ngImport: i0 });
|
|
213
|
+
}
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertTitleDirective, decorators: [{
|
|
215
|
+
type: Directive,
|
|
216
|
+
args: [{
|
|
217
|
+
selector: '[talosAlertTitle], talos-alert-title',
|
|
218
|
+
host: {
|
|
219
|
+
'class': 'talos-alert-title-directive'
|
|
220
|
+
}
|
|
221
|
+
}]
|
|
222
|
+
}] });
|
|
223
|
+
/**
|
|
224
|
+
* Slot directive for alert description / message body.
|
|
225
|
+
*/
|
|
226
|
+
class TalosAlertDescriptionDirective {
|
|
227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
228
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosAlertDescriptionDirective, isStandalone: true, selector: "[talosAlertDescription], talos-alert-description", host: { classAttribute: "talos-alert-description-directive" }, ngImport: i0 });
|
|
229
|
+
}
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertDescriptionDirective, decorators: [{
|
|
231
|
+
type: Directive,
|
|
232
|
+
args: [{
|
|
233
|
+
selector: '[talosAlertDescription], talos-alert-description',
|
|
234
|
+
host: {
|
|
235
|
+
'class': 'talos-alert-description-directive'
|
|
236
|
+
}
|
|
237
|
+
}]
|
|
238
|
+
}] });
|
|
239
|
+
/**
|
|
240
|
+
* Slot directive for custom alert actions / button group.
|
|
241
|
+
*/
|
|
242
|
+
class TalosAlertActionsDirective {
|
|
243
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
244
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosAlertActionsDirective, isStandalone: true, selector: "[talosAlertActions], talos-alert-actions", host: { classAttribute: "talos-alert-actions-directive" }, ngImport: i0 });
|
|
245
|
+
}
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertActionsDirective, decorators: [{
|
|
247
|
+
type: Directive,
|
|
248
|
+
args: [{
|
|
249
|
+
selector: '[talosAlertActions], talos-alert-actions',
|
|
250
|
+
host: {
|
|
251
|
+
'class': 'talos-alert-actions-directive'
|
|
252
|
+
}
|
|
253
|
+
}]
|
|
254
|
+
}] });
|
|
255
|
+
/**
|
|
256
|
+
* Slot directive for custom alert icon.
|
|
257
|
+
*/
|
|
258
|
+
class TalosAlertIconDirective {
|
|
259
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
260
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosAlertIconDirective, isStandalone: true, selector: "[talosAlertIcon], talos-alert-icon", host: { classAttribute: "talos-alert-icon-directive" }, ngImport: i0 });
|
|
261
|
+
}
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertIconDirective, decorators: [{
|
|
263
|
+
type: Directive,
|
|
264
|
+
args: [{
|
|
265
|
+
selector: '[talosAlertIcon], talos-alert-icon',
|
|
266
|
+
host: {
|
|
267
|
+
'class': 'talos-alert-icon-directive'
|
|
268
|
+
}
|
|
269
|
+
}]
|
|
270
|
+
}] });
|
|
271
|
+
|
|
272
|
+
class TalosAlertComponent {
|
|
273
|
+
/** Alert severity state: 'success' (default), 'info', 'warning', 'error' */
|
|
274
|
+
severity = input('success', /* @ts-ignore */
|
|
275
|
+
...(ngDevMode ? [{ debugName: "severity" }] : /* istanbul ignore next */ []));
|
|
276
|
+
/** Visual variant theme fallback */
|
|
277
|
+
variant = input(undefined, /* @ts-ignore */
|
|
278
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
279
|
+
/** Visual surface appearance style */
|
|
280
|
+
appearance = input('subtle', /* @ts-ignore */
|
|
281
|
+
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
282
|
+
/** Sizing of padding and typography */
|
|
283
|
+
size = input('md', /* @ts-ignore */
|
|
284
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
285
|
+
/** Header title text or custom TemplateRef */
|
|
286
|
+
title = input(undefined, /* @ts-ignore */
|
|
287
|
+
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
288
|
+
/** Main message content or custom TemplateRef */
|
|
289
|
+
message = input(undefined, /* @ts-ignore */
|
|
290
|
+
...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
291
|
+
/** Whether to display the icon */
|
|
292
|
+
showIcon = input(true, /* @ts-ignore */
|
|
293
|
+
...(ngDevMode ? [{ debugName: "showIcon" }] : /* istanbul ignore next */ []));
|
|
294
|
+
/** Custom Lucide icon component, TemplateRef, or boolean */
|
|
295
|
+
icon = input(null, /* @ts-ignore */
|
|
296
|
+
...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
297
|
+
/** Whether to display a dedicated severity pill badge */
|
|
298
|
+
showSeverityBadge = input(false, /* @ts-ignore */
|
|
299
|
+
...(ngDevMode ? [{ debugName: "showSeverityBadge" }] : /* istanbul ignore next */ []));
|
|
300
|
+
/** Whether the alert can be dismissed */
|
|
301
|
+
dismissible = input(false, /* @ts-ignore */
|
|
302
|
+
...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
|
|
303
|
+
/** Action button text label */
|
|
304
|
+
actionLabel = input(undefined, /* @ts-ignore */
|
|
305
|
+
...(ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []));
|
|
306
|
+
/** Optional explicit border outline */
|
|
307
|
+
bordered = input(false, /* @ts-ignore */
|
|
308
|
+
...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
309
|
+
/** Additional CSS class */
|
|
310
|
+
customClass = input('', /* @ts-ignore */
|
|
311
|
+
...(ngDevMode ? [{ debugName: "customClass" }] : /* istanbul ignore next */ []));
|
|
312
|
+
/** Emitted when dismiss close button is clicked */
|
|
313
|
+
dismiss = output();
|
|
314
|
+
/** Emitted when action button is clicked */
|
|
315
|
+
action = output();
|
|
316
|
+
/** Emitted when dismiss animation has finished and alert is removed */
|
|
317
|
+
closed = output();
|
|
318
|
+
isDismissing = signal(false, /* @ts-ignore */
|
|
319
|
+
...(ngDevMode ? [{ debugName: "isDismissing" }] : /* istanbul ignore next */ []));
|
|
320
|
+
isDismissed = signal(false, /* @ts-ignore */
|
|
321
|
+
...(ngDevMode ? [{ debugName: "isDismissed" }] : /* istanbul ignore next */ []));
|
|
322
|
+
/** Resolved visual variant considering severity */
|
|
323
|
+
resolvedVariant = computed(() => {
|
|
324
|
+
const sev = this.severity();
|
|
325
|
+
if (sev) {
|
|
326
|
+
return sev;
|
|
327
|
+
}
|
|
328
|
+
return this.variant() ?? 'success';
|
|
329
|
+
}, /* @ts-ignore */
|
|
330
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
331
|
+
/** Severity display label for badge */
|
|
332
|
+
severityLabel = computed(() => {
|
|
333
|
+
const sev = this.severity();
|
|
334
|
+
if (sev)
|
|
335
|
+
return sev.toUpperCase();
|
|
336
|
+
return '';
|
|
337
|
+
}, /* @ts-ignore */
|
|
338
|
+
...(ngDevMode ? [{ debugName: "severityLabel" }] : /* istanbul ignore next */ []));
|
|
339
|
+
isTitleTemplate = computed(() => this.title() instanceof TemplateRef, /* @ts-ignore */
|
|
340
|
+
...(ngDevMode ? [{ debugName: "isTitleTemplate" }] : /* istanbul ignore next */ []));
|
|
341
|
+
titleTemplate = computed(() => this.title(), /* @ts-ignore */
|
|
342
|
+
...(ngDevMode ? [{ debugName: "titleTemplate" }] : /* istanbul ignore next */ []));
|
|
343
|
+
isMessageTemplate = computed(() => this.message() instanceof TemplateRef, /* @ts-ignore */
|
|
344
|
+
...(ngDevMode ? [{ debugName: "isMessageTemplate" }] : /* istanbul ignore next */ []));
|
|
345
|
+
messageTemplate = computed(() => this.message(), /* @ts-ignore */
|
|
346
|
+
...(ngDevMode ? [{ debugName: "messageTemplate" }] : /* istanbul ignore next */ []));
|
|
347
|
+
isIconTemplate = computed(() => this.icon() instanceof TemplateRef, /* @ts-ignore */
|
|
348
|
+
...(ngDevMode ? [{ debugName: "isIconTemplate" }] : /* istanbul ignore next */ []));
|
|
349
|
+
iconTemplate = computed(() => this.icon(), /* @ts-ignore */
|
|
350
|
+
...(ngDevMode ? [{ debugName: "iconTemplate" }] : /* istanbul ignore next */ []));
|
|
351
|
+
customIconComponent = computed(() => {
|
|
352
|
+
const ic = this.icon();
|
|
353
|
+
return typeof ic === 'function' ? ic : null;
|
|
354
|
+
}, /* @ts-ignore */
|
|
355
|
+
...(ngDevMode ? [{ debugName: "customIconComponent" }] : /* istanbul ignore next */ []));
|
|
356
|
+
ariaRole = computed(() => {
|
|
357
|
+
const v = this.resolvedVariant();
|
|
358
|
+
return v === 'error' || v === 'warning' || v === 'critical' ? 'alert' : 'status';
|
|
359
|
+
}, /* @ts-ignore */
|
|
360
|
+
...(ngDevMode ? [{ debugName: "ariaRole" }] : /* istanbul ignore next */ []));
|
|
361
|
+
ariaLive = computed(() => {
|
|
362
|
+
const v = this.resolvedVariant();
|
|
363
|
+
return v === 'error' || v === 'critical' ? 'assertive' : 'polite';
|
|
364
|
+
}, /* @ts-ignore */
|
|
365
|
+
...(ngDevMode ? [{ debugName: "ariaLive" }] : /* istanbul ignore next */ []));
|
|
366
|
+
onActionClick() {
|
|
367
|
+
this.action.emit();
|
|
368
|
+
}
|
|
369
|
+
onCloseClick() {
|
|
370
|
+
if (this.isDismissing() || this.isDismissed())
|
|
371
|
+
return;
|
|
372
|
+
this.isDismissing.set(true);
|
|
373
|
+
this.dismiss.emit();
|
|
374
|
+
setTimeout(() => {
|
|
375
|
+
this.isDismissed.set(true);
|
|
376
|
+
this.closed.emit();
|
|
377
|
+
}, 200);
|
|
378
|
+
}
|
|
379
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
380
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosAlertComponent, isStandalone: true, selector: "talos-alert", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, showSeverityBadge: { classPropertyName: "showSeverityBadge", publicName: "showSeverityBadge", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "customClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss", action: "action", closed: "closed" }, host: { properties: { "class.talos-alert-host": "true", "class.is-dismissing": "isDismissing()", "class.is-dismissed": "isDismissed()" } }, ngImport: i0, template: "@if (!isDismissed()) {\n<div\n class=\"talos-alert\"\n [class.variant-default]=\"resolvedVariant() === 'default'\"\n [class.variant-info]=\"resolvedVariant() === 'info'\"\n [class.variant-success]=\"resolvedVariant() === 'success'\"\n [class.variant-warning]=\"resolvedVariant() === 'warning'\"\n [class.variant-error]=\"resolvedVariant() === 'error'\"\n [class.variant-primary]=\"resolvedVariant() === 'primary'\"\n [class.variant-critical]=\"resolvedVariant() === 'critical'\"\n [class.appearance-subtle]=\"appearance() === 'subtle'\"\n [class.appearance-outline]=\"appearance() === 'outline'\"\n [class.appearance-filled]=\"appearance() === 'filled'\"\n [class.appearance-accent]=\"appearance() === 'accent'\"\n [class.appearance-left-border]=\"appearance() === 'left-border'\"\n [class.size-sm]=\"size() === 'sm'\"\n [class.size-md]=\"size() === 'md'\"\n [class.size-lg]=\"size() === 'lg'\"\n [class.is-bordered]=\"bordered()\"\n [class.is-dismissing]=\"isDismissing()\"\n [class]=\"customClass()\"\n [attr.role]=\"ariaRole()\"\n [attr.aria-live]=\"ariaLive()\"\n>\n <!-- Icon Section -->\n @if (showIcon() && icon() !== false) {\n <div class=\"talos-alert-icon\" aria-hidden=\"true\">\n @if (isIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"iconTemplate()\"></ng-container>\n } @else if (customIconComponent()) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n <ng-content select=\"[talosAlertIcon], talos-alert-icon\"></ng-content>\n @switch (resolvedVariant()) {\n @case ('critical') {\n <svg lucideAlertOctagon [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('primary') {\n <svg lucideShieldAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n }\n }\n </div>\n }\n\n <!-- Main Alert Body & Details -->\n <div class=\"talos-alert-body\">\n <!-- Header: Title & Severity Badge -->\n <div class=\"talos-alert-header\">\n @if (title()) {\n @if (isTitleTemplate()) {\n <div class=\"talos-alert-title\">\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n </div>\n } @else {\n <h4 class=\"talos-alert-title\">{{ title() }}</h4>\n }\n }\n <ng-content select=\"[talosAlertTitle], talos-alert-title\"></ng-content>\n\n @if (showSeverityBadge() && severityLabel()) {\n <span class=\"talos-alert-severity-badge\" [attr.data-severity]=\"resolvedVariant()\">\n {{ severityLabel() }}\n </span>\n }\n </div>\n\n <!-- Message Description Content -->\n <div class=\"talos-alert-message\">\n @if (message()) {\n @if (isMessageTemplate()) {\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else {\n <span>{{ message() }}</span>\n }\n }\n <ng-content select=\"[talosAlertDescription], talos-alert-description\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- Actions & Close Button -->\n <div class=\"talos-alert-actions\">\n <ng-content select=\"[talosAlertActions], talos-alert-actions\"></ng-content>\n\n @if (actionLabel()) {\n <button type=\"button\" class=\"talos-alert-action-btn\" (click)=\"onActionClick()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"talos-alert-close-btn\"\n aria-label=\"Dismiss alert\"\n (click)=\"onCloseClick()\"\n >\n <svg lucideX [size]=\"size() === 'sm' ? 14 : 16\"></svg>\n </button>\n }\n </div>\n</div>\n}\n", styles: [":host{display:block;width:100%;transition:opacity .2s ease,transform .2s ease,max-height .2s ease,margin .2s ease}:host.is-dismissing{opacity:0;transform:translateY(-4px) scale(.98);pointer-events:none}:host.is-dismissed{display:none!important}.talos-alert{position:relative;display:flex;align-items:flex-start;gap:var(--talos-alert-gap, .75rem);width:100%;border-radius:var(--talos-alert-radius, .5rem);box-sizing:border-box;font-family:inherit;transition:all .2s ease-in-out}.talos-alert.size-sm{padding:var(--talos-alert-padding-sm, .5rem .75rem);font-size:.8125rem}.talos-alert.size-sm .talos-alert-title{font-size:.875rem}.talos-alert.size-md{padding:var(--talos-alert-padding-md, .75rem 1rem);font-size:.875rem}.talos-alert.size-md .talos-alert-title{font-size:.9375rem}.talos-alert.size-lg{padding:var(--talos-alert-padding-lg, 1rem 1.25rem);font-size:.9375rem}.talos-alert.size-lg .talos-alert-title{font-size:1.0625rem}.talos-alert.is-bordered{border-width:1px;border-style:solid}.talos-alert.appearance-subtle{border:1px solid transparent}.talos-alert.appearance-subtle.variant-default{background-color:var(--talos-alert-default-bg);border-color:var(--talos-alert-default-border);color:var(--talos-alert-default-text)}.talos-alert.appearance-subtle.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-subtle.variant-info{background-color:var(--talos-alert-info-bg);border-color:var(--talos-alert-info-border);color:var(--talos-alert-info-text)}.talos-alert.appearance-subtle.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-subtle.variant-success{background-color:var(--talos-alert-success-bg);border-color:var(--talos-alert-success-border);color:var(--talos-alert-success-text)}.talos-alert.appearance-subtle.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-subtle.variant-warning{background-color:var(--talos-alert-warning-bg);border-color:var(--talos-alert-warning-border);color:var(--talos-alert-warning-text)}.talos-alert.appearance-subtle.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-subtle.variant-error{background-color:var(--talos-alert-error-bg);border-color:var(--talos-alert-error-border);color:var(--talos-alert-error-text)}.talos-alert.appearance-subtle.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-subtle.variant-critical{background-color:var(--talos-alert-critical-bg);border-color:var(--talos-alert-critical-border);color:var(--talos-alert-critical-text)}.talos-alert.appearance-subtle.variant-critical .talos-alert-icon{color:var(--talos-alert-critical-icon)}.talos-alert.appearance-subtle.variant-primary{background-color:var(--talos-alert-primary-bg);border-color:var(--talos-alert-primary-border);color:var(--talos-alert-primary-text)}.talos-alert.appearance-subtle.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert.appearance-outline{background-color:transparent;border:1px solid currentColor}.talos-alert.appearance-outline.variant-default{border-color:var(--talos-alert-default-border);color:var(--talos-alert-default-text)}.talos-alert.appearance-outline.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-outline.variant-info{border-color:var(--talos-alert-info-icon);color:var(--talos-alert-info-icon)}.talos-alert.appearance-outline.variant-info .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-outline.variant-success{border-color:var(--talos-alert-success-icon);color:var(--talos-alert-success-icon)}.talos-alert.appearance-outline.variant-success .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-outline.variant-warning{border-color:var(--talos-alert-warning-icon);color:var(--talos-alert-warning-icon)}.talos-alert.appearance-outline.variant-warning .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-outline.variant-error{border-color:var(--talos-alert-error-icon);color:var(--talos-alert-error-icon)}.talos-alert.appearance-outline.variant-error .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-outline.variant-critical{border-color:var(--talos-alert-critical-border);color:var(--talos-alert-critical-icon)}.talos-alert.appearance-outline.variant-critical .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-critical .talos-alert-icon{color:var(--talos-alert-critical-icon)}.talos-alert.appearance-outline.variant-primary{border-color:var(--talos-alert-primary-icon);color:var(--talos-alert-primary-icon)}.talos-alert.appearance-outline.variant-primary .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert.appearance-filled{border:1px solid transparent;color:#fff}.talos-alert.appearance-filled .talos-alert-icon,.talos-alert.appearance-filled .talos-alert-title{color:#fff}.talos-alert.appearance-filled .talos-alert-message{color:#ffffffeb}.talos-alert.appearance-filled.variant-default{background-color:#475569}.talos-alert.appearance-filled.variant-info{background-color:#2563eb}.talos-alert.appearance-filled.variant-success{background-color:#16a34a}.talos-alert.appearance-filled.variant-warning{background-color:#d97706}.talos-alert.appearance-filled.variant-error{background-color:#dc2626}.talos-alert.appearance-filled.variant-critical{background-color:#991b1b;box-shadow:0 0 15px #dc262666}.talos-alert.appearance-filled.variant-primary{background-color:#2563eb}.talos-alert.appearance-filled .talos-alert-action-btn{background-color:#fff3;color:#fff;border-color:#ffffff59}.talos-alert.appearance-filled .talos-alert-action-btn:hover{background-color:#ffffff4d}.talos-alert.appearance-filled .talos-alert-close-btn{color:#fffc}.talos-alert.appearance-filled .talos-alert-close-btn:hover{background-color:#fff3;color:#fff}.talos-alert.appearance-accent,.talos-alert.appearance-left-border{background-color:var(--talos-card-bg, #ffffff);border:1px solid var(--talos-border-color, #e2e8f0);border-left-width:4px;box-shadow:var(--talos-alert-shadow);color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-accent.variant-default,.talos-alert.appearance-left-border.variant-default{border-left-color:var(--talos-alert-default-icon)}.talos-alert.appearance-accent.variant-default .talos-alert-icon,.talos-alert.appearance-left-border.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-accent.variant-info,.talos-alert.appearance-left-border.variant-info{border-left-color:var(--talos-alert-info-icon)}.talos-alert.appearance-accent.variant-info .talos-alert-icon,.talos-alert.appearance-left-border.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-accent.variant-success,.talos-alert.appearance-left-border.variant-success{border-left-color:var(--talos-alert-success-icon)}.talos-alert.appearance-accent.variant-success .talos-alert-icon,.talos-alert.appearance-left-border.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-accent.variant-warning,.talos-alert.appearance-left-border.variant-warning{border-left-color:var(--talos-alert-warning-icon)}.talos-alert.appearance-accent.variant-warning .talos-alert-icon,.talos-alert.appearance-left-border.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-accent.variant-error,.talos-alert.appearance-left-border.variant-error{border-left-color:var(--talos-alert-error-icon)}.talos-alert.appearance-accent.variant-error .talos-alert-icon,.talos-alert.appearance-left-border.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-accent.variant-critical,.talos-alert.appearance-left-border.variant-critical{border-left-color:#ef4444}.talos-alert.appearance-accent.variant-critical .talos-alert-icon,.talos-alert.appearance-left-border.variant-critical .talos-alert-icon{color:#ef4444}.talos-alert.appearance-accent.variant-primary,.talos-alert.appearance-left-border.variant-primary{border-left-color:var(--talos-alert-primary-icon)}.talos-alert.appearance-accent.variant-primary .talos-alert-icon,.talos-alert.appearance-left-border.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;line-height:1}.talos-alert-icon svg{display:block}.talos-alert-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.25rem}.talos-alert-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.talos-alert-title{margin:0;font-weight:600;line-height:1.35;color:inherit}.talos-alert-message{line-height:1.45;color:inherit;opacity:.95}.talos-alert-severity-badge{display:inline-flex;align-items:center;padding:.125rem .4375rem;border-radius:9999px;font-size:.6875rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background-color:#00000014;color:inherit}.talos-alert-severity-badge[data-severity=critical]{background-color:#ef4444;color:#fff}.talos-alert-severity-badge[data-severity=error]{background-color:#ef444433;color:#dc2626}.talos-alert-severity-badge[data-severity=warning]{background-color:#f59e0b33;color:#b45309}.talos-alert-severity-badge[data-severity=info]{background-color:#3b82f633;color:#1d4ed8}.talos-alert-severity-badge[data-severity=success]{background-color:#22c55e33;color:#15803d}.talos-alert-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.talos-alert-action-btn{display:inline-flex;align-items:center;justify-content:center;padding:.25rem .625rem;font-size:.75rem;font-weight:600;border-radius:var(--talos-border-radius, .375rem);border:1px solid currentColor;background-color:transparent;color:inherit;cursor:pointer;transition:all .15s ease}.talos-alert-action-btn:hover{background-color:#0000000f}.talos-alert-action-btn:active{transform:scale(.97)}.talos-alert-close-btn{display:inline-flex;align-items:center;justify-content:center;padding:.25rem;border:none;background:transparent;color:inherit;opacity:.7;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:all .15s ease}.talos-alert-close-btn:hover{opacity:1;background-color:#00000014}.talos-alert-close-btn:active{transform:scale(.92)}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideInfo, selector: "svg[lucideInfo]" }, { kind: "component", type: LucideCheckCircle2, selector: "svg[lucideCircleCheck], svg[lucideCheckCircle2]" }, { kind: "component", type: LucideAlertTriangle, selector: "svg[lucideTriangleAlert], svg[lucideAlertTriangle]" }, { kind: "component", type: LucideCircleAlert, selector: "svg[lucideCircleAlert], svg[lucideAlertCircle]" }, { kind: "component", type: LucideAlertOctagon, selector: "svg[lucideOctagonAlert], svg[lucideAlertOctagon]" }, { kind: "component", type: LucideShieldAlert, selector: "svg[lucideShieldAlert]" }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }] });
|
|
381
|
+
}
|
|
382
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertComponent, decorators: [{
|
|
383
|
+
type: Component,
|
|
384
|
+
args: [{ selector: 'talos-alert', imports: [
|
|
385
|
+
NgComponentOutlet,
|
|
386
|
+
NgTemplateOutlet,
|
|
387
|
+
LucideInfo,
|
|
388
|
+
LucideCheckCircle2,
|
|
389
|
+
LucideAlertTriangle,
|
|
390
|
+
LucideCircleAlert,
|
|
391
|
+
LucideAlertOctagon,
|
|
392
|
+
LucideShieldAlert,
|
|
393
|
+
LucideX
|
|
394
|
+
], host: {
|
|
395
|
+
'[class.talos-alert-host]': 'true',
|
|
396
|
+
'[class.is-dismissing]': 'isDismissing()',
|
|
397
|
+
'[class.is-dismissed]': 'isDismissed()'
|
|
398
|
+
}, template: "@if (!isDismissed()) {\n<div\n class=\"talos-alert\"\n [class.variant-default]=\"resolvedVariant() === 'default'\"\n [class.variant-info]=\"resolvedVariant() === 'info'\"\n [class.variant-success]=\"resolvedVariant() === 'success'\"\n [class.variant-warning]=\"resolvedVariant() === 'warning'\"\n [class.variant-error]=\"resolvedVariant() === 'error'\"\n [class.variant-primary]=\"resolvedVariant() === 'primary'\"\n [class.variant-critical]=\"resolvedVariant() === 'critical'\"\n [class.appearance-subtle]=\"appearance() === 'subtle'\"\n [class.appearance-outline]=\"appearance() === 'outline'\"\n [class.appearance-filled]=\"appearance() === 'filled'\"\n [class.appearance-accent]=\"appearance() === 'accent'\"\n [class.appearance-left-border]=\"appearance() === 'left-border'\"\n [class.size-sm]=\"size() === 'sm'\"\n [class.size-md]=\"size() === 'md'\"\n [class.size-lg]=\"size() === 'lg'\"\n [class.is-bordered]=\"bordered()\"\n [class.is-dismissing]=\"isDismissing()\"\n [class]=\"customClass()\"\n [attr.role]=\"ariaRole()\"\n [attr.aria-live]=\"ariaLive()\"\n>\n <!-- Icon Section -->\n @if (showIcon() && icon() !== false) {\n <div class=\"talos-alert-icon\" aria-hidden=\"true\">\n @if (isIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"iconTemplate()\"></ng-container>\n } @else if (customIconComponent()) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n <ng-content select=\"[talosAlertIcon], talos-alert-icon\"></ng-content>\n @switch (resolvedVariant()) {\n @case ('critical') {\n <svg lucideAlertOctagon [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('primary') {\n <svg lucideShieldAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n }\n }\n </div>\n }\n\n <!-- Main Alert Body & Details -->\n <div class=\"talos-alert-body\">\n <!-- Header: Title & Severity Badge -->\n <div class=\"talos-alert-header\">\n @if (title()) {\n @if (isTitleTemplate()) {\n <div class=\"talos-alert-title\">\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n </div>\n } @else {\n <h4 class=\"talos-alert-title\">{{ title() }}</h4>\n }\n }\n <ng-content select=\"[talosAlertTitle], talos-alert-title\"></ng-content>\n\n @if (showSeverityBadge() && severityLabel()) {\n <span class=\"talos-alert-severity-badge\" [attr.data-severity]=\"resolvedVariant()\">\n {{ severityLabel() }}\n </span>\n }\n </div>\n\n <!-- Message Description Content -->\n <div class=\"talos-alert-message\">\n @if (message()) {\n @if (isMessageTemplate()) {\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else {\n <span>{{ message() }}</span>\n }\n }\n <ng-content select=\"[talosAlertDescription], talos-alert-description\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- Actions & Close Button -->\n <div class=\"talos-alert-actions\">\n <ng-content select=\"[talosAlertActions], talos-alert-actions\"></ng-content>\n\n @if (actionLabel()) {\n <button type=\"button\" class=\"talos-alert-action-btn\" (click)=\"onActionClick()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"talos-alert-close-btn\"\n aria-label=\"Dismiss alert\"\n (click)=\"onCloseClick()\"\n >\n <svg lucideX [size]=\"size() === 'sm' ? 14 : 16\"></svg>\n </button>\n }\n </div>\n</div>\n}\n", styles: [":host{display:block;width:100%;transition:opacity .2s ease,transform .2s ease,max-height .2s ease,margin .2s ease}:host.is-dismissing{opacity:0;transform:translateY(-4px) scale(.98);pointer-events:none}:host.is-dismissed{display:none!important}.talos-alert{position:relative;display:flex;align-items:flex-start;gap:var(--talos-alert-gap, .75rem);width:100%;border-radius:var(--talos-alert-radius, .5rem);box-sizing:border-box;font-family:inherit;transition:all .2s ease-in-out}.talos-alert.size-sm{padding:var(--talos-alert-padding-sm, .5rem .75rem);font-size:.8125rem}.talos-alert.size-sm .talos-alert-title{font-size:.875rem}.talos-alert.size-md{padding:var(--talos-alert-padding-md, .75rem 1rem);font-size:.875rem}.talos-alert.size-md .talos-alert-title{font-size:.9375rem}.talos-alert.size-lg{padding:var(--talos-alert-padding-lg, 1rem 1.25rem);font-size:.9375rem}.talos-alert.size-lg .talos-alert-title{font-size:1.0625rem}.talos-alert.is-bordered{border-width:1px;border-style:solid}.talos-alert.appearance-subtle{border:1px solid transparent}.talos-alert.appearance-subtle.variant-default{background-color:var(--talos-alert-default-bg);border-color:var(--talos-alert-default-border);color:var(--talos-alert-default-text)}.talos-alert.appearance-subtle.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-subtle.variant-info{background-color:var(--talos-alert-info-bg);border-color:var(--talos-alert-info-border);color:var(--talos-alert-info-text)}.talos-alert.appearance-subtle.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-subtle.variant-success{background-color:var(--talos-alert-success-bg);border-color:var(--talos-alert-success-border);color:var(--talos-alert-success-text)}.talos-alert.appearance-subtle.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-subtle.variant-warning{background-color:var(--talos-alert-warning-bg);border-color:var(--talos-alert-warning-border);color:var(--talos-alert-warning-text)}.talos-alert.appearance-subtle.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-subtle.variant-error{background-color:var(--talos-alert-error-bg);border-color:var(--talos-alert-error-border);color:var(--talos-alert-error-text)}.talos-alert.appearance-subtle.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-subtle.variant-critical{background-color:var(--talos-alert-critical-bg);border-color:var(--talos-alert-critical-border);color:var(--talos-alert-critical-text)}.talos-alert.appearance-subtle.variant-critical .talos-alert-icon{color:var(--talos-alert-critical-icon)}.talos-alert.appearance-subtle.variant-primary{background-color:var(--talos-alert-primary-bg);border-color:var(--talos-alert-primary-border);color:var(--talos-alert-primary-text)}.talos-alert.appearance-subtle.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert.appearance-outline{background-color:transparent;border:1px solid currentColor}.talos-alert.appearance-outline.variant-default{border-color:var(--talos-alert-default-border);color:var(--talos-alert-default-text)}.talos-alert.appearance-outline.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-outline.variant-info{border-color:var(--talos-alert-info-icon);color:var(--talos-alert-info-icon)}.talos-alert.appearance-outline.variant-info .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-outline.variant-success{border-color:var(--talos-alert-success-icon);color:var(--talos-alert-success-icon)}.talos-alert.appearance-outline.variant-success .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-outline.variant-warning{border-color:var(--talos-alert-warning-icon);color:var(--talos-alert-warning-icon)}.talos-alert.appearance-outline.variant-warning .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-outline.variant-error{border-color:var(--talos-alert-error-icon);color:var(--talos-alert-error-icon)}.talos-alert.appearance-outline.variant-error .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-outline.variant-critical{border-color:var(--talos-alert-critical-border);color:var(--talos-alert-critical-icon)}.talos-alert.appearance-outline.variant-critical .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-critical .talos-alert-icon{color:var(--talos-alert-critical-icon)}.talos-alert.appearance-outline.variant-primary{border-color:var(--talos-alert-primary-icon);color:var(--talos-alert-primary-icon)}.talos-alert.appearance-outline.variant-primary .talos-alert-body{color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-outline.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert.appearance-filled{border:1px solid transparent;color:#fff}.talos-alert.appearance-filled .talos-alert-icon,.talos-alert.appearance-filled .talos-alert-title{color:#fff}.talos-alert.appearance-filled .talos-alert-message{color:#ffffffeb}.talos-alert.appearance-filled.variant-default{background-color:#475569}.talos-alert.appearance-filled.variant-info{background-color:#2563eb}.talos-alert.appearance-filled.variant-success{background-color:#16a34a}.talos-alert.appearance-filled.variant-warning{background-color:#d97706}.talos-alert.appearance-filled.variant-error{background-color:#dc2626}.talos-alert.appearance-filled.variant-critical{background-color:#991b1b;box-shadow:0 0 15px #dc262666}.talos-alert.appearance-filled.variant-primary{background-color:#2563eb}.talos-alert.appearance-filled .talos-alert-action-btn{background-color:#fff3;color:#fff;border-color:#ffffff59}.talos-alert.appearance-filled .talos-alert-action-btn:hover{background-color:#ffffff4d}.talos-alert.appearance-filled .talos-alert-close-btn{color:#fffc}.talos-alert.appearance-filled .talos-alert-close-btn:hover{background-color:#fff3;color:#fff}.talos-alert.appearance-accent,.talos-alert.appearance-left-border{background-color:var(--talos-card-bg, #ffffff);border:1px solid var(--talos-border-color, #e2e8f0);border-left-width:4px;box-shadow:var(--talos-alert-shadow);color:var(--talos-text-color, #0f172a)}.talos-alert.appearance-accent.variant-default,.talos-alert.appearance-left-border.variant-default{border-left-color:var(--talos-alert-default-icon)}.talos-alert.appearance-accent.variant-default .talos-alert-icon,.talos-alert.appearance-left-border.variant-default .talos-alert-icon{color:var(--talos-alert-default-icon)}.talos-alert.appearance-accent.variant-info,.talos-alert.appearance-left-border.variant-info{border-left-color:var(--talos-alert-info-icon)}.talos-alert.appearance-accent.variant-info .talos-alert-icon,.talos-alert.appearance-left-border.variant-info .talos-alert-icon{color:var(--talos-alert-info-icon)}.talos-alert.appearance-accent.variant-success,.talos-alert.appearance-left-border.variant-success{border-left-color:var(--talos-alert-success-icon)}.talos-alert.appearance-accent.variant-success .talos-alert-icon,.talos-alert.appearance-left-border.variant-success .talos-alert-icon{color:var(--talos-alert-success-icon)}.talos-alert.appearance-accent.variant-warning,.talos-alert.appearance-left-border.variant-warning{border-left-color:var(--talos-alert-warning-icon)}.talos-alert.appearance-accent.variant-warning .talos-alert-icon,.talos-alert.appearance-left-border.variant-warning .talos-alert-icon{color:var(--talos-alert-warning-icon)}.talos-alert.appearance-accent.variant-error,.talos-alert.appearance-left-border.variant-error{border-left-color:var(--talos-alert-error-icon)}.talos-alert.appearance-accent.variant-error .talos-alert-icon,.talos-alert.appearance-left-border.variant-error .talos-alert-icon{color:var(--talos-alert-error-icon)}.talos-alert.appearance-accent.variant-critical,.talos-alert.appearance-left-border.variant-critical{border-left-color:#ef4444}.talos-alert.appearance-accent.variant-critical .talos-alert-icon,.talos-alert.appearance-left-border.variant-critical .talos-alert-icon{color:#ef4444}.talos-alert.appearance-accent.variant-primary,.talos-alert.appearance-left-border.variant-primary{border-left-color:var(--talos-alert-primary-icon)}.talos-alert.appearance-accent.variant-primary .talos-alert-icon,.talos-alert.appearance-left-border.variant-primary .talos-alert-icon{color:var(--talos-alert-primary-icon)}.talos-alert-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;line-height:1}.talos-alert-icon svg{display:block}.talos-alert-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.25rem}.talos-alert-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.talos-alert-title{margin:0;font-weight:600;line-height:1.35;color:inherit}.talos-alert-message{line-height:1.45;color:inherit;opacity:.95}.talos-alert-severity-badge{display:inline-flex;align-items:center;padding:.125rem .4375rem;border-radius:9999px;font-size:.6875rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background-color:#00000014;color:inherit}.talos-alert-severity-badge[data-severity=critical]{background-color:#ef4444;color:#fff}.talos-alert-severity-badge[data-severity=error]{background-color:#ef444433;color:#dc2626}.talos-alert-severity-badge[data-severity=warning]{background-color:#f59e0b33;color:#b45309}.talos-alert-severity-badge[data-severity=info]{background-color:#3b82f633;color:#1d4ed8}.talos-alert-severity-badge[data-severity=success]{background-color:#22c55e33;color:#15803d}.talos-alert-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.talos-alert-action-btn{display:inline-flex;align-items:center;justify-content:center;padding:.25rem .625rem;font-size:.75rem;font-weight:600;border-radius:var(--talos-border-radius, .375rem);border:1px solid currentColor;background-color:transparent;color:inherit;cursor:pointer;transition:all .15s ease}.talos-alert-action-btn:hover{background-color:#0000000f}.talos-alert-action-btn:active{transform:scale(.97)}.talos-alert-close-btn{display:inline-flex;align-items:center;justify-content:center;padding:.25rem;border:none;background:transparent;color:inherit;opacity:.7;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:all .15s ease}.talos-alert-close-btn:hover{opacity:1;background-color:#00000014}.talos-alert-close-btn:active{transform:scale(.92)}\n"] }]
|
|
399
|
+
}], propDecorators: { severity: [{ type: i0.Input, args: [{ isSignal: true, alias: "severity", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], showSeverityBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeverityBadge", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], customClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "customClass", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }], action: [{ type: i0.Output, args: ["action"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
400
|
+
|
|
401
|
+
class TalosAlertContainerComponent {
|
|
402
|
+
alertService = inject(TalosAlertService);
|
|
403
|
+
/** Mode of alerts to render from the service ('inline', 'banner', or 'all') */
|
|
404
|
+
type = input('inline', /* @ts-ignore */
|
|
405
|
+
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
406
|
+
targetAlerts = computed(() => {
|
|
407
|
+
const t = this.type();
|
|
408
|
+
if (t === 'banner') {
|
|
409
|
+
return this.alertService.bannerAlerts();
|
|
410
|
+
}
|
|
411
|
+
if (t === 'all') {
|
|
412
|
+
return [...this.alertService.bannerAlerts(), ...this.alertService.alerts()];
|
|
413
|
+
}
|
|
414
|
+
return this.alertService.alerts();
|
|
415
|
+
}, /* @ts-ignore */
|
|
416
|
+
...(ngDevMode ? [{ debugName: "targetAlerts" }] : /* istanbul ignore next */ []));
|
|
417
|
+
onDismiss(id) {
|
|
418
|
+
if (this.type() === 'banner') {
|
|
419
|
+
this.alertService.dismissBanner(id);
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
this.alertService.dismiss(id);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
onAction(item) {
|
|
426
|
+
if (item.onAction) {
|
|
427
|
+
item.onAction();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
431
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosAlertContainerComponent, isStandalone: true, selector: "talos-alert-container", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.talos-alert-container-host": "true" } }, ngImport: i0, template: `
|
|
432
|
+
@if (targetAlerts().length > 0) {
|
|
433
|
+
<div class="talos-alert-container-stack" [class.is-banner]="type() === 'banner'">
|
|
434
|
+
@for (item of targetAlerts(); track item.id) {
|
|
435
|
+
<talos-alert
|
|
436
|
+
[variant]="item.variant || 'default'"
|
|
437
|
+
[severity]="item.severity"
|
|
438
|
+
[appearance]="item.appearance || 'subtle'"
|
|
439
|
+
[size]="item.size || 'md'"
|
|
440
|
+
[title]="item.title"
|
|
441
|
+
[message]="item.message"
|
|
442
|
+
[showIcon]="item.showIcon ?? true"
|
|
443
|
+
[icon]="item.icon"
|
|
444
|
+
[showSeverityBadge]="item.showSeverityBadge ?? false"
|
|
445
|
+
[dismissible]="item.dismissible ?? true"
|
|
446
|
+
[actionLabel]="item.actionLabel"
|
|
447
|
+
[bordered]="item.bordered ?? false"
|
|
448
|
+
[customClass]="item.customClass || ''"
|
|
449
|
+
(dismiss)="onDismiss(item.id)"
|
|
450
|
+
(action)="onAction(item)"
|
|
451
|
+
/>
|
|
452
|
+
}
|
|
453
|
+
</div>
|
|
454
|
+
}
|
|
455
|
+
`, isInline: true, styles: [":host{display:block;width:100%}.talos-alert-container-stack{display:flex;flex-direction:column;gap:.75rem;width:100%}.talos-alert-container-stack.is-banner{gap:.5rem}.talos-alert-container-stack.is-banner talos-alert{border-radius:0;box-shadow:0 2px 8px #0000001a}\n"], dependencies: [{ kind: "component", type: TalosAlertComponent, selector: "talos-alert", inputs: ["severity", "variant", "appearance", "size", "title", "message", "showIcon", "icon", "showSeverityBadge", "dismissible", "actionLabel", "bordered", "customClass"], outputs: ["dismiss", "action", "closed"] }] });
|
|
456
|
+
}
|
|
457
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertContainerComponent, decorators: [{
|
|
458
|
+
type: Component,
|
|
459
|
+
args: [{ selector: 'talos-alert-container', imports: [TalosAlertComponent], template: `
|
|
460
|
+
@if (targetAlerts().length > 0) {
|
|
461
|
+
<div class="talos-alert-container-stack" [class.is-banner]="type() === 'banner'">
|
|
462
|
+
@for (item of targetAlerts(); track item.id) {
|
|
463
|
+
<talos-alert
|
|
464
|
+
[variant]="item.variant || 'default'"
|
|
465
|
+
[severity]="item.severity"
|
|
466
|
+
[appearance]="item.appearance || 'subtle'"
|
|
467
|
+
[size]="item.size || 'md'"
|
|
468
|
+
[title]="item.title"
|
|
469
|
+
[message]="item.message"
|
|
470
|
+
[showIcon]="item.showIcon ?? true"
|
|
471
|
+
[icon]="item.icon"
|
|
472
|
+
[showSeverityBadge]="item.showSeverityBadge ?? false"
|
|
473
|
+
[dismissible]="item.dismissible ?? true"
|
|
474
|
+
[actionLabel]="item.actionLabel"
|
|
475
|
+
[bordered]="item.bordered ?? false"
|
|
476
|
+
[customClass]="item.customClass || ''"
|
|
477
|
+
(dismiss)="onDismiss(item.id)"
|
|
478
|
+
(action)="onAction(item)"
|
|
479
|
+
/>
|
|
480
|
+
}
|
|
481
|
+
</div>
|
|
482
|
+
}
|
|
483
|
+
`, host: {
|
|
484
|
+
'[class.talos-alert-container-host]': 'true'
|
|
485
|
+
}, styles: [":host{display:block;width:100%}.talos-alert-container-stack{display:flex;flex-direction:column;gap:.75rem;width:100%}.talos-alert-container-stack.is-banner{gap:.5rem}.talos-alert-container-stack.is-banner talos-alert{border-radius:0;box-shadow:0 2px 8px #0000001a}\n"] }]
|
|
486
|
+
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }] } });
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Convenience NgModule wrapping standalone alert components and directives.
|
|
490
|
+
*/
|
|
491
|
+
class TalosAlertModule {
|
|
492
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
493
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertModule, imports: [TalosAlertComponent,
|
|
494
|
+
TalosAlertContainerComponent,
|
|
495
|
+
TalosAlertTitleDirective,
|
|
496
|
+
TalosAlertDescriptionDirective,
|
|
497
|
+
TalosAlertActionsDirective,
|
|
498
|
+
TalosAlertIconDirective], exports: [TalosAlertComponent,
|
|
499
|
+
TalosAlertContainerComponent,
|
|
500
|
+
TalosAlertTitleDirective,
|
|
501
|
+
TalosAlertDescriptionDirective,
|
|
502
|
+
TalosAlertActionsDirective,
|
|
503
|
+
TalosAlertIconDirective] });
|
|
504
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertModule, imports: [TalosAlertComponent,
|
|
505
|
+
TalosAlertContainerComponent] });
|
|
506
|
+
}
|
|
507
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosAlertModule, decorators: [{
|
|
508
|
+
type: NgModule,
|
|
509
|
+
args: [{
|
|
510
|
+
imports: [
|
|
511
|
+
TalosAlertComponent,
|
|
512
|
+
TalosAlertContainerComponent,
|
|
513
|
+
TalosAlertTitleDirective,
|
|
514
|
+
TalosAlertDescriptionDirective,
|
|
515
|
+
TalosAlertActionsDirective,
|
|
516
|
+
TalosAlertIconDirective
|
|
517
|
+
],
|
|
518
|
+
exports: [
|
|
519
|
+
TalosAlertComponent,
|
|
520
|
+
TalosAlertContainerComponent,
|
|
521
|
+
TalosAlertTitleDirective,
|
|
522
|
+
TalosAlertDescriptionDirective,
|
|
523
|
+
TalosAlertActionsDirective,
|
|
524
|
+
TalosAlertIconDirective
|
|
525
|
+
]
|
|
526
|
+
}]
|
|
527
|
+
}] });
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Generated bundle index. Do not edit.
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
export { TalosAlertActionsDirective, TalosAlertComponent, TalosAlertContainerComponent, TalosAlertDescriptionDirective, TalosAlertIconDirective, TalosAlertModule, TalosAlertService, TalosAlertTitleDirective };
|
|
534
|
+
//# sourceMappingURL=weeehaoooz-talos-ui-feedback-alert.mjs.map
|