@factor_ec/ui 3.0.1 → 4.0.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.
Files changed (86) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/io/avatar/avatar.component.mjs +75 -0
  3. package/esm2022/lib/io/icon/icon.component.mjs +96 -0
  4. package/esm2022/lib/io/image/image.component.mjs +84 -0
  5. package/esm2022/lib/io/progress/progress.component.mjs +43 -0
  6. package/esm2022/lib/io/rating/rating.component.mjs +61 -0
  7. package/esm2022/lib/io/timeline/timeline.component.mjs +102 -0
  8. package/esm2022/lib/observe-inersecting.directive.mjs +43 -0
  9. package/esm2022/lib/ui.module.mjs +27 -0
  10. package/esm2022/public-api.mjs +12 -0
  11. package/fesm2022/factor_ec-ui.mjs +515 -0
  12. package/fesm2022/factor_ec-ui.mjs.map +1 -0
  13. package/lib/io/avatar/avatar.component.d.ts +1 -1
  14. package/lib/io/icon/icon.component.d.ts +1 -1
  15. package/lib/io/image/image.component.d.ts +1 -1
  16. package/lib/io/progress/progress.component.d.ts +1 -1
  17. package/lib/io/rating/rating.component.d.ts +1 -1
  18. package/lib/io/timeline/timeline.component.d.ts +1 -1
  19. package/lib/observe-inersecting.directive.d.ts +16 -0
  20. package/lib/ui.module.d.ts +4 -7
  21. package/package.json +9 -18
  22. package/public-api.d.ts +2 -13
  23. package/esm2020/lib/io/avatar/avatar.component.mjs +0 -74
  24. package/esm2020/lib/io/expression-builder/expression-builder.component.mjs +0 -72
  25. package/esm2020/lib/io/icon/icon.component.mjs +0 -95
  26. package/esm2020/lib/io/image/image.component.mjs +0 -80
  27. package/esm2020/lib/io/io.module.mjs +0 -81
  28. package/esm2020/lib/io/message/message.component.mjs +0 -30
  29. package/esm2020/lib/io/message-content/message-content.component.mjs +0 -19
  30. package/esm2020/lib/io/message.service.mjs +0 -58
  31. package/esm2020/lib/io/observe-intersecting.directive.mjs +0 -43
  32. package/esm2020/lib/io/progress/progress.component.mjs +0 -42
  33. package/esm2020/lib/io/progress.service.mjs +0 -48
  34. package/esm2020/lib/io/rating/rating.component.mjs +0 -60
  35. package/esm2020/lib/io/timeline/timeline.component.mjs +0 -101
  36. package/esm2020/lib/layout/collapsible/collapsible.component.mjs +0 -37
  37. package/esm2020/lib/layout/layout.module.mjs +0 -28
  38. package/esm2020/lib/models/action.mjs +0 -2
  39. package/esm2020/lib/models/content.mjs +0 -2
  40. package/esm2020/lib/models/icon.mjs +0 -2
  41. package/esm2020/lib/models/message-options.mjs +0 -2
  42. package/esm2020/lib/models/module-configuration.mjs +0 -2
  43. package/esm2020/lib/navigation/list/list.component.mjs +0 -100
  44. package/esm2020/lib/navigation/navigation.module.mjs +0 -49
  45. package/esm2020/lib/navigation/toolbar/toolbar.component.mjs +0 -53
  46. package/esm2020/lib/ui.module.mjs +0 -47
  47. package/esm2020/public-api.mjs +0 -23
  48. package/fesm2015/factor_ec-ui.mjs +0 -1053
  49. package/fesm2015/factor_ec-ui.mjs.map +0 -1
  50. package/fesm2020/factor_ec-ui.mjs +0 -1044
  51. package/fesm2020/factor_ec-ui.mjs.map +0 -1
  52. package/lib/io/expression-builder/expression-builder.component.d.ts +0 -46
  53. package/lib/io/io.module.d.ts +0 -20
  54. package/lib/io/message/message.component.d.ts +0 -11
  55. package/lib/io/message-content/message-content.component.d.ts +0 -7
  56. package/lib/io/message.service.d.ts +0 -15
  57. package/lib/io/observe-intersecting.directive.d.ts +0 -16
  58. package/lib/io/progress.service.d.ts +0 -15
  59. package/lib/layout/collapsible/collapsible.component.d.ts +0 -10
  60. package/lib/layout/layout.module.d.ts +0 -9
  61. package/lib/models/action.d.ts +0 -14
  62. package/lib/models/content.d.ts +0 -4
  63. package/lib/models/icon.d.ts +0 -6
  64. package/lib/models/message-options.d.ts +0 -13
  65. package/lib/models/module-configuration.d.ts +0 -6
  66. package/lib/navigation/list/list.component.d.ts +0 -23
  67. package/lib/navigation/navigation.module.d.ts +0 -14
  68. package/lib/navigation/toolbar/toolbar.component.d.ts +0 -17
  69. package/scss/all.scss +0 -5
  70. package/scss/components/avatar.scss +0 -15
  71. package/scss/components/collapsible.scss +0 -46
  72. package/scss/components/dropdown.scss +0 -56
  73. package/scss/components/icon.scss +0 -40
  74. package/scss/components/list.scss +0 -65
  75. package/scss/components/ph.scss +0 -27
  76. package/scss/components/popup.scss +0 -7
  77. package/scss/components/rating.scss +0 -61
  78. package/scss/components.scss +0 -8
  79. package/scss/mixins/breakpoints.scss +0 -123
  80. package/scss/mixins.scss +0 -1
  81. package/scss/reboot.scss +0 -586
  82. package/scss/root.scss +0 -52
  83. package/scss/variables.scss +0 -116
  84. /package/{esm2020 → esm2022}/factor_ec-ui.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/models/task.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/models/ui-configuration.mjs +0 -0
