@yuuvis/material 2.0.0-beta.5 → 2.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 (27) hide show
  1. package/fesm2022/yuuvis-material.mjs +190 -101
  2. package/fesm2022/yuuvis-material.mjs.map +1 -1
  3. package/lib/assets/i18n/de.json +8 -0
  4. package/lib/assets/i18n/en.json +8 -0
  5. package/lib/directives/button/index.d.ts +2 -0
  6. package/lib/directives/{yuv-button.directive.d.ts → button/ymt-button.directive.d.ts} +6 -6
  7. package/lib/directives/{icon-button/icon-button.model.d.ts → button/ymt-button.model.d.ts} +1 -1
  8. package/lib/directives/icon-button/index.d.ts +2 -2
  9. package/lib/directives/icon-button/ymt-icon-button.directive.d.ts +15 -0
  10. package/lib/directives/icon-button/ymt-icon-button.model.d.ts +4 -0
  11. package/lib/directives/index.d.ts +1 -1
  12. package/lib/providers/material.providers.d.ts +1 -1
  13. package/lib/services/index.d.ts +1 -1
  14. package/lib/services/{yuv-mat-icon-registry.service.d.ts → ymt-mat-icon-registry.service.d.ts} +3 -3
  15. package/lib/services/ymt-mat-paginator-intl.service.d.ts +12 -0
  16. package/package.json +1 -1
  17. package/scss/components/index.scss +1 -1
  18. package/scss/elements/_bidirectonal-layout.scss +3 -0
  19. package/scss/elements/_index.scss +1 -0
  20. package/scss/elements/_root.scss +2 -2
  21. package/scss/material-components/_button.scss +19 -0
  22. package/scss/material-components/_icon-button.scss +2 -0
  23. package/scss/material-components/_icon.scss +7 -0
  24. package/scss/themes/yuuvis-standard/theme.scss +18 -19
  25. package/scss/token/_token.scss +3 -0
  26. package/lib/directives/icon-button/icon-button.directive.d.ts +0 -15
  27. package/scss/components/_loading-indicator.scss +0 -126
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Inject, Injectable, input, booleanAttribute, inject, EnvironmentInjector, ApplicationRef, ElementRef, effect, createComponent, Directive, makeEnvironmentProviders } from '@angular/core';
2
+ import { Inject, Injectable, inject, makeEnvironmentProviders, input, booleanAttribute, ElementRef, EnvironmentInjector, ApplicationRef, effect, createComponent, Directive } from '@angular/core';
3
3
  import { MatIconRegistry } from '@angular/material/icon';
4
4
  import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
5
5
  import { MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';
@@ -7,16 +7,20 @@ import * as i1 from '@angular/common/http';
7
7
  import * as i2 from '@angular/platform-browser';
8
8
  import { DOCUMENT } from '@angular/common';
9
9
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
10
- import { MatButton, MatIconButton } from '@angular/material/button';
10
+ import { MatPaginatorIntl } from '@angular/material/paginator';
11
+ import { TranslateService } from '@ngx-translate/core';
12
+ import { MAT_TABS_CONFIG } from '@angular/material/tabs';
13
+ import { MAT_RIPPLE_GLOBAL_OPTIONS } from '@angular/material/core';
14
+ import { MatIconButton, MatButton } from '@angular/material/button';
11
15
 
12
- class YuvMatIconRegistry extends MatIconRegistry {
13
- #yuvFontSetClassNames = ['material-symbols-sharp'];
16
+ class YmtMatIconRegistryService extends MatIconRegistry {
17
+ #ymtFontSetClassNames = ['material-symbols-sharp'];
14
18
  constructor(_httpClient, _sanitizer, document, _errorHandler) {
15
19
  super(_httpClient, _sanitizer, document, _errorHandler);
16
20
  this.setDefaultFontSetClass();
17
21
  }
18
22
  setDefaultFontSetClass(...classnames) {
19
- const merged = [...new Set([...classnames, ...this.#yuvFontSetClassNames])];
23
+ const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];
20
24
  super.setDefaultFontSetClass(...merged);
21
25
  return this;
22
26
  }
@@ -28,10 +32,10 @@ class YuvMatIconRegistry extends MatIconRegistry {
28
32
  }
29
33
  return false;
30
34
  }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvMatIconRegistry, deps: [{ token: i1.HttpClient }, { token: i2.DomSanitizer }, { token: DOCUMENT }, { token: i0.ErrorHandler }], target: i0.ɵɵFactoryTarget.Injectable });
32
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvMatIconRegistry, providedIn: 'root' });
35
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatIconRegistryService, deps: [{ token: i1.HttpClient }, { token: i2.DomSanitizer }, { token: DOCUMENT }, { token: i0.ErrorHandler }], target: i0.ɵɵFactoryTarget.Injectable });
36
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatIconRegistryService, providedIn: 'root' });
33
37
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvMatIconRegistry, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatIconRegistryService, decorators: [{
35
39
  type: Injectable,
36
40
  args: [{
37
41
  providedIn: 'root'
@@ -41,95 +45,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
41
45
  args: [DOCUMENT]
42
46
  }] }, { type: i0.ErrorHandler }] });
43
47
 
