valtech-components 2.0.13 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ng-package.json +9 -0
- package/package.json +6 -14
- package/src/lib/assets/fonts/Khula-Bold.ttf +0 -0
- package/src/lib/assets/fonts/Khula-ExtraBold.ttf +0 -0
- package/src/lib/assets/fonts/Khula-Light.ttf +0 -0
- package/src/lib/assets/fonts/Khula-Regular.ttf +0 -0
- package/src/lib/assets/fonts/Khula-SemiBold.ttf +0 -0
- package/src/lib/assets/fonts/OFL.txt +93 -0
- package/src/lib/components/atoms/button/button.component.scss +5 -0
- package/src/lib/components/atoms/button/button.component.ts +54 -0
- package/src/lib/components/atoms/button/factory.ts +378 -0
- package/src/lib/components/atoms/button/types.ts +24 -0
- package/src/lib/components/types.ts +84 -0
- package/src/lib/services/download.service.ts +58 -0
- package/src/lib/services/lang-provider/components/lang-settings.ts +14 -0
- package/src/lib/services/lang-provider/components/theme-settings.ts +16 -0
- package/src/lib/services/lang-provider/content.ts +15 -0
- package/src/lib/services/lang-provider/lang-provider.service.ts +38 -0
- package/src/lib/services/lang-provider/types.ts +25 -0
- package/src/lib/services/local-storage.service.ts +18 -0
- package/src/lib/services/theme.service.ts +102 -0
- package/{lib/services/types.d.ts → src/lib/services/types.ts} +3 -1
- package/src/lib/shared/constants/storage.ts +2 -0
- package/src/lib/shared/utils/dom.ts +20 -0
- package/{public-api.d.ts → src/public-api.ts} +11 -0
- package/styles/fonts.scss +34 -0
- package/styles/overrides.scss +1 -0
- package/styles/utils.scss +5 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/esm2022/lib/components/atoms/button/button.component.mjs +0 -69
- package/esm2022/lib/components/atoms/button/factory.mjs +0 -217
- package/esm2022/lib/components/atoms/button/types.mjs +0 -2
- package/esm2022/lib/components/types.mjs +0 -29
- package/esm2022/lib/services/download.service.mjs +0 -63
- package/esm2022/lib/services/lang-provider/components/lang-settings.mjs +0 -13
- package/esm2022/lib/services/lang-provider/components/theme-settings.mjs +0 -15
- package/esm2022/lib/services/lang-provider/content.mjs +0 -8
- package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +0 -39
- package/esm2022/lib/services/lang-provider/types.mjs +0 -14
- package/esm2022/lib/services/local-storage.service.mjs +0 -16
- package/esm2022/lib/services/theme.service.mjs +0 -97
- package/esm2022/lib/services/types.mjs +0 -3
- package/esm2022/lib/shared/constants/storage.mjs +0 -3
- package/esm2022/lib/shared/utils/dom.mjs +0 -17
- package/esm2022/public-api.mjs +0 -18
- package/esm2022/valtech-components.mjs +0 -5
- package/fesm2022/valtech-components.mjs +0 -565
- package/fesm2022/valtech-components.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/components/atoms/button/button.component.d.ts +0 -20
- package/lib/components/atoms/button/factory.d.ts +0 -71
- package/lib/components/atoms/button/types.d.ts +0 -22
- package/lib/components/types.d.ts +0 -78
- package/lib/services/download.service.d.ts +0 -8
- package/lib/services/lang-provider/components/lang-settings.d.ts +0 -3
- package/lib/services/lang-provider/components/theme-settings.d.ts +0 -3
- package/lib/services/lang-provider/content.d.ts +0 -6
- package/lib/services/lang-provider/lang-provider.service.d.ts +0 -17
- package/lib/services/lang-provider/types.d.ts +0 -15
- package/lib/services/local-storage.service.d.ts +0 -6
- package/lib/services/theme.service.d.ts +0 -27
- package/lib/shared/constants/storage.d.ts +0 -2
- package/lib/shared/utils/dom.d.ts +0 -3
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ValidatorFn } from "@angular/forms";
|
|
2
|
+
import { ButtonMetadata } from "./atoms/button/types";
|
|
3
|
+
|
|
4
|
+
export type ComponentState = 'ENABLED' | 'DISABLED' | 'WORKING' | 'ERROR';
|
|
5
|
+
const ENABLED: ComponentState = 'ENABLED';
|
|
6
|
+
const DISABLED: ComponentState = 'DISABLED';
|
|
7
|
+
const WORKING: ComponentState = 'WORKING';
|
|
8
|
+
const ERROR: ComponentState = 'ERROR';
|
|
9
|
+
export const ComponentStates = { ENABLED, DISABLED, WORKING, ERROR };
|
|
10
|
+
|
|
11
|
+
export enum ActionType {
|
|
12
|
+
BROWSER_NEW_TAB,
|
|
13
|
+
BROWSER_DOWNLOAD,
|
|
14
|
+
NATIVE_DOWNLOAD,
|
|
15
|
+
APP_NAVIGATION,
|
|
16
|
+
BROWSER_NAVIGATION,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type Action = {
|
|
20
|
+
description: string;
|
|
21
|
+
type: ActionType;
|
|
22
|
+
source: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export enum InputType {
|
|
26
|
+
TEXT,
|
|
27
|
+
EMAIL,
|
|
28
|
+
PASSWORD,
|
|
29
|
+
COMMENT,
|
|
30
|
+
NUMBER,
|
|
31
|
+
PIN_CODE,
|
|
32
|
+
DATE,
|
|
33
|
+
HOUR,
|
|
34
|
+
CHECK,
|
|
35
|
+
RADIO,
|
|
36
|
+
SELECT,
|
|
37
|
+
FILE,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type InputOption = {
|
|
41
|
+
id: string;
|
|
42
|
+
name: string;
|
|
43
|
+
selected?: boolean;
|
|
44
|
+
order: number;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type InputMetadata = {
|
|
48
|
+
token: string;
|
|
49
|
+
label: string;
|
|
50
|
+
name: string;
|
|
51
|
+
hint: string;
|
|
52
|
+
placeholder: string;
|
|
53
|
+
type: InputType;
|
|
54
|
+
order: number;
|
|
55
|
+
validators: ValidatorFn[];
|
|
56
|
+
options?: InputOption[];
|
|
57
|
+
range?: {
|
|
58
|
+
min: number;
|
|
59
|
+
max: number;
|
|
60
|
+
};
|
|
61
|
+
errors: {
|
|
62
|
+
[key: string]: string;
|
|
63
|
+
};
|
|
64
|
+
value?: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type FormSection = {
|
|
68
|
+
name: string;
|
|
69
|
+
order: number;
|
|
70
|
+
fields: InputMetadata[];
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export type FormSubmit = {
|
|
74
|
+
fields: { key: string; value: string }[];
|
|
75
|
+
token?: string;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export type FormMetadata = {
|
|
79
|
+
name: string;
|
|
80
|
+
sections: FormSection[];
|
|
81
|
+
actions: ButtonMetadata;
|
|
82
|
+
state: ComponentState;
|
|
83
|
+
};
|
|
84
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
@Injectable({
|
|
4
|
+
providedIn: 'root',
|
|
5
|
+
})
|
|
6
|
+
export class DownloadService {
|
|
7
|
+
getFileNameFromUrl(url: string): string {
|
|
8
|
+
try {
|
|
9
|
+
const pathSegments = url.split('/');
|
|
10
|
+
const lastSegment = pathSegments[pathSegments.length - 1];
|
|
11
|
+
const fileName = decodeURIComponent(lastSegment);
|
|
12
|
+
return fileName;
|
|
13
|
+
} catch (error) {
|
|
14
|
+
console.error('Error al obtener nombre de archivo: ', JSON.stringify(error));
|
|
15
|
+
return 'filename';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
openNewTab(url: string): void {
|
|
20
|
+
if (url) {
|
|
21
|
+
const fileName = this.getFileNameFromUrl(url);
|
|
22
|
+
const link = document.createElement('a');
|
|
23
|
+
link.href = url;
|
|
24
|
+
link.download = fileName;
|
|
25
|
+
link.target = '_blank';
|
|
26
|
+
document.body.appendChild(link);
|
|
27
|
+
link.click();
|
|
28
|
+
document.body.removeChild(link);
|
|
29
|
+
} else {
|
|
30
|
+
console.error('La URL no está definida');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
downloadLinkFromBrowser(url: string): void {
|
|
35
|
+
console.log('trying to download file from url');
|
|
36
|
+
if (url) {
|
|
37
|
+
fetch(url)
|
|
38
|
+
.then((response) => response.blob())
|
|
39
|
+
.then((blob) => {
|
|
40
|
+
const url = window.URL.createObjectURL(blob);
|
|
41
|
+
const link = document.createElement('a');
|
|
42
|
+
link.href = url;
|
|
43
|
+
|
|
44
|
+
const fileName = this.getFileNameFromUrl(url);
|
|
45
|
+
link.download = `${+new Date()}-${fileName}`;
|
|
46
|
+
link.target = '_self';
|
|
47
|
+
link.click();
|
|
48
|
+
|
|
49
|
+
window.URL.revokeObjectURL(url);
|
|
50
|
+
})
|
|
51
|
+
.catch((error) => {
|
|
52
|
+
console.error('Error al descargar el archivo:', JSON.stringify(error));
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
console.error('La URL no está definida');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LanguagesContent, TextContent } from '../types';
|
|
2
|
+
|
|
3
|
+
const text: LanguagesContent = {
|
|
4
|
+
es: {
|
|
5
|
+
spanish: 'Español',
|
|
6
|
+
english: 'Inglés',
|
|
7
|
+
},
|
|
8
|
+
en: {
|
|
9
|
+
spanish: 'Spanish',
|
|
10
|
+
english: 'English',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default new TextContent(text);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LanguagesContent, TextContent } from "../types";
|
|
2
|
+
|
|
3
|
+
const text: LanguagesContent = {
|
|
4
|
+
es: {
|
|
5
|
+
light: 'Siempre claro',
|
|
6
|
+
dark: 'Siempre oscuro',
|
|
7
|
+
auto: 'Automático',
|
|
8
|
+
},
|
|
9
|
+
en: {
|
|
10
|
+
light: 'Always light',
|
|
11
|
+
dark: 'Always dark',
|
|
12
|
+
auto: 'System settings',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default new TextContent(text);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import LangSettings from './components/lang-settings';
|
|
2
|
+
import ThemeSettings from './components/theme-settings';
|
|
3
|
+
import { TextContent } from './types';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export interface Provider {
|
|
7
|
+
[x: string]: TextContent;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const content: Provider = {
|
|
11
|
+
LangSettings,
|
|
12
|
+
ThemeSettings,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default content;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { Provider } from './content';
|
|
4
|
+
import { LangOption, LanguageText } from './types';
|
|
5
|
+
import { LocalStorageService } from '../local-storage.service';
|
|
6
|
+
import { LANG } from '../../shared/constants/storage';
|
|
7
|
+
import { ValtechConfig, ValtechConfigService } from '../types';
|
|
8
|
+
|
|
9
|
+
@Injectable({
|
|
10
|
+
providedIn: 'root',
|
|
11
|
+
})
|
|
12
|
+
export class LangService {
|
|
13
|
+
content: Provider;
|
|
14
|
+
default = LangOption.ES;
|
|
15
|
+
selectedLang: BehaviorSubject<LangOption>;
|
|
16
|
+
config: ValtechConfig;
|
|
17
|
+
|
|
18
|
+
constructor(@Inject(ValtechConfigService) config: ValtechConfig) {
|
|
19
|
+
console.log('injected config: ', config);
|
|
20
|
+
this.content = config.content;
|
|
21
|
+
this.config = config;
|
|
22
|
+
const current = LocalStorageService.get<LangOption>(LANG);
|
|
23
|
+
this.selectedLang = new BehaviorSubject<LangOption>(current || this.default);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Text(className: string): LanguageText {
|
|
27
|
+
return this.content[className].Content[this.selectedLang.value];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get Lang(): LangOption {
|
|
31
|
+
return this.selectedLang.value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
set Lang(lang: LangOption) {
|
|
35
|
+
this.selectedLang.next(lang);
|
|
36
|
+
LocalStorageService.set<LangOption>(LANG, lang);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Provider } from "./content";
|
|
2
|
+
|
|
3
|
+
export type LanguageText = {
|
|
4
|
+
[key: string]: string;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export type LanguagesContent = {
|
|
8
|
+
[key: string]: LanguageText;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export class TextContent {
|
|
12
|
+
text: LanguagesContent;
|
|
13
|
+
constructor(text: LanguagesContent) {
|
|
14
|
+
this.text = text;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get Content(): LanguagesContent {
|
|
18
|
+
return this.text;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export enum LangOption {
|
|
23
|
+
ES = 'es',
|
|
24
|
+
EN = 'en',
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class LocalStorageService {
|
|
2
|
+
static set<T>(reference: string, value: T): void {
|
|
3
|
+
localStorage.setItem(reference, JSON.stringify(value));
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
static get<T>(reference: string): T {
|
|
7
|
+
const value = localStorage.getItem(reference);
|
|
8
|
+
return JSON.parse(value) as T;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
static remove(reference: string): void {
|
|
12
|
+
localStorage.removeItem(reference);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static clear() {
|
|
16
|
+
localStorage.clear();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { LocalStorageService } from './local-storage.service';
|
|
4
|
+
import { THEME } from '../shared/constants/storage';
|
|
5
|
+
|
|
6
|
+
export enum ThemeOption {
|
|
7
|
+
LIGHT = 'light',
|
|
8
|
+
DARK = 'dark',
|
|
9
|
+
AUTO = 'auto',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@Injectable({
|
|
13
|
+
providedIn: 'root',
|
|
14
|
+
})
|
|
15
|
+
export class ThemeService {
|
|
16
|
+
lightToggle = false;
|
|
17
|
+
darkToggle = false;
|
|
18
|
+
autoToggle = false;
|
|
19
|
+
currentOption = ThemeOption.AUTO;
|
|
20
|
+
themeOptions = ThemeOption;
|
|
21
|
+
prefersDark = false;
|
|
22
|
+
default = ThemeOption.AUTO;
|
|
23
|
+
theme: BehaviorSubject<ThemeOption>;
|
|
24
|
+
|
|
25
|
+
constructor() {
|
|
26
|
+
const current = LocalStorageService.get<ThemeOption>(THEME);
|
|
27
|
+
console.log('💡 ThemeConfig current::: ', current);
|
|
28
|
+
this.theme = new BehaviorSubject<ThemeOption>(current || this.default);
|
|
29
|
+
this.currentOption = this.Theme;
|
|
30
|
+
console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);
|
|
31
|
+
this.toggleUserPreference(this.currentOption);
|
|
32
|
+
|
|
33
|
+
const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
34
|
+
this.prefersDark = prefersDarkQuery.matches;
|
|
35
|
+
this.handleAutoConfiguration();
|
|
36
|
+
|
|
37
|
+
prefersDarkQuery.addEventListener('change', (mediaQuery) => {
|
|
38
|
+
console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);
|
|
39
|
+
this.prefersDark = mediaQuery.matches;
|
|
40
|
+
this.handleAutoConfiguration();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private handleAutoConfiguration() {
|
|
45
|
+
if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {
|
|
46
|
+
console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
|
|
47
|
+
this.toggleUserPreference(ThemeOption.AUTO);
|
|
48
|
+
}
|
|
49
|
+
if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {
|
|
50
|
+
console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);
|
|
51
|
+
this.toggleUserPreference(ThemeOption.AUTO);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private handleDarkPreference() {
|
|
56
|
+
this.toggleTheme(ThemeOption.DARK, true);
|
|
57
|
+
this.toggleTheme(ThemeOption.LIGHT, false);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private handleLightPreference() {
|
|
61
|
+
this.toggleTheme(ThemeOption.LIGHT, true);
|
|
62
|
+
this.toggleTheme(ThemeOption.DARK, false);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get Theme(): ThemeOption {
|
|
66
|
+
return this.theme.value;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
set Theme(theme: ThemeOption) {
|
|
70
|
+
this.theme.next(theme);
|
|
71
|
+
LocalStorageService.set<ThemeOption>(THEME, theme);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
toggleTheme(name: string, shouldAdd: boolean) {
|
|
75
|
+
console.log('toggleTheme::: ', name, shouldAdd);
|
|
76
|
+
document.body.classList.toggle(name, shouldAdd);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
toggleUserPreference(option: ThemeOption) {
|
|
80
|
+
this.currentOption = option;
|
|
81
|
+
this.Theme = option;
|
|
82
|
+
this.lightToggle = option === ThemeOption.LIGHT;
|
|
83
|
+
this.darkToggle = option === ThemeOption.DARK;
|
|
84
|
+
this.autoToggle = option === ThemeOption.AUTO;
|
|
85
|
+
|
|
86
|
+
switch (option) {
|
|
87
|
+
case ThemeOption.LIGHT:
|
|
88
|
+
this.handleLightPreference();
|
|
89
|
+
break;
|
|
90
|
+
case ThemeOption.DARK:
|
|
91
|
+
this.handleDarkPreference();
|
|
92
|
+
break;
|
|
93
|
+
case ThemeOption.AUTO:
|
|
94
|
+
if (this.prefersDark) {
|
|
95
|
+
this.handleDarkPreference();
|
|
96
|
+
} else {
|
|
97
|
+
this.handleLightPreference();
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { InjectionToken } from "@angular/core";
|
|
2
2
|
import { Provider } from "./lang-provider/content";
|
|
3
|
+
|
|
3
4
|
export interface ValtechConfig {
|
|
4
5
|
content: Provider;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
export const ValtechConfigService = new InjectionToken<ValtechConfig>('ValtechConfig');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ElementRef } from "@angular/core";
|
|
2
|
+
|
|
3
|
+
export const goToTop = (id: string): void => {
|
|
4
|
+
const element = document.getElementById(id);
|
|
5
|
+
if (element) {
|
|
6
|
+
element.scrollIntoView({
|
|
7
|
+
block: 'start',
|
|
8
|
+
inline: 'nearest',
|
|
9
|
+
behavior: 'smooth',
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export const isAtEnd = (elementRef: ElementRef): boolean => {
|
|
16
|
+
const formElement = elementRef.nativeElement;
|
|
17
|
+
const rect = formElement.getBoundingClientRect();
|
|
18
|
+
const windowHeight = window.innerHeight;
|
|
19
|
+
return rect.bottom <= windowHeight;
|
|
20
|
+
}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of valtech-components
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Public API Surface of valtech-components
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
export * from './lib/components/atoms/button/button.component';
|
|
2
10
|
export * from './lib/components/atoms/button/types';
|
|
3
11
|
export * from './lib/components/atoms/button/factory';
|
|
12
|
+
|
|
4
13
|
export * from './lib/services/lang-provider/lang-provider.service';
|
|
5
14
|
export * from './lib/services/lang-provider/types';
|
|
6
15
|
export * from './lib/services/local-storage.service';
|
|
7
16
|
export * from './lib/services/theme.service';
|
|
8
17
|
export * from './lib/services/download.service';
|
|
9
18
|
export * from './lib/services/types';
|
|
19
|
+
|
|
10
20
|
export * from './lib/shared/utils/dom';
|
|
11
21
|
export * from './lib/components/types';
|
|
22
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'Khula';
|
|
3
|
+
font-style: normal;
|
|
4
|
+
font-weight: 300;
|
|
5
|
+
src: url('../lib/assets/fonts/Khula-Light.ttf');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@font-face {
|
|
9
|
+
font-family: 'Khula';
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: 400;
|
|
12
|
+
src: url('../lib/assets/fonts/Khula-Regular.ttf');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: 'Khula';
|
|
17
|
+
font-style: normal;
|
|
18
|
+
font-weight: 600;
|
|
19
|
+
src: url('../lib/assets/fonts/Khula-SemiBold.ttf');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: 'Khula';
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: 700;
|
|
26
|
+
src: url('../lib/assets/fonts/Khula-Bold.ttf');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@font-face {
|
|
30
|
+
font-family: 'Khula';
|
|
31
|
+
font-style: normal;
|
|
32
|
+
font-weight: 800;
|
|
33
|
+
src: url('../lib/assets/fonts/Khula-ExtraBold.ttf');
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import '../src/lib/components/styles/overrides.scss';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
@import '../src/lib/components/styles/media-queries.scss';
|
|
2
|
+
@import '../src/lib/components/styles/variables.scss';
|
|
3
|
+
@import '../src/lib/components/styles/functions.scss';
|
|
4
|
+
@import '../src/lib/components/styles/typography.scss';
|
|
5
|
+
@import '../src/lib/components/styles/mixins.scss';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
+
{
|
|
3
|
+
"extends": "../../tsconfig.json",
|
|
4
|
+
"compilerOptions": {
|
|
5
|
+
"outDir": "../../out-tsc/lib",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
8
|
+
"inlineSources": true,
|
|
9
|
+
"types": []
|
|
10
|
+
},
|
|
11
|
+
"exclude": [
|
|
12
|
+
"**/*.spec.ts"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
+
{
|
|
3
|
+
"extends": "../../tsconfig.json",
|
|
4
|
+
"compilerOptions": {
|
|
5
|
+
"outDir": "../../out-tsc/spec",
|
|
6
|
+
"types": [
|
|
7
|
+
"jasmine"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"include": [
|
|
11
|
+
"**/*.spec.ts",
|
|
12
|
+
"**/*.d.ts"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import { IonButton, IonIcon, IonSpinner, IonText } from '@ionic/angular/standalone';
|
|
4
|
-
import { ComponentStates } from '../../types';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../../../services/download.service";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
export class ButtonComponent {
|
|
9
|
-
constructor(download) {
|
|
10
|
-
this.download = download;
|
|
11
|
-
this.states = ComponentStates;
|
|
12
|
-
this.onClick = new EventEmitter();
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() { }
|
|
15
|
-
clickHandler() {
|
|
16
|
-
if (this.props.download) {
|
|
17
|
-
this.download.downloadLinkFromBrowser(this.props.download);
|
|
18
|
-
}
|
|
19
|
-
if (this.props.state === this.states.DISABLED) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
this.onClick.emit(this.props.token);
|
|
23
|
-
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, deps: [{ token: i1.DownloadService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonComponent, isStandalone: true, selector: "val-button", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
|
|
26
|
-
<ion-button
|
|
27
|
-
[type]="props.type"
|
|
28
|
-
[color]="props.color"
|
|
29
|
-
[expand]="props.expand"
|
|
30
|
-
[fill]="props.fill"
|
|
31
|
-
[size]="props.size"
|
|
32
|
-
[href]="props.href"
|
|
33
|
-
[target]="props.target"
|
|
34
|
-
[shape]="props.shape"
|
|
35
|
-
(click)="clickHandler()"
|
|
36
|
-
[disabled]="props.state === states.DISABLED"
|
|
37
|
-
>
|
|
38
|
-
<ion-icon *ngIf="props.icon" [slot]="props.icon.slot" [name]="props.icon.name"></ion-icon>
|
|
39
|
-
<ion-spinner *ngIf="props.state === states.WORKING" name="circular"></ion-spinner>
|
|
40
|
-
<ion-text *ngIf="props.state !== states.WORKING">{{ props.text }}</ion-text>
|
|
41
|
-
</ion-button>
|
|
42
|
-
`, isInline: true, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
45
|
-
type: Component,
|
|
46
|
-
args: [{ selector: 'val-button', standalone: true, imports: [CommonModule, IonButton, IonIcon, IonSpinner, IonText], template: `
|
|
47
|
-
<ion-button
|
|
48
|
-
[type]="props.type"
|
|
49
|
-
[color]="props.color"
|
|
50
|
-
[expand]="props.expand"
|
|
51
|
-
[fill]="props.fill"
|
|
52
|
-
[size]="props.size"
|
|
53
|
-
[href]="props.href"
|
|
54
|
-
[target]="props.target"
|
|
55
|
-
[shape]="props.shape"
|
|
56
|
-
(click)="clickHandler()"
|
|
57
|
-
[disabled]="props.state === states.DISABLED"
|
|
58
|
-
>
|
|
59
|
-
<ion-icon *ngIf="props.icon" [slot]="props.icon.slot" [name]="props.icon.name"></ion-icon>
|
|
60
|
-
<ion-spinner *ngIf="props.state === states.WORKING" name="circular"></ion-spinner>
|
|
61
|
-
<ion-text *ngIf="props.state !== states.WORKING">{{ props.text }}</ion-text>
|
|
62
|
-
</ion-button>
|
|
63
|
-
`, styles: ["ion-button{font-family:var(--ion-default-font),Arial,sans-serif}\n"] }]
|
|
64
|
-
}], ctorParameters: () => [{ type: i1.DownloadService }], propDecorators: { props: [{
|
|
65
|
-
type: Input
|
|
66
|
-
}], onClick: [{
|
|
67
|
-
type: Output
|
|
68
|
-
}] } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUEyQjlDLE1BQU0sT0FBTyxlQUFlO0lBUzFCLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBUjdDLFdBQU0sR0FBRyxlQUFlLENBQUM7UUFNekIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFVyxDQUFDO0lBRWpELFFBQVEsS0FBSSxDQUFDO0lBRWIsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0FyQlUsZUFBZTttR0FBZixlQUFlLG1JQXBCaEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJULDJJQWxCUyxZQUFZLG1JQUFFLFNBQVMsb1BBQUUsT0FBTywySkFBRSxVQUFVLHlHQUFFLE9BQU87OzRGQXFCcEQsZUFBZTtrQkF4QjNCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFDdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJUO29GQU9ELEtBQUs7c0JBREosS0FBSztnQkFJTixPQUFPO3NCQUROLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU3Bpbm5lciwgSW9uVGV4dCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZG93bmxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYnV0dG9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TcGlubmVyLCBJb25UZXh0XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWJ1dHRvblxuICAgICAgW3R5cGVdPVwicHJvcHMudHlwZVwiXG4gICAgICBbY29sb3JdPVwicHJvcHMuY29sb3JcIlxuICAgICAgW2V4cGFuZF09XCJwcm9wcy5leHBhbmRcIlxuICAgICAgW2ZpbGxdPVwicHJvcHMuZmlsbFwiXG4gICAgICBbc2l6ZV09XCJwcm9wcy5zaXplXCJcbiAgICAgIFtocmVmXT1cInByb3BzLmhyZWZcIlxuICAgICAgW3RhcmdldF09XCJwcm9wcy50YXJnZXRcIlxuICAgICAgW3NoYXBlXT1cInByb3BzLnNoYXBlXCJcbiAgICAgIChjbGljayk9XCJjbGlja0hhbmRsZXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwicHJvcHMuc3RhdGUgPT09IHN0YXRlcy5ESVNBQkxFRFwiXG4gICAgPlxuICAgICAgPGlvbi1pY29uICpuZ0lmPVwicHJvcHMuaWNvblwiIFtzbG90XT1cInByb3BzLmljb24uc2xvdFwiIFtuYW1lXT1cInByb3BzLmljb24ubmFtZVwiPjwvaW9uLWljb24+XG4gICAgICA8aW9uLXNwaW5uZXIgKm5nSWY9XCJwcm9wcy5zdGF0ZSA9PT0gc3RhdGVzLldPUktJTkdcIiBuYW1lPVwiY2lyY3VsYXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwicHJvcHMuc3RhdGUgIT09IHN0YXRlcy5XT1JLSU5HXCI+e3sgcHJvcHMudGV4dCB9fTwvaW9uLXRleHQ+XG4gICAgPC9pb24tYnV0dG9uPlxuICBgLFxuICBzdHlsZVVybDogJy4vYnV0dG9uLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgc3RhdGVzID0gQ29tcG9uZW50U3RhdGVzO1xuXG4gIEBJbnB1dCgpXG4gIHByb3BzITogQnV0dG9uTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvd25sb2FkOiBEb3dubG9hZFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGNsaWNrSGFuZGxlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kb3dubG9hZCkge1xuICAgICAgdGhpcy5kb3dubG9hZC5kb3dubG9hZExpbmtGcm9tQnJvd3Nlcih0aGlzLnByb3BzLmRvd25sb2FkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGUgPT09IHRoaXMuc3RhdGVzLkRJU0FCTEVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KHRoaXMucHJvcHMudG9rZW4pO1xuICB9XG59XG4iXX0=
|