@o3r/design 10.0.0-alpha.1
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/LICENSE +26 -0
- package/README.md +51 -0
- package/builders/generate-css/index.d.ts +8 -0
- package/builders/generate-css/index.d.ts.map +1 -0
- package/builders/generate-css/index.js +116 -0
- package/builders/generate-css/schema.d.ts +32 -0
- package/builders/generate-css/schema.d.ts.map +1 -0
- package/builders/generate-css/schema.js +3 -0
- package/builders/generate-css/schema.json +68 -0
- package/builders/package.json +3 -0
- package/builders.json +10 -0
- package/cli/generate-css-from-design-token.cli.cjs +33 -0
- package/cli/generate-css-from-design-token.cli.cjs.map +1 -0
- package/cli/generate-css-from-design-token.cli.d.cts +3 -0
- package/cli/generate-css-from-design-token.cli.d.cts.map +1 -0
- package/collection.json +24 -0
- package/migration.json +5 -0
- package/package.json +206 -0
- package/schematics/ extract-token/index.d.ts +8 -0
- package/schematics/ extract-token/index.d.ts.map +1 -0
- package/schematics/ extract-token/index.js +90 -0
- package/schematics/ extract-token/schema.d.ts +14 -0
- package/schematics/ extract-token/schema.d.ts.map +1 -0
- package/schematics/ extract-token/schema.js +3 -0
- package/schematics/ extract-token/schema.json +43 -0
- package/schematics/generate-css/index.d.ts +8 -0
- package/schematics/generate-css/index.d.ts.map +1 -0
- package/schematics/generate-css/index.js +48 -0
- package/schematics/generate-css/schema.d.ts +17 -0
- package/schematics/generate-css/schema.d.ts.map +1 -0
- package/schematics/generate-css/schema.js +3 -0
- package/schematics/generate-css/schema.json +43 -0
- package/schematics/ng-add/index.d.ts +7 -0
- package/schematics/ng-add/index.d.ts.map +1 -0
- package/schematics/ng-add/index.js +19 -0
- package/schematics/ng-add/register-generate-css/index.d.ts +2 -0
- package/schematics/ng-add/register-generate-css/index.d.ts.map +1 -0
- package/schematics/ng-add/register-generate-css/index.js +5 -0
- package/schematics/ng-add/register-generate-css/register-task.d.ts +8 -0
- package/schematics/ng-add/register-generate-css/register-task.d.ts.map +1 -0
- package/schematics/ng-add/register-generate-css/register-task.js +60 -0
- package/schematics/ng-add/register-generate-css/templates/design-token.custom.json.template +3 -0
- package/schematics/ng-add/register-generate-css/templates/theme.scss.template +6 -0
- package/schematics/ng-add/schema.d.ts +6 -0
- package/schematics/ng-add/schema.d.ts.map +1 -0
- package/schematics/ng-add/schema.js +3 -0
- package/schematics/ng-add/schema.json +18 -0
- package/src/core/design-token/design-token-specification.interface.d.ts +195 -0
- package/src/core/design-token/design-token-specification.interface.d.ts.map +1 -0
- package/src/core/design-token/design-token-specification.interface.js +39 -0
- package/src/core/design-token/design-token-specification.interface.js.map +1 -0
- package/src/core/design-token/index.d.ts +4 -0
- package/src/core/design-token/index.d.ts.map +1 -0
- package/src/core/design-token/index.js +7 -0
- package/src/core/design-token/index.js.map +1 -0
- package/src/core/design-token/parsers/design-token-parser.interface.d.ts +70 -0
- package/src/core/design-token/parsers/design-token-parser.interface.d.ts.map +1 -0
- package/src/core/design-token/parsers/design-token-parser.interface.js +3 -0
- package/src/core/design-token/parsers/design-token-parser.interface.js.map +1 -0
- package/src/core/design-token/parsers/design-token.parser.d.ts +25 -0
- package/src/core/design-token/parsers/design-token.parser.d.ts.map +1 -0
- package/src/core/design-token/parsers/design-token.parser.js +142 -0
- package/src/core/design-token/parsers/design-token.parser.js.map +1 -0
- package/src/core/design-token/parsers/index.d.ts +3 -0
- package/src/core/design-token/parsers/index.d.ts.map +1 -0
- package/src/core/design-token/parsers/index.js +6 -0
- package/src/core/design-token/parsers/index.js.map +1 -0
- package/src/core/design-token/renderers/css/design-token-definition.renderers.d.ts +47 -0
- package/src/core/design-token/renderers/css/design-token-definition.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/css/design-token-definition.renderers.js +53 -0
- package/src/core/design-token/renderers/css/design-token-definition.renderers.js.map +1 -0
- package/src/core/design-token/renderers/css/design-token-updater.renderers.d.ts +24 -0
- package/src/core/design-token/renderers/css/design-token-updater.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/css/design-token-updater.renderers.js +29 -0
- package/src/core/design-token/renderers/css/design-token-updater.renderers.js.map +1 -0
- package/src/core/design-token/renderers/css/design-token-value.renderers.d.ts +19 -0
- package/src/core/design-token/renderers/css/design-token-value.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/css/design-token-value.renderers.js +29 -0
- package/src/core/design-token/renderers/css/design-token-value.renderers.js.map +1 -0
- package/src/core/design-token/renderers/css/index.d.ts +4 -0
- package/src/core/design-token/renderers/css/index.d.ts.map +1 -0
- package/src/core/design-token/renderers/css/index.js +7 -0
- package/src/core/design-token/renderers/css/index.js.map +1 -0
- package/src/core/design-token/renderers/design-token-style.renderer.d.ts +25 -0
- package/src/core/design-token/renderers/design-token-style.renderer.d.ts.map +1 -0
- package/src/core/design-token/renderers/design-token-style.renderer.js +58 -0
- package/src/core/design-token/renderers/design-token-style.renderer.js.map +1 -0
- package/src/core/design-token/renderers/design-token.renderer.helpers.d.ts +8 -0
- package/src/core/design-token/renderers/design-token.renderer.helpers.d.ts.map +1 -0
- package/src/core/design-token/renderers/design-token.renderer.helpers.js +11 -0
- package/src/core/design-token/renderers/design-token.renderer.helpers.js.map +1 -0
- package/src/core/design-token/renderers/design-token.renderer.interface.d.ts +56 -0
- package/src/core/design-token/renderers/design-token.renderer.interface.d.ts.map +1 -0
- package/src/core/design-token/renderers/design-token.renderer.interface.js +3 -0
- package/src/core/design-token/renderers/design-token.renderer.interface.js.map +1 -0
- package/src/core/design-token/renderers/index.d.ts +7 -0
- package/src/core/design-token/renderers/index.d.ts.map +1 -0
- package/src/core/design-token/renderers/index.js +10 -0
- package/src/core/design-token/renderers/index.js.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-definition.renderers.d.ts +39 -0
- package/src/core/design-token/renderers/metadata/design-token-definition.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-definition.renderers.js +41 -0
- package/src/core/design-token/renderers/metadata/design-token-definition.renderers.js.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-updater.renderers.d.ts +6 -0
- package/src/core/design-token/renderers/metadata/design-token-updater.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-updater.renderers.js +13 -0
- package/src/core/design-token/renderers/metadata/design-token-updater.renderers.js.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-value.renderers.d.ts +18 -0
- package/src/core/design-token/renderers/metadata/design-token-value.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/metadata/design-token-value.renderers.js +27 -0
- package/src/core/design-token/renderers/metadata/design-token-value.renderers.js.map +1 -0
- package/src/core/design-token/renderers/metadata/index.d.ts +4 -0
- package/src/core/design-token/renderers/metadata/index.d.ts.map +1 -0
- package/src/core/design-token/renderers/metadata/index.js +7 -0
- package/src/core/design-token/renderers/metadata/index.js.map +1 -0
- package/src/core/design-token/renderers/sass/design-token-definition.renderers.d.ts +22 -0
- package/src/core/design-token/renderers/sass/design-token-definition.renderers.d.ts.map +1 -0
- package/src/core/design-token/renderers/sass/design-token-definition.renderers.js +27 -0
- package/src/core/design-token/renderers/sass/design-token-definition.renderers.js.map +1 -0
- package/src/core/design-token/renderers/sass/index.d.ts +2 -0
- package/src/core/design-token/renderers/sass/index.d.ts.map +1 -0
- package/src/core/design-token/renderers/sass/index.js +5 -0
- package/src/core/design-token/renderers/sass/index.js.map +1 -0
- package/src/core/index.d.ts +2 -0
- package/src/core/index.d.ts.map +1 -0
- package/src/core/index.js +5 -0
- package/src/core/index.js.map +1 -0
- package/src/public_api.d.ts +2 -0
- package/src/public_api.d.ts.map +1 -0
- package/src/public_api.js +5 -0
- package/src/public_api.js.map +1 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractToken = void 0;
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const public_api_1 = require("../../src/public_api");
|
|
6
|
+
const patternToDetect = 'o3r.var';
|
|
7
|
+
/**
|
|
8
|
+
* Extract the token from o3r mixin sass file
|
|
9
|
+
* @param options
|
|
10
|
+
*/
|
|
11
|
+
function extractToken(options) {
|
|
12
|
+
const updateFileContent = (content) => {
|
|
13
|
+
const start = content.indexOf(patternToDetect);
|
|
14
|
+
const end = content.lastIndexOf(patternToDetect);
|
|
15
|
+
if (start === -1 || !options.includeTags) {
|
|
16
|
+
return content;
|
|
17
|
+
}
|
|
18
|
+
const startTag = typeof options.includeTags === 'boolean' ? public_api_1.AUTO_GENERATED_START : options.includeTags.startTag;
|
|
19
|
+
const endTag = typeof options.includeTags === 'boolean' ? public_api_1.AUTO_GENERATED_END : options.includeTags.endTag;
|
|
20
|
+
const indexToInsertStart = content.substring(0, start).lastIndexOf('\n') + 1;
|
|
21
|
+
const indexToInsertEnd = content.substring(end).indexOf('\n') + end + 1;
|
|
22
|
+
return `${content.substring(0, indexToInsertStart)}${startTag}\n` +
|
|
23
|
+
content.substring(indexToInsertStart, indexToInsertEnd) +
|
|
24
|
+
`${endTag}\n${content.substring(indexToInsertEnd)}`;
|
|
25
|
+
};
|
|
26
|
+
return async (tree, context) => {
|
|
27
|
+
try {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
29
|
+
const { CssVariableExtractor } = await Promise.resolve().then(() => require('@o3r/styling/builders/style-extractor/helpers'));
|
|
30
|
+
const { filter } = await Promise.resolve().then(() => require('minimatch'));
|
|
31
|
+
const filterFunctions = options.componentFilePatterns.map((pattern) => filter('/' + pattern.replace(/[\\/]+/g, '/'), { dot: true }));
|
|
32
|
+
const sassParser = new CssVariableExtractor();
|
|
33
|
+
tree.visit((file) => {
|
|
34
|
+
if (!filterFunctions.some((filterFunction) => filterFunction(file))) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const content = tree.readText(file);
|
|
38
|
+
const variables = sassParser.extractFileContent((0, node_path_1.resolve)(tree.root.path, file), content);
|
|
39
|
+
if (variables.length > 0 && options.includeTags) {
|
|
40
|
+
const newContent = updateFileContent(content);
|
|
41
|
+
tree.overwrite(file, newContent);
|
|
42
|
+
}
|
|
43
|
+
const isPrivate = file.endsWith('theme.scss');
|
|
44
|
+
const tokenSpecification = variables
|
|
45
|
+
.reduce((node, variable) => {
|
|
46
|
+
const namePath = variable.name.split('-');
|
|
47
|
+
let targetNode = node;
|
|
48
|
+
namePath.forEach((name) => {
|
|
49
|
+
targetNode[name] ||= {};
|
|
50
|
+
targetNode = targetNode[name];
|
|
51
|
+
});
|
|
52
|
+
const valueWithVariable = [...variable.defaultValue.matchAll(/var\(--([^)])\)/g)]
|
|
53
|
+
.reduce((acc, [variableString, variableName]) => {
|
|
54
|
+
return acc.replaceAll(variableString, `{${variableName.replaceAll('-', '.')}}`);
|
|
55
|
+
}, variable.defaultValue);
|
|
56
|
+
const targetNodeValue = targetNode;
|
|
57
|
+
targetNodeValue.$description = variable.description;
|
|
58
|
+
targetNodeValue.$type = !variable.type || variable.type === 'string' ?
|
|
59
|
+
(isNaN(+variable.defaultValue) ? undefined : 'number') :
|
|
60
|
+
variable.type;
|
|
61
|
+
targetNodeValue.$value = targetNodeValue.$type === 'number' ?
|
|
62
|
+
+variable.defaultValue :
|
|
63
|
+
valueWithVariable;
|
|
64
|
+
targetNodeValue.$extensions ||= {};
|
|
65
|
+
targetNodeValue.$extensions.o3rMetadata ||= {};
|
|
66
|
+
targetNodeValue.$extensions.o3rMetadata.category = variable.category;
|
|
67
|
+
targetNodeValue.$extensions.o3rMetadata.label = variable.label;
|
|
68
|
+
targetNodeValue.$extensions.o3rMetadata.tags = variable.tags;
|
|
69
|
+
return node;
|
|
70
|
+
}, {});
|
|
71
|
+
Object.values(tokenSpecification)
|
|
72
|
+
.forEach((node) => {
|
|
73
|
+
const designTokenNode = node;
|
|
74
|
+
designTokenNode.$extensions ||= {};
|
|
75
|
+
designTokenNode.$extensions.o3rPrivate = isPrivate;
|
|
76
|
+
designTokenNode.$extensions.o3rTargetFile = node_path_1.posix.join('.', node_path_1.posix.basename(file));
|
|
77
|
+
});
|
|
78
|
+
tree.create(file.replace(/\.scss$/, '.json'), JSON.stringify(tokenSpecification, null, 2));
|
|
79
|
+
});
|
|
80
|
+
return () => tree;
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
context.logger.warn('The following dependencies should be provided to the extract-token schematics: "@o3r/styling", "minimatch".');
|
|
84
|
+
context.logger.warn('The extraction will stop, it can be re-run with the schematic "@o3r/design:extract-token".');
|
|
85
|
+
context.logger.debug(JSON.stringify(e));
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
exports.extractToken = extractToken;
|
|
90
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SchematicOptionObject } from '@o3r/schematics';
|
|
2
|
+
export interface ExtractTokenSchematicsSchema extends SchematicOptionObject {
|
|
3
|
+
/**
|
|
4
|
+
* Include the tags in the original Sass file
|
|
5
|
+
* @default true
|
|
6
|
+
*/
|
|
7
|
+
includeTags?: boolean | {
|
|
8
|
+
startTag: string;
|
|
9
|
+
endTag: string;
|
|
10
|
+
};
|
|
11
|
+
/** List of file pattern of component theme files */
|
|
12
|
+
componentFilePatterns: string[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../schematics/ extract-token/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7D,oDAAoD;IACpD,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "ngAddSchematicsSchema",
|
|
4
|
+
"title": "Extract Design Token From Sass",
|
|
5
|
+
"description": "Extract Design Token From Sass o3r variable helpers",
|
|
6
|
+
"properties": {
|
|
7
|
+
"includeTags": {
|
|
8
|
+
"description": "Include the tags in the original Sass file",
|
|
9
|
+
"oneOf": [
|
|
10
|
+
{
|
|
11
|
+
"type": "boolean"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"startTag": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"endTag": {
|
|
20
|
+
"type": "string"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"required": [
|
|
24
|
+
"startTag",
|
|
25
|
+
"endTag"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"default": true
|
|
30
|
+
},
|
|
31
|
+
"componentFilePatterns": {
|
|
32
|
+
"description": "List of file pattern of component theme files",
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": {
|
|
35
|
+
"type": "string"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"additionalProperties": true,
|
|
40
|
+
"required": [
|
|
41
|
+
"componentFilePattern"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GenerateCssSchematicsSchema } from './schema';
|
|
2
|
+
import type { Rule } from '@angular-devkit/schematics';
|
|
3
|
+
/**
|
|
4
|
+
* Generate CSS from Design Token files
|
|
5
|
+
* @param options
|
|
6
|
+
*/
|
|
7
|
+
export declare function generateCss(options: GenerateCssSchematicsSchema): Rule;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/generate-css/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAKvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAuCtE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateCss = void 0;
|
|
4
|
+
const schematics_1 = require("@o3r/schematics");
|
|
5
|
+
const design_1 = require("@o3r/design");
|
|
6
|
+
/**
|
|
7
|
+
* Generate CSS from Design Token files
|
|
8
|
+
* @param options
|
|
9
|
+
*/
|
|
10
|
+
function generateCss(options) {
|
|
11
|
+
return async (tree, context) => {
|
|
12
|
+
const writeFile = (filePath, content) => tree.exists(filePath) ? tree.overwrite(filePath, content) : tree.create(filePath, content);
|
|
13
|
+
const readFile = tree.readText;
|
|
14
|
+
const existsFile = tree.exists;
|
|
15
|
+
const determineFileToUpdate = options.output ? () => options.output :
|
|
16
|
+
(token) => {
|
|
17
|
+
if (token.extensions.o3rTargetFile && tree.exists(token.extensions.o3rTargetFile)) {
|
|
18
|
+
return token.extensions.o3rTargetFile;
|
|
19
|
+
}
|
|
20
|
+
return options.defaultStyleFile;
|
|
21
|
+
};
|
|
22
|
+
const renderDesignTokenOptions = {
|
|
23
|
+
readFile,
|
|
24
|
+
writeFile,
|
|
25
|
+
existsFile,
|
|
26
|
+
determineFileToUpdate,
|
|
27
|
+
logger: context.logger
|
|
28
|
+
};
|
|
29
|
+
const files = (0, schematics_1.globInTree)(tree, Array.isArray(options.designTokenFilePatterns) ? options.designTokenFilePatterns : [options.designTokenFilePatterns]);
|
|
30
|
+
const duplicatedToken = [];
|
|
31
|
+
const tokens = (await Promise.all(files.map(async (file) => ({ file, parsed: await (0, design_1.parseDesignTokenFile)(file) }))))
|
|
32
|
+
.reduce((acc, { file, parsed }) => {
|
|
33
|
+
parsed.forEach((variable, key) => {
|
|
34
|
+
if (acc.has(key)) {
|
|
35
|
+
context.logger[options.failOnDuplicate ? 'error' : 'warn'](`A duplication of the variable ${key} is found in ${file}`);
|
|
36
|
+
}
|
|
37
|
+
acc.set(key, variable);
|
|
38
|
+
});
|
|
39
|
+
return acc;
|
|
40
|
+
}, new Map());
|
|
41
|
+
if (options.failOnDuplicate && duplicatedToken.length > 0) {
|
|
42
|
+
throw new Error(`Found ${duplicatedToken.length} duplicated Design Token keys`);
|
|
43
|
+
}
|
|
44
|
+
await (0, design_1.renderDesignTokens)(tokens, renderDesignTokenOptions);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.generateCss = generateCss;
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SchematicOptionObject } from '@o3r/schematics';
|
|
2
|
+
export interface GenerateCssSchematicsSchema extends SchematicOptionObject {
|
|
3
|
+
/** Path patterns to the Design Token JSON files */
|
|
4
|
+
designTokenFilePatterns: string | string[];
|
|
5
|
+
/** File path to generate the variable if not determined by the specification */
|
|
6
|
+
defaultStyleFile: string;
|
|
7
|
+
/**
|
|
8
|
+
* Output file where generate the CSS
|
|
9
|
+
*
|
|
10
|
+
* If specified, all the generated CSS variable will be generated in the given file.
|
|
11
|
+
* Otherwise, the output file will be determined based on the Variable parameters
|
|
12
|
+
*/
|
|
13
|
+
output?: string;
|
|
14
|
+
/** Determine if the process should stop in case of Token duplication */
|
|
15
|
+
failOnDuplicate?: boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../schematics/generate-css/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,mDAAmD;IACnD,uBAAuB,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3C,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "ngAddSchematicsSchema",
|
|
4
|
+
"title": "Add Otter Design",
|
|
5
|
+
"description": "ngAdd Otter Design",
|
|
6
|
+
"properties": {
|
|
7
|
+
"designTokenFilePatterns": {
|
|
8
|
+
"description": "Path patterns to the Design Token JSON files",
|
|
9
|
+
"oneOf": [
|
|
10
|
+
{
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "string"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"$default": {
|
|
21
|
+
"$source": "argv"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"output": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Output file where generate the CSS"
|
|
27
|
+
},
|
|
28
|
+
"defaultStyleFile": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"default": "src/theme.scss",
|
|
31
|
+
"description": "File path to generate the variable if not determined by the specification"
|
|
32
|
+
},
|
|
33
|
+
"failOnDuplicate": {
|
|
34
|
+
"type": "boolean",
|
|
35
|
+
"default": false,
|
|
36
|
+
"description": "Determine if the process should stop in case of Token duplication"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"additionalProperties": true,
|
|
40
|
+
"required": [
|
|
41
|
+
"designTokenFilePatterns"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAI9D;;;GAGG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAM5B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ngAdd = void 0;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const register_generate_css_1 = require("./register-generate-css");
|
|
6
|
+
const _extract_token_1 = require("../ extract-token");
|
|
7
|
+
/**
|
|
8
|
+
* Add Otter design to an Angular Project
|
|
9
|
+
* @param options
|
|
10
|
+
*/
|
|
11
|
+
function ngAdd() {
|
|
12
|
+
/* ng add rules */
|
|
13
|
+
return (0, schematics_1.chain)([
|
|
14
|
+
(0, register_generate_css_1.registerGenerateCssBuilder)(),
|
|
15
|
+
(0, _extract_token_1.extractToken)({ componentFilePatterns: ['**/*.scss'], includeTags: true })
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
exports.ngAdd = ngAdd;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../schematics/ng-add/register-generate-css/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Rule } from '@angular-devkit/schematics';
|
|
2
|
+
/**
|
|
3
|
+
* Register the Design Token CSS generator
|
|
4
|
+
* @param projectName Project name
|
|
5
|
+
* @param taskName name of the task to generate
|
|
6
|
+
*/
|
|
7
|
+
export declare const registerGenerateCssBuilder: (projectName?: string, taskName?: string) => Rule;
|
|
8
|
+
//# sourceMappingURL=register-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-task.d.ts","sourceRoot":"","sources":["../../../../schematics/ng-add/register-generate-css/register-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,KAAK,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAKzI;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,iBAAkB,MAAM,wBAA8B,IAmD5F,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerGenerateCssBuilder = void 0;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const schematics_2 = require("@o3r/schematics");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
/**
|
|
8
|
+
* Register the Design Token CSS generator
|
|
9
|
+
* @param projectName Project name
|
|
10
|
+
* @param taskName name of the task to generate
|
|
11
|
+
*/
|
|
12
|
+
const registerGenerateCssBuilder = (projectName, taskName = 'generate-css') => {
|
|
13
|
+
const registerBuilderRule = (tree, { logger }) => {
|
|
14
|
+
const workspaceProject = projectName ? (0, schematics_2.getWorkspaceConfig)(tree)?.projects[projectName] : undefined;
|
|
15
|
+
const srcBasePath = workspaceProject?.sourceRoot || (workspaceProject?.root ? node_path_1.posix.resolve(workspaceProject.root, 'src') : '');
|
|
16
|
+
const themeFile = node_path_1.posix.resolve(srcBasePath, 'style', 'theme.scss');
|
|
17
|
+
const taskParameters = {
|
|
18
|
+
defaultStyleFile: themeFile,
|
|
19
|
+
renderPrivateVariableTo: 'sass',
|
|
20
|
+
designTokenFilePatterns: [
|
|
21
|
+
`${node_path_1.posix.resolve(srcBasePath, 'style', '*.json')}`,
|
|
22
|
+
`${node_path_1.posix.resolve(srcBasePath, '**', '*.theme.json')}`
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
if (!workspaceProject) {
|
|
26
|
+
logger.warn(`No angular.json found, the task ${taskName} will not be created`);
|
|
27
|
+
return tree;
|
|
28
|
+
}
|
|
29
|
+
(0, schematics_2.registerBuilder)(workspaceProject, taskName, taskParameters);
|
|
30
|
+
return tree;
|
|
31
|
+
};
|
|
32
|
+
const generateTemplateRule = (tree, context) => {
|
|
33
|
+
const workspaceProject = projectName ? (0, schematics_2.getWorkspaceConfig)(tree)?.projects[projectName] : undefined;
|
|
34
|
+
const srcBasePath = workspaceProject?.sourceRoot || (workspaceProject?.root ? node_path_1.posix.resolve(workspaceProject.root, 'src') : '');
|
|
35
|
+
const themeFolder = node_path_1.posix.resolve(srcBasePath, 'style');
|
|
36
|
+
const rule = (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./templates'), [
|
|
37
|
+
(0, schematics_1.template)({}),
|
|
38
|
+
(0, schematics_1.move)(themeFolder),
|
|
39
|
+
(0, schematics_1.renameTemplateFiles)()
|
|
40
|
+
]), schematics_1.MergeStrategy.Overwrite)(tree, context);
|
|
41
|
+
return rule;
|
|
42
|
+
};
|
|
43
|
+
const importTheme = (tree, context) => {
|
|
44
|
+
const workspaceProject = projectName ? (0, schematics_2.getWorkspaceConfig)(tree)?.projects[projectName] : undefined;
|
|
45
|
+
const srcBasePath = workspaceProject?.sourceRoot || (workspaceProject?.root ? node_path_1.posix.resolve(workspaceProject.root, 'src') : '');
|
|
46
|
+
const styleFile = node_path_1.posix.resolve(srcBasePath, 'styles.scss');
|
|
47
|
+
if (!tree.exists(styleFile)) {
|
|
48
|
+
context.logger.warn(`The theme was not updated as ${styleFile} was not found`);
|
|
49
|
+
return tree;
|
|
50
|
+
}
|
|
51
|
+
return tree.overwrite(styleFile, '@import "./style/theme.scss";\n' + tree.readText(styleFile));
|
|
52
|
+
};
|
|
53
|
+
return (0, schematics_1.chain)([
|
|
54
|
+
registerBuilderRule,
|
|
55
|
+
generateTemplateRule,
|
|
56
|
+
importTheme
|
|
57
|
+
]);
|
|
58
|
+
};
|
|
59
|
+
exports.registerGenerateCssBuilder = registerGenerateCssBuilder;
|
|
60
|
+
//# sourceMappingURL=register-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "ngAddSchematicsSchema",
|
|
4
|
+
"title": "Add Otter Design",
|
|
5
|
+
"description": "ngAdd Otter Design",
|
|
6
|
+
"properties": {
|
|
7
|
+
"projectName": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Project name",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"additionalProperties": true,
|
|
16
|
+
"required": [
|
|
17
|
+
]
|
|
18
|
+
}
|