ngx-theme-stack 2.1.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -68
- package/fesm2022/ngx-theme-stack.mjs +19 -7
- package/fesm2022/ngx-theme-stack.mjs.map +1 -1
- package/package.json +3 -3
- package/schematics/ng-add/anti-flash.js +0 -6
- package/schematics/ng-add/anti-flash.js.map +1 -1
- package/schematics/ng-add/app-config.d.ts +6 -8
- package/schematics/ng-add/app-config.js +180 -45
- package/schematics/ng-add/app-config.js.map +1 -1
- package/schematics/ng-add/constants.d.ts +1 -1
- package/schematics/ng-add/constants.js +1 -1
- package/schematics/ng-add/constants.js.map +1 -1
- package/schematics/ng-add/index.d.ts +0 -5
- package/schematics/ng-add/index.js +64 -90
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/sync/index.js +99 -115
- package/schematics/sync/index.js.map +1 -1
- package/types/ngx-theme-stack.d.ts +9 -1
package/schematics/sync/index.js
CHANGED
|
@@ -134,108 +134,6 @@ function buildCrittersDivs(themes, mode) {
|
|
|
134
134
|
` <!-- /ngx-theme-stack critters-trick -->`);
|
|
135
135
|
}
|
|
136
136
|
// ── index.html patching ───────────────────────────────────────────────────────
|
|
137
|
-
function syncIndexHtml(tree, context, sourceRoot, config, strategy) {
|
|
138
|
-
const candidates = [`${sourceRoot}/index.html`, 'public/index.html'].map((p) => p.startsWith('/') ? p.slice(1) : p);
|
|
139
|
-
for (const path of candidates) {
|
|
140
|
-
if (!tree.exists(path))
|
|
141
|
-
continue;
|
|
142
|
-
let content = tree.readText(path);
|
|
143
|
-
if (!content.includes('ngx-theme-stack anti-flash')) {
|
|
144
|
-
context.logger.warn(`⚠ Anti-flash script marker not found in ${path}.\n` +
|
|
145
|
-
` Run 'ng add ngx-theme-stack' first, or add the script manually.`);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
// ── 1. Sync the anti-flash JS script ───────────────────────────────────
|
|
149
|
-
const newScriptBlock = `<!-- ngx-theme-stack anti-flash -->\n <script>${buildScript(config)}</script>`;
|
|
150
|
-
if (!SCRIPT_BLOCK_RE.test(content)) {
|
|
151
|
-
context.logger.warn(`⚠ Could not find a valid <script> block after the anti-flash marker in ${path}. The format may have changed.`);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const updatedScript = content.replace(SCRIPT_BLOCK_RE, newScriptBlock);
|
|
155
|
-
if (updatedScript === content) {
|
|
156
|
-
context.logger.info(`ℹ Anti-flash script in ${path} is already up to date.`);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
content = updatedScript;
|
|
160
|
-
context.logger.info(`✔ Anti-flash script synced in ${path}`);
|
|
161
|
-
}
|
|
162
|
-
// ── 2. Sync the Critters Trick divs (only for 'critters' strategy) ─────
|
|
163
|
-
if (strategy === 'critters') {
|
|
164
|
-
const crittersBlock = buildCrittersDivs(config.themes, config.mode);
|
|
165
|
-
const CRITTERS_ID_RE = /<div id="ngx-theme-stack-critters-trick"[\s\S]*?<\/div>/;
|
|
166
|
-
if (CRITTERS_BLOCK_RE.test(content)) {
|
|
167
|
-
content = content.replace(CRITTERS_BLOCK_RE, crittersBlock);
|
|
168
|
-
context.logger.info(`✔ Critters Trick block updated in ${path}`);
|
|
169
|
-
}
|
|
170
|
-
else if (CRITTERS_ID_RE.test(content)) {
|
|
171
|
-
content = content.replace(CRITTERS_ID_RE, crittersBlock);
|
|
172
|
-
context.logger.info(`✔ Critters Trick div wrapped in ${path}`);
|
|
173
|
-
}
|
|
174
|
-
else if (content.includes(CRITTERS_MARKER)) {
|
|
175
|
-
content = content.replace(CRITTERS_MARKER, crittersBlock);
|
|
176
|
-
context.logger.info(`✔ Critters Trick divs injected in ${path}`);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
content = content.replace('</body>', ` ${crittersBlock}\n </body>`);
|
|
180
|
-
context.logger.info(`✔ Critters Trick block added before </body> in ${path}`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
// blocking strategy: remove any existing Critters divs if present
|
|
185
|
-
if (CRITTERS_BLOCK_RE.test(content)) {
|
|
186
|
-
content = content.replace(CRITTERS_BLOCK_RE, '');
|
|
187
|
-
context.logger.info(`✔ Critters Trick divs removed (blocking strategy) in ${path}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
tree.overwrite(path, content);
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
context.logger.warn(`⚠ Could not find index.html (tried: ${candidates.join(', ')}).`);
|
|
194
|
-
}
|
|
195
|
-
// ── angular.json patching ───────────────────────────────────────────────────
|
|
196
|
-
function syncAngularJson(tree, context, projectName, strategy) {
|
|
197
|
-
var _a, _b;
|
|
198
|
-
const content = tree.read('/angular.json');
|
|
199
|
-
if (!content)
|
|
200
|
-
return;
|
|
201
|
-
const workspace = JSON.parse(content.toString());
|
|
202
|
-
const project = workspace.projects[projectName];
|
|
203
|
-
if (!project)
|
|
204
|
-
return;
|
|
205
|
-
const buildTarget = (_a = project.architect) === null || _a === void 0 ? void 0 : _a.build;
|
|
206
|
-
if (!buildTarget)
|
|
207
|
-
return;
|
|
208
|
-
const prodConfig = (_b = buildTarget.configurations) === null || _b === void 0 ? void 0 : _b.production;
|
|
209
|
-
if (!prodConfig)
|
|
210
|
-
return;
|
|
211
|
-
if (strategy === 'blocking') {
|
|
212
|
-
// Disable inlineCritical for blocking strategy
|
|
213
|
-
if (typeof prodConfig.optimization === 'object') {
|
|
214
|
-
prodConfig.optimization.styles = prodConfig.optimization.styles || {};
|
|
215
|
-
if (prodConfig.optimization.styles.inlineCritical !== false) {
|
|
216
|
-
prodConfig.optimization.styles.inlineCritical = false;
|
|
217
|
-
context.logger.info(`✔ Disabled inlineCritical in angular.json projects/${projectName} (production).`);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
// It's either boolean or undefined
|
|
222
|
-
prodConfig.optimization = {
|
|
223
|
-
styles: { inlineCritical: false },
|
|
224
|
-
};
|
|
225
|
-
context.logger.info(`✔ Disabled inlineCritical in angular.json projects/${projectName} (production).`);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
// Enable inlineCritical (or revert to default) for critters strategy
|
|
230
|
-
if (typeof prodConfig.optimization === 'object' && prodConfig.optimization.styles) {
|
|
231
|
-
if (prodConfig.optimization.styles.inlineCritical === false) {
|
|
232
|
-
prodConfig.optimization.styles.inlineCritical = true;
|
|
233
|
-
context.logger.info(`✔ Re-enabled inlineCritical in angular.json projects/${projectName} (production).`);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
tree.overwrite('/angular.json', JSON.stringify(workspace, null, 2));
|
|
238
|
-
}
|
|
239
137
|
// ── Schematic factory ─────────────────────────────────────────────────────────
|
|
240
138
|
/**
|
|
241
139
|
* `ng generate ngx-theme-stack:sync`
|
|
@@ -284,7 +182,7 @@ function detectStrategy(tree, sourceRoot, explicitStrategy) {
|
|
|
284
182
|
}
|
|
285
183
|
function sync(options) {
|
|
286
184
|
return (tree, context) => {
|
|
287
|
-
var _a, _b;
|
|
185
|
+
var _a, _b, _c, _d, _e, _f;
|
|
288
186
|
const workspaceConfig = tree.read('/angular.json');
|
|
289
187
|
if (!workspaceConfig) {
|
|
290
188
|
throw new Error('Could not find angular.json. Are you in an Angular workspace?');
|
|
@@ -298,21 +196,107 @@ function sync(options) {
|
|
|
298
196
|
const sourceRoot = project.sourceRoot || `${(_b = project.root) !== null && _b !== void 0 ? _b : ''}/src`;
|
|
299
197
|
const config = extractConfig(tree, sourceRoot, context);
|
|
300
198
|
const strategy = (options.strategy || config.strategy || detectStrategy(tree, sourceRoot));
|
|
301
|
-
|
|
302
|
-
context.logger.info(` Detected strategy : ${strategy} ${config.strategy ? '(from code)' : '(auto-detected)'}`);
|
|
303
|
-
context.logger.info(` Detected storageKey : ${config.storageKey}`);
|
|
304
|
-
context.logger.info(` Detected defaultTheme : ${config.defaultTheme}`);
|
|
305
|
-
context.logger.info(` Detected themes : [${config.themes.join(', ')}]`);
|
|
306
|
-
context.logger.info('');
|
|
307
|
-
context.logger.info(`🔄 ngx-theme-stack sync [project: ${projectName}]`);
|
|
199
|
+
const changeset = [];
|
|
308
200
|
context.logger.info('');
|
|
309
|
-
|
|
310
|
-
syncAngularJson(tree, context, projectName, strategy);
|
|
201
|
+
context.logger.info(`🔄 ngx-theme-stack — sync [project: ${projectName}]`);
|
|
311
202
|
context.logger.info('');
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
203
|
+
// ── 1. index.html ──
|
|
204
|
+
const candidates = [`${sourceRoot}/index.html`, 'public/index.html'].map((p) => p.startsWith('/') ? p.slice(1) : p);
|
|
205
|
+
for (const path of candidates) {
|
|
206
|
+
if (!tree.exists(path))
|
|
207
|
+
continue;
|
|
208
|
+
let content = tree.readText(path);
|
|
209
|
+
let changed = false;
|
|
210
|
+
if (content.includes('ngx-theme-stack anti-flash')) {
|
|
211
|
+
const newScriptBlock = `<!-- ngx-theme-stack anti-flash -->\n <script>${buildScript(config)}</script>`;
|
|
212
|
+
if (SCRIPT_BLOCK_RE.test(content)) {
|
|
213
|
+
const updatedScript = content.replace(SCRIPT_BLOCK_RE, newScriptBlock);
|
|
214
|
+
if (updatedScript !== content) {
|
|
215
|
+
content = updatedScript;
|
|
216
|
+
changed = true;
|
|
217
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (anti-flash script)`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (strategy === 'critters') {
|
|
222
|
+
const crittersBlock = buildCrittersDivs(config.themes, config.mode);
|
|
223
|
+
const CRITTERS_ID_RE = /<div id="ngx-theme-stack-critters-trick"[\s\S]*?<\/div>/;
|
|
224
|
+
if (CRITTERS_BLOCK_RE.test(content)) {
|
|
225
|
+
const updated = content.replace(CRITTERS_BLOCK_RE, crittersBlock);
|
|
226
|
+
if (updated !== content) {
|
|
227
|
+
content = updated;
|
|
228
|
+
changed = true;
|
|
229
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (critters-trick divs updated)`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if (CRITTERS_ID_RE.test(content)) {
|
|
233
|
+
content = content.replace(CRITTERS_ID_RE, crittersBlock);
|
|
234
|
+
changed = true;
|
|
235
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (critters-trick divs wrapped)`);
|
|
236
|
+
}
|
|
237
|
+
else if (content.includes(CRITTERS_MARKER)) {
|
|
238
|
+
content = content.replace(CRITTERS_MARKER, crittersBlock);
|
|
239
|
+
changed = true;
|
|
240
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (critters-trick divs injected)`);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
content = content.replace('</body>', ` ${crittersBlock}\n </body>`);
|
|
244
|
+
changed = true;
|
|
245
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (critters-trick block added)`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (CRITTERS_BLOCK_RE.test(content)) {
|
|
249
|
+
content = content.replace(CRITTERS_BLOCK_RE, '');
|
|
250
|
+
changed = true;
|
|
251
|
+
changeset.push(` \u001b[32m✔\u001b[0m ${path} (critters-trick divs removed)`);
|
|
252
|
+
}
|
|
253
|
+
if (changed) {
|
|
254
|
+
tree.overwrite(path, content);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
changeset.push(` \u001b[90mℹ\u001b[0m ${path} (already synced)`);
|
|
258
|
+
}
|
|
315
259
|
}
|
|
260
|
+
// ── 2. angular.json ──
|
|
261
|
+
const angularJson = tree.read('/angular.json');
|
|
262
|
+
if (angularJson) {
|
|
263
|
+
const workspace = JSON.parse(angularJson.toString());
|
|
264
|
+
const project = workspace.projects[projectName];
|
|
265
|
+
const prodConfig = (_e = (_d = (_c = 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;
|
|
266
|
+
if (prodConfig) {
|
|
267
|
+
let changed = false;
|
|
268
|
+
if (strategy === 'blocking') {
|
|
269
|
+
if (typeof prodConfig.optimization === 'object') {
|
|
270
|
+
prodConfig.optimization.styles = prodConfig.optimization.styles || {};
|
|
271
|
+
if (prodConfig.optimization.styles.inlineCritical !== false) {
|
|
272
|
+
prodConfig.optimization.styles.inlineCritical = false;
|
|
273
|
+
changed = true;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
prodConfig.optimization = { styles: { inlineCritical: false } };
|
|
278
|
+
changed = true;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else if (typeof prodConfig.optimization === 'object' && ((_f = prodConfig.optimization.styles) === null || _f === void 0 ? void 0 : _f.inlineCritical) === false) {
|
|
282
|
+
prodConfig.optimization.styles.inlineCritical = true;
|
|
283
|
+
changed = true;
|
|
284
|
+
}
|
|
285
|
+
if (changed) {
|
|
286
|
+
tree.overwrite('/angular.json', JSON.stringify(workspace, null, 2));
|
|
287
|
+
changeset.push(' \u001b[33mM\u001b[0m angular.json (optimization synced)');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
context.logger.info('\u001b[1mChangeset:\u001b[0m');
|
|
292
|
+
if (changeset.length === 0) {
|
|
293
|
+
context.logger.info(' (no changes needed)');
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
changeset.forEach((entry) => context.logger.info(entry));
|
|
297
|
+
}
|
|
298
|
+
context.logger.info('');
|
|
299
|
+
context.logger.info('\u001b[1m\u001b[32m🏁 Done.\u001b[0m');
|
|
316
300
|
context.logger.info('');
|
|
317
301
|
};
|
|
318
302
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/ngx-theme-stack/schematics/sync/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/ngx-theme-stack/schematics/sync/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -169,7 +169,7 @@ declare const NGX_THEME_STACK_CONFIG: InjectionToken<NgConfig<string>>;
|
|
|
169
169
|
* **Defaults:**
|
|
170
170
|
* - `themes`: `['light', 'dark', 'system']`
|
|
171
171
|
* - `defaultTheme`: `'system'`
|
|
172
|
-
* - `storageKey`: `'ngx-theme-stack
|
|
172
|
+
* - `storageKey`: `'ngx-theme-stack'`
|
|
173
173
|
* - `mode`: `'class'`
|
|
174
174
|
* - `strategy`: `'critters'`
|
|
175
175
|
|
|
@@ -228,10 +228,18 @@ declare function provideThemeStack<const T extends string = DefaultNgTheme>(conf
|
|
|
228
228
|
*/
|
|
229
229
|
declare class ThemeCycleService {
|
|
230
230
|
#private;
|
|
231
|
+
/** List of all configured themes for cycling. Defaults to `['light', 'dark', 'system']`. */
|
|
232
|
+
readonly availableThemes: string[];
|
|
231
233
|
/** The theme explicitly selected by the user. May be `'system'`. */
|
|
232
234
|
readonly selectedTheme: _angular_core.Signal<ngx_theme_stack.NgTheme>;
|
|
233
235
|
/** Resolved theme currently applied to the DOM. Always concrete — never `'system'`. */
|
|
234
236
|
readonly resolvedTheme: _angular_core.Signal<(string & {}) | ngx_theme_stack.NgSystemTheme>;
|
|
237
|
+
/** Index of the currently selected theme in the cycle. */
|
|
238
|
+
readonly cycleIndex: _angular_core.Signal<number>;
|
|
239
|
+
/** The theme that comes before the currently selected theme in the cycle. */
|
|
240
|
+
readonly preceding: _angular_core.Signal<string>;
|
|
241
|
+
/** The theme that comes after the currently selected theme in the cycle. */
|
|
242
|
+
readonly upcoming: _angular_core.Signal<string>;
|
|
235
243
|
/** Whether the currently applied theme is `'dark'`. */
|
|
236
244
|
readonly isDark: _angular_core.Signal<boolean>;
|
|
237
245
|
/** Whether the currently applied theme is `'light'`. */
|