44
- class YuvButtonDirective {
45
- ymtButton = input('primary');
46
- disabled = input(false, { transform: booleanAttribute });
47
- ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });
48
- disableRipple = input(false, { transform: booleanAttribute });
49
- disabledInteractive = input(false, { transform: booleanAttribute });
50
- // Todo: Add input "isBusy" as "busy inactive state": not clickable and with mat-spinner in button
51
- #environmentInjector = inject(EnvironmentInjector);
52
- #applicationRef = inject(ApplicationRef);
53
- #host = inject(ElementRef).nativeElement;
54
- #matButtonComponentRef = null;
55
- #iconPrefix = [];
56
- #noneIconNodes = [];
57
- #iconSuffix = [];
58
- constructor() {
59
- effect(() => {
60
- const disabled = this.disabled();
61
- const ariaDisabled = this.ariaDisabled();
62
- const disableRipple = this.disableRipple();
63
- const disabledInteractive = this.disabledInteractive();
64
- this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);
65
- });
66
- }
67
- ngOnInit() {
68
- this.#iconPrefix = this.#getIconPrefixElements();
69
- this.#noneIconNodes = this.#getNoneIconNodes();
70
- this.#iconSuffix = this.#getIconSuffixElements();
71
- }
72
- ngAfterViewInit() {
73
- this.#matButtonComponentRef = this.#createMatButtonComponent();
74
- this.#updateInputs();
75
- }
76
- #updateInputs(disabled = this.disabled(), ariaDisabled = this.ariaDisabled(), disableRipple = this.disableRipple(), disabledInteractive = this.disabledInteractive()) {
77
- this.#matButtonComponentRef?.setInput('disabled', disabled);
78
- this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);
79
- this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);
80
- this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);
81
- }
82
- #createMatButtonComponent(host = this.#host, iconPrefix = this.#iconPrefix, noneIconNodes = this.#noneIconNodes, iconSuffix = this.#iconSuffix) {
83
- const componentRef = createComponent(MatButton, {
84
- environmentInjector: this.#environmentInjector,
85
- hostElement: host,
86
- projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]
48
+ /* Draft */
49
+ class YmtMatPaginatorIntlService extends MatPaginatorIntl {
50
+ #translate = inject(TranslateService);
51
+ rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');
52
+ getRangeLabel = (page, pageSize, length) => {
53
+ if (length === 0 || pageSize === 0) {
54
+ return `0 ${this.rangeLabelSeparator} ${length}`;
55
+ }
56
+ length = Math.max(length, 0);
57
+ const startIndex = page * pageSize;
58
+ // If the start index exceeds the list length, do not try and fix the end index to the end.
59
+ const endIndex = startIndex < length ?
60
+ Math.min(startIndex + pageSize, length) :
61
+ startIndex + pageSize;
62
+ return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;
63
+ };
64
+ //=== Proposal =========================================================
65
+ injectTranslateService(translate) {
66
+ this.#translate = translate;
67
+ this.#translate.onLangChange.subscribe(() => {
68
+ this.translateLabels();
87
69
  });
88
- this.#applicationRef.attachView(componentRef.hostView);
89
- componentRef.changeDetectorRef.detectChanges();
90
- return componentRef;
91
- }
92
- #getIconPrefixElements() {
93
- return Array.from(this.#host.querySelectorAll('mat-icon:not([iconPositionEnd])'));
94
- }
95
- #getIconSuffixElements() {
96
- return Array.from(this.#host.querySelectorAll('mat-icon[iconPositionEnd]'));
70
+ this.translateLabels();
97
71
  }
98
- #getNoneIconNodes() {
99
- const iter = document.createNodeIterator(this.#host, NodeFilter.SHOW_ALL, (node) => {
100
- return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#host
101
- ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
102
- });
103
- let currentNode;
104
- const filteredNodes = [];
105
- while ((currentNode = iter.nextNode())) {
106
- filteredNodes.push(currentNode);
107
- }
108
- return filteredNodes;
72
+ translateLabels() {
73
+ this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');
74
+ this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');
75
+ this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');
76
+ this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');
77
+ this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');
78
+ this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');
79
+ this.changes.next();
109
80
  }
110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
111
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: YuvButtonDirective, isStandalone: true, selector: "button[ymtButton], a[ymtButton]", inputs: { ymtButton: { classPropertyName: "ymtButton", publicName: "ymtButton", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaDisabled: { classPropertyName: "ariaDisabled", publicName: "aria-disabled", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, disabledInteractive: { classPropertyName: "disabledInteractive", publicName: "disabledInteractive", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.mat-flat-button": "ymtButton() === \"primary\" ? \"\" : null", "attr.mat-stroked-button": "ymtButton() === \"secondary\" ? \"\" : null", "attr.mat-button": "ymtButton() === \"tertiary\" ? \"\" : null" } }, ngImport: i0 });
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatPaginatorIntlService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
82
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatPaginatorIntlService });
112
83
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvButtonDirective, decorators: [{
114
- type: Directive,
115
- args: [{
116
- selector: 'button[ymtButton], a[ymtButton]',
117
- standalone: true,
118
- host: {
119
- '[attr.mat-flat-button]': 'ymtButton() === "primary" ? "" : null',
120
- '[attr.mat-stroked-button]': 'ymtButton() === "secondary" ? "" : null',
121
- '[attr.mat-button]': 'ymtButton() === "tertiary" ? "" : null',
122
- },
123
- }]
124
- }], ctorParameters: () => [] });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtMatPaginatorIntlService, decorators: [{
85
+ type: Injectable
86
+ }] });
125
87
 
