@opendevstack/ngx-appshell 19.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +131 -0
  2. package/fesm2022/opendevstack-ngx-appshell.mjs +727 -0
  3. package/fesm2022/opendevstack-ngx-appshell.mjs.map +1 -0
  4. package/index.d.ts +5 -0
  5. package/lib/components/appshell-breadcrumb/appshell-breadcrumb.component.d.ts +7 -0
  6. package/lib/components/appshell-chip/appshell-chip.component.d.ts +6 -0
  7. package/lib/components/appshell-filters/appshell-filters.component.d.ts +12 -0
  8. package/lib/components/appshell-header/appshell-header.component.d.ts +24 -0
  9. package/lib/components/appshell-icon/appshell-icon.component.d.ts +12 -0
  10. package/lib/components/appshell-layout/appshell-layout.component.d.ts +25 -0
  11. package/lib/components/appshell-page-header/appshell-page-header.component.d.ts +18 -0
  12. package/lib/components/appshell-platform-header/appshell-platform-header.component.d.ts +37 -0
  13. package/lib/components/appshell-platform-layout/appshell-platform-layout.component.d.ts +30 -0
  14. package/lib/components/appshell-product-card/appshell-product-card.component.d.ts +23 -0
  15. package/lib/components/appshell-product-card-v2/appshell-product-card-v2.component.d.ts +16 -0
  16. package/lib/components/appshell-select/appshell-select.component.d.ts +9 -0
  17. package/lib/components/appshell-sidebar-menu/appshell-sidebar-menu.component.d.ts +12 -0
  18. package/lib/components/appshell-toast/appshell-toast.component.d.ts +9 -0
  19. package/lib/components/appshell-toasts/appshell-toasts.component.d.ts +14 -0
  20. package/lib/components/index.d.ts +15 -0
  21. package/lib/directives/appshell-link.directive.d.ts +15 -0
  22. package/lib/directives/index.d.ts +1 -0
  23. package/lib/models/appshell-button.d.ts +5 -0
  24. package/lib/models/appshell-filter.d.ts +4 -0
  25. package/lib/models/appshell-link.d.ts +6 -0
  26. package/lib/models/appshell-links-group.d.ts +5 -0
  27. package/lib/models/appshell-notification.d.ts +10 -0
  28. package/lib/models/appshell-picker.d.ts +9 -0
  29. package/lib/models/appshell-product.d.ts +12 -0
  30. package/lib/models/appshell-tag.d.ts +4 -0
  31. package/lib/models/appshell-toast.d.ts +6 -0
  32. package/lib/models/appshell-user.d.ts +5 -0
  33. package/lib/models/index.d.ts +10 -0
  34. package/lib/screens/appshell-notifications-screen/appshell-notifications-screen.component.d.ts +23 -0
  35. package/lib/screens/appshell-product-catalog-screen/appshell-product-catalog-screen.component.d.ts +16 -0
  36. package/lib/screens/appshell-product-view-screen/appshell-product-view-screen.component.d.ts +19 -0
  37. package/lib/screens/index.d.ts +3 -0
  38. package/lib/services/appshell-toast.service.d.ts +12 -0
  39. package/lib/services/icon-registry.service.d.ts +14 -0
  40. package/lib/services/index.d.ts +2 -0
  41. package/opendevstack-ngx-appshell-19.0.5.tgz +0 -0
  42. package/package.json +44 -0
  43. package/public-api.d.ts +5 -0
  44. package/schematics/azure-login/files/app-config/config.json.template +12 -0
  45. package/schematics/azure-login/files/app-config-service/app-config.service.spec.ts.template +48 -0
  46. package/schematics/azure-login/files/app-config-service/app-config.service.ts.template +39 -0
  47. package/schematics/azure-login/files/azure-config/azure.config.ts.template +94 -0
  48. package/schematics/azure-login/files/azure-service/azure.service.spec.ts.template +311 -0
  49. package/schematics/azure-login/files/azure-service/azure.service.ts.template +161 -0
  50. package/schematics/azure-login/index.d.ts +2 -0
  51. package/schematics/azure-login/index.js +325 -0
  52. package/schematics/azure-login/index.js.map +1 -0
  53. package/schematics/azure-login/schema.json +8 -0
  54. package/schematics/collection.json +19 -0
  55. package/schematics/nats-notifications/files/nats-service/nats.service.spec.ts.template +473 -0
  56. package/schematics/nats-notifications/files/nats-service/nats.service.ts.template +255 -0
  57. package/schematics/nats-notifications/files/notifications-screen/notifications-screen.component.html.template +7 -0
  58. package/schematics/nats-notifications/files/notifications-screen/notifications-screen.component.spec.ts.template +152 -0
  59. package/schematics/nats-notifications/files/notifications-screen/notifications-screen.component.ts.template +61 -0
  60. package/schematics/nats-notifications/index.d.ts +2 -0
  61. package/schematics/nats-notifications/index.js +502 -0
  62. package/schematics/nats-notifications/index.js.map +1 -0
  63. package/schematics/nats-notifications/schema.json +8 -0
  64. package/schematics/ng-add/files/_fonts.scss +85 -0
  65. package/schematics/ng-add/files/styles.scss +47 -0
  66. package/schematics/ng-add/index.d.ts +2 -0
  67. package/schematics/ng-add/index.js +442 -0
  68. package/schematics/ng-add/index.js.map +1 -0
  69. package/styles/appshell-typography-config.scss +19 -0
  70. package/styles/appshell.theme.scss +75 -0
  71. package/styles/palette.css +92 -0