@@ -0,0 +1,27 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ObserveInersectingDirective } from './observe-inersecting.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class UiModule {
5
+ static forRoot(configuration) {
6
+ return {
7
+ ngModule: UiModule,
8
+ providers: [
9
+ { provide: 'FactorUiConfiguration', useValue: configuration }
10
+ ]
11
+ };
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: UiModule, declarations: [ObserveInersectingDirective] }); }
15
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule, decorators: [{
18
+ type: NgModule,
19
+ args: [{
20
+ declarations: [
21
+ ObserveInersectingDirective
22
+ ],
23
+ imports: [],
24
+ exports: []
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi91aS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBWTlFLE1BQU0sT0FBTyxRQUFRO0lBQ1osTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUErQjtRQUNuRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFFBQVE7WUFDbEIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7YUFDOUQ7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FSVSxRQUFROytHQUFSLFFBQVEsaUJBUGpCLDJCQUEyQjsrR0FPbEIsUUFBUTs7MkZBQVIsUUFBUTtrQkFWcEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBRVosMkJBQTJCO3FCQUM1QjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVaUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21vZGVscy91aS1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IE9ic2VydmVJbmVyc2VjdGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vb2JzZXJ2ZS1pbmVyc2VjdGluZy5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgXG4gICAgT2JzZXJ2ZUluZXJzZWN0aW5nRGlyZWN0aXZlXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgXSxcbiAgZXhwb3J0czogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFVpTW9kdWxlIHsgXG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWd1cmF0aW9uPzogVWlDb25maWd1cmF0aW9uKTogTW9kdWxlV2l0aFByb3ZpZGVyczxVaU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVWlNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiAnRmFjdG9yVWlDb25maWd1cmF0aW9uJywgdXNlVmFsdWU6IGNvbmZpZ3VyYXRpb24gfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Public API Surface of ui
3
+ */
4
+ export * from './lib/ui.module';
5
+ export * from './lib/io/avatar/avatar.component';
6
+ export * from './lib/io/icon/icon.component';
7
+ export * from './lib/io/image/image.component';
8
+ export * from './lib/io/progress/progress.component';
9
+ export * from './lib/io/rating/rating.component';
10
+ export * from './lib/io/timeline/timeline.component';
11
+ export * from './lib/observe-inersecting.directive';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1aVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pby9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pby9pY29uL2ljb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lvL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pby9wcm9ncmVzcy9wcm9ncmVzcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW8vcmF0aW5nL3JhdGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW8vdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29ic2VydmUtaW5lcnNlY3RpbmcuZGlyZWN0aXZlJztcbiJdfQ==
@@ -0,0 +1,515 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, PLATFORM_ID, Directive, Inject, Input, Output, NgModule, Component, HostBinding } from '@angular/core';
3
+ import * as i1$1 from '@angular/common';
4
+ import { isPlatformBrowser, CommonModule } from '@angular/common';
5
+ import * as i1 from '@factor_ec/utils';
6
+
7
+ class ObserveInersectingDirective {
8
+ constructor(element, platformId) {
9
+ this.element = element;
10
+ this.platformId = platformId;
11
+ this.event = new EventEmitter();
12
+ }
13
+ ngOnInit() {
14
+ if (isPlatformBrowser(this.platformId)) {
15
+ if ("IntersectionObserver" in window) {
16
+ const elementObserver = new IntersectionObserver((entries, observer) => {
17
+ entries.forEach((entry) => {
18
+ this.event.emit(entry.isIntersecting);
19
+ });
20
+ }, this.options);
21
+ elementObserver.observe(this.element.nativeElement);
22
+ }
23
+ else {
24
+ console.error('ftObserveIntersecting not available in this browser.');
25
+ }
26
+ }
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ObserveInersectingDirective, deps: [{ token: i0.ElementRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: ObserveInersectingDirective, selector: "[ftObserveInersecting]", inputs: { options: ["ftObserveIntersectingOptions", "options"] }, outputs: { event: "ftObserveIntersecting" }, ngImport: i0 }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ObserveInersectingDirective, decorators: [{
32
+ type: Directive,
33
+ args: [{
34
+ selector: '[ftObserveInersecting]'
35
+ }]
36
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Object, decorators: [{
37
+ type: Inject,
38
+ args: [PLATFORM_ID]
39
+ }] }]; }, propDecorators: { options: [{
40
+ type: Input,
41
+ args: ['ftObserveIntersectingOptions']
42
+ }], event: [{
43
+ type: Output,
44
+ args: ['ftObserveIntersecting']
45
+ }] } });
46
+
47
+ class UiModule {
48
+ static forRoot(configuration) {
49
+ return {
50
+ ngModule: UiModule,
51
+ providers: [
52
+ { provide: 'FactorUiConfiguration', useValue: configuration }
53
+ ]
54
+ };
55
+ }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
57
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: UiModule, declarations: [ObserveInersectingDirective] }); }
58
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: UiModule, decorators: [{
61
+ type: NgModule,
62
+ args: [{
63
+ declarations: [
64
+ ObserveInersectingDirective
65
+ ],
66
+ imports: [],
67
+ exports: []
68
+ }]
69
+ }] });
70
+
71
+ class AvatarComponent {
72
+ set src(value) {
73
+ if (value && value.trim() != '') {
74
+ this._src = value;
75
+ let image = new Image();
76
+ image.src = value;
77
+ image.onload = () => {
78
+ if ("decode" in image) {
79
+ image.decode().then(() => {
80
+ this.loaded = true;
81
+ });
82
+ }
83
+ else {
84
+ console.error('Image.decode not available.');
85
+ }
86
+ };
87
+ }
88
+ }
89
+ set label(value) {
90
+ this._label = value;
91
+ this.initials = this.getInitials(value);
92
+ }
93
+ get backgroundColor() {
94
+ return this.color || this.colorService.hex(this._label);
95
+ }
96
+ get backgroundImage() {
97
+ return this._src ? `url(${this._src})` : '';
98
+ }
99
+ get hostClasses() {
100
+ return [
101
+ 'ft-avatar',
102
+ this.class
103
+ ].join(' ');
104
+ }
105
+ constructor(colorService) {
106
+ this.colorService = colorService;
107
+ this.class = '';
108
+ }
109
+ ngOnInit() {
110
+ }
111
+ getInitials(value) {
112
+ let allInitials = value.match(/\b\w/g) || [];
113
+ let initials = ((allInitials.shift() || '') + (allInitials.pop() || '')).toUpperCase();
114
+ return initials;
115
+ }
116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: AvatarComponent, deps: [{ token: i1.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
117
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: AvatarComponent, isStandalone: true, selector: "ft-avatar", inputs: { color: "color", src: "src", label: "label", class: "class" }, host: { properties: { "style.background-color": "this.backgroundColor", "style.background-image": "this.backgroundImage", "class": "this.hostClasses" } }, ngImport: i0, template: "<div *ngIf=\"!loaded\">{{ initials }}</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
118
+ }
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: AvatarComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'ft-avatar', standalone: true, imports: [CommonModule], template: "<div *ngIf=\"!loaded\">{{ initials }}</div>" }]
122
+ }], ctorParameters: function () { return [{ type: i1.ColorService }]; }, propDecorators: { color: [{
123
+ type: Input
124
+ }], src: [{
125
+ type: Input
126
+ }], label: [{
127
+ type: Input
128
+ }], backgroundColor: [{
129
+ type: HostBinding,
130
+ args: ['style.background-color']
131
+ }], backgroundImage: [{
132
+ type: HostBinding,
133
+ args: ['style.background-image']
134
+ }], class: [{
135
+ type: Input
136
+ }], hostClasses: [{
137
+ type: HostBinding,
138
+ args: ['class']
139
+ }] } });
140
+
141
+ class IconComponent {
142
+ set collection(collection) {
143
+ this._collection = collection;
144
+ this.update();
145
+ }
146
+ set mode(mode) {
147
+ this._mode = mode;
148
+ this.update();
149
+ }
150
+ set name(name) {
151
+ this._name = name;
152
+ this.update();
153
+ }
154
+ set path(path) {
155
+ this._path = path;
156
+ this.update();
157
+ }
158
+ get hostClasses() {
159
+ return [
160
+ 'ft-icon',
161
+ this.class
162
+ ].join(' ');
163
+ }
164
+ constructor(configuration) {
165
+ this.configuration = configuration;
166
+ this.class = '';
167
+ }
168
+ ngOnInit() {
169
+ this.update();
170
+ }
171
+ update() {
172
+ // Set the default collection if the mode is external
173
+ if (!this._collection) {
174
+ if (this.configuration.icon && this.configuration.icon.collection) {
175
+ this._collection = this.configuration.icon.collection;
176
+ }
177
+ else if (this._mode === 'external') {
178
+ this._collection = 'icons';
179
+ }
180
+ }
181
+ if (!this._mode) {
182
+ if (this.configuration.icon && this.configuration.icon.mode) {
183
+ this._mode = this.configuration.icon.mode;
184
+ }
185
+ else {
186
+ this._mode = 'external';
187
+ }
188
+ }
189
+ if (this._mode === 'external') {
190
+ // If the icon mode is external
191
+ if (!this._path) {
192
+ if (this.configuration.icon && this.configuration.icon.path) {
193
+ this._path = this.configuration.icon.path;
194
+ }
195
+ else {
196
+ this._path = 'assets';
197
+ }
198
+ }
199
+ this.url = `${this._path}/${this._collection}.svg#${this._name}`;
200
+ }
201
+ else {
202
+ // If the icon mode is inline
203
+ const name = this._collection && this._collection !== 'unset' ? `${this._collection}--${this._name}` : this._name;
204
+ this.url = `#${name}`;
205
+ }
206
+ }
207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: IconComponent, deps: [{ token: 'FactorUiConfiguration' }], target: i0.ɵɵFactoryTarget.Component }); }
208
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: IconComponent, isStandalone: true, selector: "ft-icon", inputs: { collection: "collection", mode: "mode", name: "name", path: "path", src: "src", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg *ngIf=\"!src; else imageTemplate\">\n <use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" />\n</svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
209
+ }
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: IconComponent, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'ft-icon', standalone: true, imports: [CommonModule], template: "<svg *ngIf=\"!src; else imageTemplate\">\n <use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" />\n</svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>" }]
213
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
214
+ type: Inject,
215
+ args: ['FactorUiConfiguration']
216
+ }] }]; }, propDecorators: { collection: [{
217
+ type: Input
218
+ }], mode: [{
219
+ type: Input
220
+ }], name: [{
221
+ type: Input
222
+ }], path: [{
223
+ type: Input
224
+ }], src: [{
225
+ type: Input
226
+ }], class: [{
227
+ type: Input
228
+ }], hostClasses: [{
229
+ type: HostBinding,
230
+ args: ['class']
231
+ }] } });
232
+
233
+ class ImageComponent {
234
+ constructor(element) {
235
+ this.element = element;
236
+ this.class = '';
237
+ this.loading = false;
238
+ this.shown = false;
239
+ }
240
+ ngOnInit() {
241
+ if ("IntersectionObserver" in window) {
242
+ let elementObserver = new IntersectionObserver((entries, observer) => {
243
+ entries.forEach((entry) => {
244
+ if (entry.isIntersecting) {
245
+ let image = new Image();
246
+ image.src = this.src;
247
+ setTimeout(() => {
248
+ if (!this.shown && !this.error) {
249
+ this.loading = true;
250
+ }
251
+ }, 100);
252
+ image.onerror = () => {
253
+ this.error = true;
254
+ this.loading = false;
255
+ };
256
+ image.onload = () => {
257
+ if ("decode" in image) {
258
+ image.decode().then(() => {
259
+ this.loading = false;
260
+ this.shown = true;
261
+ });
262
+ }
263
+ else {
264
+ this.loading = false;
265
+ this.shown = true;
266
+ }
267
+ };
268
+ elementObserver.unobserve(this.element.nativeElement);
269
+ }
270
+ });
271
+ }, {
272
+ rootMargin: "0px 0px 200px 0px"
273
+ });
274
+ elementObserver.observe(this.element.nativeElement);
275
+ }
276
+ else {
277
+ console.error('IntersectionObserver not available.');
278
+ this.loading = false;
279
+ this.shown = true;
280
+ }
281
+ }
282
+ get hostClasses() {
283
+ return [
284
+ 'ft-image',
285
+ this.class
286
+ ].join(' ');
287
+ }
288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ImageComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: ImageComponent, isStandalone: true, selector: "ft-image", inputs: { class: "class", src: "src" }, host: { properties: { "class.ft-image--error": "this.error", "class.ft-image--loading": "this.loading", "class": "this.hostClasses" } }, ngImport: i0, template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }] }); }
290
+ }
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ImageComponent, decorators: [{
292
+ type: Component,
293
+ args: [{ selector: 'ft-image', standalone: true, imports: [
294
+ CommonModule,
295
+ IconComponent
296
+ ], template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n" }]
297
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { class: [{
298
+ type: Input
299
+ }], error: [{
300
+ type: HostBinding,
301
+ args: ['class.ft-image--error']
302
+ }], loading: [{
303
+ type: HostBinding,
304
+ args: ['class.ft-image--loading']
305
+ }], src: [{
306
+ type: Input
307
+ }], hostClasses: [{
308
+ type: HostBinding,
309
+ args: ['class']
310
+ }] } });
311
+
312
+ class ProgressComponent {
313
+ constructor() {
314
+ this.class = '';
315
+ this.mode = 'indeterminate';
316
+ this.overlay = false;
317
+ }
318
+ ngOnInit() {
319
+ this.value = 0;
320
+ }
321
+ get hostClasses() {
322
+ return [
323
+ 'ft-progress',
324
+ this.overlay ? 'ft-progress--overlay' : '',
325
+ this.class
326
+ ].join(' ');
327
+ }
328
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
329
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: ProgressComponent, isStandalone: true, selector: "lib-progress", inputs: { class: "class", color: "color", mode: "mode", overlay: "overlay", size: "size", value: "value" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg [ngStyle]=\"{'--ft-bar-color': color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid\">\n <circle class=\"ft-track\" cx=\"50\" cy=\"50\" r=\"40\" />\n <circle class=\"ft-bar\" [ngClass]=\"mode === 'determinate' ? 'ft-bar--determinate' : 'ft-bar--indeterminate'\" cx=\"50\"\n cy=\"50\" r=\"40\"\n [ngStyle]=\"{'stroke-dashoffset': mode=='determinate'? 'calc((3.14159265 * 40 * 2 * (100 - '+value+')) / 100)' : null}\">\n </circle>\n</svg>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
330
+ }
331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ProgressComponent, decorators: [{
332
+ type: Component,
333
+ args: [{ selector: 'lib-progress', standalone: true, imports: [CommonModule], template: "<svg [ngStyle]=\"{'--ft-bar-color': color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid\">\n <circle class=\"ft-track\" cx=\"50\" cy=\"50\" r=\"40\" />\n <circle class=\"ft-bar\" [ngClass]=\"mode === 'determinate' ? 'ft-bar--determinate' : 'ft-bar--indeterminate'\" cx=\"50\"\n cy=\"50\" r=\"40\"\n [ngStyle]=\"{'stroke-dashoffset': mode=='determinate'? 'calc((3.14159265 * 40 * 2 * (100 - '+value+')) / 100)' : null}\">\n </circle>\n</svg>" }]
334
+ }], ctorParameters: function () { return []; }, propDecorators: { class: [{
335
+ type: Input
336
+ }], color: [{
337
+ type: Input
338
+ }], mode: [{
339
+ type: Input
340
+ }], overlay: [{
341
+ type: Input
342
+ }], size: [{
343
+ type: Input
344
+ }], value: [{
345
+ type: Input
346
+ }], hostClasses: [{
347
+ type: HostBinding,
348
+ args: ['class']
349
+ }] } });
350
+
351
+ class RatingComponent {
352
+ constructor() {
353
+ this.disabled = false;
354
+ this.propagateChange = (_) => { };
355
+ this.readOnly = false;
356
+ this.stars = [
357
+ { value: 1 },
358
+ { value: 2 },
359
+ { value: 3 },
360
+ { value: 4 },
361
+ { value: 5 }
362
+ ];
363
+ }
364
+ ngOnInit() {
365
+ }
366
+ get value() {
367
+ return this._value;
368
+ }
369
+ set value(value) {
370
+ this._value = value;
371
+ this.propagateChange(this._value);
372
+ }
373
+ registerOnChange(fn) {
374
+ this.propagateChange = fn;
375
+ }
376
+ registerOnTouched(fn) {
377
+ //this.propagateChange = fn;
378
+ }
379
+ setDisabledState(isDisabled) {
380
+ this.disabled = isDisabled;
381
+ }
382
+ setRate(value, isHover) {
383
+ if (isHover) {
384
+ this.hoverValue = value;
385
+ }
386
+ else {
387
+ this.value = value;
388
+ }
389
+ }
390
+ updateValue(event) {
391
+ this.value = event.target.value;
392
+ }
393
+ writeValue(value) {
394
+ this.value = value;
395
+ }
396
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
397
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: RatingComponent, isStandalone: true, selector: "lib-rating", inputs: { readOnly: "readOnly", value: "value" }, ngImport: i0, template: "<ng-container *ngFor=\"let star of stars\">\n <ng-container *ngTemplateOutlet=\"!readOnly? buttonTemplate : starTemplate; context:{star:star}\"></ng-container>\n</ng-container>\n<ng-template #buttonTemplate let-star=\"star\">\n <button type=\"button\" class=\"ft-rating__item\" *ngIf=\"!readOnly; else starTemplate\" [disabled]=\"disabled\"\n (mouseover)=\"setRate(star.value, true)\" (focus)=\"setRate(star.value, true)\" (blur)=\"setRate(0, true)\"\n (mouseout)=\"setRate(0, true)\" (click)=\"setRate(star.value)\">\n <ng-container *ngTemplateOutlet=\"starTemplate; context:{star:star}\"></ng-container>\n </button>\n</ng-template>\n<ng-template #starTemplate let-star=\"star\">\n <svg [ngClass]=\"{'ft-rating__item-icon--hover': hoverValue >= star.value, 'ft-rating__item-icon--active': value >= star.value}\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M17.93 21.315c-.534.408-5.22-3.186-5.881-3.181-.663 0-5.307 3.656-5.846 3.254-.537-.403 1.29-6.165 1.081-6.822-.209-.656-4.972-4.138-4.772-4.796.201-.658 6.015-.627 6.55-1.036.533-.41 2.233-6.215 2.895-6.219.663 0 2.43 5.779 2.968 6.182.539.403 6.352.297 6.56.953.21.656-4.513 4.197-4.714 4.856-.2.658 1.692 6.398 1.159 6.808z\" />\n </svg>\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
398
+ }
399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatingComponent, decorators: [{
400
+ type: Component,
401
+ args: [{ selector: 'lib-rating', standalone: true, imports: [CommonModule], template: "<ng-container *ngFor=\"let star of stars\">\n <ng-container *ngTemplateOutlet=\"!readOnly? buttonTemplate : starTemplate; context:{star:star}\"></ng-container>\n</ng-container>\n<ng-template #buttonTemplate let-star=\"star\">\n <button type=\"button\" class=\"ft-rating__item\" *ngIf=\"!readOnly; else starTemplate\" [disabled]=\"disabled\"\n (mouseover)=\"setRate(star.value, true)\" (focus)=\"setRate(star.value, true)\" (blur)=\"setRate(0, true)\"\n (mouseout)=\"setRate(0, true)\" (click)=\"setRate(star.value)\">\n <ng-container *ngTemplateOutlet=\"starTemplate; context:{star:star}\"></ng-container>\n </button>\n</ng-template>\n<ng-template #starTemplate let-star=\"star\">\n <svg [ngClass]=\"{'ft-rating__item-icon--hover': hoverValue >= star.value, 'ft-rating__item-icon--active': value >= star.value}\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M17.93 21.315c-.534.408-5.22-3.186-5.881-3.181-.663 0-5.307 3.656-5.846 3.254-.537-.403 1.29-6.165 1.081-6.822-.209-.656-4.972-4.138-4.772-4.796.201-.658 6.015-.627 6.55-1.036.533-.41 2.233-6.215 2.895-6.219.663 0 2.43 5.779 2.968 6.182.539.403 6.352.297 6.56.953.21.656-4.513 4.197-4.714 4.856-.2.658 1.692 6.398 1.159 6.808z\" />\n </svg>\n</ng-template>" }]
402
+ }], ctorParameters: function () { return []; }, propDecorators: { readOnly: [{
403
+ type: Input
404
+ }], value: [{
405
+ type: Input
406
+ }] } });
407
+
408
+ class TimelineComponent {
409
+ get hostClasses() {
410
+ return [
411
+ 'ft-timeline',
412
+ this.class
413
+ ].join(' ');
414
+ }
415
+ ;
416
+ constructor() {
417
+ this.startDate = new Date();
418
+ this.data = [];
419
+ this.dataParsed = {
420
+ months: [],
421
+ days: [],
422
+ weekends: []
423
+ };
424
+ this.class = '';
425
+ }
426
+ ngOnInit() {
427
+ this.addMonth(this.calcStartDate());
428
+ }
429
+ addMonth(date) {
430
+ const month = this.getMonth(date.getMonth(), date.getFullYear());
431
+ const currentDays = this.dataParsed.days.length;
432
+ this.dataParsed.months = [...this.dataParsed.months, { date: month.days[0], daysInMonth: month.days.length }];
433
+ this.dataParsed.days = [...this.dataParsed.days, ...month.days];
434
+ this.dataParsed.weekends = [...this.dataParsed.weekends, ...month.weekends];
435
+ if (!this.currentDate && month.currentDate) {
436
+ this.currentDate = currentDays + month.currentDate;
437
+ }
438
+ this.dataParsed.days.some((day, index) => {
439
+ if ([0, 6].includes(day.getDay())) {
440
+ this.dataParsed.weekendStart = index;
441
+ return true;
442
+ }
443
+ return false;
444
+ });
445
+ this.parseTasks();
446
+ }
447
+ calcStartDate() {
448
+ return new Date();
449
+ }
450
+ getMonth(month, year) {
451
+ const days = [];
452
+ const weekends = [];
453
+ let currentDate = null;
454
+ let today = new Date();
455
+ const date = new Date(year, month + 1, 0);
456
+ for (let i = 1; i <= date.getDate(); i++) {
457
+ const idate = new Date(year, month, i);
458
+ if ([0, 6].includes(idate.getDay())) {
459
+ if (idate.getDay() === 6) {
460
+ weekends.push([idate]);
461
+ }
462
+ else {
463
+ weekends[weekends.length - 1].push(idate);
464
+ }
465
+ }
466
+ if (idate.getTime() === new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime()) {
467
+ currentDate = i - 1;
468
+ }
469
+ days.push(idate);
470
+ }
471
+ const data = { days, weekends };
472
+ if (currentDate) {
473
+ data.currentDate = currentDate;
474
+ }
475
+ return data;
476
+ }
477
+ parseTasks() {
478
+ let tasks = this.data.filter(task => task.endAt) /*.sort((a, b) => a.)*/;
479
+ this.dataParsed.tasks = tasks.map((task) => {
480
+ return {
481
+ label: task.label,
482
+ start: 10,
483
+ type: task.type,
484
+ size: 1
485
+ };
486
+ });
487
+ }
488
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: TimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
489
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: TimelineComponent, isStandalone: true, selector: "lib-timeline", inputs: { data: "data", class: "class" }, host: { properties: { "style.--current-date": "this.currentDate", "class": "this.hostClasses" } }, ngImport: i0, template: "<div class=\"ft-weekends\" [style.--start]=\"dataParsed.weekendStart\">\n <div class=\"ft-weekends__item\" [style.--weekend-size]=\"weekend.length\" *ngFor=\"let weekend of dataParsed.weekends\">\n </div>\n</div>\n<div class=\"ft-current-date\" *ngIf=\"currentDate\"></div>\n<div class=\"ft-header\">\n <div class=\"ft-header__months\">\n <div [style.--days-in-month]=\"month.daysInMonth\" *ngFor=\"let month of dataParsed.months; let i = index\">{{\n month.date\n | date: 'MMMM, yyyy' }}</div>\n </div>\n <div class=\"ft-header__days\">\n <div *ngFor=\"let day of dataParsed.days; let i = index\">\n <div [ngClass]=\"{active: currentDate && currentDate === i}\">{{ day | date:'d' }}</div>\n </div>\n </div>\n</div>\n<div class=\"ft-tasks\">\n <button type=\"button\" class=\"ft-tasks__item\" [class.tasks__item--milestone]=\"task.type === 'milestone'\"\n [style.--start]=\"task.start\" [style.--days]=\"task.type === 'milestone' ? 1 : task.size\"\n style=\" --color-rgb: 130, 121, 210;\" *ngFor=\"let task of dataParsed.tasks;\">{{ task.label }}</button>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] }); }
490
+ }
491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: TimelineComponent, decorators: [{
492
+ type: Component,
493
+ args: [{ selector: 'lib-timeline', standalone: true, imports: [CommonModule], template: "<div class=\"ft-weekends\" [style.--start]=\"dataParsed.weekendStart\">\n <div class=\"ft-weekends__item\" [style.--weekend-size]=\"weekend.length\" *ngFor=\"let weekend of dataParsed.weekends\">\n </div>\n</div>\n<div class=\"ft-current-date\" *ngIf=\"currentDate\"></div>\n<div class=\"ft-header\">\n <div class=\"ft-header__months\">\n <div [style.--days-in-month]=\"month.daysInMonth\" *ngFor=\"let month of dataParsed.months; let i = index\">{{\n month.date\n | date: 'MMMM, yyyy' }}</div>\n </div>\n <div class=\"ft-header__days\">\n <div *ngFor=\"let day of dataParsed.days; let i = index\">\n <div [ngClass]=\"{active: currentDate && currentDate === i}\">{{ day | date:'d' }}</div>\n </div>\n </div>\n</div>\n<div class=\"ft-tasks\">\n <button type=\"button\" class=\"ft-tasks__item\" [class.tasks__item--milestone]=\"task.type === 'milestone'\"\n [style.--start]=\"task.start\" [style.--days]=\"task.type === 'milestone' ? 1 : task.size\"\n style=\" --color-rgb: 130, 121, 210;\" *ngFor=\"let task of dataParsed.tasks;\">{{ task.label }}</button>\n</div>" }]
494
+ }], ctorParameters: function () { return []; }, propDecorators: { data: [{
495
+ type: Input
496
+ }], currentDate: [{
497
+ type: HostBinding,
498
+ args: ['style.--current-date']
499
+ }], class: [{
500
+ type: Input
501
+ }], hostClasses: [{
502
+ type: HostBinding,
503
+ args: ['class']
504
+ }] } });
505
+
506
+ /*
507
+ * Public API Surface of ui
508
+ */
509
+
510
+ /**
511
+ * Generated bundle index. Do not edit.
512
+ */
513
+
514
+ export { AvatarComponent, IconComponent, ImageComponent, ObserveInersectingDirective, ProgressComponent, RatingComponent, TimelineComponent, UiModule };
515
+ //# sourceMappingURL=factor_ec-ui.mjs.map