126
- const provideYuvMaterial = () => {
88
+ const provideYmtMaterial = () => {
127
89
  const providers = [
128
90
  /**
129
91
  * Material Icon Registry Service Override
130
92
  */
131
- { provide: MatIconRegistry, useClass: YuvMatIconRegistry },
132
- YuvButtonDirective,
93
+ { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },
94
+ /**
95
+ * Material Ripple Config
96
+ */
97
+ { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } },
98
+ /**
99
+ * Material Paginator Internationalization Service Override
100
+ */
101
+ {
102
+ provide: MatPaginatorIntl,
103
+ useFactory: (translate) => {
104
+ const service = new YmtMatPaginatorIntlService();
105
+ service.injectTranslateService(translate);
106
+ return service;
107
+ },
108
+ deps: [TranslateService]
109
+ },
133
110
  /**
134
111
  * Material Tooltip Config
135
112
  */
@@ -148,23 +125,34 @@ const provideYuvMaterial = () => {
148
125
  appearance: 'outline',
149
126
  floatLabel: 'always'
150
127
  }
128
+ },
129
+ /**
130
+ * Material Tab Config
131
+ */
132
+ {
133
+ provide: MAT_TABS_CONFIG,
134
+ useValue: {
135
+ animationDuration: '0',
136
+ stretchTabs: false,
137
+ alignTabs: 'start'
138
+ }
151
139
  }
152
140
  ];
153
141
  return makeEnvironmentProviders(providers);
154
142
  };
155
143
 
156
- var ICON_BUTTON_SIZE;
157
- (function (ICON_BUTTON_SIZE) {
158
- ICON_BUTTON_SIZE["small"] = "small";
159
- ICON_BUTTON_SIZE["medium"] = "medium";
160
- })(ICON_BUTTON_SIZE || (ICON_BUTTON_SIZE = {}));
144
+ var YMT_ICON_BUTTON_SIZE;
145
+ (function (YMT_ICON_BUTTON_SIZE) {
146
+ YMT_ICON_BUTTON_SIZE["small"] = "small";
147
+ YMT_ICON_BUTTON_SIZE["medium"] = "medium";
148
+ })(YMT_ICON_BUTTON_SIZE || (YMT_ICON_BUTTON_SIZE = {}));
161
149
 
162
- class IconButtonDirective {
150
+ class YmtIconButtonDirective {
163
151
  disabled = input(false, { transform: booleanAttribute });
164
152
  disableRipple = input(false, { transform: booleanAttribute });
165
153
  ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });
166
154
  disabledInteractive = input(false, { transform: booleanAttribute });
167
- size = input(ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });
155
+ size = input(YMT_ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });
168
156
  #elRef = inject(ElementRef);
169
157
  #host = this.#elRef.nativeElement;
170
158
  #injector = inject(EnvironmentInjector);
@@ -188,8 +176,8 @@ class IconButtonDirective {
188
176
  this.#MatIconButtonComponentRef = this.#createComponent();
189
177
  }
190
178
  #applySizeClass() {
191
- this.size() === ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);
192
- this.size() === ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);
179
+ this.size() === YMT_ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);
180
+ this.size() === YMT_ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);
193
181
  }
194
182
  #setMaterialInputs() {
195
183
  this.#materialIconButtonInputs.forEach(({ name, signal }) => {
@@ -205,10 +193,10 @@ class IconButtonDirective {
205
193
  componentRef.changeDetectorRef.detectChanges();
206
194
  return componentRef;
207
195
  }
208
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: IconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
209
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: IconButtonDirective, isStandalone: true, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, ariaDisabled: { classPropertyName: "ariaDisabled", publicName: "aria-disabled", isSignal: true, isRequired: false, transformFunction: null }, disabledInteractive: { classPropertyName: "disabledInteractive", publicName: "disabledInteractive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "icon-button-size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "mat-icon-button": "" } }, ngImport: i0 });
196
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtIconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
197
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.12", type: YmtIconButtonDirective, isStandalone: true, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, ariaDisabled: { classPropertyName: "ariaDisabled", publicName: "aria-disabled", isSignal: true, isRequired: false, transformFunction: null }, disabledInteractive: { classPropertyName: "disabledInteractive", publicName: "disabledInteractive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "icon-button-size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "mat-icon-button": "" } }, ngImport: i0 });
210
198
  }
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: IconButtonDirective, decorators: [{
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtIconButtonDirective, decorators: [{
212
200
  type: Directive,
213
201
  args: [{
214
202
  selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',
@@ -219,11 +207,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
219
207
  }]
220
208
  }], ctorParameters: () => [] });
221
209
 