@@ -0,0 +1,47 @@
1
+ @use '@angular/material' as mat;
2
+ @use "@appshell/ngx-appshell/styles/appshell-typography-config" as config;
3
+ @use '@appshell/ngx-appshell/styles/appshell.theme.scss' as appshell;
4
+ @use "sass:map";
5
+ @use "fonts";
6
+
7
+ @include mat.typography-hierarchy(config.$appshell-typography);
8
+
9
+ :root {
10
+ --main-color: #{map.get(appshell.$appshell-primary-palette, 800)};
11
+ --main-color-contrast: #{map.get(appshell.$appshell-accent-palette, 500)};
12
+ --main-color-contrast-hover: #{map.get(appshell.$appshell-accent-palette, 200)};
13
+ --main-color-dark: #{map.get(appshell.$appshell-primary-palette, 900)};
14
+ --text-color-on-main-color: #{map.get(map.get(appshell.$appshell-primary-palette, contrast), 800)};
15
+ --background-color: #{map.get(appshell.$appshell-theme, background-color)};
16
+ --text-color-on-background: #{map.get(appshell.$appshell-primary-palette, 900)};
17
+ }
18
+
19
+ html, body {
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ h1,h2,h3 {
25
+ font-family: AppShellHeadingFont!important;
26
+ font-weight: 500!important; // Needed since angular material theming for typographies is not working with all headings
27
+ }
28
+ h4,h5,h6 {
29
+ font-family: AppShellHeadingFont!important;
30
+ font-weight: 700!important; // Needed since angular material theming for typographies is not working with all headings
31
+ }
32
+
33
+ router-outlet+* {
34
+ width: 100%;
35
+ height: 100%;
36
+ background-color: var(--background-color);
37
+ }
38
+
39
+ .mat-mdc-tooltip>div {
40
+ background-color: var(--background-color)!important;
41
+ color: var(--text-color-on-background)!important;
42
+ }
43
+
44
+ .toast-container .appshell-toast .appshell-toast-content h4 {
45
+ line-clamp: unset!important;
46
+ -webkit-line-clamp: unset!important;
47
+ }
@@ -0,0 +1,2 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare function ngAdd(): Rule;
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ngAdd = ngAdd;
4
+ const schematics_1 = require("@angular-devkit/schematics");
5
+ const tasks_1 = require("@angular-devkit/schematics/tasks");
6
+ const ts = require("typescript");
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ function ngAdd() {
10
+ return (_tree, context) => {
11
+ context.logger.info('Adding ngx-appshell to your project');
12
+ context.logger.info('Installing packages...');
13
+ context.addTask(new tasks_1.NodePackageInstallTask());
14
+ return (0, schematics_1.chain)([
15
+ updateIndexHtml(),
16
+ createFontsFile(),
17
+ updateStylesScss(),
18
+ updateAngularJson(),
19
+ addRequiredProvidersInAppConfig(),
20
+ updateAppComponent()
21
+ ]);
22
+ };
23
+ }
24
+ function updateIndexHtml() {
25
+ return (tree, context) => {
26
+ const indexPath = 'src/index.html';
27
+ let content = readFileContent(tree, indexPath, context);
28
+ if (!content)
29
+ return tree;
30
+ // Add Google Fonts link to head if not present
31
+ const fontsLink = '<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght@200" />';
32
+ if (!content.includes('fonts.googleapis.com/css2?family=Material+Symbols+Outlined')) {
33
+ const headMatch = content.match(/<head([^>]*)>/);
34
+ if (headMatch) {
35
+ const headTag = headMatch[0];
36
+ content = content.replace(headTag, `${headTag}\n ${fontsLink}`);
37
+ context.logger.info(`Added Google Fonts link to head in ${indexPath}.`);
38
+ }
39
+ else {
40
+ context.logger.warn(`Could not find head tag in ${indexPath}.`);
41
+ }
42
+ }
43
+ else {
44
+ context.logger.info(`Google Fonts link already present in ${indexPath}.`);
45
+ }
46
+ // Add mat-typography class to body if not present
47
+ const bodyMatch = content.match(/<body([^>]*)>/);
48
+ if (!bodyMatch) {
49
+ context.logger.error(`Could not find body tag in ${indexPath}.`);
50
+ tree.overwrite(indexPath, content);
51
+ return tree;
52
+ }
53
+ const [bodyTag, bodyAttrs = ''] = bodyMatch;
54
+ if (bodyAttrs.includes('mat-typography')) {
55
+ context.logger.info(`Class "mat-typography" already present in body tag.`);
56
+ }
57
+ else {
58
+ const newBodyTag = bodyAttrs.includes('class="')
59
+ ? bodyTag.replace(/class="([^"]*)"/, 'class="$1 mat-typography"')
60
+ : bodyTag.replace(/<body/, '<body class="mat-typography"');
61
+ content = content.replace(bodyTag, newBodyTag);
62
+ context.logger.info(`Added class "mat-typography" to body tag in ${indexPath}.`);
63
+ }
64
+ tree.overwrite(indexPath, content);
65
+ return tree;
66
+ };
67
+ }
68
+ function createFontsFile() {
69
+ return (tree, context) => {
70
+ const fontsPath = 'src/_fonts.scss';
71
+ const templatePath = (0, path_1.join)(__dirname, 'files/_fonts.scss');
72
+ const templateContent = (0, fs_1.readFileSync)(templatePath, 'utf-8');
73
+ tree.create(fontsPath, templateContent);
74
+ context.logger.info(`Created ${fontsPath}.`);
75
+ return tree;
76
+ };
77
+ }
78
+ function updateStylesScss() {
79
+ return (tree, context) => {
80
+ const stylesPath = 'src/styles.scss';
81
+ if (!tree.exists(stylesPath)) {
82
+ context.logger.error(`File ${stylesPath} does not exist.`);
83
+ return tree;
84
+ }
85
+ const templatePath = (0, path_1.join)(__dirname, 'files/styles.scss');
86
+ const templateContent = (0, fs_1.readFileSync)(templatePath, 'utf-8');
87
+ tree.overwrite(stylesPath, templateContent);
88
+ context.logger.info(`Replaced ${stylesPath} with required imports and styles.`);
89
+ return tree;
90
+ };
91
+ }
92
+ function updateAngularJson() {
93
+ return (tree, context) => {
94
+ var _a, _b, _c, _d, _e, _f, _g;
95
+ const angularJsonPath = 'angular.json';
96
+ const content = readFileContent(tree, angularJsonPath, context);
97
+ if (!content)
98
+ return tree;
99
+ const angularJson = JSON.parse(content);
100
+ const paletteStyle = 'node_modules/@appshell/ngx-appshell/styles/palette.css';
101
+ const stylePreprocessorPath = 'node_modules/@appshell/ngx-appshell';
102
+ let updated = false;
103
+ const projects = angularJson.projects;
104
+ for (const projectName in projects) {
105
+ const project = projects[projectName];
106
+ const buildOptions = (_b = (_a = project === null || project === void 0 ? void 0 : project.architect) === null || _a === void 0 ? void 0 : _a.build) === null || _b === void 0 ? void 0 : _b.options;
107
+ const productionConfig = (_e = (_d = (_c = project === null || project === void 0 ? void 0 : project.architect) === null || _c === void 0 ? void 0 : _c.build) === null || _d === void 0 ? void 0 : _d.configurations) === null || _e === void 0 ? void 0 : _e.production;
108
+ const testOptions = (_g = (_f = project === null || project === void 0 ? void 0 : project.architect) === null || _f === void 0 ? void 0 : _f.test) === null || _g === void 0 ? void 0 : _g.options;
109
+ if (buildOptions) {
110
+ // Add palette.css to styles array
111
+ if (Array.isArray(buildOptions.styles)) {
112
+ if (!buildOptions.styles.includes(paletteStyle)) {
113
+ buildOptions.styles.push(paletteStyle);
114
+ updated = true;
115
+ context.logger.info(`Added palette.css to styles in project "${projectName}".`);
116
+ }
117
+ else {
118
+ context.logger.info(`palette.css already present in project "${projectName}".`);
119
+ }
120
+ }
121
+ // Add stylePreprocessorOptions
122
+ if (!buildOptions.stylePreprocessorOptions) {
123
+ buildOptions.stylePreprocessorOptions = { includePaths: [] };
124
+ }
125
+ if (!buildOptions.stylePreprocessorOptions.includePaths) {
126
+ buildOptions.stylePreprocessorOptions.includePaths = [];
127
+ }
128
+ if (!buildOptions.stylePreprocessorOptions.includePaths.includes(stylePreprocessorPath)) {
129
+ buildOptions.stylePreprocessorOptions.includePaths.push(stylePreprocessorPath);
130
+ updated = true;
131
+ context.logger.info(`Added stylePreprocessorOptions includePath in project "${projectName}".`);
132
+ }
133
+ else {
134
+ context.logger.info(`stylePreprocessorOptions includePath already present in project "${projectName}".`);
135
+ }
136
+ }
137
+ // Clear styles in test configuration
138
+ if (testOptions) {
139
+ if (!testOptions.styles || testOptions.styles.length > 0) {
140
+ testOptions.styles = [];
141
+ updated = true;
142
+ context.logger.info(`Cleared test styles in project "${projectName}".`);
143
+ }
144
+ }
145
+ // Update budgets in production configuration
146
+ if (productionConfig) {
147
+ if (!productionConfig.budgets) {
148
+ productionConfig.budgets = [];
149
+ }
150
+ const requiredBudgets = [
151
+ { type: 'initial', maximumWarning: '2MB', maximumError: '4MB' },
152
+ { type: 'anyComponentStyle', maximumWarning: '2kB', maximumError: '4kB' }
153
+ ];
154
+ for (const requiredBudget of requiredBudgets) {
155
+ const existingBudget = productionConfig.budgets.find((b) => b.type === requiredBudget.type);
156
+ if (existingBudget) {
157
+ const warningUpdated = updateBudgetValue(existingBudget, 'maximumWarning', requiredBudget.maximumWarning);
158
+ const errorUpdated = updateBudgetValue(existingBudget, 'maximumError', requiredBudget.maximumError);
159
+ if (warningUpdated || errorUpdated) {
160
+ updated = true;
161
+ context.logger.info(`Updated ${requiredBudget.type} budget in project "${projectName}".`);
162
+ }
163
+ }
164
+ else {
165
+ productionConfig.budgets.push(requiredBudget);
166
+ updated = true;
167
+ context.logger.info(`Added ${requiredBudget.type} budget in project "${projectName}".`);
168
+ }
169
+ }
170
+ }
171
+ }
172
+ if (updated) {
173
+ tree.overwrite(angularJsonPath, JSON.stringify(angularJson, null, 2));
174
+ }
175
+ return tree;
176
+ };
177
+ }
178
+ function updateBudgetValue(budget, key, minValue) {
179
+ const parseSize = (size) => {
180
+ const units = { B: 1, kB: 1024, MB: 1024 * 1024, GB: 1024 * 1024 * 1024 };
181
+ const match = size.match(/^(\d+(?:\.\d+)?)\s*(B|kB|MB|GB)$/);
182
+ if (!match)
183
+ return 0;
184
+ return parseFloat(match[1]) * units[match[2]];
185
+ };
186
+ const currentSize = parseSize(budget[key] || '0B');
187
+ const requiredSize = parseSize(minValue);
188
+ if (currentSize < requiredSize) {
189
+ budget[key] = minValue;
190
+ return true;
191
+ }
192
+ return false;
193
+ }
194
+ function addRequiredProvidersInAppConfig() {
195
+ return (tree, context) => {
196
+ const appConfigPath = 'src/app/app.config.ts';
197
+ let content = readFileContent(tree, appConfigPath, context);
198
+ if (!content)
199
+ return tree;
200
+ let sourceFile = ts.createSourceFile(appConfigPath, content, ts.ScriptTarget.Latest, true);
201
+ content = addProviderIfMissing(content, sourceFile, 'provideAnimations', `import { provideAnimations } from '@angular/platform-browser/animations';`, 'provideAnimations()', context);
202
+ sourceFile = ts.createSourceFile(appConfigPath, content, ts.ScriptTarget.Latest, true);
203
+ content = addProviderIfMissing(content, sourceFile, 'provideHttpClient', `import { provideHttpClient, withFetch, withInterceptorsFromDi } from '@angular/common/http';`, 'provideHttpClient(withInterceptorsFromDi(), withFetch())', context);
204
+ sourceFile = ts.createSourceFile(appConfigPath, content, ts.ScriptTarget.Latest, true);
205
+ content = addObjectProviderIfMissing(content, sourceFile, 'MAT_FORM_FIELD_DEFAULT_OPTIONS', `import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';`, `{\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n subscriptSizing: 'dynamic'\n }\n }`, context);
206
+ sourceFile = ts.createSourceFile(appConfigPath, content, ts.ScriptTarget.Latest, true);
207
+ content = addAppInitializerProviderIfMissing(content, sourceFile, context);
208
+ tree.overwrite(appConfigPath, content);
209
+ context.logger.info(`Added required imports and providers in ${appConfigPath}.`);
210
+ return tree;
211
+ };
212
+ }
213
+ function readFileContent(tree, filePath, context) {
214
+ if (!tree.exists(filePath)) {
215
+ context.logger.error(`File ${filePath} does not exist.`);
216
+ return null;
217
+ }
218
+ const buffer = tree.read(filePath);
219
+ if (!buffer) {
220
+ context.logger.error(`Could not read file ${filePath}.`);
221
+ return null;
222
+ }
223
+ return buffer.toString('utf-8');
224
+ }
225
+ function addProviderIfMissing(content, sourceFile, importName, importStatement, providerCall, context) {
226
+ const hasImport = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes(importName));
227
+ if (hasImport)
228
+ return content;
229
+ const providersMatch = content.match(/providers:\s*\[([\s\S]*?)\]/);
230
+ if (!providersMatch) {
231
+ context.logger.warn('Could not locate providers array to update');
232
+ return content;
233
+ }
234
+ const providersContent = providersMatch[1].trim();
235
+ const needsComma = providersContent.length > 0 && !providersContent.endsWith(',');
236
+ const updatedProviders = providersContent.length > 0
237
+ ? `${providersContent}${needsComma ? ',' : ''}\n ${providerCall}`
238
+ : providerCall;
239
+ content = `${importStatement}\n${content}`;
240
+ content = content.replace(providersMatch[0], `providers: [\n ${updatedProviders}\n ]`);
241
+ context.logger.info(`Updated providers array to include ${importName}`);
242
+ return content;
243
+ }
244
+ function addObjectProviderIfMissing(content, sourceFile, importName, importStatement, providerObject, context) {
245
+ const hasImport = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes(importName));
246
+ if (hasImport) {
247
+ context.logger.info(`${importName} already imported, skipping provider addition`);
248
+ return content;
249
+ }
250
+ const providersMatch = content.match(/providers:\s*\[([\s\S]*?)\]/);
251
+ if (!providersMatch) {
252
+ context.logger.warn('Could not locate providers array to update');
253
+ return content;
254
+ }
255
+ const providersContent = providersMatch[1].trim();
256
+ const needsComma = providersContent.length > 0 && !providersContent.endsWith(',');
257
+ const updatedProviders = providersContent.length > 0
258
+ ? `${providersContent}${needsComma ? ',' : ''}\n ${providerObject}`
259
+ : providerObject;
260
+ content = `${importStatement}\n${content}`;
261
+ content = content.replace(providersMatch[0], `providers: [\n ${updatedProviders}\n ]`);
262
+ context.logger.info(`Updated providers array to include ${importName}`);
263
+ return content;
264
+ }
265
+ function addAppInitializerProviderIfMissing(content, sourceFile, context) {
266
+ const hasIconRegistryImport = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes('IconRegistryService'));
267
+ if (hasIconRegistryImport) {
268
+ context.logger.info('IconRegistryService already imported, skipping app initializer provider');
269
+ return content;
270
+ }
271
+ const providersMatch = content.match(/providers:\s*\[([\s\S]*?)\]/);
272
+ if (!providersMatch) {
273
+ context.logger.warn('Could not locate providers array to update');
274
+ return content;
275
+ }
276
+ const providersContent = providersMatch[1].trim();
277
+ const needsComma = providersContent.length > 0 && !providersContent.endsWith(',');
278
+ const providerCode = `provideAppInitializer(() => {\n const iconService = inject(IconRegistryService);\n return iconService.registerIconsFromManifest('assets/icons.json');\n })`;
279
+ const updatedProviders = providersContent.length > 0
280
+ ? `${providersContent}${needsComma ? ',' : ''}\n ${providerCode}`
281
+ : providerCode;
282
+ // Add necessary imports
283
+ const hasProvideAppInitializer = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes('provideAppInitializer'));
284
+ const hasInject = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes('inject'));
285
+ if (!hasProvideAppInitializer || !hasInject) {
286
+ // Check if there's already an import from @angular/core
287
+ const coreImportMatch = content.match(/import\s*{([^}]*)}\s*from\s*['"]@angular\/core['"]/);
288
+ if (coreImportMatch) {
289
+ const imports = coreImportMatch[1].split(',').map(i => i.trim());
290
+ const missingImports = [];
291
+ if (!hasProvideAppInitializer && !imports.includes('provideAppInitializer')) {
292
+ missingImports.push('provideAppInitializer');
293
+ }
294
+ if (!hasInject && !imports.includes('inject')) {
295
+ missingImports.push('inject');
296
+ }
297
+ if (missingImports.length > 0) {
298
+ const updatedImports = [...imports, ...missingImports].join(', ');
299
+ content = content.replace(coreImportMatch[0], `import { ${updatedImports} } from '@angular/core'`);
300
+ }
301
+ }
302
+ else {
303
+ const neededImports = [];
304
+ if (!hasProvideAppInitializer)
305
+ neededImports.push('provideAppInitializer');
306
+ if (!hasInject)
307
+ neededImports.push('inject');
308
+ content = `import { ${neededImports.join(', ')} } from '@angular/core';\n${content}`;
309
+ }
310
+ }
311
+ content = `import { IconRegistryService } from '@appshell/ngx-appshell';\n${content}`;
312
+ content = content.replace(providersMatch[0], `providers: [\n ${updatedProviders}\n ]`);
313
+ context.logger.info('Updated providers array to include icon registry app initializer');
314
+ return content;
315
+ }
316
+ function updateAppComponent() {
317
+ return (tree, context) => {
318
+ const appComponentPath = 'src/app/app.component.ts';
319
+ let content = readFileContent(tree, appComponentPath, context);
320
+ if (!content)
321
+ return tree;
322
+ let sourceFile = ts.createSourceFile(appComponentPath, content, ts.ScriptTarget.Latest, true);
323
+ // Check if MatIconRegistry is already imported
324
+ const hasMatIconRegistryImport = sourceFile.statements.some((node) => ts.isImportDeclaration(node) && node.getText().includes('MatIconRegistry'));
325
+ if (hasMatIconRegistryImport) {
326
+ context.logger.info('MatIconRegistry already imported in app.component.ts, skipping update');
327
+ return tree;
328
+ }
329
+ // Add MatIconRegistry import
330
+ const matIconRegistryImport = `import { MatIconRegistry } from '@angular/material/icon';`;
331
+ const firstImportMatch = content.match(/^import\s/m);
332
+ if (firstImportMatch) {
333
+ content = `${matIconRegistryImport}\n${content}`;
334
+ }
335
+ // Add MatIconRegistry to constructor parameters or create constructor if it doesn't exist
336
+ const constructorMatch = content.match(/constructor\s*\(([^)]*)\)/);
337
+ if (constructorMatch) {
338
+ const params = constructorMatch[1].trim();
339
+ const needsComma = params.length > 0 && !params.endsWith(',');
340
+ const newParam = 'private matIconReg: MatIconRegistry';
341
+ const updatedParams = params.length > 0
342
+ ? `${params}${needsComma ? ',' : ''}\n ${newParam}`
343
+ : newParam;
344
+ content = content.replace(constructorMatch[0], `constructor(\n ${updatedParams}\n )`);
345
+ context.logger.info('Added MatIconRegistry parameter to constructor');
346
+ }
347
+ else {
348
+ // No constructor exists, create one
349
+ const classBodyMatch = content.match(/export\s+class\s+\w+[^{]*\{/);
350
+ if (classBodyMatch) {
351
+ const classBodyStart = content.indexOf(classBodyMatch[0]) + classBodyMatch[0].length;
352
+ const beforeClassBody = content.substring(0, classBodyStart);
353
+ const afterClassBody = content.substring(classBodyStart);
354
+ const newConstructor = `\n\n constructor(private matIconReg: MatIconRegistry) {}\n`;
355
+ content = `${beforeClassBody}${newConstructor}${afterClassBody}`;
356
+ context.logger.info('Created constructor with MatIconRegistry parameter');
357
+ }
358
+ else {
359
+ context.logger.warn('Could not find class declaration in app.component.ts');
360
+ return tree;
361
+ }
362
+ }
363
+ // Check if class implements OnInit
364
+ const classMatch = content.match(/export\s+class\s+\w+\s+implements\s+([^{]+)\{/);
365
+ const implementsOnInit = classMatch && classMatch[1].includes('OnInit');
366
+ if (!implementsOnInit) {
367
+ // Add OnInit to implements clause
368
+ if (classMatch) {
369
+ const interfaces = classMatch[1].trim();
370
+ const updatedInterfaces = interfaces.length > 0
371
+ ? `${interfaces}, OnInit`
372
+ : 'OnInit';
373
+ content = content.replace(classMatch[0], classMatch[0].replace(classMatch[1], ` ${updatedInterfaces} `));
374
+ context.logger.info('Added OnInit interface to class');
375
+ }
376
+ else {
377
+ // No implements clause, add one
378
+ const classDeclarationMatch = content.match(/export\s+class\s+\w+\s*\{/);
379
+ if (classDeclarationMatch) {
380
+ content = content.replace(classDeclarationMatch[0], classDeclarationMatch[0].replace('{', 'implements OnInit {'));
381
+ context.logger.info('Added OnInit interface to class');
382
+ }
383
+ }
384
+ // Check if OnInit is imported
385
+ const coreImportMatch = content.match(/import\s*{([^}]*)}\s*from\s*['"]@angular\/core['"]/);
386
+ if (coreImportMatch) {
387
+ const imports = coreImportMatch[1].split(',').map(i => i.trim());
388
+ if (!imports.includes('OnInit')) {
389
+ const updatedImports = [...imports, 'OnInit'].join(', ');
390
+ content = content.replace(coreImportMatch[0], `import { ${updatedImports} } from '@angular/core'`);
391
+ context.logger.info('Added OnInit to @angular/core imports');
392
+ }
393
+ }
394
+ }
395
+ // Add or update ngOnInit method
396
+ const ngOnInitMatch = content.match(/ngOnInit\s*\(\s*\)\s*:\s*\w+\s*\{/);
397
+ if (ngOnInitMatch) {
398
+ // ngOnInit exists, add the setDefaultFontSetClass call at the beginning
399
+ const methodBodyStart = content.indexOf('{', content.indexOf('ngOnInit'));
400
+ const insertPosition = methodBodyStart + 1;
401
+ const beforeInsert = content.substring(0, insertPosition);
402
+ const afterInsert = content.substring(insertPosition);
403
+ content = `${beforeInsert}\n this.matIconReg.setDefaultFontSetClass('material-symbols-outlined');${afterInsert}`;
404
+ context.logger.info('Added setDefaultFontSetClass call to existing ngOnInit method');
405
+ }
406
+ else {
407
+ // ngOnInit doesn't exist, create it after the constructor
408
+ const constructorMatch = content.match(/constructor\s*\([^)]*\)\s*\{/);
409
+ if (constructorMatch) {
410
+ const constructorStartIndex = content.indexOf(constructorMatch[0]);
411
+ const constructorBodyStart = constructorStartIndex + constructorMatch[0].length;
412
+ // Find the matching closing brace for the constructor using brace counting
413
+ let braceCount = 1;
414
+ let constructorEnd = constructorBodyStart;
415
+ for (let i = constructorBodyStart; i < content.length && braceCount > 0; i++) {
416
+ if (content[i] === '{') {
417
+ braceCount++;
418
+ }
419
+ else if (content[i] === '}') {
420
+ braceCount--;
421
+ if (braceCount === 0) {
422
+ constructorEnd = i + 1;
423
+ break;
424
+ }
425
+ }
426
+ }
427
+ const beforeConstructor = content.substring(0, constructorEnd);
428
+ const afterConstructor = content.substring(constructorEnd);
429
+ const ngOnInitMethod = `\n\n ngOnInit(): void {\n this.matIconReg.setDefaultFontSetClass('material-symbols-outlined');\n }`;
430
+ content = `${beforeConstructor}${ngOnInitMethod}${afterConstructor}`;
431
+ context.logger.info('Created ngOnInit method with setDefaultFontSetClass call');
432
+ }
433
+ else {
434
+ context.logger.warn('Could not find suitable location to add ngOnInit method');
435
+ }
436
+ }
437
+ tree.overwrite(appComponentPath, content);
438
+ context.logger.info(`Updated ${appComponentPath} with MatIconRegistry configuration`);
439
+ return tree;
440
+ };
441
+ }
442
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/ngx-appshell/schematics/ng-add/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ @use '@angular/material' as mat;
2
+
3
+ $heading-font-family: 'AppShellHeadingFont';
4
+ $regular-font-family: 'AppShellTextFont';
5
+
6
+ $appshell-typography: mat.m2-define-typography-config(
7
+ $font-family: $regular-font-family,
8
+ $headline-1: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 112px),
9
+ $headline-2: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 56px),
10
+ $headline-3: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 45px),
11
+ $headline-4: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 34px),
12
+ $headline-5: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 24px),
13
+ $headline-6: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 20px),
14
+ $subtitle-1: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 18px),
15
+ $subtitle-2: mat.m2-define-typography-level($font-family: $heading-font-family, $font-size: 18px),
16
+ $body-2: mat.m2-define-typography-level($font-size: 16px),
17
+ $body-1: mat.m2-define-typography-level($font-size: 16px),
18
+ $button: mat.m2-define-typography-level($font-size: 16px),
19
+ );
@@ -0,0 +1,75 @@
1
+ @use '@angular/material' as mat;
2
+ @use "./appshell-typography-config" as config;
3
+
4
+ @include mat.elevation-classes();
5
+ @include mat.app-background();
6
+
7
+ $appshell-primary-palette: (
8
+ 200: var(--appshell-color-secondary-light),
9
+ 600: var(--appshell-color-secondary-medium),
10
+ 800: var(--appshell-color-secondary-main),
11
+ 900: var(--appshell-color-secondary-dark),
12
+ contrast: (
13
+ 200: var(--appshell-color-black-main),
14
+ 600: var(--appshell-color-secondary-contrast),
15
+ 800: var(--appshell-color-secondary-contrast),
16
+ 900: var(--appshell-color-secondary-contrast),
17
+ )
18
+ );
19
+
20
+ $appshell-accent-palette: (
21
+ 100: var(--appshell-color-accent-green-light),
22
+ 200: var(--appshell-color-accent-green-medium),
23
+ 500: var(--appshell-color-accent-green-main),
24
+ 600: var(--appshell-color-accent-green-dark),
25
+ contrast: (
26
+ 100: var(--appshell-color-accent-green-contrast),
27
+ 200: var(--appshell-color-accent-green-contrast),
28
+ 500: var(--appshell-color-accent-green-contrast),
29
+ 600: var(--appshell-color-accent-green-neutral),
30
+ )
31
+ );
32
+
33
+ $appshell-warn-palette: (
34
+ 100: var(--appshell-color-danger-main),
35
+ 500: var(--appshell-color-danger-medium),
36
+ 800: var(--appshell-color-danger-dark),
37
+ contrast: (
38
+ 100: var(--appshell-color-black-main),
39
+ 500: var(--appshell-color-white-main),
40
+ 800: var(--appshell-color-white-main),
41
+ )
42
+ );
43
+
44
+ $appshell-primary: mat.m2-define-palette($appshell-primary-palette, 800, 600, 900, 200);
45
+ $appshell-accent: mat.m2-define-palette($appshell-accent-palette, 500, 200, 600, 100);
46
+ $appshell-warn: mat.m2-define-palette($appshell-warn-palette, 500, 100, 800);
47
+
48
+ $appshell-theme: mat.m2-define-light-theme((
49
+ color: (
50
+ primary: $appshell-primary,
51
+ accent: $appshell-accent,
52
+ warn: $appshell-warn
53
+ ),
54
+ typography: config.$appshell-typography,
55
+ density: 0,
56
+ background-color: #ffffff,
57
+ ));
58
+
59
+ button {
60
+ &:hover {
61
+ background-color: var(--main-color-contrast-hover);
62
+ }
63
+
64
+ &:focus:focus-visible {
65
+ outline: 2px solid #0069E5;
66
+ outline-offset: .2rem;
67
+ }
68
+ }
69
+
70
+ a:focus:focus-visible {
71
+ outline: 2px solid #0069E5;
72
+ outline-offset: .2rem;
73
+ }
74
+
75
+ @include mat.all-component-themes($appshell-theme);