ng-magary 0.0.5 → 0.0.7

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.
Files changed (63) hide show
  1. package/README.md +63 -213
  2. package/fesm2022/ng-magary.mjs +8708 -0
  3. package/fesm2022/ng-magary.mjs.map +1 -0
  4. package/package.json +19 -14
  5. package/types/ng-magary.d.ts +2557 -0
  6. package/LICENSE.md +0 -21
  7. package/bun.lock +0 -290
  8. package/ng-package.json +0 -7
  9. package/src/lib/Button/button/button.html +0 -29
  10. package/src/lib/Button/button/button.module.ts +0 -9
  11. package/src/lib/Button/button/button.scss +0 -196
  12. package/src/lib/Button/button/button.spec.ts +0 -18
  13. package/src/lib/Button/button/button.ts +0 -72
  14. package/src/lib/Button/speed-dial/speed-dial-item.interface.ts +0 -9
  15. package/src/lib/Button/speed-dial/speed-dial.html +0 -57
  16. package/src/lib/Button/speed-dial/speed-dial.module.ts +0 -8
  17. package/src/lib/Button/speed-dial/speed-dial.scss +0 -247
  18. package/src/lib/Button/speed-dial/speed-dial.spec.ts +0 -18
  19. package/src/lib/Button/speed-dial/speed-dial.ts +0 -106
  20. package/src/lib/Form/cascade-select/cascade-select.html +0 -1
  21. package/src/lib/Form/cascade-select/cascade-select.module.ts +0 -8
  22. package/src/lib/Form/cascade-select/cascade-select.scss +0 -0
  23. package/src/lib/Form/cascade-select/cascade-select.spec.ts +0 -18
  24. package/src/lib/Form/cascade-select/cascade-select.ts +0 -9
  25. package/src/lib/Form/input/input.html +0 -66
  26. package/src/lib/Form/input/input.module.ts +0 -9
  27. package/src/lib/Form/input/input.scss +0 -193
  28. package/src/lib/Form/input/input.spec.ts +0 -22
  29. package/src/lib/Form/input/input.ts +0 -132
  30. package/src/lib/Menu/panelmenu/panelmenu.html +0 -259
  31. package/src/lib/Menu/panelmenu/panelmenu.interface.ts +0 -13
  32. package/src/lib/Menu/panelmenu/panelmenu.module.ts +0 -9
  33. package/src/lib/Menu/panelmenu/panelmenu.scss +0 -177
  34. package/src/lib/Menu/panelmenu/panelmenu.spec.ts +0 -18
  35. package/src/lib/Menu/panelmenu/panelmenu.ts +0 -134
  36. package/src/lib/Menu/sidebar/sidebar.html +0 -85
  37. package/src/lib/Menu/sidebar/sidebar.module.ts +0 -9
  38. package/src/lib/Menu/sidebar/sidebar.scss +0 -153
  39. package/src/lib/Menu/sidebar/sidebar.spec.ts +0 -18
  40. package/src/lib/Menu/sidebar/sidebar.ts +0 -64
  41. package/src/lib/Misc/avatar/avatar.html +0 -44
  42. package/src/lib/Misc/avatar/avatar.module.ts +0 -9
  43. package/src/lib/Misc/avatar/avatar.scss +0 -167
  44. package/src/lib/Misc/avatar/avatar.spec.ts +0 -18
  45. package/src/lib/Misc/avatar/avatar.ts +0 -93
  46. package/src/lib/Panel/card/card.html +0 -58
  47. package/src/lib/Panel/card/card.module.ts +0 -9
  48. package/src/lib/Panel/card/card.scss +0 -290
  49. package/src/lib/Panel/card/card.spec.ts +0 -18
  50. package/src/lib/Panel/card/card.ts +0 -126
  51. package/src/lib/Panel/tabs/tab/tab.spec.ts +0 -18
  52. package/src/lib/Panel/tabs/tab/tab.ts +0 -12
  53. package/src/lib/Panel/tabs/tabs.html +0 -26
  54. package/src/lib/Panel/tabs/tabs.module.ts +0 -10
  55. package/src/lib/Panel/tabs/tabs.scss +0 -58
  56. package/src/lib/Panel/tabs/tabs.spec.ts +0 -18
  57. package/src/lib/Panel/tabs/tabs.ts +0 -57
  58. package/src/lib/ng-magary.spec.ts +0 -18
  59. package/src/lib/ng-magary.ts +0 -43
  60. package/src/public-api.ts +0 -5
  61. package/tsconfig.lib.json +0 -22
  62. package/tsconfig.lib.prod.json +0 -11
  63. package/tsconfig.spec.json +0 -14