210
+ var YMT_BUTTON_SIZE;
211
+ (function (YMT_BUTTON_SIZE) {
212
+ YMT_BUTTON_SIZE["small"] = "small";
213
+ YMT_BUTTON_SIZE["medium"] = "medium";
214
+ })(YMT_BUTTON_SIZE || (YMT_BUTTON_SIZE = {}));
215
+
216
+ var MatButtonAttributeEnum;
217
+ (function (MatButtonAttributeEnum) {
218
+ MatButtonAttributeEnum["primary"] = "mat-flat-button";
219
+ MatButtonAttributeEnum["secondary"] = "mat-stroked-button";
220
+ MatButtonAttributeEnum["tertiary"] = "mat-button";
221
+ })(MatButtonAttributeEnum || (MatButtonAttributeEnum = {}));
222
+ class YmtButtonDirective {
223
+ ymtButton = input('primary');
224
+ disabled = input(false, { transform: booleanAttribute });
225
+ ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });
226
+ disableRipple = input(false, { transform: booleanAttribute });
227
+ disabledInteractive = input(false, { transform: booleanAttribute });
228
+ size = input(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });
229
+ // Todo: Add input "isBusy" as "busy inactive state": not clickable and with mat-spinner in button
230
+ #environmentInjector = inject(EnvironmentInjector);
231
+ #applicationRef = inject(ApplicationRef);
232
+ #hostElement = inject(ElementRef).nativeElement;
233
+ #matButtonComponentRef = null;
234
+ #iconPrefix = [];
235
+ #noneIconNodes = [];
236
+ #iconSuffix = [];
237
+ #matButtonAttribute = MatButtonAttributeEnum;
238
+ constructor() {
239
+ effect(() => {
240
+ const disabled = this.disabled();
241
+ const ariaDisabled = this.ariaDisabled();
242
+ const disableRipple = this.disableRipple();
243
+ const disabledInteractive = this.disabledInteractive();
244
+ this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);
245
+ });
246
+ effect(() => {
247
+ this.#applySizeClass();
248
+ });
249
+ }
250
+ ngOnInit() {
251
+ this.#iconPrefix = this.#getIconPrefixElements();
252
+ this.#noneIconNodes = this.#getNoneIconNodes();
253
+ this.#iconSuffix = this.#getIconSuffixElements();
254
+ this.#matButtonComponentRef = this.#createMatButtonComponent();
255
+ }
256
+ ngAfterViewInit() {
257
+ this.#updateInputs();
258
+ }
259
+ #updateInputs(disabled = this.disabled(), ariaDisabled = this.ariaDisabled(), disableRipple = this.disableRipple(), disabledInteractive = this.disabledInteractive()) {
260
+ this.#matButtonComponentRef?.setInput('disabled', disabled);
261
+ this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);
262
+ this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);
263
+ this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);
264
+ }
265
+ #createMatButtonComponent(hostElement = this.#hostElement, environmentInjector = this.#environmentInjector, iconPrefix = this.#iconPrefix, noneIconNodes = this.#noneIconNodes, iconSuffix = this.#iconSuffix) {
266
+ this.#setInitialAttributesToHost();
267
+ const componentRef = createComponent(MatButton, {
268
+ environmentInjector,
269
+ hostElement,
270
+ projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]
271
+ });
272
+ this.#applicationRef.attachView(componentRef.hostView);
273
+ componentRef.changeDetectorRef.detectChanges();
274
+ return componentRef;
275
+ }
276
+ #setInitialAttributesToHost() {
277
+ this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');
278
+ }
279
+ #getIconPrefixElements() {
280
+ return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));
281
+ }
282
+ #getIconSuffixElements() {
283
+ return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));
284
+ }
285
+ #getNoneIconNodes() {
286
+ const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {
287
+ return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
288
+ });
289
+ let currentNode;
290
+ const filteredNodes = [];
291
+ while ((currentNode = iter.nextNode())) {
292
+ filteredNodes.push(currentNode);
293
+ }
294
+ return filteredNodes;
295
+ }
296
+ #applySizeClass() {
297
+ this.size() === YMT_BUTTON_SIZE.small ? this.#hostElement.classList.add(`ymt-button--size-s`) : this.#hostElement.classList.remove(`ymt-button--size-s`);
298
+ this.size() === YMT_BUTTON_SIZE.medium ? this.#hostElement.classList.add(`ymt-button--size-m`) : this.#hostElement.classList.remove(`ymt-button--size-m`);
299
+ }
300
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
301
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.12", type: YmtButtonDirective, isStandalone: true, selector: "button[ymtButton], a[ymtButton]", inputs: { ymtButton: { classPropertyName: "ymtButton", publicName: "ymtButton", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaDisabled: { classPropertyName: "ariaDisabled", publicName: "aria-disabled", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, disabledInteractive: { classPropertyName: "disabledInteractive", publicName: "disabledInteractive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "button-size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
302
+ }
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtButtonDirective, decorators: [{
304
+ type: Directive,
305
+ args: [{
306
+ selector: 'button[ymtButton], a[ymtButton]',
307
+ standalone: true,
308
+ }]
309
+ }], ctorParameters: () => [] });
310
+
222
311
  var index = {};
223
312
 
224
313
  /**
225
314
  * Generated bundle index. Do not edit.
226
315
  */
227
316
 
