@tolle_/tolle-ui 0.0.6-beta → 0.0.8-beta
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/esm2022/lib/theme.service.mjs +77 -7
- package/esm2022/lib/tolle-config.mjs +3 -4
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/tolle_-tolle-ui.mjs +79 -10
- package/fesm2022/tolle_-tolle-ui.mjs.map +1 -1
- package/lib/theme.service.d.ts +8 -5
- package/package.json +1 -1
- package/preset.js +17 -6
- package/public-api.d.ts +1 -0
- package/theme.css +39 -14
|
@@ -10,6 +10,7 @@ export class ThemeService {
|
|
|
10
10
|
renderer;
|
|
11
11
|
isDarkSubject = new BehaviorSubject(false);
|
|
12
12
|
isDark$ = this.isDarkSubject.asObservable();
|
|
13
|
+
styleId = 'tolle-dynamic-theme';
|
|
13
14
|
constructor(document, platformId, config, rendererFactory) {
|
|
14
15
|
this.document = document;
|
|
15
16
|
this.platformId = platformId;
|
|
@@ -33,26 +34,98 @@ export class ThemeService {
|
|
|
33
34
|
else {
|
|
34
35
|
this.disableDarkMode();
|
|
35
36
|
}
|
|
36
|
-
// 2. Apply Brand Config
|
|
37
|
+
// 2. Apply Brand Config - This will generate full palette
|
|
37
38
|
if (this.config) {
|
|
38
39
|
this.applyBrandConfig(this.config);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* Applies the brand identity variables
|
|
43
|
-
* These are applied to :root (html) so they ripple through all color-mix functions.
|
|
43
|
+
* Applies the brand identity variables with full shade palette
|
|
44
44
|
*/
|
|
45
45
|
applyBrandConfig(config) {
|
|
46
46
|
if (!isPlatformBrowser(this.platformId))
|
|
47
47
|
return;
|
|
48
48
|
const root = this.document.documentElement;
|
|
49
|
+
// Set primary color if provided
|
|
49
50
|
if (config.primaryColor) {
|
|
50
51
|
this.renderer.setStyle(root, '--primary', config.primaryColor);
|
|
52
|
+
this.generatePrimaryShades(config.primaryColor);
|
|
51
53
|
}
|
|
54
|
+
// Set border radius if provided
|
|
52
55
|
if (config.radius) {
|
|
53
56
|
this.renderer.setStyle(root, '--radius', config.radius);
|
|
54
57
|
}
|
|
55
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Generates full primary color palette (50-900) based on base color
|
|
61
|
+
* Uses color-mix() for consistency with your existing approach
|
|
62
|
+
*/
|
|
63
|
+
generatePrimaryShades(baseColor) {
|
|
64
|
+
const css = `
|
|
65
|
+
:root {
|
|
66
|
+
/* Primary Shades */
|
|
67
|
+
--primary-50: color-mix(in srgb, ${baseColor}, white 90%);
|
|
68
|
+
--primary-100: color-mix(in srgb, ${baseColor}, white 80%);
|
|
69
|
+
--primary-200: color-mix(in srgb, ${baseColor}, white 60%);
|
|
70
|
+
--primary-300: color-mix(in srgb, ${baseColor}, white 40%);
|
|
71
|
+
--primary-400: color-mix(in srgb, ${baseColor}, white 20%);
|
|
72
|
+
--primary-500: ${baseColor};
|
|
73
|
+
--primary-600: color-mix(in srgb, ${baseColor}, black 20%);
|
|
74
|
+
--primary-700: color-mix(in srgb, ${baseColor}, black 40%);
|
|
75
|
+
--primary-800: color-mix(in srgb, ${baseColor}, black 60%);
|
|
76
|
+
--primary-900: color-mix(in srgb, ${baseColor}, black 80%);
|
|
77
|
+
|
|
78
|
+
/* Your existing derived colors - updated to use new shades */
|
|
79
|
+
--primary-foreground: white;
|
|
80
|
+
--secondary: color-mix(in srgb, var(--primary-200), transparent 40%);
|
|
81
|
+
--secondary-foreground: var(--primary-900);
|
|
82
|
+
--muted: color-mix(in srgb, var(--primary-50), #f3f4f6 50%);
|
|
83
|
+
--muted-foreground: color-mix(in srgb, var(--primary-400), #4b5563 60%);
|
|
84
|
+
--accent: color-mix(in srgb, var(--primary-100), transparent 70%);
|
|
85
|
+
--accent-foreground: var(--primary-700);
|
|
86
|
+
--ring: color-mix(in srgb, var(--primary-300), transparent 50%);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.dark {
|
|
90
|
+
/* Dark mode variants */
|
|
91
|
+
--primary-50: color-mix(in srgb, ${baseColor}, black 85%);
|
|
92
|
+
--primary-100: color-mix(in srgb, ${baseColor}, black 75%);
|
|
93
|
+
--primary-200: color-mix(in srgb, ${baseColor}, black 65%);
|
|
94
|
+
--primary-300: color-mix(in srgb, ${baseColor}, black 55%);
|
|
95
|
+
--primary-400: color-mix(in srgb, ${baseColor}, black 45%);
|
|
96
|
+
--primary-500: ${baseColor};
|
|
97
|
+
--primary-600: color-mix(in srgb, ${baseColor}, white 20%);
|
|
98
|
+
--primary-700: color-mix(in srgb, ${baseColor}, white 35%);
|
|
99
|
+
--primary-800: color-mix(in srgb, ${baseColor}, white 50%);
|
|
100
|
+
--primary-900: color-mix(in srgb, ${baseColor}, white 65%);
|
|
101
|
+
|
|
102
|
+
/* Dark mode derived colors */
|
|
103
|
+
--primary-foreground: color-mix(in srgb, ${baseColor}, white 90%);
|
|
104
|
+
--secondary: color-mix(in srgb, var(--primary-900), transparent 70%);
|
|
105
|
+
--secondary-foreground: var(--primary-100);
|
|
106
|
+
--muted: color-mix(in srgb, var(--primary-950), #1f2937 50%);
|
|
107
|
+
--muted-foreground: color-mix(in srgb, var(--primary-300), #9ca3af 40%);
|
|
108
|
+
--accent: color-mix(in srgb, var(--primary-800), transparent 80%);
|
|
109
|
+
--accent-foreground: var(--primary-200);
|
|
110
|
+
--ring: color-mix(in srgb, var(--primary-600), transparent 60%);
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
this.injectDynamicStyles(css);
|
|
114
|
+
}
|
|
115
|
+
injectDynamicStyles(css) {
|
|
116
|
+
if (!isPlatformBrowser(this.platformId))
|
|
117
|
+
return;
|
|
118
|
+
// Remove existing dynamic styles
|
|
119
|
+
const existingStyle = this.document.getElementById(this.styleId);
|
|
120
|
+
if (existingStyle) {
|
|
121
|
+
existingStyle.remove();
|
|
122
|
+
}
|
|
123
|
+
// Create and inject new styles
|
|
124
|
+
const styleElement = this.document.createElement('style');
|
|
125
|
+
styleElement.id = this.styleId;
|
|
126
|
+
styleElement.textContent = css;
|
|
127
|
+
this.renderer.appendChild(this.document.head, styleElement);
|
|
128
|
+
}
|
|
56
129
|
toggleTheme() {
|
|
57
130
|
const isCurrentlyDark = this.document.documentElement.classList.contains('dark');
|
|
58
131
|
isCurrentlyDark ? this.disableDarkMode() : this.enableDarkMode();
|
|
@@ -67,9 +140,6 @@ export class ThemeService {
|
|
|
67
140
|
localStorage.setItem('tolle-theme', 'light');
|
|
68
141
|
this.isDarkSubject.next(false);
|
|
69
142
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Helper to get current state for components that might need JS-based logic
|
|
72
|
-
*/
|
|
73
143
|
get currentTheme() {
|
|
74
144
|
return this.isDarkSubject.value ? 'dark' : 'light';
|
|
75
145
|
}
|
|
@@ -91,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
91
161
|
type: Inject,
|
|
92
162
|
args: [TOLLE_CONFIG]
|
|
93
163
|
}] }, { type: i0.RendererFactory2 }] });
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7O0FBRzNELE1BQU0sT0FBTyxZQUFZO0lBTUs7SUFDRztJQUNhO0lBUHBDLFFBQVEsQ0FBWTtJQUNwQixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDNUQsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUMsWUFDNEIsUUFBa0IsRUFDZixVQUFrQixFQUNMLE1BQW1CLEVBQzdELGVBQWlDO1FBSFAsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDTCxXQUFNLEdBQU4sTUFBTSxDQUFhO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUVoRCx5Q0FBeUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFcEYsK0RBQStEO1FBQy9ELE1BQU0sWUFBWSxHQUFHLFVBQVU7WUFDN0IsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxJQUFJLGlCQUFpQixDQUFDLENBQUM7UUFFdEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBbUI7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRWhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBRTNDLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckQsQ0FBQzt3R0EvRVUsWUFBWSxrQkFNYixRQUFRLGFBQ1IsV0FBVyxhQUNDLFlBQVk7NEdBUnZCLFlBQVksY0FEQyxNQUFNOzs0RkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU83QixNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgUExBVEZPUk1fSUQsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRPTExFX0NPTkZJRywgVG9sbGVDb25maWcgfSBmcm9tICcuL3RvbGxlLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGhlbWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICBwcml2YXRlIGlzRGFya1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNEYXJrJCA9IHRoaXMuaXNEYXJrU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRPTExFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFRvbGxlQ29uZmlnLFxuICAgIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MlxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVRoZW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaGVtZSgpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIC8vIDEuIERldGVybWluZSBJbml0aWFsIE1vZGUgKERhcmsvTGlnaHQpXG4gICAgY29uc3Qgc2F2ZWRUaGVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2xsZS10aGVtZScpO1xuICAgIGNvbnN0IHN5c3RlbVByZWZlcnNEYXJrID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzO1xuXG4gICAgLy8gTG9naWM6IFNhdmVkIFByZWZlcmVuY2UgPiBDb25maWcgRGVmYXVsdCA+IFN5c3RlbSBQcmVmZXJlbmNlXG4gICAgY29uc3Qgc2hvdWxkQmVEYXJrID0gc2F2ZWRUaGVtZVxuICAgICAgPyBzYXZlZFRoZW1lID09PSAnZGFyaydcbiAgICAgIDogKHRoaXMuY29uZmlnPy5kYXJrQnlEZWZhdWx0ID8/IHN5c3RlbVByZWZlcnNEYXJrKTtcblxuICAgIGlmIChzaG91bGRCZURhcmspIHtcbiAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRGFya01vZGUoKTtcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBseSBCcmFuZCBDb25maWdcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuYXBwbHlCcmFuZENvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGJyYW5kIGlkZW50aXR5IHZhcmlhYmxlcy5cbiAgICogVGhlc2UgYXJlIGFwcGxpZWQgdG8gOnJvb3QgKGh0bWwpIHNvIHRoZXkgcmlwcGxlIHRocm91Z2ggYWxsIGNvbG9yLW1peCBmdW5jdGlvbnMuXG4gICAqL1xuICBhcHBseUJyYW5kQ29uZmlnKGNvbmZpZzogVG9sbGVDb25maWcpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIGlmIChjb25maWcucHJpbWFyeUNvbG9yKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJvb3QsICctLXByaW1hcnknLCBjb25maWcucHJpbWFyeUNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290LCAnLS1yYWRpdXMnLCBjb25maWcucmFkaXVzKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUaGVtZSgpIHtcbiAgICBjb25zdCBpc0N1cnJlbnRseURhcmsgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2RhcmsnKTtcbiAgICBpc0N1cnJlbnRseURhcmsgPyB0aGlzLmRpc2FibGVEYXJrTW9kZSgpIDogdGhpcy5lbmFibGVEYXJrTW9kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVEYXJrTW9kZSgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnZGFyaycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2xsZS10aGVtZScsICdkYXJrJyk7XG4gICAgdGhpcy5pc0RhcmtTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVEYXJrTW9kZSgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnZGFyaycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2xsZS10aGVtZScsICdsaWdodCcpO1xuICAgIHRoaXMuaXNEYXJrU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gZ2V0IGN1cnJlbnQgc3RhdGUgZm9yIGNvbXBvbmVudHMgdGhhdCBtaWdodCBuZWVkIEpTLWJhc2VkIGxvZ2ljXG4gICAqL1xuICBnZXQgY3VycmVudFRoZW1lKCk6ICdkYXJrJyB8ICdsaWdodCcge1xuICAgIHJldHVybiB0aGlzLmlzRGFya1N1YmplY3QudmFsdWUgPyAnZGFyaycgOiAnbGlnaHQnO1xuICB9XG59XG4iXX0=
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7O0FBRzNELE1BQU0sT0FBTyxZQUFZO0lBT0s7SUFDRztJQUNhO0lBUnBDLFFBQVEsQ0FBWTtJQUNwQixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDNUQsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsT0FBTyxHQUFHLHFCQUFxQixDQUFDO0lBRXhDLFlBQzRCLFFBQWtCLEVBQ2YsVUFBa0IsRUFDTCxNQUFtQixFQUM3RCxlQUFpQztRQUhQLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ0wsV0FBTSxHQUFOLE1BQU0sQ0FBYTtRQUc3RCxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFFaEQseUNBQXlDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxD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OzswQkFBSSxNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIFBMQVRGT1JNX0lELCBPcHRpb25hbCwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUT0xMRV9DT05GSUcsIFRvbGxlQ29uZmlnIH0gZnJvbSAnLi90b2xsZS1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSB7XG4gIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgcHJpdmF0ZSBpc0RhcmtTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzRGFyayQgPSB0aGlzLmlzRGFya1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgc3R5bGVJZCA9ICd0b2xsZS1keW5hbWljLXRoZW1lJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRPTExFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFRvbGxlQ29uZmlnLFxuICAgIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MlxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVRoZW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaGVtZSgpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIC8vIDEuIERldGVybWluZSBJbml0aWFsIE1vZGUgKERhcmsvTGlnaHQpXG4gICAgY29uc3Qgc2F2ZWRUaGVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2xsZS10aGVtZScpO1xuICAgIGNvbnN0IHN5c3RlbVByZWZlcnNEYXJrID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzO1xuXG4gICAgLy8gTG9naWM6IFNhdmVkIFByZWZlcmVuY2UgPiBDb25maWcgRGVmYXVsdCA+IFN5c3RlbSBQcmVmZXJlbmNlXG4gICAgY29uc3Qgc2hvdWxkQmVEYXJrID0gc2F2ZWRUaGVtZVxuICAgICAgPyBzYXZlZFRoZW1lID09PSAnZGFyaydcbiAgICAgIDogKHRoaXMuY29uZmlnPy5kYXJrQnlEZWZhdWx0ID8/IHN5c3RlbVByZWZlcnNEYXJrKTtcblxuICAgIGlmIChzaG91bGRCZURhcmspIHtcbiAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRGFya01vZGUoKTtcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBseSBCcmFuZCBDb25maWcgLSBUaGlzIHdpbGwgZ2VuZXJhdGUgZnVsbCBwYWxldHRlXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmFwcGx5QnJhbmRDb25maWcodGhpcy5jb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBicmFuZCBpZGVudGl0eSB2YXJpYWJsZXMgd2l0aCBmdWxsIHNoYWRlIHBhbGV0dGVcbiAgICovXG4gIGFwcGx5QnJhbmRDb25maWcoY29uZmlnOiBUb2xsZUNvbmZpZykge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm9vdCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgLy8gU2V0IHByaW1hcnkgY29sb3IgaWYgcHJvdmlkZWRcbiAgICBpZiAoY29uZmlnLnByaW1hcnlDb2xvcikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyb290LCAnLS1wcmltYXJ5JywgY29uZmlnLnByaW1hcnlDb2xvcik7XG4gICAgICB0aGlzLmdlbmVyYXRlUHJpbWFyeVNoYWRlcyhjb25maWcucHJpbWFyeUNvbG9yKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgYm9yZGVyIHJhZGl1cyBpZiBwcm92aWRlZFxuICAgIGlmIChjb25maWcucmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJvb3QsICctLXJhZGl1cycsIGNvbmZpZy5yYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgZnVsbCBwcmltYXJ5IGNvbG9yIHBhbGV0dGUgKDUwLTkwMCkgYmFzZWQgb24gYmFzZSBjb2xvclxuICAgKiBVc2VzIGNvbG9yLW1peCgpIGZvciBjb25zaXN0ZW5jeSB3aXRoIHlvdXIgZXhpc3RpbmcgYXBwcm9hY2hcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQcmltYXJ5U2hhZGVzKGJhc2VDb2xvcjogc3RyaW5nKSB7XG4gICAgY29uc3QgY3NzID0gYFxuICAgICAgOnJvb3Qge1xuICAgICAgICAvKiBQcmltYXJ5IFNoYWRlcyAqL1xuICAgICAgICAtLXByaW1hcnktNTA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDkwJSk7XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDgwJSk7XG4gICAgICAgIC0tcHJpbWFyeS0yMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDYwJSk7XG4gICAgICAgIC0tcHJpbWFyeS0zMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDQwJSk7XG4gICAgICAgIC0tcHJpbWFyeS00MDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDIwJSk7XG4gICAgICAgIC0tcHJpbWFyeS01MDA6ICR7YmFzZUNvbG9yfTtcbiAgICAgICAgLS1wcmltYXJ5LTYwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgYmxhY2sgMjAlKTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgYmxhY2sgNDAlKTtcbiAgICAgICAgLS1wcmltYXJ5LTgwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgYmxhY2sgNjAlKTtcbiAgICAgICAgLS1wcmltYXJ5LTkwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgYmxhY2sgODAlKTtcblxuICAgICAgICAvKiBZb3VyIGV4aXN0aW5nIGRlcml2ZWQgY29sb3JzIC0gdXBkYXRlZCB0byB1c2UgbmV3IHNoYWRlcyAqL1xuICAgICAgICAtLXByaW1hcnktZm9yZWdyb3VuZDogd2hpdGU7XG4gICAgICAgIC0tc2Vjb25kYXJ5OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeS0yMDApLCB0cmFuc3BhcmVudCA0MCUpO1xuICAgICAgICAtLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LTkwMCk7XG4gICAgICAgIC0tbXV0ZWQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1wcmltYXJ5LTUwKSwgI2YzZjRmNiA1MCUpO1xuICAgICAgICAtLW11dGVkLWZvcmVncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1wcmltYXJ5LTQwMCksICM0YjU1NjMgNjAlKTtcbiAgICAgICAgLS1hY2NlbnQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1wcmltYXJ5LTEwMCksIHRyYW5zcGFyZW50IDcwJSk7XG4gICAgICAgIC0tYWNjZW50LWZvcmVncm91bmQ6IHZhcigtLXByaW1hcnktNzAwKTtcbiAgICAgICAgLS1yaW5nOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeS0zMDApLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgICAgfVxuXG4gICAgICAuZGFyayB7XG4gICAgICAgIC8qIERhcmsgbW9kZSB2YXJpYW50cyAqL1xuICAgICAgICAtLXByaW1hcnktNTA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIGJsYWNrIDg1JSk7XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIGJsYWNrIDc1JSk7XG4gICAgICAgIC0tcHJpbWFyeS0yMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIGJsYWNrIDY1JSk7XG4gICAgICAgIC0tcHJpbWFyeS0zMDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIGJsYWNrIDU1JSk7XG4gICAgICAgIC0tcHJpbWFyeS00MDA6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIGJsYWNrIDQ1JSk7XG4gICAgICAgIC0tcHJpbWFyeS01MDA6ICR7YmFzZUNvbG9yfTtcbiAgICAgICAgLS1wcmltYXJ5LTYwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgd2hpdGUgMjAlKTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgd2hpdGUgMzUlKTtcbiAgICAgICAgLS1wcmltYXJ5LTgwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgd2hpdGUgNTAlKTtcbiAgICAgICAgLS1wcmltYXJ5LTkwMDogY29sb3ItbWl4KGluIHNyZ2IsICR7YmFzZUNvbG9yfSwgd2hpdGUgNjUlKTtcblxuICAgICAgICAvKiBEYXJrIG1vZGUgZGVyaXZlZCBjb2xvcnMgKi9cbiAgICAgICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0sIHdoaXRlIDkwJSk7XG4gICAgICAgIC0tc2Vjb25kYXJ5OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeS05MDApLCB0cmFuc3BhcmVudCA3MCUpO1xuICAgICAgICAtLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LTEwMCk7XG4gICAgICAgIC0tbXV0ZWQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1wcmltYXJ5LTk1MCksICMxZjI5MzcgNTAlKTtcbiAgICAgICAgLS1tdXRlZC1mb3JlZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeS0zMDApLCAjOWNhM2FmIDQwJSk7XG4gICAgICAgIC0tYWNjZW50OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcHJpbWFyeS04MDApLCB0cmFuc3BhcmVudCA4MCUpO1xuICAgICAgICAtLWFjY2VudC1mb3JlZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LTIwMCk7XG4gICAgICAgIC0tcmluZzogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnktNjAwKSwgdHJhbnNwYXJlbnQgNjAlKTtcbiAgICAgIH1cbiAgICBgO1xuXG4gICAgdGhpcy5pbmplY3REeW5hbWljU3R5bGVzKGNzcyk7XG4gIH1cblxuICBwcml2YXRlIGluamVjdER5bmFtaWNTdHlsZXMoY3NzOiBzdHJpbmcpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBleGlzdGluZyBkeW5hbWljIHN0eWxlc1xuICAgIGNvbnN0IGV4aXN0aW5nU3R5bGUgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3R5bGVJZCk7XG4gICAgaWYgKGV4aXN0aW5nU3R5bGUpIHtcbiAgICAgIGV4aXN0aW5nU3R5bGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuZCBpbmplY3QgbmV3IHN0eWxlc1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZUVsZW1lbnQuaWQgPSB0aGlzLnN0eWxlSWQ7XG4gICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gY3NzO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCBzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgdG9nZ2xlVGhlbWUoKSB7XG4gICAgY29uc3QgaXNDdXJyZW50bHlEYXJrID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXJrJyk7XG4gICAgaXNDdXJyZW50bHlEYXJrID8gdGhpcy5kaXNhYmxlRGFya01vZGUoKSA6IHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlRGFya01vZGUoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2RhcmsnKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9sbGUtdGhlbWUnLCAnZGFyaycpO1xuICAgIHRoaXMuaXNEYXJrU3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlRGFya01vZGUoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2RhcmsnKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9sbGUtdGhlbWUnLCAnbGlnaHQnKTtcbiAgICB0aGlzLmlzRGFya1N1YmplY3QubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXQgY3VycmVudFRoZW1lKCk6ICdkYXJrJyB8ICdsaWdodCcge1xuICAgIHJldHVybiB0aGlzLmlzRGFya1N1YmplY3QudmFsdWUgPyAnZGFyaycgOiAnbGlnaHQnO1xuICB9XG59XG4iXX0=
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { APP_INITIALIZER, InjectionToken } from '@angular/core';
|
|
2
2
|
import { ThemeService } from './theme.service';
|
|
3
3
|
export const TOLLE_CONFIG = new InjectionToken('TolleConfig');
|
|
4
|
-
// projects/tolle/src/lib/tolle-config.ts
|
|
5
4
|
export function provideTolleConfig(config) {
|
|
6
5
|
return [
|
|
7
6
|
{ provide: TOLLE_CONFIG, useValue: config },
|
|
8
7
|
{
|
|
9
8
|
provide: APP_INITIALIZER,
|
|
10
9
|
useFactory: (themeService) => () => {
|
|
11
|
-
//
|
|
12
|
-
//
|
|
10
|
+
// Theme is already initialized in constructor
|
|
11
|
+
// This factory ensures themeService is instantiated during bootstrap
|
|
13
12
|
},
|
|
14
13
|
deps: [ThemeService],
|
|
15
14
|
multi: true,
|
|
16
15
|
},
|
|
17
16
|
];
|
|
18
17
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9sbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi90b2xsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUy9DLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYyxhQUFhLENBQUMsQ0FBQztBQUUzRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBbUI7SUFDcEQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1FBQzNDO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUMvQyw4Q0FBOEM7Z0JBQzlDLHFFQUFxRTtZQUN2RSxDQUFDO1lBQ0QsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuL3RoZW1lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvbGxlQ29uZmlnIHtcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICByYWRpdXM/OiBzdHJpbmc7XG4gIGRlZmF1bHRUb2FzdER1cmF0aW9uPzogbnVtYmVyO1xuICBkYXJrQnlEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFRPTExFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUb2xsZUNvbmZpZz4oJ1RvbGxlQ29uZmlnJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVG9sbGVDb25maWcoY29uZmlnOiBUb2xsZUNvbmZpZyk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogVE9MTEVfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgIC8vIFRoZW1lIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gY29uc3RydWN0b3JcbiAgICAgICAgLy8gVGhpcyBmYWN0b3J5IGVuc3VyZXMgdGhlbWVTZXJ2aWNlIGlzIGluc3RhbnRpYXRlZCBkdXJpbmcgYm9vdHN0cmFwXG4gICAgICB9LFxuICAgICAgZGVwczogW1RoZW1lU2VydmljZV0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdO1xufVxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -33,4 +33,5 @@ export * from './lib/modal';
|
|
|
33
33
|
export * from './lib/button-group.component';
|
|
34
34
|
export * from './lib/date-range-picker.component';
|
|
35
35
|
export * from './lib/range-calendar.component';
|
|
36
|
-
|
|
36
|
+
export * from './lib/theme.service';
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0b2xsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2NuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3dpdGNoLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYWRnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2tlbGV0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrYm94LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b29sdGlwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9sbGUtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL211bHRpLXNlbGVjdC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYWxlbmRhci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXNrZWQtaW5wdXQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGFnaW5hdGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNlbGwuZGlyZWN0aXZlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLXJlZidcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1zdGFjay5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24tZ3JvdXAuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGhlbWUuc2VydmljZSdcbiJdfQ==
|
|
@@ -1144,6 +1144,7 @@ class ThemeService {
|
|
|
1144
1144
|
renderer;
|
|
1145
1145
|
isDarkSubject = new BehaviorSubject(false);
|
|
1146
1146
|
isDark$ = this.isDarkSubject.asObservable();
|
|
1147
|
+
styleId = 'tolle-dynamic-theme';
|
|
1147
1148
|
constructor(document, platformId, config, rendererFactory) {
|
|
1148
1149
|
this.document = document;
|
|
1149
1150
|
this.platformId = platformId;
|
|
@@ -1167,26 +1168,98 @@ class ThemeService {
|
|
|
1167
1168
|
else {
|
|
1168
1169
|
this.disableDarkMode();
|
|
1169
1170
|
}
|
|
1170
|
-
// 2. Apply Brand Config
|
|
1171
|
+
// 2. Apply Brand Config - This will generate full palette
|
|
1171
1172
|
if (this.config) {
|
|
1172
1173
|
this.applyBrandConfig(this.config);
|
|
1173
1174
|
}
|
|
1174
1175
|
}
|
|
1175
1176
|
/**
|
|
1176
|
-
* Applies the brand identity variables
|
|
1177
|
-
* These are applied to :root (html) so they ripple through all color-mix functions.
|
|
1177
|
+
* Applies the brand identity variables with full shade palette
|
|
1178
1178
|
*/
|
|
1179
1179
|
applyBrandConfig(config) {
|
|
1180
1180
|
if (!isPlatformBrowser(this.platformId))
|
|
1181
1181
|
return;
|
|
1182
1182
|
const root = this.document.documentElement;
|
|
1183
|
+
// Set primary color if provided
|
|
1183
1184
|
if (config.primaryColor) {
|
|
1184
1185
|
this.renderer.setStyle(root, '--primary', config.primaryColor);
|
|
1186
|
+
this.generatePrimaryShades(config.primaryColor);
|
|
1185
1187
|
}
|
|
1188
|
+
// Set border radius if provided
|
|
1186
1189
|
if (config.radius) {
|
|
1187
1190
|
this.renderer.setStyle(root, '--radius', config.radius);
|
|
1188
1191
|
}
|
|
1189
1192
|
}
|
|
1193
|
+
/**
|
|
1194
|
+
* Generates full primary color palette (50-900) based on base color
|
|
1195
|
+
* Uses color-mix() for consistency with your existing approach
|
|
1196
|
+
*/
|
|
1197
|
+
generatePrimaryShades(baseColor) {
|
|
1198
|
+
const css = `
|
|
1199
|
+
:root {
|
|
1200
|
+
/* Primary Shades */
|
|
1201
|
+
--primary-50: color-mix(in srgb, ${baseColor}, white 90%);
|
|
1202
|
+
--primary-100: color-mix(in srgb, ${baseColor}, white 80%);
|
|
1203
|
+
--primary-200: color-mix(in srgb, ${baseColor}, white 60%);
|
|
1204
|
+
--primary-300: color-mix(in srgb, ${baseColor}, white 40%);
|
|
1205
|
+
--primary-400: color-mix(in srgb, ${baseColor}, white 20%);
|
|
1206
|
+
--primary-500: ${baseColor};
|
|
1207
|
+
--primary-600: color-mix(in srgb, ${baseColor}, black 20%);
|
|
1208
|
+
--primary-700: color-mix(in srgb, ${baseColor}, black 40%);
|
|
1209
|
+
--primary-800: color-mix(in srgb, ${baseColor}, black 60%);
|
|
1210
|
+
--primary-900: color-mix(in srgb, ${baseColor}, black 80%);
|
|
1211
|
+
|
|
1212
|
+
/* Your existing derived colors - updated to use new shades */
|
|
1213
|
+
--primary-foreground: white;
|
|
1214
|
+
--secondary: color-mix(in srgb, var(--primary-200), transparent 40%);
|
|
1215
|
+
--secondary-foreground: var(--primary-900);
|
|
1216
|
+
--muted: color-mix(in srgb, var(--primary-50), #f3f4f6 50%);
|
|
1217
|
+
--muted-foreground: color-mix(in srgb, var(--primary-400), #4b5563 60%);
|
|
1218
|
+
--accent: color-mix(in srgb, var(--primary-100), transparent 70%);
|
|
1219
|
+
--accent-foreground: var(--primary-700);
|
|
1220
|
+
--ring: color-mix(in srgb, var(--primary-300), transparent 50%);
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
.dark {
|
|
1224
|
+
/* Dark mode variants */
|
|
1225
|
+
--primary-50: color-mix(in srgb, ${baseColor}, black 85%);
|
|
1226
|
+
--primary-100: color-mix(in srgb, ${baseColor}, black 75%);
|
|
1227
|
+
--primary-200: color-mix(in srgb, ${baseColor}, black 65%);
|
|
1228
|
+
--primary-300: color-mix(in srgb, ${baseColor}, black 55%);
|
|
1229
|
+
--primary-400: color-mix(in srgb, ${baseColor}, black 45%);
|
|
1230
|
+
--primary-500: ${baseColor};
|
|
1231
|
+
--primary-600: color-mix(in srgb, ${baseColor}, white 20%);
|
|
1232
|
+
--primary-700: color-mix(in srgb, ${baseColor}, white 35%);
|
|
1233
|
+
--primary-800: color-mix(in srgb, ${baseColor}, white 50%);
|
|
1234
|
+
--primary-900: color-mix(in srgb, ${baseColor}, white 65%);
|
|
1235
|
+
|
|
1236
|
+
/* Dark mode derived colors */
|
|
1237
|
+
--primary-foreground: color-mix(in srgb, ${baseColor}, white 90%);
|
|
1238
|
+
--secondary: color-mix(in srgb, var(--primary-900), transparent 70%);
|
|
1239
|
+
--secondary-foreground: var(--primary-100);
|
|
1240
|
+
--muted: color-mix(in srgb, var(--primary-950), #1f2937 50%);
|
|
1241
|
+
--muted-foreground: color-mix(in srgb, var(--primary-300), #9ca3af 40%);
|
|
1242
|
+
--accent: color-mix(in srgb, var(--primary-800), transparent 80%);
|
|
1243
|
+
--accent-foreground: var(--primary-200);
|
|
1244
|
+
--ring: color-mix(in srgb, var(--primary-600), transparent 60%);
|
|
1245
|
+
}
|
|
1246
|
+
`;
|
|
1247
|
+
this.injectDynamicStyles(css);
|
|
1248
|
+
}
|
|
1249
|
+
injectDynamicStyles(css) {
|
|
1250
|
+
if (!isPlatformBrowser(this.platformId))
|
|
1251
|
+
return;
|
|
1252
|
+
// Remove existing dynamic styles
|
|
1253
|
+
const existingStyle = this.document.getElementById(this.styleId);
|
|
1254
|
+
if (existingStyle) {
|
|
1255
|
+
existingStyle.remove();
|
|
1256
|
+
}
|
|
1257
|
+
// Create and inject new styles
|
|
1258
|
+
const styleElement = this.document.createElement('style');
|
|
1259
|
+
styleElement.id = this.styleId;
|
|
1260
|
+
styleElement.textContent = css;
|
|
1261
|
+
this.renderer.appendChild(this.document.head, styleElement);
|
|
1262
|
+
}
|
|
1190
1263
|
toggleTheme() {
|
|
1191
1264
|
const isCurrentlyDark = this.document.documentElement.classList.contains('dark');
|
|
1192
1265
|
isCurrentlyDark ? this.disableDarkMode() : this.enableDarkMode();
|
|
@@ -1201,9 +1274,6 @@ class ThemeService {
|
|
|
1201
1274
|
localStorage.setItem('tolle-theme', 'light');
|
|
1202
1275
|
this.isDarkSubject.next(false);
|
|
1203
1276
|
}
|
|
1204
|
-
/**
|
|
1205
|
-
* Helper to get current state for components that might need JS-based logic
|
|
1206
|
-
*/
|
|
1207
1277
|
get currentTheme() {
|
|
1208
1278
|
return this.isDarkSubject.value ? 'dark' : 'light';
|
|
1209
1279
|
}
|
|
@@ -1227,15 +1297,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1227
1297
|
}] }, { type: i0.RendererFactory2 }] });
|
|
1228
1298
|
|
|
1229
1299
|
const TOLLE_CONFIG = new InjectionToken('TolleConfig');
|
|
1230
|
-
// projects/tolle/src/lib/tolle-config.ts
|
|
1231
1300
|
function provideTolleConfig(config) {
|
|
1232
1301
|
return [
|
|
1233
1302
|
{ provide: TOLLE_CONFIG, useValue: config },
|
|
1234
1303
|
{
|
|
1235
1304
|
provide: APP_INITIALIZER,
|
|
1236
1305
|
useFactory: (themeService) => () => {
|
|
1237
|
-
//
|
|
1238
|
-
//
|
|
1306
|
+
// Theme is already initialized in constructor
|
|
1307
|
+
// This factory ensures themeService is instantiated during bootstrap
|
|
1239
1308
|
},
|
|
1240
1309
|
deps: [ThemeService],
|
|
1241
1310
|
multi: true,
|
|
@@ -3639,5 +3708,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
3639
3708
|
* Generated bundle index. Do not edit.
|
|
3640
3709
|
*/
|
|
3641
3710
|
|
|
3642
|
-
export { AccordionComponent, AccordionItemComponent, BadgeComponent, ButtonComponent, ButtonGroupComponent, CalendarComponent, CardComponent, CardContentComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, DataTableComponent, DatePickerComponent, DateRangePickerComponent, InputComponent, MaskedInputComponent, Modal, ModalComponent, ModalRef, ModalService, ModalStackService, MultiSelectComponent, PaginationComponent, RangeCalendarComponent, SelectComponent, SelectGroupComponent, SelectItemComponent, SelectSeparatorComponent, SkeletonComponent, SwitchComponent, TOLLE_CONFIG, ToastService, TolleCellDirective, TooltipDirective, cn, provideTolleConfig };
|
|
3711
|
+
export { AccordionComponent, AccordionItemComponent, BadgeComponent, ButtonComponent, ButtonGroupComponent, CalendarComponent, CardComponent, CardContentComponent, CardFooterComponent, CardHeaderComponent, CardTitleComponent, CheckboxComponent, DataTableComponent, DatePickerComponent, DateRangePickerComponent, InputComponent, MaskedInputComponent, Modal, ModalComponent, ModalRef, ModalService, ModalStackService, MultiSelectComponent, PaginationComponent, RangeCalendarComponent, SelectComponent, SelectGroupComponent, SelectItemComponent, SelectSeparatorComponent, SkeletonComponent, SwitchComponent, TOLLE_CONFIG, ThemeService, ToastService, TolleCellDirective, TooltipDirective, cn, provideTolleConfig };
|
|
3643
3712
|
//# sourceMappingURL=tolle_-tolle-ui.mjs.map
|