@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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7O0FBRzNELE1BQU0sT0FBTyxZQUFZO0lBTUs7SUFDRztJQUNhO0lBUHBDLFFBQVEsQ0FBWTtJQUNwQixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDNUQsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUMsWUFDNEIsUUFBa0IsRUFDZixVQUFrQixFQUNMLE1BQW1CLEVBQzdELGVBQWlDO1FBSFAsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDTCxXQUFNLEdBQU4sTUFBTSxDQUFhO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUVoRCx5Q0FBeUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLGlCQUFpQixH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IEluamVjdCwgUExBVEZPUk1fSUQsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRPTExFX0NPTkZJRywgVG9sbGVDb25maWcgfSBmcm9tICcuL3RvbGxlLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGhlbWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICBwcml2YXRlIGlzRGFya1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+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
- // This is an empty execution that triggers the Service Constructor
12
- // ensuring initialization happens during the Angular bootstrap phase.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9sbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi90b2xsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBRSxjQUFjLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBUzdDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYyxhQUFhLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW1CO0lBQ3BELE9BQU87UUFDTCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtRQUMzQztZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxDQUFDLFlBQTBCLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDL0MsbUVBQW1FO2dCQUNuRSxzRUFBc0U7WUFDeEUsQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztZQUNwQixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FQUF9JTklUSUFMSVpFUiwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGhlbWVTZXJ2aWNlfSBmcm9tICcuL3RoZW1lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvbGxlQ29uZmlnIHtcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICByYWRpdXM/OiBzdHJpbmc7XG4gIGRlZmF1bHRUb2FzdER1cmF0aW9uPzogbnVtYmVyO1xuICBkYXJrQnlEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFRPTExFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUb2xsZUNvbmZpZz4oJ1RvbGxlQ29uZmlnJyk7XG5cbi8vIHByb2plY3RzL3RvbGxlL3NyYy9saWIvdG9sbGUtY29uZmlnLnRzXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRvbGxlQ29uZmlnKGNvbmZpZzogVG9sbGVDb25maWcpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7IHByb3ZpZGU6IFRPTExFX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICh0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSkgPT4gKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IGV4ZWN1dGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBTZXJ2aWNlIENvbnN0cnVjdG9yXG4gICAgICAgIC8vIGVuc3VyaW5nIGluaXRpYWxpemF0aW9uIGhhcHBlbnMgZHVyaW5nIHRoZSBBbmd1bGFyIGJvb3RzdHJhcCBwaGFzZS5cbiAgICAgIH0sXG4gICAgICBkZXBzOiBbVGhlbWVTZXJ2aWNlXSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF07XG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9sbGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi90b2xsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUy9DLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYyxhQUFhLENBQUMsQ0FBQztBQUUzRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBbUI7SUFDcEQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1FBQzNDO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUMvQyw4Q0FBOEM7Z0JBQzlDLHFFQUFxRTtZQUN2RSxDQUFDO1lBQ0QsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuL3RoZW1lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvbGxlQ29uZmlnIHtcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICByYWRpdXM/OiBzdHJpbmc7XG4gIGRlZmF1bHRUb2FzdER1cmF0aW9uPzogbnVtYmVyO1xuICBkYXJrQnlEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFRPTExFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUb2xsZUNvbmZpZz4oJ1RvbGxlQ29uZmlnJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVG9sbGVDb25maWcoY29uZmlnOiBUb2xsZUNvbmZpZyk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogVE9MTEVfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgIC8vIFRoZW1lIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gY29uc3RydWN0b3JcbiAgICAgICAgLy8gVGhpcyBmYWN0b3J5IGVuc3VyZXMgdGhlbWVTZXJ2aWNlIGlzIGluc3RhbnRpYXRlZCBkdXJpbmcgYm9vdHN0cmFwXG4gICAgICB9LFxuICAgICAgZGVwczogW1RoZW1lU2VydmljZV0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdO1xufVxuIl19
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdG9sbGVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QtZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N3aXRjaC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFkZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NrZWxldG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGVja2JveC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9vbHRpcC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Quc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tdWx0aS1zZWxlY3QuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BhZ2luYXRpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS10YWJsZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2xsZS1jZWxsLmRpcmVjdGl2ZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi1pdGVtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1yZWYnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwtc3RhY2suc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhbmdlLWNhbGVuZGFyLmNvbXBvbmVudCdcbiJdfQ==
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
- // This is an empty execution that triggers the Service Constructor
1238
- // ensuring initialization happens during the Angular bootstrap phase.
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