228
- export { ICON_BUTTON_SIZE, IconButtonDirective, YuvButtonDirective, YuvMatIconRegistry, provideYuvMaterial };
317
+ export { YMT_BUTTON_SIZE, YMT_ICON_BUTTON_SIZE, YmtButtonDirective, YmtIconButtonDirective, YmtMatIconRegistryService, provideYmtMaterial };
229
318
  //# sourceMappingURL=yuuvis-material.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/yuv-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/directives/yuv-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/index.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YuvMatIconRegistry extends MatIconRegistry {\n #yuvFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#yuvFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import {\n ApplicationRef, ChangeDetectorRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector, input,\n OnInit,\n ViewContainerRef, Input, AfterViewInit, inject, effect, ComponentRef, booleanAttribute, signal, untracked\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\n\ntype ButtonType = 'primary' | 'secondary' | 'tertiary';\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true,\n host: {\n '[attr.mat-flat-button]': 'ymtButton() === \"primary\" ? \"\" : null',\n '[attr.mat-stroked-button]': 'ymtButton() === \"secondary\" ? \"\" : null',\n '[attr.mat-button]': 'ymtButton() === \"tertiary\" ? \"\" : null',\n },\n})\nexport class YuvButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled',transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n \n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n \n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n \n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n \n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n }\n \n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n }\n \n ngAfterViewInit() {\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n this.#updateInputs();\n }\n \n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive(),\n ){\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n \n #createMatButtonComponent(\n host: HTMLElement = this.#host,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n const componentRef = createComponent(\n MatButton,\n {\n environmentInjector: this.#environmentInjector,\n hostElement: host,\n projectableNodes: [[...iconPrefix],[...noneIconNodes],[...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n \n #getIconPrefixElements() {\n return Array.from(this.#host.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n \n #getIconSuffixElements() {\n return Array.from(this.#host.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n \n #getNoneIconNodes() {\n const iter = document.createNodeIterator(\n this.#host,\n NodeFilter.SHOW_ALL,\n (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#host\n ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n );\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { YuvMatIconRegistry } from '../services/yuv-mat-icon-registry.service';\nimport { YuvButtonDirective } from '../directives/yuv-button.directive';\n\nexport const provideYuvMaterial = (): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YuvMatIconRegistry },\n YuvButtonDirective,\n\n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500\n } as MatTooltipDefaultOptions\n },\n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always'\n } as MatFormFieldDefaultOptions\n }\n ];\n return makeEnvironmentProviders(providers);\n};\n","export enum ICON_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n OnInit\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { ICON_BUTTON_SIZE } from './icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class IconButtonDirective implements OnInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | ICON_BUTTON_SIZE>(ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => {\n this.#applySizeClass();\n });\n\n effect(() => {\n this.#setMaterialInputs();\n });\n }\n\n ngOnInit(): void {\n this.#MatIconButtonComponentRef = this.#createComponent();\n }\n\n #applySizeClass() {\n this.size() === ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);\n this.size() === ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);\n }\n\n #setMaterialInputs() {\n this.#materialIconButtonInputs.forEach(({ name, signal }) => {\n this.#MatIconButtonComponentRef?.setInput(name, signal());\n });\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export default {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-paginator-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/index.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YmtMatIconRegistryService extends MatIconRegistry {\n #ymtFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n/* Draft */\n@Injectable()\nexport class YmtMatPaginatorIntlService extends MatPaginatorIntl {\n #translate = inject(TranslateService);\n rangeLabelSeparator: string = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n \n override getRangeLabel = (\n page: number,\n pageSize: number,\n length: number\n ) => {\n if (length === 0 || pageSize === 0) {\n return `0 ${this.rangeLabelSeparator} ${length}`;\n }\n \n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;\n };\n \n //=== Proposal =========================================================\n \n injectTranslateService(translate: TranslateService) {\n this.#translate = translate;\n \n this.#translate.onLangChange.subscribe(() => {\n this.translateLabels();\n });\n \n this.translateLabels();\n }\n \n translateLabels() {\n this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');\n this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');\n this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');\n this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');\n this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');\n this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n this.changes.next();\n }\n \n //=== Proposal END =====================================================\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { YmtMatIconRegistryService } from '../services/ymt-mat-icon-registry.service';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { YmtMatPaginatorIntlService } from '../services/ymt-mat-paginator-intl.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MAT_TAB_GROUP, MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, RippleGlobalOptions } from '@angular/material/core';\n\nexport const provideYmtMaterial = (): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },\n\n /**\n * Material Ripple Config\n */\n { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } as RippleGlobalOptions },\n\n /**\n * Material Paginator Internationalization Service Override\n */\n {\n provide: MatPaginatorIntl,\n useFactory: (translate: TranslateService) => {\n const service = new YmtMatPaginatorIntlService();\n service.injectTranslateService(translate);\n return service;\n },\n deps: [TranslateService]\n },\n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500\n } as MatTooltipDefaultOptions\n },\n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always'\n } as MatFormFieldDefaultOptions\n },\n /**\n * Material Tab Config\n */\n {\n provide: MAT_TABS_CONFIG,\n useValue: {\n animationDuration: '0',\n stretchTabs: false,\n alignTabs: 'start'\n } as MatTabsConfig\n }\n ];\n return makeEnvironmentProviders(providers);\n};\n","export enum YMT_ICON_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n OnInit\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class YmtIconButtonDirective implements OnInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_ICON_BUTTON_SIZE>(YMT_ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => {\n this.#applySizeClass();\n });\n\n effect(() => {\n this.#setMaterialInputs();\n });\n }\n\n ngOnInit(): void {\n this.#MatIconButtonComponentRef = this.#createComponent();\n }\n\n #applySizeClass() {\n this.size() === YMT_ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);\n this.size() === YMT_ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);\n }\n\n #setMaterialInputs() {\n this.#materialIconButtonInputs.forEach(({ name, signal }) => {\n this.#MatIconButtonComponentRef?.setInput(name, signal());\n });\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export enum YMT_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n input,\n OnInit,\n AfterViewInit,\n inject,\n effect,\n ComponentRef,\n booleanAttribute\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { YMT_BUTTON_SIZE } from './ymt-button.model';\n\ntype ButtonType = keyof typeof MatButtonAttributeEnum;\nenum MatButtonAttributeEnum {\n primary = 'mat-flat-button',\n secondary = 'mat-stroked-button',\n tertiary = 'mat-button'\n}\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true,\n})\nexport class YmtButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_BUTTON_SIZE>(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n\n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n\n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n \n #matButtonAttribute = MatButtonAttributeEnum;\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n\n effect(() => {\n this.#applySizeClass();\n });\n }\n\n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n }\n\n ngAfterViewInit() {\n this.#updateInputs();\n }\n\n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive()\n ) {\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n\n #createMatButtonComponent(\n hostElement: HTMLElement = this.#hostElement,\n environmentInjector: EnvironmentInjector = this.#environmentInjector,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n this.#setInitialAttributesToHost();\n const componentRef = createComponent(MatButton, {\n environmentInjector,\n hostElement,\n projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n\n #setInitialAttributesToHost() {\n this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');\n }\n \n #getIconPrefixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n\n #getIconSuffixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n\n #getNoneIconNodes() {\n const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n });\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n\n #applySizeClass() {\n this.size() === YMT_BUTTON_SIZE.small ? this.#hostElement.classList.add(`ymt-button--size-s`) : this.#hostElement.classList.remove(`ymt-button--size-s`);\n this.size() === YMT_BUTTON_SIZE.medium ? this.#hostElement.classList.add(`ymt-button--size-m`) : this.#hostElement.classList.remove(`ymt-button--size-m`);\n }\n}\n","export default {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "ymt.paginator.firstPageLabel": "Erste Seite",