@@ -1,9 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MagaryAvatar } from './avatar';
4
- export * from './avatar';
5
- @NgModule({
6
- imports: [CommonModule, MagaryAvatar],
7
- exports: [MagaryAvatar],
8
- })
9
- export class AvatarModule {}
@@ -1,167 +0,0 @@
1
- .avatar-wrapper {
2
- --avatar-bg: var(--magary-avatar-bg, #6b7280);
3
- --avatar-color: var(--magary-avatar-color, #ffffff);
4
- --avatar-border: var(--magary-avatar-border, transparent);
5
- --avatar-font-weight: var(--magary-avatar-font-weight, 600);
6
- --avatar-transition: var(--magary-avatar-transition, all 0.2s ease);
7
- display: inline-flex;
8
- align-items: center;
9
- justify-content: center;
10
- font-weight: var(--avatar-font-weight);
11
- color: var(--avatar-color);
12
- background-color: var(--avatar-bg);
13
- border: 2px solid var(--avatar-border);
14
- position: relative;
15
- z-index: 0;
16
- transition: var(--avatar-transition);
17
- overflow: visible;
18
- user-select: none;
19
- &.circle {
20
- border-radius: 50%;
21
- }
22
- &.square {
23
- border-radius: 6px;
24
- }
25
- &.xsmall {
26
- width: 24px;
27
- height: 24px;
28
- font-size: 10px;
29
- .avatar-icon { font-size: 0.75rem; }
30
- }
31
- &.small {
32
- width: 28px;
33
- height: 28px;
34
- font-size: 12px;
35
- .avatar-icon { font-size: 0.875rem; }
36
- }
37
- &.normal {
38
- width: 32px;
39
- height: 32px;
40
- font-size: 14px;
41
- .avatar-icon { font-size: 1rem; }
42
- }
43
- &.large {
44
- width: 48px;
45
- height: 48px;
46
- font-size: 18px;
47
- .avatar-icon { font-size: 1.25rem; }
48
- }
49
- &.xlarge {
50
- width: 64px;
51
- height: 64px;
52
- font-size: 22px;
53
- .avatar-icon { font-size: 1.5rem; }
54
- }
55
- &.clickable {
56
- cursor: pointer;
57
- &:hover:not(.disabled) {
58
- transform: scale(1.05);
59
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
60
- }
61
- &:focus {
62
- outline: 2px solid var(--magary-focus-color, #3b82f6);
63
- outline-offset: 2px;
64
- }
65
- &:active:not(.disabled) {
66
- transform: scale(0.98);
67
- }
68
- }
69
- &.loading {
70
- opacity: 0.7;
71
- cursor: wait;
72
- }
73
- &.disabled {
74
- opacity: 0.5;
75
- cursor: not-allowed;
76
- pointer-events: none;
77
- }
78
- &.has-image .avatar-img {
79
- opacity: 1;
80
- }
81
- &.has-icon .avatar-icon {
82
- opacity: 1;
83
- }
84
- &.has-label .avatar-label {
85
- opacity: 1;
86
- }
87
- .avatar-img {
88
- width: 100%;
89
- height: 100%;
90
- object-fit: cover;
91
- transition: opacity 0.2s ease;
92
- overflow: hidden;
93
- &.circle {
94
- border-radius: 50%;
95
- }
96
- &.square {
97
- border-radius: 4px;
98
- }
99
- }
100
- .avatar-icon {
101
- opacity: 0.9;
102
- transition: opacity 0.2s ease;
103
- }
104
- .avatar-label {
105
- font-weight: inherit;
106
- letter-spacing: 0.5px;
107
- transition: opacity 0.2s ease;
108
- }
109
- .avatar-loading {
110
- display: flex;
111
- align-items: center;
112
- justify-content: center;
113
- width: 100%;
114
- height: 100%;
115
- i {
116
- font-size: 1rem;
117
- opacity: 0.7;
118
- }
119
- }
120
- .badge {
121
- position: absolute;
122
- top: -6px;
123
- right: -6px;
124
- background-color: #ef4444;
125
- border: 2px solid white;
126
- border-radius: 999px;
127
- color: white;
128
- padding: 0 6px;
129
- font-size: 10px;
130
- font-weight: bold;
131
- min-width: 18px;
132
- height: 18px;
133
- display: flex;
134
- align-items: center;
135
- justify-content: center;
136
- cursor: pointer;
137
- transition: transform 0.2s ease;
138
- z-index: 999;
139
- &:hover {
140
- transform: scale(1.1);
141
- }
142
- &.info {
143
- background-color: #3b82f6;
144
- }
145
- &.success {
146
- background-color: #10b981;
147
- }
148
- &.warning {
149
- background-color: #f59e0b;
150
- }
151
- &.danger {
152
- background-color: #ef4444;
153
- }
154
- }
155
- @media (max-width: 640px) {
156
- &.large {
157
- width: 40px;
158
- height: 40px;
159
- font-size: 16px;
160
- }
161
- &.xlarge {
162
- width: 52px;
163
- height: 52px;
164
- font-size: 20px;
165
- }
166
- }
167
- }
@@ -1,18 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
- import { Avatar } from './avatar';
3
- describe('Avatar', () => {
4
- let component: Avatar;
5
- let fixture: ComponentFixture<Avatar>;
6
- beforeEach(async () => {
7
- await TestBed.configureTestingModule({
8
- imports: [Avatar]
9
- })
10
- .compileComponents();
11
- fixture = TestBed.createComponent(Avatar);
12
- component = fixture.componentInstance;
13
- fixture.detectChanges();
14
- });
15
- it('should create', () => {
16
- expect(component).toBeTruthy();
17
- });
18
- });
@@ -1,93 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, input, output, signal, computed } from '@angular/core';
3
- export type AvatarShape = 'circle' | 'square';
4
- export type AvatarSize = 'xsmall' | 'small' | 'normal' | 'large' | 'xlarge';
5
- export type BadgeSeverity = 'info' | 'success' | 'warning' | 'danger';
6
- export interface AvatarClickEvent {
7
- type: 'avatar' | 'badge';
8
- data?: any;
9
- }
10
- @Component({
11
- selector: 'magary-avatar',
12
- imports: [CommonModule],
13
- templateUrl: './avatar.html',
14
- styleUrl: './avatar.scss',
15
- })
16
- export class MagaryAvatar {
17
- public label = input<string>();
18
- public image = input<string>();
19
- public icon = input<string>();
20
- public shape = input<AvatarShape>('square');
21
- public size = input<AvatarSize>('normal');
22
- public badgeValue = input<string | number>();
23
- public badgeSeverity = input<BadgeSeverity>('danger');
24
- public customStyle = input<Record<string, any>>();
25
- public alt = input<string>('Avatar');
26
- public clickable = input<boolean>(false);
27
- public loading = input<boolean>(false);
28
- public disabled = input<boolean>(false);
29
- public avatarClick = output<AvatarClickEvent>();
30
- public imageError = signal<boolean>(false);
31
- public displayLabel = computed(() => {
32
- const label = this.label();
33
- if (!label) return '';
34
- if (label.includes(' ')) {
35
- return label
36
- .split(' ')
37
- .map((word) => word.charAt(0))
38
- .join('')
39
- .toUpperCase()
40
- .slice(0, 2);
41
- }
42
- return label.toUpperCase().slice(0, 2);
43
- });
44
- public avatarClasses = computed(() => ({
45
- [this.size()]: true,
46
- [this.shape()]: true,
47
- clickable: this.clickable(),
48
- loading: this.loading(),
49
- disabled: this.disabled(),
50
- 'has-image': !!this.image() && !this.imageError(),
51
- 'has-icon': !this.image() && !!this.icon(),
52
- 'has-label': !this.image() && !this.icon() && !!this.label(),
53
- }));
54
- public shouldShowImage = computed(() => {
55
- return this.image() && !this.imageError();
56
- });
57
- public shouldShowIcon = computed(() => {
58
- return !this.shouldShowImage() && !!this.icon();
59
- });
60
- public shouldShowLabel = computed(() => {
61
- return (
62
- !this.shouldShowImage() && !this.shouldShowIcon() && !!this.displayLabel()
63
- );
64
- });
65
- onImageError(): void {
66
- this.imageError.set(true);
67
- }
68
- onImageLoad(): void {
69
- this.imageError.set(false);
70
- }
71
- onAvatarClick(): void {
72
- if (this.disabled() || this.loading()) return;
73
- this.avatarClick.emit({
74
- type: 'avatar',
75
- data: {
76
- label: this.label(),
77
- image: this.image(),
78
- icon: this.icon(),
79
- },
80
- });
81
- }
82
- onBadgeClick(event: Event): void {
83
- if (this.disabled() || this.loading()) return;
84
- event.stopPropagation();
85
- this.avatarClick.emit({
86
- type: 'badge',
87
- data: {
88
- value: this.badgeValue(),
89
- severity: this.badgeSeverity(),
90
- },
91
- });
92
- }
93
- }
@@ -1,58 +0,0 @@
1
- <article
2
- [ngClass]="cardClasses()"
3
- [ngStyle]="cardStyles()"
4
- [attr.role]="clickable() ? 'button' : 'region'"
5
- [attr.tabindex]="isInteractive() ? '0' : null"
6
- [attr.aria-label]="
7
- 'Card with ' +
8
- (hasImage() ? 'image and ' : '') +
9
- 'content' +
10
- (clickable() ? '. Clickable' : '') +
11
- (loading() ? '. Loading' : '') +
12
- (disabled() ? '. Disabled' : '')
13
- "
14
- [attr.aria-disabled]="disabled() ? 'true' : null"
15
- [attr.aria-busy]="loading() ? 'true' : null"
16
- (click)="onCardClick($event)"
17
- (keydown)="onCardKeydown($event)"
18
- >
19
- @if (hasImage()) {
20
- <div class="card-image-container">
21
- <img
22
- [src]="img()"
23
- [ngClass]="imageClasses()"
24
- [ngStyle]="imageStyles()"
25
- [alt]="altText()"
26
- loading="lazy"
27
- decoding="async"
28
- />
29
- </div>
30
- }
31
- <div class="card-content" [attr.aria-label]="'Card content'">
32
- <div class="card-body">
33
- @if (true) {
34
- <header class="card-header" role="banner">
35
- <ng-content select="[slot='header']"></ng-content>
36
- </header>
37
- }
38
- <main class="card-main" role="main">
39
- <ng-content></ng-content>
40
- </main>
41
- @if (true) {
42
- <footer class="card-footer" role="contentinfo">
43
- <ng-content select="[slot='footer']"></ng-content>
44
- </footer>
45
- }
46
- </div>
47
- </div>
48
- @if (showLoadingOverlay()) {
49
- <div
50
- class="card-loading-overlay"
51
- role="status"
52
- [attr.aria-label]="loadingText()"
53
- >
54
- <div class="loading-spinner" aria-hidden="true"></div>
55
- <span class="loading-text">{{ loadingText() }}</span>
56
- </div>
57
- }
58
- </article>
@@ -1,9 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MagaryCard } from './card';
4
- @NgModule({
5
- declarations: [],
6
- imports: [CommonModule, MagaryCard],
7
- exports: [MagaryCard],
8
- })
9
- export class CardModule {}
@@ -1,290 +0,0 @@
1
- :host {
2
- --card-border-radius: 0.75rem;
3
- --card-gap: 1rem;
4
- --card-padding: 1rem;
5
- --card-transition: all 0.2s ease;
6
- --card-shadow-light: 0 1px 2px rgba(0, 0, 0, 0.1);
7
- --card-shadow-heavy: 0 8px 16px rgba(0, 0, 0, 0.3);
8
- display: block;
9
- margin: 0;
10
- padding: 0;
11
- border: none;
12
- }
13
- * {
14
- box-sizing: border-box;
15
- }
16
- .card {
17
- display: flex;
18
- flex-direction: column;
19
- border-radius: var(--border-radius, var(--card-border-radius));
20
- transition: var(--card-transition);
21
- overflow: hidden;
22
- position: relative;
23
- gap: 0;
24
- padding: 0;
25
- margin: 0;
26
- &.variant-elevated {
27
- background: white;
28
- }
29
- &.variant-outlined {
30
- border: 1px solid rgba(0, 0, 0, 0.12);
31
- box-shadow: none !important;
32
- }
33
- &.variant-filled {
34
- background-color: rgba(0, 0, 0, 0.04);
35
- box-shadow: none !important;
36
- }
37
- &.clickable {
38
- cursor: pointer;
39
- user-select: none;
40
- &:hover {
41
- transform: translateY(-2px);
42
- box-shadow: var(--card-shadow-heavy);
43
- }
44
- &:active {
45
- transform: translateY(0);
46
- }
47
- &:focus-visible {
48
- outline: 2px solid #0066cc;
49
- outline-offset: 2px;
50
- }
51
- }
52
- &.loading {
53
- pointer-events: none;
54
- cursor: not-allowed;
55
- }
56
- &.disabled {
57
- pointer-events: none;
58
- cursor: not-allowed;
59
- opacity: 0.6;
60
- &:hover {
61
- transform: none;
62
- box-shadow: inherit;
63
- }
64
- }
65
- &.layout-left,
66
- &.layout-right {
67
- flex-direction: row;
68
- align-items: stretch;
69
- }
70
- &.layout-left {
71
- flex-direction: row;
72
- }
73
- &.layout-right {
74
- flex-direction: row-reverse;
75
- }
76
- &.layout-top {
77
- flex-direction: column;
78
- }
79
- &.layout-bottom {
80
- flex-direction: column-reverse;
81
- }
82
- &:hover:not(.disabled):not(.loading) {
83
- transform: translateY(-2px);
84
- box-shadow: var(--card-shadow-heavy);
85
- }
86
- .card-image-container {
87
- overflow: hidden;
88
- flex-shrink: 0;
89
- position: relative;
90
- margin: 0;
91
- padding: 0;
92
- border: none;
93
- .card-img {
94
- object-fit: cover;
95
- transition: transform 0.3s ease;
96
- width: 100%;
97
- height: 100%;
98
- display: block;
99
- margin: 0;
100
- padding: 0;
101
- border: none;
102
- &:hover {
103
- transform: scale(1.05);
104
- }
105
- &.img-top {
106
- border-top-left-radius: var(--border-radius);
107
- border-top-right-radius: var(--border-radius);
108
- }
109
- &.img-bottom {
110
- border-bottom-left-radius: var(--border-radius);
111
- border-bottom-right-radius: var(--border-radius);
112
- }
113
- &.img-left {
114
- border-top-left-radius: var(--border-radius);
115
- border-bottom-left-radius: var(--border-radius);
116
- }
117
- &.img-right {
118
- border-top-right-radius: var(--border-radius);
119
- border-bottom-right-radius: var(--border-radius);
120
- }
121
- }
122
- }
123
- .card-content {
124
- flex: 1;
125
- display: flex;
126
- flex-direction: column;
127
- justify-content: center;
128
- min-height: 0;
129
- padding: var(--padding, var(--card-padding));
130
- }
131
- .card-body {
132
- display: grid;
133
- gap: var(--gap, var(--card-gap));
134
- height: 100%;
135
- }
136
- .card-header {
137
- grid-area: header;
138
- &:empty {
139
- display: none;
140
- }
141
- }
142
- .card-main {
143
- grid-area: main;
144
- flex: 1;
145
- }
146
- .card-footer {
147
- grid-area: footer;
148
- margin-top: auto;
149
- &:empty {
150
- display: none;
151
- }
152
- }
153
- .card-body {
154
- grid-template-areas:
155
- "header"
156
- "main"
157
- "footer";
158
- grid-template-rows: auto 1fr auto;
159
- }
160
- }
161
- .shadow-0 { box-shadow: none; }
162
- .shadow-1 { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
163
- .shadow-2 { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); }
164
- .shadow-3 { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); }
165
- .shadow-4 { box-shadow: 0 6px 12px rgba(0, 0, 0, 0.25); }
166
- .shadow-5 { box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); }
167
- .card.responsive {
168
- @media (max-width: 768px) {
169
- &.layout-left,
170
- &.layout-right {
171
- flex-direction: column;
172
- .card-image-container .card-img {
173
- &.img-left,
174
- &.img-right {
175
- border-radius: var(--border-radius) var(--border-radius) 0 0;
176
- }
177
- }
178
- }
179
- .card-content {
180
- padding: calc(var(--card-padding) * 0.75);
181
- }
182
- .card-body {
183
- gap: calc(var(--card-gap) * 0.75);
184
- }
185
- }
186
- @media (max-width: 480px) {
187
- &.layout-left,
188
- &.layout-right {
189
- flex-direction: column;
190
- }
191
- .card-content {
192
- padding: calc(var(--card-padding) * 0.5);
193
- }
194
- .card-body {
195
- gap: calc(var(--card-gap) * 0.5);
196
- }
197
- .card-image-container {
198
- max-height: 200px;
199
- .card-img {
200
- object-fit: cover;
201
- height: 100%;
202
- }
203
- }
204
- &:hover:not(.disabled):not(.loading) {
205
- transform: none;
206
- }
207
- }
208
- @media (min-width: 1200px) {
209
- &:hover:not(.disabled):not(.loading) {
210
- transform: translateY(-4px);
211
- box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
212
- }
213
- }
214
- }
215
- @media (prefers-reduced-motion: reduce) {
216
- .card {
217
- transition: none;
218
- &:hover:not(.disabled):not(.loading) {
219
- transform: none;
220
- }
221
- .card-img {
222
- transition: none;
223
- &:hover {
224
- transform: none;
225
- }
226
- }
227
- .loading-spinner {
228
- animation: none;
229
- }
230
- }
231
- }
232
- @media (prefers-contrast: high) {
233
- .card {
234
- border: 2px solid currentColor;
235
- }
236
- }
237
- @media (prefers-color-scheme: dark) {
238
- :host {
239
- --card-shadow-light: 0 1px 2px rgba(255, 255, 255, 0.1);
240
- --card-shadow-heavy: 0 8px 16px rgba(255, 255, 255, 0.1);
241
- }
242
- }
243
- .card-loading-overlay {
244
- position: absolute;
245
- top: 0;
246
- left: 0;
247
- right: 0;
248
- bottom: 0;
249
- background: rgba(255, 255, 255, 0.9);
250
- display: flex;
251
- flex-direction: column;
252
- align-items: center;
253
- justify-content: center;
254
- gap: 0.5rem;
255
- z-index: 10;
256
- border-radius: inherit;
257
- .loading-spinner {
258
- width: 32px;
259
- height: 32px;
260
- border: 3px solid rgba(0, 0, 0, 0.1);
261
- border-left: 3px solid #0066cc;
262
- border-radius: 50%;
263
- animation: spin 1s linear infinite;
264
- }
265
- .loading-text {
266
- font-size: 0.875rem;
267
- color: rgba(0, 0, 0, 0.7);
268
- font-weight: 500;
269
- }
270
- }
271
- @keyframes spin {
272
- 0% { transform: rotate(0deg); }
273
- 100% { transform: rotate(360deg); }
274
- }
275
- @media (prefers-color-scheme: dark) {
276
- :host {
277
- --card-shadow-light: 0 1px 2px rgba(255, 255, 255, 0.1);
278
- --card-shadow-heavy: 0 8px 16px rgba(255, 255, 255, 0.1);
279
- }
280
- .card-loading-overlay {
281
- background: rgba(0, 0, 0, 0.9);
282
- .loading-text {
283
- color: rgba(255, 255, 255, 0.8);
284
- }
285
- .loading-spinner {
286
- border: 3px solid rgba(255, 255, 255, 0.1);
287
- border-left: 3px solid #66b3ff;
288
- }
289
- }
290
- }
@@ -1,18 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
- import { Card } from './card';
3
- describe('Card', () => {
4
- let component: Card;
5
- let fixture: ComponentFixture<Card>;
6
- beforeEach(async () => {
7
- await TestBed.configureTestingModule({
8
- imports: [Card]
9
- })
10
- .compileComponents();
11
- fixture = TestBed.createComponent(Card);
12
- component = fixture.componentInstance;
13
- fixture.detectChanges();
14
- });
15
- it('should create', () => {
16
- expect(component).toBeTruthy();
17
- });
18
- });