@yuuvis/material 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +5 -0
  2. package/fesm2022/yuuvis-material.mjs +229 -0
  3. package/fesm2022/yuuvis-material.mjs.map +1 -0
  4. package/index.d.ts +4 -0
  5. package/lib/components/index.d.ts +2 -0
  6. package/lib/directives/icon-button/icon-button.directive.d.ts +15 -0
  7. package/lib/directives/icon-button/icon-button.model.d.ts +4 -0
  8. package/lib/directives/icon-button/index.d.ts +2 -0
  9. package/lib/directives/index.d.ts +2 -0
  10. package/lib/directives/yuv-button.directive.d.ts +17 -0
  11. package/lib/providers/index.d.ts +1 -0
  12. package/lib/providers/material.providers.d.ts +2 -0
  13. package/lib/services/index.d.ts +1 -0
  14. package/lib/services/yuv-mat-icon-registry.service.d.ts +13 -0
  15. package/package.json +26 -0
  16. package/scss/components/_loading-indicator.scss +126 -0
  17. package/scss/components/index.scss +1 -0
  18. package/scss/elements/_body.scss +11 -0
  19. package/scss/elements/_focus.scss +20 -0
  20. package/scss/elements/_index.scss +6 -0
  21. package/scss/elements/_root.scss +14 -0
  22. package/scss/elements/_scrollbar.scss +33 -0
  23. package/scss/elements/_text-selection.scss +6 -0
  24. package/scss/elements/_text.scss +23 -0
  25. package/scss/generics/_normalize.scss +1 -0
  26. package/scss/generics/index.scss +1 -0
  27. package/scss/index.scss +45 -0
  28. package/scss/material-components/_button.scss +5 -0
  29. package/scss/material-components/_cdk-overlay.scss +6 -0
  30. package/scss/material-components/_dialog.scss +6 -0
  31. package/scss/material-components/_icon-button.scss +34 -0
  32. package/scss/material-components/_icon.scss +15 -0
  33. package/scss/material-components/_menu.scss +10 -0
  34. package/scss/material-components/_select.scss +19 -0
  35. package/scss/material-components/_tools.scss +1 -0
  36. package/scss/material-components/index.scss +8 -0
  37. package/scss/material-components/progress/_index.scss +1 -0
  38. package/scss/material-components/progress/_progress.scss +32 -0
  39. package/scss/material-components/progress/_progress.tools.scss +8 -0
  40. package/scss/themes/yuuvis-standard/theme-color.scss +136 -0
  41. package/scss/themes/yuuvis-standard/theme.scss +230 -0
  42. package/scss/token/_css-token.scss +11 -0
  43. package/scss/token/_index.scss +1 -0
  44. package/scss/token/_token.config.scss +1 -0
  45. package/scss/token/_token.scss +249 -0
  46. package/scss/token/_token.tools.scss +23 -0
  47. package/scss/utils/_font.scss +41 -0
  48. package/scss/utils/_index.scss +3 -0
  49. package/scss/utils/_spacing.scss +53 -0
  50. package/scss/utils/_visibility.scss +9 -0
  51. package/scss/vendors/_index.scss +0 -0
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @yuuvis/material
2
+
3
+ yuuvis Momentum component library based on [Angular Material](https://www.npmjs.com/package/@angular/material).
4
+
5
+ License: MIT
@@ -0,0 +1,229 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Inject, Injectable, input, booleanAttribute, inject, EnvironmentInjector, ApplicationRef, ElementRef, effect, createComponent, Directive, makeEnvironmentProviders } from '@angular/core';
3
+ import { MatIconRegistry } from '@angular/material/icon';
4
+ import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
5
+ import { MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';
6
+ import * as i1 from '@angular/common/http';
7
+ import * as i2 from '@angular/platform-browser';
8
+ import { DOCUMENT } from '@angular/common';
9
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
10
+ import { MatButton, MatIconButton } from '@angular/material/button';
11
+
12
+ class YuvMatIconRegistry extends MatIconRegistry {
13
+ #yuvFontSetClassNames = ['material-symbols-sharp'];
14
+ constructor(_httpClient, _sanitizer, document, _errorHandler) {
15
+ super(_httpClient, _sanitizer, document, _errorHandler);
16
+ this.setDefaultFontSetClass();
17
+ }
18
+ setDefaultFontSetClass(...classnames) {
19
+ const merged = [...new Set([...classnames, ...this.#yuvFontSetClassNames])];
20
+ super.setDefaultFontSetClass(...merged);
21
+ return this;
22
+ }
23
+ static isFontIcon(input) {
24
+ if (typeof input === 'string') {
25
+ const parser = new DOMParser();
26
+ const doc = parser.parseFromString(input, 'image/svg+xml');
27
+ return coerceBooleanProperty(doc.querySelector('parsererror'));
28
+ }
29
+ return false;
30
+ }
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' });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: YuvMatIconRegistry, decorators: [{
35
+ type: Injectable,
36
+ args: [{
37
+ providedIn: 'root'
38
+ }]
39
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.DomSanitizer }, { type: undefined, decorators: [{
40
+ type: Inject,
41
+ args: [DOCUMENT]
42
+ }] }, { type: i0.ErrorHandler }] });
43
+
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]]
87
+ });
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]'));
97
+ }
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;
109
+ }
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 });
112
+ }
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: () => [] });
125
+
126
+ const provideYuvMaterial = () => {
127
+ const providers = [
128
+ /**
129
+ * Material Icon Registry Service Override
130
+ */
131
+ { provide: MatIconRegistry, useClass: YuvMatIconRegistry },
132
+ YuvButtonDirective,
133
+ /**
134
+ * Material Tooltip Config
135
+ */
136
+ {
137
+ provide: MAT_TOOLTIP_DEFAULT_OPTIONS,
138
+ useValue: {
139
+ showDelay: 500
140
+ }
141
+ },
142
+ /**
143
+ * Material Form Field Config
144
+ */
145
+ {
146
+ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,
147
+ useValue: {
148
+ appearance: 'outline',
149
+ floatLabel: 'always'
150
+ }
151
+ }
152
+ ];
153
+ return makeEnvironmentProviders(providers);
154
+ };
155
+
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 = {}));
161
+
162
+ class IconButtonDirective {
163
+ disabled = input(false, { transform: booleanAttribute });
164
+ disableRipple = input(false, { transform: booleanAttribute });
165
+ ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });
166
+ disabledInteractive = input(false, { transform: booleanAttribute });
167
+ size = input(ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });
168
+ #elRef = inject(ElementRef);
169
+ #host = this.#elRef.nativeElement;
170
+ #injector = inject(EnvironmentInjector);
171
+ #appRef = inject(ApplicationRef);
172
+ #MatIconButtonComponentRef = null;
173
+ #materialIconButtonInputs = [
174
+ { name: 'disabled', signal: this.disabled },
175
+ { name: 'disableRipple', signal: this.disableRipple },
176
+ { name: 'aria-disabled', signal: this.ariaDisabled },
177
+ { name: 'disabledInteractive', signal: this.disabledInteractive }
178
+ ];
179
+ constructor() {
180
+ effect(() => {
181
+ this.#applySizeClass();
182
+ });
183
+ effect(() => {
184
+ this.#setMaterialInputs();
185
+ });
186
+ }
187
+ ngOnInit() {
188
+ this.#MatIconButtonComponentRef = this.#createComponent();
189
+ }
190
+ #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`);
193
+ }
194
+ #setMaterialInputs() {
195
+ this.#materialIconButtonInputs.forEach(({ name, signal }) => {
196
+ this.#MatIconButtonComponentRef?.setInput(name, signal());
197
+ });
198
+ }
199
+ #createComponent() {
200
+ const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon
201
+ const environmentInjector = this.#injector;
202
+ const hostElement = this.#host;
203
+ const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });
204
+ this.#appRef.attachView(componentRef.hostView);
205
+ componentRef.changeDetectorRef.detectChanges();
206
+ return componentRef;
207
+ }
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 });
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: IconButtonDirective, decorators: [{
212
+ type: Directive,
213
+ args: [{
214
+ selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',
215
+ standalone: true,
216
+ host: {
217
+ 'mat-icon-button': ''
218
+ }
219
+ }]
220
+ }], ctorParameters: () => [] });
221
+
222
+ var index = {};
223
+
224
+ /**
225
+ * Generated bundle index. Do not edit.
226
+ */
227
+
228
+ export { ICON_BUTTON_SIZE, IconButtonDirective, YuvButtonDirective, YuvMatIconRegistry, provideYuvMaterial };
229
+ //# sourceMappingURL=yuuvis-material.mjs.map
@@ -0,0 +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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"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './lib/providers';
2
+ export * from './lib/services';
3
+ export * from './lib/directives';
4
+ export * from './lib/components';
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
@@ -0,0 +1,15 @@
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
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum ICON_BUTTON_SIZE {
2
+ small = "small",
3
+ medium = "medium"
4
+ }
@@ -0,0 +1,2 @@
1
+ export * from './icon-button.directive';
2
+ export * from './icon-button.model';
@@ -0,0 +1,2 @@
1
+ export * from './icon-button';
2
+ export * from './yuv-button.directive';
@@ -0,0 +1,17 @@
1
+ import { OnInit, AfterViewInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ type ButtonType = 'primary' | 'secondary' | 'tertiary';
4
+ export declare class YuvButtonDirective implements OnInit, AfterViewInit {
5
+ #private;
6
+ ymtButton: import("@angular/core").InputSignal<ButtonType>;
7
+ disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
+ ariaDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ disableRipple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
+ disabledInteractive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
11
+ constructor();
12
+ ngOnInit(): void;
13
+ 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>;
16
+ }
17
+ export {};
@@ -0,0 +1 @@
1
+ export * from './material.providers';
@@ -0,0 +1,2 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ export declare const provideYuvMaterial: () => EnvironmentProviders;
@@ -0,0 +1 @@
1
+ export * from './yuv-mat-icon-registry.service';
@@ -0,0 +1,13 @@
1
+ import { ErrorHandler } from '@angular/core';
2
+ import { MatIconRegistry } from '@angular/material/icon';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { DomSanitizer } from '@angular/platform-browser';
5
+ import * as i0 from "@angular/core";
6
+ export declare class YuvMatIconRegistry extends MatIconRegistry {
7
+ #private;
8
+ constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, document: any, _errorHandler: ErrorHandler);
9
+ setDefaultFontSetClass(...classnames: string[]): this;
10
+ static isFontIcon(input: string | null): boolean;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<YuvMatIconRegistry, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<YuvMatIconRegistry>;
13
+ }
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@yuuvis/material",
3
+ "version": "0.1.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^19.2.0",
6
+ "@angular/core": "^19.2.0",
7
+ "@angular/material": "^19",
8
+ "modern-normalize": "^3.0.1"
9
+ },
10
+ "sideEffects": false,
11
+ "exports": {
12
+ ".": {
13
+ "sass": "./scss/index.scss",
14
+ "types": "./index.d.ts",
15
+ "default": "./fesm2022/yuuvis-material.mjs"
16
+ },
17
+ "./package.json": {
18
+ "default": "./package.json"
19
+ }
20
+ },
21
+ "module": "fesm2022/yuuvis-material.mjs",
22
+ "typings": "index.d.ts",
23
+ "dependencies": {
24
+ "tslib": "^2.3.0"
25
+ }
26
+ }
@@ -0,0 +1,126 @@
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
+ }
@@ -0,0 +1 @@
1
+ @forward 'loading-indicator';
@@ -0,0 +1,11 @@
1
+ @use './../token/token.tools' as t;
2
+
3
+
4
+ body {
5
+ height: 100%;
6
+ margin: 0;
7
+ font: t.use-token(font-body);
8
+ letter-spacing: t.use-token(font-body-tracking);
9
+ background-color: t.use-token(surface-frame);
10
+ color: t.use-token(on-surface);
11
+ }
@@ -0,0 +1,20 @@
1
+ @use './../token/token.tools' as t;
2
+
3
+ // Todo: Style focus-visible state!
4
+ :focus-visible {
5
+ outline: none;
6
+ }
7
+
8
+ //outside
9
+ //:focus-visible {
10
+ // outline-offset: t.use-token(focus-indicator-size);
11
+ // outline: t.use-token(focus-indicator-outer) solid t.use-token(focus-indicator-size);
12
+ // box-shadow: 0 0 0 t.use-token(focus-indicator-size) t.use-token(focus-indicator-inner);
13
+ //}
14
+
15
+ //inside
16
+ //:focus-visible {
17
+ // outline-offset: calc(#{t.use-token(focus-indicator-size)} * -2);
18
+ // outline: t.use-token(focus-indicator-inner) solid t.use-token(focus-indicator-size);
19
+ // box-shadow: inset 0 0 0 t.use-token(focus-indicator-size) t.use-token(focus-indicator-outer);
20
+ //}
@@ -0,0 +1,6 @@
1
+ @forward 'root';
2
+ @forward 'body';
3
+ @forward 'text';
4
+ @forward 'focus';
5
+ @forward 'text-selection';
6
+ @forward 'scrollbar';
@@ -0,0 +1,14 @@
1
+ :where(html) {
2
+ font-size: 100%;
3
+ height: 100%;
4
+ }
5
+
6
+ :root.yuv-light-mode {
7
+ color-scheme: light;
8
+ }
9
+
10
+ :root.yuv-dark-mode {
11
+ color-scheme: dark;
12
+ }
13
+
14
+
@@ -0,0 +1,33 @@
1
+ @use './../token/token.tools' as t;
2
+
3
+ ::-webkit-scrollbar {
4
+ height: t.use-token(scrollbar-outer-size);
5
+ width: t.use-token(scrollbar-outer-size);
6
+ }
7
+
8
+ ::-webkit-scrollbar-track {
9
+ background-color: transparent;
10
+ outline: calc(#{t.use-token(scrollbar-inner-size)} / 2) solid #{t.use-token(scrollbar-track-color)};
11
+ outline-offset: calc((#{t.use-token(scrollbar-outer-size)} - #{t.use-token(scrollbar-inner-size)}) * -1);
12
+ }
13
+
14
+ ::-webkit-scrollbar-thumb {
15
+ background-color: transparent;
16
+ outline: calc(#{t.use-token(scrollbar-inner-size)} / 2) solid #{t.use-token(scrollbar-thumb-color)};
17
+ outline-offset: calc((#{t.use-token(scrollbar-outer-size)} - #{t.use-token(scrollbar-inner-size)}) * -1);
18
+ transition: outline-color 200ms ease-in-out;
19
+
20
+ &:hover {
21
+ outline-color: t.use-token(scrollbar-thumb-color-hover);
22
+ background-color: transparent;
23
+ }
24
+ }
25
+
26
+ ::-webkit-scrollbar-button {
27
+ height: 0;
28
+ width: 0;
29
+ }
30
+
31
+ ::-webkit-scrollbar-corner {
32
+ background-color: transparent;
33
+ }
@@ -0,0 +1,6 @@
1
+ @use './../token/token.tools' as t;
2
+
3
+ *::selection {
4
+ background-color: t.use-token(text-selection-background);
5
+ color: t.use-token(text-selection-color);
6
+ }
@@ -0,0 +1,23 @@
1
+ @use '../token/token.tools' as t;
2
+
3
+ :where(h1,h2,h3,h4,h5,h6)
4
+ {
5
+ word-wrap: break-word;
6
+ margin-inline: 0 0;
7
+ margin-block: 1em;
8
+ color: inherit;
9
+ }
10
+ :where(h1) {
11
+ font: t.use-token(font-headline-large);
12
+ letter-spacing: t.use-token(font-headline-large-tracking);
13
+ }
14
+
15
+ :where(h2) {
16
+ font: t.use-token(font-headline-medium);
17
+ letter-spacing: t.use-token(font-headline-medium-tracking);
18
+ }
19
+
20
+ :where(h3, h4, h5, h6) {
21
+ font: t.use-token(font-headline-small);
22
+ letter-spacing: t.use-token(font-headline-small-tracking);
23
+ }
@@ -0,0 +1 @@
1
+ @use 'modern-normalize';
@@ -0,0 +1 @@
1
+ @forward 'normalize';