3
+ "ymt.paginator.itemsPerPageLabel": "Treffer pro Seite",
4
+ "ymt.paginator.lastPageLabel": "Letzte Seite",
5
+ "ymt.paginator.nextPageLabel": "Nächste Seite",
6
+ "ymt.paginator.previousPageLabel": "Vorherige Seite",
7
+ "ymt.paginator.rangeLabelSeparator": "von"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "ymt.paginator.firstPageLabel": "First Page",
3
+ "ymt.paginator.itemsPerPageLabel": "Items per Page",
4
+ "ymt.paginator.lastPageLabel": "Last Page",
5
+ "ymt.paginator.nextPageLabel": "Next Page",
6
+ "ymt.paginator.previousPageLabel": "Previous Page",
7
+ "ymt.paginator.rangeLabelSeparator": "of"
8
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ymt-button.directive';
2
+ export * from './ymt-button.model';
@@ -1,17 +1,17 @@
1
1
  import { OnInit, AfterViewInit } from '@angular/core';
2
+ import { YMT_BUTTON_SIZE } from './ymt-button.model';
2
3
  import * as i0 from "@angular/core";
3
- type ButtonType = 'primary' | 'secondary' | 'tertiary';
4
- export declare class YuvButtonDirective implements OnInit, AfterViewInit {
4
+ export declare class YmtButtonDirective implements OnInit, AfterViewInit {
5
5
  #private;
6
- ymtButton: import("@angular/core").InputSignal<ButtonType>;
6
+ ymtButton: import("@angular/core").InputSignal<"primary" | "secondary" | "tertiary">;
7
7
  disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
8
  ariaDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
9
  disableRipple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
10
  disabledInteractive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
11
+ size: import("@angular/core").InputSignal<"small" | "medium" | YMT_BUTTON_SIZE>;
11
12
  constructor();
12
13
  ngOnInit(): void;
13
14
  ngAfterViewInit(): void;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<YuvButtonDirective, never>;
15
- static ɵdir: i0.ɵɵDirectiveDeclaration<YuvButtonDirective, "button[ymtButton], a[ymtButton]", never, { "ymtButton": { "alias": "ymtButton"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "disabledInteractive": { "alias": "disabledInteractive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<YmtButtonDirective, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<YmtButtonDirective, "button[ymtButton], a[ymtButton]", never, { "ymtButton": { "alias": "ymtButton"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "disabledInteractive": { "alias": "disabledInteractive"; "required": false; "isSignal": true; }; "size": { "alias": "button-size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16
17
  }
17
- export {};
@@ -1,4 +1,4 @@
1
- export declare enum ICON_BUTTON_SIZE {
1
+ export declare enum YMT_BUTTON_SIZE {
2
2
  small = "small",
3
3
  medium = "medium"
4
4
  }
@@ -1,2 +1,2 @@
1
- export * from './icon-button.directive';
2
- export * from './icon-button.model';
1
+ export * from './ymt-icon-button.directive';
2
+ export * from './ymt-icon-button.model';
@@ -0,0 +1,15 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class YmtIconButtonDirective implements OnInit {
5
+ #private;
6
+ disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
+ disableRipple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
+ ariaDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ disabledInteractive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
+ size: import("@angular/core").InputSignal<"small" | "medium" | YMT_ICON_BUTTON_SIZE>;
11
+ constructor();
12
+ ngOnInit(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<YmtIconButtonDirective, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<YmtIconButtonDirective, "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; "isSignal": true; }; "disabledInteractive": { "alias": "disabledInteractive"; "required": false; "isSignal": true; }; "size": { "alias": "icon-button-size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum YMT_ICON_BUTTON_SIZE {
2
+ small = "small",
3
+ medium = "medium"
4
+ }
@@ -1,2 +1,2 @@
1
1
  export * from './icon-button';
2
- export * from './yuv-button.directive';
2
+ export * from './button';
@@ -1,2 +1,2 @@
1
1
  import { EnvironmentProviders } from '@angular/core';
2
- export declare const provideYuvMaterial: () => EnvironmentProviders;
2
+ export declare const provideYmtMaterial: () => EnvironmentProviders;
@@ -1 +1 @@
1
- export * from './yuv-mat-icon-registry.service';
1
+ export * from './ymt-mat-icon-registry.service';
@@ -3,11 +3,11 @@ import { MatIconRegistry } from '@angular/material/icon';
3
3
  import { HttpClient } from '@angular/common/http';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
5
5
  import * as i0 from "@angular/core";
6
- export declare class YuvMatIconRegistry extends MatIconRegistry {
6
+ export declare class YmtMatIconRegistryService extends MatIconRegistry {
7
7
  #private;
8
8
  constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, document: any, _errorHandler: ErrorHandler);
9
9
  setDefaultFontSetClass(...classnames: string[]): this;
10
10
  static isFontIcon(input: string | null): boolean;
11
- static ɵfac: i0.ɵɵFactoryDeclaration<YuvMatIconRegistry, never>;
12
- static ɵprov: i0.ɵɵInjectableDeclaration<YuvMatIconRegistry>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<YmtMatIconRegistryService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<YmtMatIconRegistryService>;
13
13
  }
@@ -0,0 +1,12 @@
1
+ import { MatPaginatorIntl } from '@angular/material/paginator';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class YmtMatPaginatorIntlService extends MatPaginatorIntl {
5
+ #private;
6
+ rangeLabelSeparator: string;
7
+ getRangeLabel: (page: number, pageSize: number, length: number) => string;
8
+ injectTranslateService(translate: TranslateService): void;
9
+ translateLabels(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<YmtMatPaginatorIntlService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<YmtMatPaginatorIntlService>;
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/material",
3
- "version": "2.0.0-beta.5",
3
+ "version": "2.0.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.1",
6
6
  "@angular/core": "^19.2.1",
@@ -1 +1 @@
1
- @forward 'loading-indicator';
1
+
@@ -0,0 +1,3 @@
1
+ [dir="rtl"] * {
2
+ direction: rtl;
3
+ }
@@ -1,5 +1,6 @@
1
1
  @forward 'root';
2
2
  @forward 'body';
3
+ @forward 'bidirectonal-layout';
3
4
  @forward 'text';
4
5
  @forward 'focus';
5
6
  @forward 'text-selection';
@@ -3,11 +3,11 @@
3
3
  height: 100%;
4
4
  }
5
5
 
6
- :root.yuv-light-mode {
6
+ :root.ymt-light-mode {
7
7
  color-scheme: light;
8
8
  }
9
9
 
10
- :root.yuv-dark-mode {
10
+ :root.ymt-dark-mode {
11
11
  color-scheme: dark;
12
12
  }
13
13
 
@@ -1,3 +1,22 @@
1
+ @use '@angular/material' as mat;
2
+ @use './../token/token.tools' as t;
3
+
4
+ // small
5
+ .ymt-button--size-s.mdc-button {
6
+ @include mat.button-density(-2);
7
+ @include mat.button-overrides((
8
+ filled-label-text-size: var(--mat-sys-label-medium-size),
9
+ filled-horizontal-padding: t.use-token(spacing-m),
10
+ outlined-horizontal-padding: t.use-token(spacing-m),
11
+ outlined-label-text-size: var(--mat-sys-label-medium-size),
12
+ text-label-text-size: var(--mat-sys-label-medium-size),
13
+ text-horizontal-padding: t.use-token(spacing-m),
14
+ ));
15
+ }
16
+
17
+ // medium (default)
18
+ // .ymt-button--size-m.mdc-button {}
19
+
1
20
 
2
21
  .mdc-button .mdc-button__label{
3
22
  line-height: 1;
@@ -1,6 +1,7 @@
1
1
  @use '@angular/material' as mat;
2
2
  @use './../token/token.tools' as t;
3
3
 
4
+ // small
4
5
  .ymt-icon-button--size-s.mat-mdc-icon-button {
5
6
  @include mat.icon-button-overrides(
6
7
  (
@@ -17,6 +18,7 @@
17
18
  }
18
19
  }
19
20
 
21
+ // medium (default)
20
22
  .ymt-icon-button--size-m.mat-mdc-icon-button {
21
23
  @include mat.icon-button-overrides(
22
24
  (
@@ -13,3 +13,10 @@
13
13
  font-size: t.use-token(sizing-m);
14
14
  line-height: 1;
15
15
  }
16
+
17
+ .ymt-icon--size-6xl.mat-icon {
18
+ height: t.use-token(sizing-6xl);
19
+ width: t.use-token(sizing-6xl);
20
+ font-size: t.use-token(sizing-6xl);
21
+ line-height: 1;
22
+ }
@@ -114,8 +114,8 @@
114
114
  ));
115
115
  @include mat.progress-spinner-overrides((
116
116
  active-indicator-color: var(--mat-sys-primary),
117
- //active-indicator-width: 40px, // does not work!
118
- //size: var(--ymt-sizing-small), // does not work!
117
+ // "active-indicator-width" does not work!
118
+ // "size" does not work!
119
119
  ));
120
120
  /* Buttons */
121
121
  @include mat.button-overrides(());
@@ -163,8 +163,8 @@
163
163
  container-text-tracking: var(--mat-sys-body-medium-tracking),
164
164
  container-text-weight: var(--mat-sys-body-medium-weight),
165
165
  container-vertical-padding: 10px,
166
- outlined-focus-outline-color: var(--yuv-focus-indicator-outer),
167
- outlined-focus-outline-width: var(--yuv-focus-indicator-size),
166
+ outlined-focus-outline-color: token.$focus-indicator-outer,
167
+ outlined-focus-outline-width: token.$focus-indicator-size,
168
168
  outlined-label-text-font: var(--mat-sys-body-medium-font),
169
169
  outlined-label-text-size: var(--mat-sys-body-medium-size),
170
170
  outlined-label-text-tracking: var(--mat-sys-body-medium-tracking),
@@ -203,28 +203,27 @@
203
203
  @include mat.dialog-overrides(
204
204
  (
205
205
  container-shape: var(--mat-sys-corner-medium),
206
- container-color: var(--mat-sys-surface-container-low),
206
+ container-color: var(--mat-sys-surface),
207
207
  subhead-color: var(--mat-sys-on-surface),
208
208
  subhead-font: var(--mat-sys-title-large-font),
209
209
  subhead-line-height: var(--mat-sys-title-large-line-height),
210
210
  subhead-size: var(--mat-sys-title-large-size),
211
211
  subhead-weight: var(--mat-sys-title-large-weight),
212
212
  subhead-tracking: var(--mat-sys-title-large-tracking),
213
- //supporting-text-color: var(--mat-sys-on-surface-variant),
214
- //supporting-text-font: var(--mat-sys-body-medium-font),
215
- //supporting-text-line-height: var(--mat-sys-body-medium-line-height),
216
- //supporting-text-size: var(--mat-sys-body-medium-size),
217
- //supporting-text-weight: var(--mat-sys-body-medium-weight),
218
- //supporting-text-tracking: var(--mat-sys-body-medium-tracking),
219
- //container-elevation-shadow: none,
220
- //container-max-width: none,
221
- //container-small-max-width: none,
222
- //container-min-width: none,
223
- //actions-alignment: none,
224
- //actions-padding: none,
225
- //content-padding: none,
226
213
  with-actions-content-padding: none,
227
- //headline-padding: none,
228
214
  )
229
215
  );
216
+
217
+ /*Tree*/
218
+ @include mat.tree-overrides((
219
+ node-text-font: var(--mat-sys-body-medium-font),
220
+ node-text-size: var(--mat-sys-body-medium-size),
221
+ node-text-weight: var(--mat-sys-body-medium-weight),
222
+ node-min-height: token.$sizing-l
223
+ ));
224
+
225
+ /*Tabs*/
226
+ @include mat.tabs-overrides((
227
+ divider-color: var(--mat-sys-outline-variant)
228
+ ));
230
229
  }
@@ -159,6 +159,7 @@ $corner-full: var(--mat-sys-corner-full);
159
159
  $corner-xl: var(--mat-sys-corner-extra-large);
160
160
  $corner-l: var(--mat-sys-corner-large);
161
161
  $corner: var(--mat-sys-corner-medium);
162
+ $corner-m: $corner;
162
163
  $corner-s: var(--mat-sys-corner-small);
163
164
  $corner-xs: var(--mat-sys-corner-extra-small);
164
165
 
@@ -177,6 +178,8 @@ $sizing-xl: $_sizing-base * 2; // 32px;
177
178
  $sizing-2xl: $_sizing-base * 2.25; // 36px;
178
179
  $sizing-3xl: $_sizing-base * 2.5; // 40px;
179
180
  $sizing-4xl: $_sizing-base * 3; // 48px;
181
+ $sizing-5xl: $_sizing-base * 4; // 64px;
182
+ $sizing-6xl: $_sizing-base * 7.5; // 120px;
180
183
 
181
184
 
182
185
  /*
@@ -1,15 +0,0 @@
1
- import { OnInit } from '@angular/core';
2
- import { ICON_BUTTON_SIZE } from './icon-button.model';
3
- import * as i0 from "@angular/core";
4
- export declare class IconButtonDirective implements OnInit {
5
- #private;
6
- disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
- disableRipple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
- ariaDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
- disabledInteractive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
- size: import("@angular/core").InputSignal<"small" | "medium" | ICON_BUTTON_SIZE>;
11
- constructor();
12
- ngOnInit(): void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<IconButtonDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<IconButtonDirective, "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; "isSignal": true; }; "disabledInteractive": { "alias": "disabledInteractive"; "required": false; "isSignal": true; }; "size": { "alias": "icon-button-size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
- }
@@ -1,126 +0,0 @@
1
- /*
2
- Yuuvis Loading Indicators
3
- */
4
-
5
- .yuv-loader-linear {
6
- position: relative;
7
- width: 100%;
8
- overflow: hidden;
9
- background-color: rgb(from var(--ymt-primary) r g b / 0.2);
10
- height: 4px;
11
-
12
- &:before {
13
- content: '';
14
- position: absolute;
15
- height: 100%;
16
- background-color: var(--ymt-primary);
17
- animation: linear-before 1.5s infinite ease-out;
18
- }
19
-
20
- &:after {
21
- content: '';
22
- position: absolute;
23
- height: 100%;
24
- background-color: rgb(from var(--ymt-primary) r g b / 0.5);
25
- animation: linear-after 1.5s infinite ease-in;
26
- }
27
- }
28
-
29
- @keyframes linear-before {
30
- 0% {
31
- left: -100%;
32
- width: 100%;
33
- }
34
- 100% {
35
- left: 100%;
36
- width: 10%;
37
- }
38
- }
39
-
40
- @keyframes linear-after {
41
- 0% {
42
- left: -150%;
43
- width: 100%;
44
- }
45
- 100% {
46
- left: 100%;
47
- width: 10%;
48
- }
49
- }
50
- // Small straight loading spinner (dots in a row)
51
- .yuv-loader-straight {
52
- display: flex;
53
- flex-flow: row nowrap;
54
- align-items: center;
55
-
56
- &::after,
57
- &::before {
58
- content: '';
59
- width: 8px;
60
- height: 8px;
61
- margin: 0 1px;
62
- border-radius: 50%;
63
- display: block;
64
- background-color: currentColor;
65
- animation: bouncedelay 1.4s infinite ease-in-out both;
66
- }
67
-
68
- &::before {
69
- animation-delay: -0.16s;
70
- }
71
-
72
- @keyframes bouncedelay {
73
- 0%,
74
- 80%,
75
- 100% {
76
- transform: scale(0);
77
- }
78
- 40% {
79
- transform: scale(1);
80
- }
81
- }
82
- }
83
-
84
- // circular loading spinner
85
- .yuv-loader {
86
- font-size: 10px;
87
- position: relative;
88
- text-indent: -9999em;
89
- border: 3px solid rgba(0, 0, 0, 0.1);
90
- border-left-color: var(--ymt-primary);
91
- transform: translateZ(0);
92
- animation: load8 1.1s infinite linear;
93
-
94
- .dark & {
95
- border-color: rgba(255, 255, 255, 0.1);
96
- border-left-color: var(--ymt-primary);
97
- }
98
-
99
- &.large {
100
- width: 10em;
101
- height: 10em;
102
- border-width: 8px;
103
- }
104
-
105
- &.small {
106
- width: 2em;
107
- height: 2em;
108
- border-width: 2px;
109
- }
110
- }
111
- .yuv-loader,
112
- .yuv-loader:after {
113
- border-radius: 50%;
114
- width: 5em;
115
- height: 5em;
116
- border-width: 4px;
117
- }
118
-
119
- @keyframes load8 {
120
- 0% {
121
- transform: rotate(0deg);
122
- }
123
- 100% {
124
- transform: rotate(360deg);
125
- }
126
- }