@i-cell/ids-angular 0.0.0-watch
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/README.md +24 -0
- package/accordion/index.d.ts +81 -0
- package/accordion/package.json +3 -0
- package/avatar/index.d.ts +66 -0
- package/avatar/package.json +3 -0
- package/badge/index.d.ts +61 -0
- package/badge/package.json +3 -0
- package/breadcrumb/index.d.ts +67 -0
- package/breadcrumb/package.json +3 -0
- package/button/index.d.ts +81 -0
- package/button/package.json +3 -0
- package/card/index.d.ts +91 -0
- package/card/package.json +3 -0
- package/checkbox/index.d.ts +137 -0
- package/checkbox/package.json +3 -0
- package/chip/index.d.ts +82 -0
- package/chip/package.json +3 -0
- package/core/index.d.ts +168 -0
- package/core/package.json +3 -0
- package/datepicker/index.d.ts +112 -0
- package/datepicker/package.json +3 -0
- package/dialog/index.d.ts +72 -0
- package/dialog/package.json +3 -0
- package/divider/index.d.ts +45 -0
- package/divider/package.json +3 -0
- package/fesm2022/i-cell-ids-angular-accordion.mjs +223 -0
- package/fesm2022/i-cell-ids-angular-accordion.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-avatar.mjs +125 -0
- package/fesm2022/i-cell-ids-angular-avatar.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-badge.mjs +172 -0
- package/fesm2022/i-cell-ids-angular-badge.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-breadcrumb.mjs +313 -0
- package/fesm2022/i-cell-ids-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-button.mjs +149 -0
- package/fesm2022/i-cell-ids-angular-button.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-card.mjs +222 -0
- package/fesm2022/i-cell-ids-angular-card.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-checkbox.mjs +350 -0
- package/fesm2022/i-cell-ids-angular-checkbox.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-chip.mjs +166 -0
- package/fesm2022/i-cell-ids-angular-chip.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-core.mjs +409 -0
- package/fesm2022/i-cell-ids-angular-core.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-datepicker.mjs +860 -0
- package/fesm2022/i-cell-ids-angular-datepicker.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-dialog.mjs +183 -0
- package/fesm2022/i-cell-ids-angular-dialog.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-divider.mjs +76 -0
- package/fesm2022/i-cell-ids-angular-divider.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-forms.mjs +972 -0
- package/fesm2022/i-cell-ids-angular-forms.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-icon-button.mjs +120 -0
- package/fesm2022/i-cell-ids-angular-icon-button.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-icon.mjs +158 -0
- package/fesm2022/i-cell-ids-angular-icon.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-menu.mjs +154 -0
- package/fesm2022/i-cell-ids-angular-menu.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-notification.mjs +167 -0
- package/fesm2022/i-cell-ids-angular-notification.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-overlay-panel.mjs +72 -0
- package/fesm2022/i-cell-ids-angular-overlay-panel.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-paginator.mjs +319 -0
- package/fesm2022/i-cell-ids-angular-paginator.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-radio.mjs +312 -0
- package/fesm2022/i-cell-ids-angular-radio.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-segmented-control-toggle.mjs +264 -0
- package/fesm2022/i-cell-ids-angular-segmented-control-toggle.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-segmented-control.mjs +283 -0
- package/fesm2022/i-cell-ids-angular-segmented-control.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-select.mjs +549 -0
- package/fesm2022/i-cell-ids-angular-select.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-side-nav.mjs +375 -0
- package/fesm2022/i-cell-ids-angular-side-nav.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-side-sheet.mjs +179 -0
- package/fesm2022/i-cell-ids-angular-side-sheet.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-snackbar.mjs +440 -0
- package/fesm2022/i-cell-ids-angular-snackbar.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-spinner.mjs +67 -0
- package/fesm2022/i-cell-ids-angular-spinner.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-switch.mjs +181 -0
- package/fesm2022/i-cell-ids-angular-switch.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-tab.mjs +142 -0
- package/fesm2022/i-cell-ids-angular-tab.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-table.mjs +663 -0
- package/fesm2022/i-cell-ids-angular-table.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-tag.mjs +116 -0
- package/fesm2022/i-cell-ids-angular-tag.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular-tooltip.mjs +586 -0
- package/fesm2022/i-cell-ids-angular-tooltip.mjs.map +1 -0
- package/fesm2022/i-cell-ids-angular.mjs +9 -0
- package/fesm2022/i-cell-ids-angular.mjs.map +1 -0
- package/forms/index.d.ts +470 -0
- package/forms/package.json +3 -0
- package/icon/index.d.ts +69 -0
- package/icon/package.json +3 -0
- package/icon-button/index.d.ts +68 -0
- package/icon-button/package.json +3 -0
- package/index.d.ts +2 -0
- package/menu/index.d.ts +68 -0
- package/menu/package.json +3 -0
- package/notification/index.d.ts +68 -0
- package/notification/package.json +3 -0
- package/overlay-panel/index.d.ts +41 -0
- package/overlay-panel/package.json +3 -0
- package/package.json +180 -0
- package/paginator/index.d.ts +122 -0
- package/paginator/package.json +3 -0
- package/radio/index.d.ts +95 -0
- package/radio/package.json +3 -0
- package/segmented-control/index.d.ts +98 -0
- package/segmented-control/package.json +3 -0
- package/segmented-control-toggle/index.d.ts +103 -0
- package/segmented-control-toggle/package.json +3 -0
- package/select/index.d.ts +103 -0
- package/select/package.json +3 -0
- package/side-nav/index.d.ts +107 -0
- package/side-nav/package.json +3 -0
- package/side-sheet/index.d.ts +84 -0
- package/side-sheet/package.json +3 -0
- package/snackbar/index.d.ts +149 -0
- package/snackbar/package.json +3 -0
- package/spinner/index.d.ts +41 -0
- package/spinner/package.json +3 -0
- package/switch/index.d.ts +89 -0
- package/switch/package.json +3 -0
- package/tab/index.d.ts +78 -0
- package/tab/package.json +3 -0
- package/table/index.d.ts +393 -0
- package/table/package.json +3 -0
- package/tag/index.d.ts +70 -0
- package/tag/package.json +3 -0
- package/tooltip/index.d.ts +96 -0
- package/tooltip/package.json +3 -0
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, input, output, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, signal, Injectable } from '@angular/core';
|
|
3
|
+
import { IdsSize, ComponentBase, coerceBooleanAttribute, ComponentBaseWithDefaults } from '@i-cell/ids-angular/core';
|
|
4
|
+
import { trigger, transition, style, animate } from '@angular/animations';
|
|
5
|
+
import * as i1 from '@angular/cdk/a11y';
|
|
6
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
7
|
+
import { IdsButtonAppearance, IdsButtonVariant, IdsButtonComponent } from '@i-cell/ids-angular/button';
|
|
8
|
+
import { IdsIconComponent } from '@i-cell/ids-angular/icon';
|
|
9
|
+
import { IdsIconButtonAppearance, IdsIconButtonComponent } from '@i-cell/ids-angular/icon-button';
|
|
10
|
+
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
|
|
11
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
12
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
13
|
+
import { filter } from 'rxjs';
|
|
14
|
+
|
|
15
|
+
const IdsSnackbarPosition = {
|
|
16
|
+
BOTTOM_CENTER: 'bottom-center',
|
|
17
|
+
BOTTOM_LEFT: 'bottom-left',
|
|
18
|
+
BOTTOM_RIGHT: 'bottom-right',
|
|
19
|
+
TOP_CENTER: 'top-center',
|
|
20
|
+
TOP_LEFT: 'top-left',
|
|
21
|
+
TOP_RIGHT: 'top-right',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const IdsSnackbarVariant = {
|
|
25
|
+
DARK: 'dark',
|
|
26
|
+
INFO: 'info',
|
|
27
|
+
SUCCESS: 'success',
|
|
28
|
+
WARNING: 'warning',
|
|
29
|
+
ERROR: 'error',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const READ_SPEED_PER_CHAR = 50;
|
|
33
|
+
const MIN_DURATION = 2_000;
|
|
34
|
+
const READ_SPEED_PER_ACTION = 2_000;
|
|
35
|
+
const IDS_SNACKBAR_DEFAULT_CONFIG = new InjectionToken('IDS_SNACKBAR_DEFAULT_CONFIG', {
|
|
36
|
+
providedIn: 'root',
|
|
37
|
+
factory: IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY,
|
|
38
|
+
});
|
|
39
|
+
function IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY() {
|
|
40
|
+
return {
|
|
41
|
+
size: IdsSize.COMFORTABLE,
|
|
42
|
+
variant: IdsSnackbarVariant.DARK,
|
|
43
|
+
position: IdsSnackbarPosition.BOTTOM_CENTER,
|
|
44
|
+
newestAtStartPosition: false,
|
|
45
|
+
viewportMargin: 16,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const snackbarAnimation = trigger('snackbarAnimation', [
|
|
50
|
+
transition(':enter', [
|
|
51
|
+
style({
|
|
52
|
+
opacity: 0,
|
|
53
|
+
transform: 'translate({{ translateX }}px, {{ translateY }}px)',
|
|
54
|
+
height: '{{ height }}',
|
|
55
|
+
}),
|
|
56
|
+
animate('0.7s cubic-bezier(0.250, 0.460, 0.450, 0.940)', style({
|
|
57
|
+
opacity: 1,
|
|
58
|
+
transform: 'translate(0px, 0px)',
|
|
59
|
+
height: '*',
|
|
60
|
+
})),
|
|
61
|
+
], {
|
|
62
|
+
params: {
|
|
63
|
+
translateY: 0,
|
|
64
|
+
translateX: 0,
|
|
65
|
+
height: '0',
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
transition(':leave', [
|
|
69
|
+
animate('1s ease-out', style({
|
|
70
|
+
opacity: '0',
|
|
71
|
+
transform: 'translate({{ translateX }}px, {{ translateY }}px)',
|
|
72
|
+
height: '{{ height }}',
|
|
73
|
+
})),
|
|
74
|
+
], {
|
|
75
|
+
params: {
|
|
76
|
+
translateY: 0,
|
|
77
|
+
translateX: 0,
|
|
78
|
+
height: '0',
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
]);
|
|
82
|
+
|
|
83
|
+
class IdsSnackbarComponent extends ComponentBase {
|
|
84
|
+
constructor() {
|
|
85
|
+
super(...arguments);
|
|
86
|
+
this._size = IdsSize;
|
|
87
|
+
this._iconButtonAppearance = IdsIconButtonAppearance;
|
|
88
|
+
this._buttonAppearance = IdsButtonAppearance;
|
|
89
|
+
this.message = input.required(...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
90
|
+
this.variant = input(...(ngDevMode ? [undefined, { debugName: "variant" }] : []));
|
|
91
|
+
this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
|
|
92
|
+
this.actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
|
|
93
|
+
this.allowDismiss = input(false, ...(ngDevMode ? [{ debugName: "allowDismiss", transform: coerceBooleanAttribute }] : [{ transform: coerceBooleanAttribute }]));
|
|
94
|
+
this.closeButtonLabel = input(...(ngDevMode ? [undefined, { debugName: "closeButtonLabel" }] : []));
|
|
95
|
+
this.autoClose = input(false, ...(ngDevMode ? [{ debugName: "autoClose", transform: coerceBooleanAttribute }] : [{ transform: coerceBooleanAttribute }]));
|
|
96
|
+
this.urgent = input(false, ...(ngDevMode ? [{ debugName: "urgent", transform: coerceBooleanAttribute }] : [{ transform: coerceBooleanAttribute }]));
|
|
97
|
+
this.closed = output();
|
|
98
|
+
this._canAutoClose = computed(() => !this.allowDismiss() && this.autoClose(), ...(ngDevMode ? [{ debugName: "_canAutoClose" }] : []));
|
|
99
|
+
this._duration = computed(() => {
|
|
100
|
+
const actionReadDuration = (this.actions()?.length ?? 0) * READ_SPEED_PER_ACTION;
|
|
101
|
+
return Math.max(this.message().length * READ_SPEED_PER_CHAR + actionReadDuration, MIN_DURATION);
|
|
102
|
+
}, ...(ngDevMode ? [{ debugName: "_duration" }] : []));
|
|
103
|
+
this._hostClasses = computed(() => this._getHostClasses([
|
|
104
|
+
this.variant(),
|
|
105
|
+
this.allowDismiss() && !this.closeButtonLabel() ? 'width-close-x-button' : null,
|
|
106
|
+
]), ...(ngDevMode ? [{ debugName: "_hostClasses" }] : []));
|
|
107
|
+
this._role = computed(() => (this.urgent() ? 'alert' : 'status'), ...(ngDevMode ? [{ debugName: "_role" }] : []));
|
|
108
|
+
this._buttonVariant = computed(() => (this.variant() === IdsSnackbarVariant.DARK ? IdsButtonVariant.LIGHT : IdsButtonVariant.SURFACE), ...(ngDevMode ? [{ debugName: "_buttonVariant" }] : []));
|
|
109
|
+
this._defaultIcon = computed(() => {
|
|
110
|
+
switch (this.variant()) {
|
|
111
|
+
case IdsSnackbarVariant.DARK:
|
|
112
|
+
return null;
|
|
113
|
+
case IdsSnackbarVariant.INFO:
|
|
114
|
+
return 'exclamation-circle';
|
|
115
|
+
case IdsSnackbarVariant.SUCCESS:
|
|
116
|
+
return 'check-circle';
|
|
117
|
+
case IdsSnackbarVariant.WARNING:
|
|
118
|
+
return 'exclamation-triangle';
|
|
119
|
+
case IdsSnackbarVariant.ERROR:
|
|
120
|
+
return 'exclamation-circle';
|
|
121
|
+
default:
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}, ...(ngDevMode ? [{ debugName: "_defaultIcon" }] : []));
|
|
125
|
+
this._safeIcon = computed(() => this.icon() ?? this._defaultIcon(), ...(ngDevMode ? [{ debugName: "_safeIcon" }] : []));
|
|
126
|
+
}
|
|
127
|
+
get _hostName() {
|
|
128
|
+
return 'snackbar';
|
|
129
|
+
}
|
|
130
|
+
_onMouseEnter() {
|
|
131
|
+
this._stopTimer();
|
|
132
|
+
}
|
|
133
|
+
_onMouseLeave() {
|
|
134
|
+
this._startTimer();
|
|
135
|
+
}
|
|
136
|
+
_startTimer() {
|
|
137
|
+
if (this._canAutoClose()) {
|
|
138
|
+
this._timer = setTimeout(() => {
|
|
139
|
+
this.close();
|
|
140
|
+
}, this._duration());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
_stopTimer() {
|
|
144
|
+
if (this._canAutoClose()) {
|
|
145
|
+
clearTimeout(this._timer);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
ngAfterViewInit() {
|
|
149
|
+
this._startTimer();
|
|
150
|
+
}
|
|
151
|
+
close() {
|
|
152
|
+
this._stopTimer();
|
|
153
|
+
this.closed.emit();
|
|
154
|
+
}
|
|
155
|
+
callAction(action) {
|
|
156
|
+
action();
|
|
157
|
+
this.close();
|
|
158
|
+
}
|
|
159
|
+
ngOnDestroy() {
|
|
160
|
+
clearTimeout(this._timer);
|
|
161
|
+
}
|
|
162
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: IdsSnackbarComponent, isStandalone: true, selector: "ids-snackbar", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, allowDismiss: { classPropertyName: "allowDismiss", publicName: "allowDismiss", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, autoClose: { classPropertyName: "autoClose", publicName: "autoClose", isSignal: true, isRequired: false, transformFunction: null }, urgent: { classPropertyName: "urgent", publicName: "urgent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { listeners: { "mouseenter": "_onMouseEnter()", "mouseleave": "_onMouseLeave()" }, properties: { "role": "_role()" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ids-snackbar__content-wrapper\" cdkTrapFocus cdkTrapFocusAutoCapture=\"true\">\n @let safeIcon = _safeIcon();\n @if (safeIcon) {\n <div class=\"ids-snackbar__leading-element\">\n <ids-icon [fontIcon]=\"safeIcon\" />\n </div>\n }\n\n <div class=\"ids-snackbar__message-action-container\">\n <div class=\"ids-snackbar__message\">{{ message() }}</div>\n <div class=\"ids-snackbar__action\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"callAction(action.action)\"\n >\n {{ action.label }}\n </button>\n }\n @let safeCloseButtonLabel = allowDismiss() && closeButtonLabel();\n @if (safeCloseButtonLabel) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n {{ safeCloseButtonLabel }}\n </button>\n }\n </div>\n </div>\n\n @if (allowDismiss() && !closeButtonLabel()) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsIconButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_iconButtonAppearance.STANDARD\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n <ids-icon aria-hidden=\"true\" alt=\"\" fontIcon=\"close\" />\n </button>\n }\n</div>\n", dependencies: [{ kind: "component", type: IdsIconButtonComponent, selector: "button[idsIconButton], a[idsIconButton]", inputs: ["appearance", "size", "variant", "disabled"] }, { kind: "component", type: IdsIconComponent, selector: "ids-icon", inputs: ["size", "sizeCollection", "variant", "fontIcon", "svgIcon", "aria-hidden"] }, { kind: "component", type: IdsButtonComponent, selector: "button[idsButton], a[idsButton]", inputs: ["appearance", "size", "variant", "disabled"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
164
|
+
}
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarComponent, decorators: [{
|
|
166
|
+
type: Component,
|
|
167
|
+
args: [{ selector: 'ids-snackbar', imports: [
|
|
168
|
+
IdsIconButtonComponent,
|
|
169
|
+
IdsIconComponent,
|
|
170
|
+
IdsButtonComponent,
|
|
171
|
+
A11yModule,
|
|
172
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
173
|
+
'[role]': '_role()',
|
|
174
|
+
'(mouseenter)': '_onMouseEnter()',
|
|
175
|
+
'(mouseleave)': '_onMouseLeave()',
|
|
176
|
+
}, template: "<div class=\"ids-snackbar__content-wrapper\" cdkTrapFocus cdkTrapFocusAutoCapture=\"true\">\n @let safeIcon = _safeIcon();\n @if (safeIcon) {\n <div class=\"ids-snackbar__leading-element\">\n <ids-icon [fontIcon]=\"safeIcon\" />\n </div>\n }\n\n <div class=\"ids-snackbar__message-action-container\">\n <div class=\"ids-snackbar__message\">{{ message() }}</div>\n <div class=\"ids-snackbar__action\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"callAction(action.action)\"\n >\n {{ action.label }}\n </button>\n }\n @let safeCloseButtonLabel = allowDismiss() && closeButtonLabel();\n @if (safeCloseButtonLabel) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n {{ safeCloseButtonLabel }}\n </button>\n }\n </div>\n </div>\n\n @if (allowDismiss() && !closeButtonLabel()) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsIconButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_iconButtonAppearance.STANDARD\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n <ids-icon aria-hidden=\"true\" alt=\"\" fontIcon=\"close\" />\n </button>\n }\n</div>\n" }]
|
|
177
|
+
}] });
|
|
178
|
+
|
|
179
|
+
const defaultConfig$1 = IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY();
|
|
180
|
+
class IdsSnackbarGroupComponent extends ComponentBaseWithDefaults {
|
|
181
|
+
constructor() {
|
|
182
|
+
super(...arguments);
|
|
183
|
+
this._snackbarService = inject(IdsSnackbarService);
|
|
184
|
+
this._defaultConfig = this._getDefaultConfig(defaultConfig$1, IDS_SNACKBAR_DEFAULT_CONFIG);
|
|
185
|
+
this.position = signal(this._defaultConfig.position, ...(ngDevMode ? [{ debugName: "position" }] : []));
|
|
186
|
+
this.snackbars = this._snackbarService.snackbars;
|
|
187
|
+
this._hostClasses = computed(() => this._getHostClasses([
|
|
188
|
+
this._defaultConfig.size,
|
|
189
|
+
[
|
|
190
|
+
'position',
|
|
191
|
+
this.position(),
|
|
192
|
+
],
|
|
193
|
+
this._defaultConfig.newestAtStartPosition ? 'newest-at-start' : null,
|
|
194
|
+
]), ...(ngDevMode ? [{ debugName: "_hostClasses" }] : []));
|
|
195
|
+
this._animationParams = computed(() => {
|
|
196
|
+
switch (this.position()) {
|
|
197
|
+
case IdsSnackbarPosition.BOTTOM_CENTER:
|
|
198
|
+
return {
|
|
199
|
+
translateY: 100,
|
|
200
|
+
translateX: 0,
|
|
201
|
+
height: '0',
|
|
202
|
+
};
|
|
203
|
+
case IdsSnackbarPosition.TOP_CENTER:
|
|
204
|
+
return {
|
|
205
|
+
translateY: -100,
|
|
206
|
+
translateX: 0,
|
|
207
|
+
height: '0',
|
|
208
|
+
};
|
|
209
|
+
case IdsSnackbarPosition.TOP_LEFT:
|
|
210
|
+
case IdsSnackbarPosition.BOTTOM_LEFT:
|
|
211
|
+
return {
|
|
212
|
+
translateY: 0,
|
|
213
|
+
translateX: -100,
|
|
214
|
+
height: '*',
|
|
215
|
+
};
|
|
216
|
+
case IdsSnackbarPosition.TOP_RIGHT:
|
|
217
|
+
case IdsSnackbarPosition.BOTTOM_RIGHT:
|
|
218
|
+
return {
|
|
219
|
+
translateY: 0,
|
|
220
|
+
translateX: 100,
|
|
221
|
+
height: '*',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}, ...(ngDevMode ? [{ debugName: "_animationParams" }] : []));
|
|
225
|
+
}
|
|
226
|
+
get _hostName() {
|
|
227
|
+
return 'snackbar-group';
|
|
228
|
+
}
|
|
229
|
+
closeSnackbar(id) {
|
|
230
|
+
this._snackbarService.remove(id);
|
|
231
|
+
}
|
|
232
|
+
_onAnimateStart() {
|
|
233
|
+
this._updatePosition();
|
|
234
|
+
}
|
|
235
|
+
_onAnimateDone() {
|
|
236
|
+
this._updatePosition();
|
|
237
|
+
if (this._snackbarService.snackbars().length === 0) {
|
|
238
|
+
this._snackbarService.clear();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
_updatePosition() {
|
|
242
|
+
this._snackbarService.update();
|
|
243
|
+
}
|
|
244
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
245
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: IdsSnackbarGroupComponent, isStandalone: true, selector: "ids-snackbar-group", usesInheritance: true, ngImport: i0, template: "@for (snackbar of snackbars(); track snackbar.id) {\n <ids-snackbar\n [@snackbarAnimation]=\"{\n value: 'open',\n params: _animationParams(),\n }\"\n [message]=\"snackbar.message\"\n [variant]=\"snackbar.variant\"\n [icon]=\"snackbar.icon\"\n [actions]=\"snackbar.actions\"\n [allowDismiss]=\"snackbar.allowDismiss\"\n [closeButtonLabel]=\"snackbar.closeButtonLabel\"\n [autoClose]=\"snackbar.autoClose\"\n [urgent]=\"snackbar.urgent\"\n (@snackbarAnimation.start)=\"_onAnimateStart()\"\n (@snackbarAnimation.done)=\"_onAnimateDone()\"\n (closed)=\"closeSnackbar(snackbar.id)\"\n />\n}\n", dependencies: [{ kind: "component", type: IdsSnackbarComponent, selector: "ids-snackbar", inputs: ["message", "variant", "icon", "actions", "allowDismiss", "closeButtonLabel", "autoClose", "urgent"], outputs: ["closed"] }], animations: [snackbarAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
246
|
+
}
|
|
247
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarGroupComponent, decorators: [{
|
|
248
|
+
type: Component,
|
|
249
|
+
args: [{ selector: 'ids-snackbar-group', imports: [IdsSnackbarComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [snackbarAnimation], template: "@for (snackbar of snackbars(); track snackbar.id) {\n <ids-snackbar\n [@snackbarAnimation]=\"{\n value: 'open',\n params: _animationParams(),\n }\"\n [message]=\"snackbar.message\"\n [variant]=\"snackbar.variant\"\n [icon]=\"snackbar.icon\"\n [actions]=\"snackbar.actions\"\n [allowDismiss]=\"snackbar.allowDismiss\"\n [closeButtonLabel]=\"snackbar.closeButtonLabel\"\n [autoClose]=\"snackbar.autoClose\"\n [urgent]=\"snackbar.urgent\"\n (@snackbarAnimation.start)=\"_onAnimateStart()\"\n (@snackbarAnimation.done)=\"_onAnimateDone()\"\n (closed)=\"closeSnackbar(snackbar.id)\"\n />\n}\n" }]
|
|
250
|
+
}] });
|
|
251
|
+
|
|
252
|
+
function getSnackbarFlexibleConnectedPositionStrategy(connectedTo, snackbarPosition, margin) {
|
|
253
|
+
switch (snackbarPosition) {
|
|
254
|
+
case IdsSnackbarPosition.BOTTOM_CENTER:
|
|
255
|
+
return connectedTo.withPositions([
|
|
256
|
+
{
|
|
257
|
+
originX: 'center',
|
|
258
|
+
originY: 'bottom',
|
|
259
|
+
overlayX: 'center',
|
|
260
|
+
overlayY: 'bottom',
|
|
261
|
+
offsetY: 0 - margin,
|
|
262
|
+
},
|
|
263
|
+
]);
|
|
264
|
+
case IdsSnackbarPosition.TOP_CENTER:
|
|
265
|
+
return connectedTo.withPositions([
|
|
266
|
+
{
|
|
267
|
+
originX: 'center',
|
|
268
|
+
originY: 'top',
|
|
269
|
+
overlayX: 'center',
|
|
270
|
+
overlayY: 'top',
|
|
271
|
+
offsetY: margin,
|
|
272
|
+
},
|
|
273
|
+
]);
|
|
274
|
+
case IdsSnackbarPosition.TOP_LEFT:
|
|
275
|
+
return connectedTo.withPositions([
|
|
276
|
+
{
|
|
277
|
+
originX: 'start',
|
|
278
|
+
originY: 'top',
|
|
279
|
+
overlayX: 'start',
|
|
280
|
+
overlayY: 'top',
|
|
281
|
+
offsetX: margin,
|
|
282
|
+
offsetY: margin,
|
|
283
|
+
},
|
|
284
|
+
]);
|
|
285
|
+
case IdsSnackbarPosition.TOP_RIGHT:
|
|
286
|
+
return connectedTo.withPositions([
|
|
287
|
+
{
|
|
288
|
+
originX: 'end',
|
|
289
|
+
originY: 'top',
|
|
290
|
+
overlayX: 'end',
|
|
291
|
+
overlayY: 'top',
|
|
292
|
+
offsetX: 0 - margin,
|
|
293
|
+
offsetY: margin,
|
|
294
|
+
},
|
|
295
|
+
]);
|
|
296
|
+
case IdsSnackbarPosition.BOTTOM_LEFT:
|
|
297
|
+
return connectedTo.withPositions([
|
|
298
|
+
{
|
|
299
|
+
originX: 'start',
|
|
300
|
+
originY: 'bottom',
|
|
301
|
+
overlayX: 'start',
|
|
302
|
+
overlayY: 'bottom',
|
|
303
|
+
offsetX: margin,
|
|
304
|
+
offsetY: 0 - margin,
|
|
305
|
+
},
|
|
306
|
+
]);
|
|
307
|
+
case IdsSnackbarPosition.BOTTOM_RIGHT:
|
|
308
|
+
return connectedTo.withPositions([
|
|
309
|
+
{
|
|
310
|
+
originX: 'end',
|
|
311
|
+
originY: 'bottom',
|
|
312
|
+
overlayX: 'end',
|
|
313
|
+
overlayY: 'bottom',
|
|
314
|
+
offsetX: 0 - margin,
|
|
315
|
+
offsetY: 0 - margin,
|
|
316
|
+
},
|
|
317
|
+
]);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
function getSnackbarGlobalPositionStrategy(globalPosition, position, margin = 0) {
|
|
321
|
+
const marginPx = `${margin}px`;
|
|
322
|
+
switch (position) {
|
|
323
|
+
case IdsSnackbarPosition.BOTTOM_CENTER:
|
|
324
|
+
return globalPosition.bottom(marginPx).centerHorizontally();
|
|
325
|
+
case IdsSnackbarPosition.TOP_CENTER:
|
|
326
|
+
return globalPosition.top(marginPx).centerHorizontally();
|
|
327
|
+
case IdsSnackbarPosition.TOP_LEFT:
|
|
328
|
+
return globalPosition.top(marginPx).left(marginPx);
|
|
329
|
+
case IdsSnackbarPosition.TOP_RIGHT:
|
|
330
|
+
return globalPosition.top(marginPx).right(marginPx);
|
|
331
|
+
case IdsSnackbarPosition.BOTTOM_LEFT:
|
|
332
|
+
return globalPosition.bottom(marginPx).left(marginPx);
|
|
333
|
+
case IdsSnackbarPosition.BOTTOM_RIGHT:
|
|
334
|
+
return globalPosition.bottom(marginPx).right(marginPx);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const defaultConfig = IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY();
|
|
339
|
+
class IdsSnackbarService {
|
|
340
|
+
constructor() {
|
|
341
|
+
this._router = inject(Router);
|
|
342
|
+
this._overlay = inject(Overlay);
|
|
343
|
+
this._defaultConfig = {
|
|
344
|
+
...defaultConfig,
|
|
345
|
+
...inject(IDS_SNACKBAR_DEFAULT_CONFIG, { optional: true }),
|
|
346
|
+
};
|
|
347
|
+
this._snackbarGroupPortal = new ComponentPortal(IdsSnackbarGroupComponent, null);
|
|
348
|
+
this._snackbarNextUniqueId = 0;
|
|
349
|
+
this._snackbars = signal([], ...(ngDevMode ? [{ debugName: "_snackbars" }] : []));
|
|
350
|
+
this.snackbars = this._snackbars.asReadonly();
|
|
351
|
+
this._router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {
|
|
352
|
+
this.clear();
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
_attachGroup() {
|
|
356
|
+
if (!this._overlayRef?.hasAttached()) {
|
|
357
|
+
this._overlayRef = this._createOverlay();
|
|
358
|
+
this._overlayRef.attach(this._snackbarGroupPortal);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
_createOverlay() {
|
|
362
|
+
const overlayConfig = new OverlayConfig({
|
|
363
|
+
positionStrategy: this._getPositionStrategy(),
|
|
364
|
+
hasBackdrop: false,
|
|
365
|
+
scrollStrategy: this._overlay.scrollStrategies.noop(),
|
|
366
|
+
});
|
|
367
|
+
return this._overlay.create(overlayConfig);
|
|
368
|
+
}
|
|
369
|
+
_getPositionStrategy() {
|
|
370
|
+
const position = this._overlay.position();
|
|
371
|
+
const margin = this._defaultConfig.viewportMargin;
|
|
372
|
+
if (this._viewContainerRef) {
|
|
373
|
+
const connectedTo = position
|
|
374
|
+
.flexibleConnectedTo(this._viewContainerRef.element);
|
|
375
|
+
return getSnackbarFlexibleConnectedPositionStrategy(connectedTo, this._defaultConfig.position, margin);
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
const globalPosition = position.global();
|
|
379
|
+
return getSnackbarGlobalPositionStrategy(globalPosition, this._defaultConfig.position, margin);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
_detachGroup() {
|
|
383
|
+
this._overlayRef?.detach();
|
|
384
|
+
this._overlayRef?.dispose();
|
|
385
|
+
}
|
|
386
|
+
add(snackbar) {
|
|
387
|
+
if (this.snackbars().length === 0) {
|
|
388
|
+
this._attachGroup();
|
|
389
|
+
}
|
|
390
|
+
this._snackbars.update((snackbars) => {
|
|
391
|
+
const id = ++this._snackbarNextUniqueId;
|
|
392
|
+
return [
|
|
393
|
+
...snackbars,
|
|
394
|
+
{
|
|
395
|
+
id,
|
|
396
|
+
...snackbar,
|
|
397
|
+
},
|
|
398
|
+
];
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
remove(id) {
|
|
402
|
+
this._snackbars.update((snackbars) => {
|
|
403
|
+
const index = snackbars.findIndex((snackbar) => snackbar.id === id);
|
|
404
|
+
if (index !== -1) {
|
|
405
|
+
const restSnackbars = [...snackbars];
|
|
406
|
+
restSnackbars.splice(index, 1);
|
|
407
|
+
return restSnackbars;
|
|
408
|
+
}
|
|
409
|
+
return snackbars;
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
clear() {
|
|
413
|
+
this._snackbars.set([]);
|
|
414
|
+
this._detachGroup();
|
|
415
|
+
}
|
|
416
|
+
setViewContainerRef(viewContainerRef) {
|
|
417
|
+
this._viewContainerRef = viewContainerRef;
|
|
418
|
+
}
|
|
419
|
+
clearViewContainerRef() {
|
|
420
|
+
this._viewContainerRef = undefined;
|
|
421
|
+
}
|
|
422
|
+
update() {
|
|
423
|
+
this._overlayRef?.updatePosition();
|
|
424
|
+
}
|
|
425
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
426
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarService, providedIn: 'root' }); }
|
|
427
|
+
}
|
|
428
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSnackbarService, decorators: [{
|
|
429
|
+
type: Injectable,
|
|
430
|
+
args: [{
|
|
431
|
+
providedIn: 'root',
|
|
432
|
+
}]
|
|
433
|
+
}], ctorParameters: () => [] });
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Generated bundle index. Do not edit.
|
|
437
|
+
*/
|
|
438
|
+
|
|
439
|
+
export { IDS_SNACKBAR_DEFAULT_CONFIG, IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY, IdsSnackbarComponent, IdsSnackbarGroupComponent, IdsSnackbarPosition, IdsSnackbarService, IdsSnackbarVariant, MIN_DURATION, READ_SPEED_PER_ACTION, READ_SPEED_PER_CHAR };
|
|
440
|
+
//# sourceMappingURL=i-cell-ids-angular-snackbar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-cell-ids-angular-snackbar.mjs","sources":["../../../projects/widgets/snackbar/types/snackbar-position.type.ts","../../../projects/widgets/snackbar/types/snackbar-variant.type.ts","../../../projects/widgets/snackbar/snackbar-defaults.ts","../../../projects/widgets/snackbar/animations.ts","../../../projects/widgets/snackbar/snackbar.component.ts","../../../projects/widgets/snackbar/snackbar.component.html","../../../projects/widgets/snackbar/snackbar-group.component.ts","../../../projects/widgets/snackbar/snackbar-group.component.html","../../../projects/widgets/snackbar/snackbar-position-strategies.ts","../../../projects/widgets/snackbar/services/snackbar.service.ts","../../../projects/widgets/snackbar/i-cell-ids-angular-snackbar.ts"],"sourcesContent":["export const IdsSnackbarPosition = {\n BOTTOM_CENTER: 'bottom-center',\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_CENTER: 'top-center',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n} as const;\n\nexport type IdsSnackbarPositionType = (typeof IdsSnackbarPosition)[keyof typeof IdsSnackbarPosition];\n","export const IdsSnackbarVariant = {\n DARK: 'dark',\n INFO: 'info',\n SUCCESS: 'success',\n WARNING: 'warning',\n ERROR: 'error',\n} as const;\n\nexport type IdsSnackbarVariantType = (typeof IdsSnackbarVariant)[keyof typeof IdsSnackbarVariant];\n","import { IdsSnackbarPosition, IdsSnackbarPositionType } from './types/snackbar-position.type';\nimport { IdsSnackbarVariant, IdsSnackbarVariantType } from './types/snackbar-variant.type';\n\nimport { InjectionToken } from '@angular/core';\nimport { IdsSize, IdsSizeType } from '@i-cell/ids-angular/core';\n\nexport const READ_SPEED_PER_CHAR = 50;\nexport const MIN_DURATION = 2_000;\nexport const READ_SPEED_PER_ACTION = 2_000;\n\nexport interface IdsSnackbarDefaultConfig {\n size?: IdsSizeType\n variant?: IdsSnackbarVariantType\n position?: IdsSnackbarPositionType\n newestAtStartPosition?: boolean\n viewportMargin?: number\n}\n\nexport const IDS_SNACKBAR_DEFAULT_CONFIG = new InjectionToken<IdsSnackbarDefaultConfig>(\n 'IDS_SNACKBAR_DEFAULT_CONFIG',\n {\n providedIn: 'root',\n factory: IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY,\n },\n);\n\nexport function IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY(): (Required<IdsSnackbarDefaultConfig>) {\n return {\n size: IdsSize.COMFORTABLE,\n variant: IdsSnackbarVariant.DARK,\n position: IdsSnackbarPosition.BOTTOM_CENTER,\n newestAtStartPosition: false,\n viewportMargin: 16,\n };\n}\n","import { animate, AnimationTriggerMetadata, style, transition, trigger } from '@angular/animations';\n\nexport const snackbarAnimation: AnimationTriggerMetadata = trigger('snackbarAnimation', [\n transition(':enter', [\n style({\n opacity: 0,\n transform: 'translate({{ translateX }}px, {{ translateY }}px)',\n height: '{{ height }}',\n }),\n animate(\n '0.7s cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n style({\n opacity: 1,\n transform: 'translate(0px, 0px)',\n height: '*',\n })),\n ], {\n params: {\n translateY: 0,\n translateX: 0,\n height: '0',\n },\n }),\n transition(':leave', [\n animate('1s ease-out', style({\n opacity: '0',\n transform: 'translate({{ translateX }}px, {{ translateY }}px)',\n height: '{{ height }}',\n })),\n ], {\n params: {\n translateY: 0,\n translateX: 0,\n height: '0',\n },\n }),\n]);\n","import { MIN_DURATION, READ_SPEED_PER_ACTION, READ_SPEED_PER_CHAR } from './snackbar-defaults';\nimport { IdsSnackbarAction } from './types/snackbar-data.type';\nimport { IdsSnackbarVariant, IdsSnackbarVariantType } from './types/snackbar-variant.type';\n\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, input, OnDestroy, output, ViewEncapsulation } from '@angular/core';\nimport { IdsButtonAppearance, IdsButtonComponent, IdsButtonVariant } from '@i-cell/ids-angular/button';\nimport { coerceBooleanAttribute, ComponentBase, IdsSize } from '@i-cell/ids-angular/core';\nimport { IdsIconComponent } from '@i-cell/ids-angular/icon';\nimport { IdsIconButtonAppearance, IdsIconButtonComponent } from '@i-cell/ids-angular/icon-button';\n\n@Component({\n selector: 'ids-snackbar',\n imports: [\n IdsIconButtonComponent,\n IdsIconComponent,\n IdsButtonComponent,\n A11yModule,\n ],\n templateUrl: './snackbar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[role]': '_role()',\n '(mouseenter)': '_onMouseEnter()',\n '(mouseleave)': '_onMouseLeave()',\n },\n})\nexport class IdsSnackbarComponent extends ComponentBase implements AfterViewInit, OnDestroy {\n protected override get _hostName(): string {\n return 'snackbar';\n }\n\n private _timer?: ReturnType<typeof setTimeout>;\n\n protected readonly _size = IdsSize;\n protected readonly _iconButtonAppearance = IdsIconButtonAppearance;\n protected readonly _buttonAppearance = IdsButtonAppearance;\n\n public message = input.required<string>();\n public variant = input<IdsSnackbarVariantType | undefined>();\n public icon = input<string | undefined>();\n public actions = input<IdsSnackbarAction[] | undefined>([]);\n public allowDismiss = input<boolean, boolean | undefined>(false, { transform: coerceBooleanAttribute });\n public closeButtonLabel = input<string | undefined>();\n public autoClose = input<boolean, boolean | undefined>(false, { transform: coerceBooleanAttribute });\n public urgent = input<boolean, boolean | undefined>(false, { transform: coerceBooleanAttribute });\n\n public closed = output<void>();\n\n private _canAutoClose = computed(() => !this.allowDismiss() && this.autoClose());\n private _duration = computed(() => {\n const actionReadDuration = (this.actions()?.length ?? 0) * READ_SPEED_PER_ACTION;\n return Math.max(this.message().length * READ_SPEED_PER_CHAR + actionReadDuration, MIN_DURATION);\n });\n\n protected _hostClasses = computed(() => this._getHostClasses([\n this.variant(),\n this.allowDismiss() && !this.closeButtonLabel() ? 'width-close-x-button' : null,\n ]));\n\n private _role = computed(() => (this.urgent() ? 'alert' : 'status'));\n protected _buttonVariant = computed(() =>\n (this.variant() === IdsSnackbarVariant.DARK ? IdsButtonVariant.LIGHT : IdsButtonVariant.SURFACE));\n\n private _defaultIcon = computed<string | null>(() => {\n switch (this.variant()) {\n case IdsSnackbarVariant.DARK:\n return null;\n case IdsSnackbarVariant.INFO:\n return 'exclamation-circle';\n case IdsSnackbarVariant.SUCCESS:\n return 'check-circle';\n case IdsSnackbarVariant.WARNING:\n return 'exclamation-triangle';\n case IdsSnackbarVariant.ERROR:\n return 'exclamation-circle';\n\n default:\n return null;\n }\n });\n\n protected _safeIcon = computed(() => this.icon() ?? this._defaultIcon());\n\n private _onMouseEnter(): void {\n this._stopTimer();\n }\n\n private _onMouseLeave(): void {\n this._startTimer();\n }\n\n private _startTimer(): void {\n if (this._canAutoClose()) {\n this._timer = setTimeout(() => {\n this.close();\n }, this._duration());\n }\n }\n\n private _stopTimer(): void {\n if (this._canAutoClose()) {\n clearTimeout(this._timer);\n }\n }\n\n public ngAfterViewInit(): void {\n this._startTimer();\n }\n\n public close(): void {\n this._stopTimer();\n this.closed.emit();\n }\n\n public callAction(action: () => void): void {\n action();\n this.close();\n }\n\n public ngOnDestroy(): void {\n clearTimeout(this._timer);\n }\n}\n","<div class=\"ids-snackbar__content-wrapper\" cdkTrapFocus cdkTrapFocusAutoCapture=\"true\">\n @let safeIcon = _safeIcon();\n @if (safeIcon) {\n <div class=\"ids-snackbar__leading-element\">\n <ids-icon [fontIcon]=\"safeIcon\" />\n </div>\n }\n\n <div class=\"ids-snackbar__message-action-container\">\n <div class=\"ids-snackbar__message\">{{ message() }}</div>\n <div class=\"ids-snackbar__action\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"callAction(action.action)\"\n >\n {{ action.label }}\n </button>\n }\n @let safeCloseButtonLabel = allowDismiss() && closeButtonLabel();\n @if (safeCloseButtonLabel) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_buttonAppearance.OUTLINED\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n {{ safeCloseButtonLabel }}\n </button>\n }\n </div>\n </div>\n\n @if (allowDismiss() && !closeButtonLabel()) {\n <button\n type=\"button\"\n role=\"button\"\n aria-label=\"Close notification\"\n idsIconButton\n [size]=\"_size.COMPACT\"\n [appearance]=\"_iconButtonAppearance.STANDARD\"\n [variant]=\"_buttonVariant()\"\n (click)=\"close()\"\n >\n <ids-icon aria-hidden=\"true\" alt=\"\" fontIcon=\"close\" />\n </button>\n }\n</div>\n","import { snackbarAnimation } from './animations';\nimport { IdsSnackbarService } from './services/snackbar.service';\nimport { IDS_SNACKBAR_DEFAULT_CONFIG, IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY, IdsSnackbarDefaultConfig } from './snackbar-defaults';\nimport { IdsSnackbarComponent } from './snackbar.component';\nimport { IdsSnackbarInnerData } from './types/snackbar-inner-data.type';\nimport { IdsSnackbarPosition, IdsSnackbarPositionType } from './types/snackbar-position.type';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal, Signal, ViewEncapsulation } from '@angular/core';\nimport { ComponentBaseWithDefaults } from '@i-cell/ids-angular/core';\n\nconst defaultConfig = IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY();\n\n@Component({\n selector: 'ids-snackbar-group',\n imports: [IdsSnackbarComponent],\n templateUrl: './snackbar-group.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [snackbarAnimation],\n})\nexport class IdsSnackbarGroupComponent extends ComponentBaseWithDefaults<IdsSnackbarDefaultConfig> {\n protected override get _hostName(): string {\n return 'snackbar-group';\n }\n\n private readonly _snackbarService = inject(IdsSnackbarService);\n protected readonly _defaultConfig = this._getDefaultConfig(defaultConfig, IDS_SNACKBAR_DEFAULT_CONFIG);\n\n public position = signal<IdsSnackbarPositionType>(this._defaultConfig.position);\n public snackbars: Signal<IdsSnackbarInnerData[]> = this._snackbarService.snackbars;\n\n protected _hostClasses = computed(() => this._getHostClasses([\n this._defaultConfig.size,\n [\n 'position',\n this.position(),\n ],\n this._defaultConfig.newestAtStartPosition ? 'newest-at-start' : null,\n ]));\n\n protected _animationParams = computed<{ translateY: number, translateX: number, height: string }>(() => {\n switch (this.position()) {\n case IdsSnackbarPosition.BOTTOM_CENTER:\n return {\n translateY: 100,\n translateX: 0,\n height: '0',\n };\n case IdsSnackbarPosition.TOP_CENTER:\n return {\n translateY: -100,\n translateX: 0,\n height: '0',\n };\n case IdsSnackbarPosition.TOP_LEFT:\n case IdsSnackbarPosition.BOTTOM_LEFT:\n return {\n translateY: 0,\n translateX: -100,\n height: '*',\n };\n case IdsSnackbarPosition.TOP_RIGHT:\n case IdsSnackbarPosition.BOTTOM_RIGHT:\n return {\n translateY: 0,\n translateX: 100,\n height: '*',\n };\n }\n });\n\n public closeSnackbar(id: number): void {\n this._snackbarService.remove(id);\n }\n\n protected _onAnimateStart(): void {\n this._updatePosition();\n }\n\n protected _onAnimateDone(): void {\n this._updatePosition();\n if (this._snackbarService.snackbars().length === 0) {\n this._snackbarService.clear();\n }\n }\n\n protected _updatePosition(): void {\n this._snackbarService.update();\n }\n}\n","@for (snackbar of snackbars(); track snackbar.id) {\n <ids-snackbar\n [@snackbarAnimation]=\"{\n value: 'open',\n params: _animationParams(),\n }\"\n [message]=\"snackbar.message\"\n [variant]=\"snackbar.variant\"\n [icon]=\"snackbar.icon\"\n [actions]=\"snackbar.actions\"\n [allowDismiss]=\"snackbar.allowDismiss\"\n [closeButtonLabel]=\"snackbar.closeButtonLabel\"\n [autoClose]=\"snackbar.autoClose\"\n [urgent]=\"snackbar.urgent\"\n (@snackbarAnimation.start)=\"_onAnimateStart()\"\n (@snackbarAnimation.done)=\"_onAnimateDone()\"\n (closed)=\"closeSnackbar(snackbar.id)\"\n />\n}\n","import { IdsSnackbarPosition, IdsSnackbarPositionType } from './types/snackbar-position.type';\n\nimport { FlexibleConnectedPositionStrategy, GlobalPositionStrategy } from '@angular/cdk/overlay';\n\nexport function getSnackbarFlexibleConnectedPositionStrategy(\n connectedTo: FlexibleConnectedPositionStrategy,\n snackbarPosition: IdsSnackbarPositionType,\n margin: number,\n): FlexibleConnectedPositionStrategy {\n switch (snackbarPosition) {\n case IdsSnackbarPosition.BOTTOM_CENTER:\n return connectedTo.withPositions([\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: 0 - margin,\n },\n ]);\n case IdsSnackbarPosition.TOP_CENTER:\n return connectedTo.withPositions([\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: margin,\n },\n ]);\n case IdsSnackbarPosition.TOP_LEFT:\n return connectedTo.withPositions([\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: margin,\n offsetY: margin,\n },\n ]);\n case IdsSnackbarPosition.TOP_RIGHT:\n return connectedTo.withPositions([\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: 0 - margin,\n offsetY: margin,\n },\n ]);\n case IdsSnackbarPosition.BOTTOM_LEFT:\n return connectedTo.withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: margin,\n offsetY: 0 - margin,\n },\n ]);\n case IdsSnackbarPosition.BOTTOM_RIGHT:\n return connectedTo.withPositions([\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetX: 0 - margin,\n offsetY: 0 - margin,\n },\n ]);\n }\n}\n\nexport function getSnackbarGlobalPositionStrategy(\n globalPosition: GlobalPositionStrategy,\n position: IdsSnackbarPositionType,\n margin = 0,\n): GlobalPositionStrategy {\n const marginPx = `${margin}px`;\n switch (position) {\n case IdsSnackbarPosition.BOTTOM_CENTER:\n return globalPosition.bottom(marginPx).centerHorizontally();\n case IdsSnackbarPosition.TOP_CENTER:\n return globalPosition.top(marginPx).centerHorizontally();\n case IdsSnackbarPosition.TOP_LEFT:\n return globalPosition.top(marginPx).left(marginPx);\n case IdsSnackbarPosition.TOP_RIGHT:\n return globalPosition.top(marginPx).right(marginPx);\n case IdsSnackbarPosition.BOTTOM_LEFT:\n return globalPosition.bottom(marginPx).left(marginPx);\n case IdsSnackbarPosition.BOTTOM_RIGHT:\n return globalPosition.bottom(marginPx).right(marginPx);\n }\n}\n","import { IDS_SNACKBAR_DEFAULT_CONFIG, IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY } from '../snackbar-defaults';\nimport { IdsSnackbarGroupComponent } from '../snackbar-group.component';\nimport { getSnackbarFlexibleConnectedPositionStrategy, getSnackbarGlobalPositionStrategy } from '../snackbar-position-strategies';\nimport { IdsSnackbarData } from '../types/snackbar-data.type';\nimport { IdsSnackbarInnerData } from '../types/snackbar-inner-data.type';\n\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { inject, Injectable, signal, ViewContainerRef } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs';\n\nconst defaultConfig = IDS_SNACKBAR_DEFAULT_CONFIG_FACTORY();\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IdsSnackbarService {\n private readonly _router = inject(Router);\n private readonly _overlay = inject(Overlay);\n private readonly _defaultConfig = {\n ...defaultConfig,\n ...inject(IDS_SNACKBAR_DEFAULT_CONFIG, { optional: true }),\n };\n\n private _overlayRef?: OverlayRef;\n private _snackbarGroupPortal = new ComponentPortal(IdsSnackbarGroupComponent, null);\n private _viewContainerRef?: ViewContainerRef;\n private _snackbarNextUniqueId = 0;\n private _snackbars = signal<IdsSnackbarInnerData[]>([]);\n\n public snackbars = this._snackbars.asReadonly();\n\n constructor() {\n this._router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\n this.clear();\n });\n }\n\n private _attachGroup(): void {\n if (!this._overlayRef?.hasAttached()) {\n this._overlayRef = this._createOverlay();\n this._overlayRef.attach(this._snackbarGroupPortal);\n }\n }\n\n private _createOverlay(): OverlayRef {\n const overlayConfig = new OverlayConfig({\n positionStrategy: this._getPositionStrategy(),\n hasBackdrop: false,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n });\n return this._overlay.create(overlayConfig);\n }\n\n private _getPositionStrategy(): PositionStrategy {\n const position = this._overlay.position();\n const margin = this._defaultConfig.viewportMargin;\n if (this._viewContainerRef) {\n const connectedTo = position\n .flexibleConnectedTo(this._viewContainerRef.element);\n return getSnackbarFlexibleConnectedPositionStrategy(connectedTo, this._defaultConfig.position, margin);\n } else {\n const globalPosition = position.global();\n return getSnackbarGlobalPositionStrategy(globalPosition, this._defaultConfig.position, margin);\n }\n }\n\n private _detachGroup(): void {\n this._overlayRef?.detach();\n this._overlayRef?.dispose();\n }\n\n public add(snackbar: IdsSnackbarData): void {\n if (this.snackbars().length === 0) {\n this._attachGroup();\n }\n this._snackbars.update((snackbars) => {\n const id = ++this._snackbarNextUniqueId;\n return [\n ...snackbars,\n {\n id,\n ...snackbar,\n },\n ];\n });\n }\n\n public remove(id: number): void {\n this._snackbars.update((snackbars) => {\n const index = snackbars.findIndex((snackbar) => snackbar.id === id);\n if (index !== -1) {\n const restSnackbars = [...snackbars];\n restSnackbars.splice(index, 1);\n return restSnackbars;\n }\n return snackbars;\n });\n }\n\n public clear(): void {\n this._snackbars.set([]);\n this._detachGroup();\n }\n\n public setViewContainerRef(viewContainerRef: ViewContainerRef): void {\n this._viewContainerRef = viewContainerRef;\n }\n\n public clearViewContainerRef(): void {\n this._viewContainerRef = undefined;\n }\n\n public update(): void {\n this._overlayRef?.updatePosition();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defaultConfig"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, input, computed, Component } from '@angular/core';
|
|
3
|
+
import { IdsSizeCollection, IdsSize, ComponentBaseWithDefaults } from '@i-cell/ids-angular/core';
|
|
4
|
+
|
|
5
|
+
const IdsSpinnerVariant = {
|
|
6
|
+
SURFACE: 'surface',
|
|
7
|
+
PRIMARY: 'primary',
|
|
8
|
+
SECONDARY: 'secondary',
|
|
9
|
+
BRAND: 'brand',
|
|
10
|
+
LIGHT: 'light',
|
|
11
|
+
ERROR: 'error',
|
|
12
|
+
SUCCESS: 'success',
|
|
13
|
+
WARNING: 'warning',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const IDS_SPINNER_DEFAULT_CONFIG = new InjectionToken('IDS_SPINNER_DEFAULT_CONFIG', {
|
|
17
|
+
providedIn: 'root',
|
|
18
|
+
factory: IDS_SPINNER_DEFAULT_CONFIG_FACTORY,
|
|
19
|
+
});
|
|
20
|
+
function IDS_SPINNER_DEFAULT_CONFIG_FACTORY() {
|
|
21
|
+
return {
|
|
22
|
+
size: IdsSize.COMPACT,
|
|
23
|
+
sizeCollection: IdsSizeCollection.SMALL,
|
|
24
|
+
variant: IdsSpinnerVariant.SURFACE,
|
|
25
|
+
isTrack: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const defaultConfig = IDS_SPINNER_DEFAULT_CONFIG_FACTORY();
|
|
30
|
+
class IdsSpinnerComponent extends ComponentBaseWithDefaults {
|
|
31
|
+
get _hostName() {
|
|
32
|
+
return 'spinner';
|
|
33
|
+
}
|
|
34
|
+
constructor() {
|
|
35
|
+
super();
|
|
36
|
+
this._defaultConfig = this._getDefaultConfig(defaultConfig, IDS_SPINNER_DEFAULT_CONFIG);
|
|
37
|
+
this.size = input(this._defaultConfig.size, ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
38
|
+
this.sizeCollection = input(this._defaultConfig.sizeCollection, ...(ngDevMode ? [{ debugName: "sizeCollection" }] : []));
|
|
39
|
+
this.variant = input(this._defaultConfig.variant, ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
40
|
+
this.isTrack = input(this._defaultConfig.isTrack, ...(ngDevMode ? [{ debugName: "isTrack" }] : []));
|
|
41
|
+
this.ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel", alias: 'aria-label' }] : [{ alias: 'aria-label' }]));
|
|
42
|
+
this._hostClasses = computed(() => this._getHostClasses([
|
|
43
|
+
this.variant(),
|
|
44
|
+
[
|
|
45
|
+
`${this.sizeCollection()}collection`,
|
|
46
|
+
this.size(),
|
|
47
|
+
],
|
|
48
|
+
]), ...(ngDevMode ? [{ debugName: "_hostClasses" }] : []));
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: IdsSpinnerComponent, isStandalone: true, selector: "ids-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, sizeCollection: { classPropertyName: "sizeCollection", publicName: "sizeCollection", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, isTrack: { classPropertyName: "isTrack", publicName: "isTrack", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-busy": "true", "attr.aria-live": "'polite'", "attr.aria-label": "this.ariaLabel()" } }, usesInheritance: true, ngImport: i0, template: "<svg class=\"rotate-center ids-spinner__body\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" fill=\"none\">\n @if (isTrack()) {\n <path class=\"ids-spinner__track\" d=\"M48 23.9941C48 37.249 37.2548 47.9941 24 47.9941C10.7452 47.9941 0 37.249 0 23.9941C0 10.7393 10.7452 -0.00585938 24 -0.00585938C37.2548 -0.00585938 48 10.7393 48 23.9941ZM4.8 23.9941C4.8 34.598 13.3961 43.1941 24 43.1941C34.6039 43.1941 43.2 34.598 43.2 23.9941C43.2 13.3903 34.6039 4.79414 24 4.79414C13.3961 4.79414 4.8 13.3903 4.8 23.9941Z\" fill=\"#E2E8F0\"/>\n }\n <path class=\"ids-spinner__active-indicator\" d=\"M24 2.4C24 1.07452 25.0772 -0.0124557 26.3961 0.119833C31.8813 0.670028 37.038 3.0969 40.9706 7.02943C44.9031 10.962 47.33 16.1187 47.8802 21.6039C48.0125 22.9228 46.9255 24 45.6 24C44.2745 24 43.2155 22.9213 43.0503 21.6062C42.5214 17.3966 40.6082 13.4553 37.5765 10.4235C34.5447 7.39176 30.6034 5.47861 26.3938 4.94974C25.0787 4.78451 24 3.72548 24 2.4Z\" fill=\"#64748B\"/>\n</svg>\n" }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsSpinnerComponent, decorators: [{
|
|
54
|
+
type: Component,
|
|
55
|
+
args: [{ selector: 'ids-spinner', host: {
|
|
56
|
+
'[attr.aria-busy]': 'true',
|
|
57
|
+
'[attr.aria-live]': '\'polite\'',
|
|
58
|
+
'[attr.aria-label]': 'this.ariaLabel()',
|
|
59
|
+
}, template: "<svg class=\"rotate-center ids-spinner__body\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" fill=\"none\">\n @if (isTrack()) {\n <path class=\"ids-spinner__track\" d=\"M48 23.9941C48 37.249 37.2548 47.9941 24 47.9941C10.7452 47.9941 0 37.249 0 23.9941C0 10.7393 10.7452 -0.00585938 24 -0.00585938C37.2548 -0.00585938 48 10.7393 48 23.9941ZM4.8 23.9941C4.8 34.598 13.3961 43.1941 24 43.1941C34.6039 43.1941 43.2 34.598 43.2 23.9941C43.2 13.3903 34.6039 4.79414 24 4.79414C13.3961 4.79414 4.8 13.3903 4.8 23.9941Z\" fill=\"#E2E8F0\"/>\n }\n <path class=\"ids-spinner__active-indicator\" d=\"M24 2.4C24 1.07452 25.0772 -0.0124557 26.3961 0.119833C31.8813 0.670028 37.038 3.0969 40.9706 7.02943C44.9031 10.962 47.33 16.1187 47.8802 21.6039C48.0125 22.9228 46.9255 24 45.6 24C44.2745 24 43.2155 22.9213 43.0503 21.6062C42.5214 17.3966 40.6082 13.4553 37.5765 10.4235C34.5447 7.39176 30.6034 5.47861 26.3938 4.94974C25.0787 4.78451 24 3.72548 24 2.4Z\" fill=\"#64748B\"/>\n</svg>\n" }]
|
|
60
|
+
}], ctorParameters: () => [] });
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Generated bundle index. Do not edit.
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
export { IDS_SPINNER_DEFAULT_CONFIG, IDS_SPINNER_DEFAULT_CONFIG_FACTORY, IdsSpinnerComponent, IdsSpinnerVariant };
|
|
67
|
+
//# sourceMappingURL=i-cell-ids-angular-spinner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-cell-ids-angular-spinner.mjs","sources":["../../../projects/widgets/spinner/types/spinner-variant.type.ts","../../../projects/widgets/spinner/spinner-defaults.ts","../../../projects/widgets/spinner/spinner.component.ts","../../../projects/widgets/spinner/spinner.component.html","../../../projects/widgets/spinner/i-cell-ids-angular-spinner.ts"],"sourcesContent":["export const IdsSpinnerVariant = {\n SURFACE: 'surface',\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n BRAND: 'brand',\n LIGHT: 'light',\n ERROR: 'error',\n SUCCESS: 'success',\n WARNING: 'warning',\n} as const;\n\nexport type IdsSpinnerVariantType = (typeof IdsSpinnerVariant)[keyof typeof IdsSpinnerVariant];\n","import { IdsSpinnerVariant, IdsSpinnerVariantType } from './types/spinner-variant.type';\n\nimport { InjectionToken } from '@angular/core';\nimport { IdsSize, IdsSizeCollection, IdsSizeCollectionType, IdsSizeType } from '@i-cell/ids-angular/core';\n\nexport interface IdsSpinnerDefaultConfig {\n size?: IdsSizeType\n sizeCollection?: IdsSizeCollectionType\n variant?: IdsSpinnerVariantType\n isTrack: boolean\n}\n\nexport const IDS_SPINNER_DEFAULT_CONFIG = new InjectionToken<IdsSpinnerDefaultConfig>(\n 'IDS_SPINNER_DEFAULT_CONFIG',\n {\n providedIn: 'root',\n factory: IDS_SPINNER_DEFAULT_CONFIG_FACTORY,\n },\n);\n\nexport function IDS_SPINNER_DEFAULT_CONFIG_FACTORY(): Required<IdsSpinnerDefaultConfig> {\n return {\n size: IdsSize.COMPACT,\n sizeCollection: IdsSizeCollection.SMALL,\n variant: IdsSpinnerVariant.SURFACE,\n isTrack: true,\n };\n}\n","import {\n IDS_SPINNER_DEFAULT_CONFIG,\n IDS_SPINNER_DEFAULT_CONFIG_FACTORY,\n IdsSpinnerDefaultConfig,\n} from './spinner-defaults';\nimport { IdsSpinnerVariantType } from './types/spinner-variant.type';\n\nimport { Component, computed, input } from '@angular/core';\nimport { ComponentBaseWithDefaults } from '@i-cell/ids-angular/core';\n\nconst defaultConfig = IDS_SPINNER_DEFAULT_CONFIG_FACTORY();\n\n@Component({\n selector: 'ids-spinner',\n templateUrl: './spinner.component.html',\n host: {\n '[attr.aria-busy]': 'true',\n '[attr.aria-live]': '\\'polite\\'',\n '[attr.aria-label]': 'this.ariaLabel()',\n },\n})\nexport class IdsSpinnerComponent extends ComponentBaseWithDefaults<IdsSpinnerDefaultConfig> {\n protected override get _hostName(): string {\n return 'spinner';\n }\n\n protected readonly _defaultConfig = this._getDefaultConfig(defaultConfig, IDS_SPINNER_DEFAULT_CONFIG);\n\n public size = input<string>(this._defaultConfig.size);\n public sizeCollection = input<string>(this._defaultConfig.sizeCollection);\n public variant = input<IdsSpinnerVariantType>(this._defaultConfig.variant);\n public isTrack = input<boolean>(this._defaultConfig.isTrack);\n public ariaLabel = input<string>('', { alias: 'aria-label' });\n\n constructor() {\n super();\n }\n\n protected _hostClasses = computed(() => this._getHostClasses([\n this.variant(),\n [\n `${this.sizeCollection()}collection`,\n this.size(),\n ],\n ]));\n\n}\n","<svg class=\"rotate-center ids-spinner__body\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" fill=\"none\">\n @if (isTrack()) {\n <path class=\"ids-spinner__track\" d=\"M48 23.9941C48 37.249 37.2548 47.9941 24 47.9941C10.7452 47.9941 0 37.249 0 23.9941C0 10.7393 10.7452 -0.00585938 24 -0.00585938C37.2548 -0.00585938 48 10.7393 48 23.9941ZM4.8 23.9941C4.8 34.598 13.3961 43.1941 24 43.1941C34.6039 43.1941 43.2 34.598 43.2 23.9941C43.2 13.3903 34.6039 4.79414 24 4.79414C13.3961 4.79414 4.8 13.3903 4.8 23.9941Z\" fill=\"#E2E8F0\"/>\n }\n <path class=\"ids-spinner__active-indicator\" d=\"M24 2.4C24 1.07452 25.0772 -0.0124557 26.3961 0.119833C31.8813 0.670028 37.038 3.0969 40.9706 7.02943C44.9031 10.962 47.33 16.1187 47.8802 21.6039C48.0125 22.9228 46.9255 24 45.6 24C44.2745 24 43.2155 22.9213 43.0503 21.6062C42.5214 17.3966 40.6082 13.4553 37.5765 10.4235C34.5447 7.39176 30.6034 5.47861 26.3938 4.94974C25.0787 4.78451 24 3.72548 24 2.4Z\" fill=\"#64748B\"/>\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|