@ethlete/cli 3.0.0-next.22 → 3.0.0-next.24
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/CHANGELOG.md +66 -0
- package/design/contrast.ts +49 -0
- package/design/define-call.ts +5 -8
- package/design/define-part.ts +63 -1
- package/design/morph.ts +67 -0
- package/design/motion-runtime.ts +200 -0
- package/design/web/env.d.ts +6 -2
- package/design/web/frame.ts +39 -1
- package/package.json +2 -1
- package/playwright/failure-reporter.d.ts +2 -0
- package/playwright/failure-reporter.js +1 -0
- package/src/lib/design/changed-parts.d.ts +4 -4
- package/src/lib/design/changed-parts.js +10 -6
- package/src/lib/design/changed-parts.js.map +1 -1
- package/src/lib/design/check.js +1 -1
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/contact-sheet.d.ts +39 -8
- package/src/lib/design/contact-sheet.js +131 -21
- package/src/lib/design/contact-sheet.js.map +1 -1
- package/src/lib/design/design-command.js +22 -2
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/generated-stylesheets.d.ts +15 -0
- package/src/lib/design/generated-stylesheets.js +52 -0
- package/src/lib/design/generated-stylesheets.js.map +1 -0
- package/src/lib/design/inbox-command.d.ts +1 -0
- package/src/lib/design/inbox-command.js +15 -0
- package/src/lib/design/inbox-command.js.map +1 -1
- package/src/lib/design/merge-compare.d.ts +10 -0
- package/src/lib/design/merge-compare.js +17 -4
- package/src/lib/design/merge-compare.js.map +1 -1
- package/src/lib/design/paths.d.ts +11 -0
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/render.d.ts +3 -1
- package/src/lib/design/render.js +17 -1
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.js +317 -254
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/shot-command.d.ts +25 -0
- package/src/lib/design/shot-command.js +162 -62
- package/src/lib/design/shot-command.js.map +1 -1
- package/src/lib/design/shot.d.ts +14 -4
- package/src/lib/design/shot.js +71 -50
- package/src/lib/design/shot.js.map +1 -1
- package/src/lib/design/sketch-command.d.ts +7 -1
- package/src/lib/design/sketch-command.js +108 -31
- package/src/lib/design/sketch-command.js.map +1 -1
- package/src/lib/design/sketch-stylesheets.d.ts +7 -0
- package/src/lib/design/sketch-stylesheets.js +63 -0
- package/src/lib/design/sketch-stylesheets.js.map +1 -0
- package/src/lib/design/studio-api.d.ts +20 -7
- package/src/lib/design/studio-api.js +99 -28
- package/src/lib/design/studio-api.js.map +1 -1
- package/src/lib/design/system/check-system.js +8 -0
- package/src/lib/design/system/check-system.js.map +1 -1
- package/src/lib/design/system/comments/comment.d.ts +18 -1
- package/src/lib/design/system/comments/comment.js +35 -1
- package/src/lib/design/system/comments/comment.js.map +1 -1
- package/src/lib/design/system/comments/complete.js +4 -2
- package/src/lib/design/system/comments/complete.js.map +1 -1
- package/src/lib/design/system/complete-command.d.ts +9 -0
- package/src/lib/design/system/complete-command.js +64 -0
- package/src/lib/design/system/complete-command.js.map +1 -0
- package/src/lib/design/system/complete.d.ts +73 -0
- package/src/lib/design/system/complete.js +655 -0
- package/src/lib/design/system/complete.js.map +1 -0
- package/src/lib/design/system/contrast-check.d.ts +26 -0
- package/src/lib/design/system/contrast-check.js +153 -0
- package/src/lib/design/system/contrast-check.js.map +1 -0
- package/src/lib/design/system/imports.d.ts +28 -3
- package/src/lib/design/system/imports.js +84 -7
- package/src/lib/design/system/imports.js.map +1 -1
- package/src/lib/design/system/list-system.d.ts +11 -0
- package/src/lib/design/system/list-system.js +17 -1
- package/src/lib/design/system/list-system.js.map +1 -1
- package/src/lib/design/system/product-stylesheets.d.ts +3 -0
- package/src/lib/design/system/product-stylesheets.js +40 -0
- package/src/lib/design/system/product-stylesheets.js.map +1 -0
- package/src/lib/design/system/render-check.js +11 -3
- package/src/lib/design/system/render-check.js.map +1 -1
- package/src/lib/design/system/rules/canonical-class.d.ts +9 -0
- package/src/lib/design/system/rules/canonical-class.js +132 -0
- package/src/lib/design/system/rules/canonical-class.js.map +1 -0
- package/src/lib/design/system/rules/inline-svg.d.ts +7 -0
- package/src/lib/design/system/rules/inline-svg.js +28 -0
- package/src/lib/design/system/rules/inline-svg.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +4 -0
- package/src/lib/design/system/rules/motion.js +46 -2
- package/src/lib/design/system/rules/motion.js.map +1 -1
- package/src/lib/design/system/rules/utility-css.d.ts +11 -0
- package/src/lib/design/system/rules/utility-css.js +290 -0
- package/src/lib/design/system/rules/utility-css.js.map +1 -0
- package/src/lib/design/system/sketch/baseline.d.ts +3 -2
- package/src/lib/design/system/sketch/baseline.js +10 -4
- package/src/lib/design/system/sketch/baseline.js.map +1 -1
- package/src/lib/design/system/sketch/merge-preview.d.ts +4 -2
- package/src/lib/design/system/sketch/merge-preview.js +20 -3
- package/src/lib/design/system/sketch/merge-preview.js.map +1 -1
- package/src/lib/design/system/sketch/merge-shared.d.ts +42 -6
- package/src/lib/design/system/sketch/merge-shared.js +122 -24
- package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
- package/src/lib/design/system/sketch/merge.d.ts +3 -3
- package/src/lib/design/system/sketch/merge.js +57 -29
- package/src/lib/design/system/sketch/merge.js.map +1 -1
- package/src/lib/design/system/sketch/merged-parts.d.ts +7 -0
- package/src/lib/design/system/sketch/merged-parts.js +13 -1
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
- package/src/lib/design/system/sketch/no-visible-change.d.ts +4 -3
- package/src/lib/design/system/sketch/no-visible-change.js +50 -19
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
- package/src/lib/design/system/sketch/overlay.js +7 -2
- package/src/lib/design/system/sketch/overlay.js.map +1 -1
- package/src/lib/design/system/sketch/part-definition.d.ts +12 -0
- package/src/lib/design/system/sketch/part-definition.js +40 -1
- package/src/lib/design/system/sketch/part-definition.js.map +1 -1
- package/src/lib/design/system/sketch/sketch.d.ts +63 -12
- package/src/lib/design/system/sketch/sketch.js +165 -36
- package/src/lib/design/system/sketch/sketch.js.map +1 -1
- package/src/lib/design/system/sketch/unchanged-states.d.ts +11 -5
- package/src/lib/design/system/sketch/unchanged-states.js +39 -25
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
- package/src/lib/design/system/system-modules.d.ts +5 -1
- package/src/lib/design/system/system-modules.js +26 -8
- package/src/lib/design/system/system-modules.js.map +1 -1
- package/src/lib/design/system/system-tsconfig.js +2 -1
- package/src/lib/design/system/system-tsconfig.js.map +1 -1
- package/src/lib/design/thumb.d.ts +6 -2
- package/src/lib/design/thumb.js +36 -15
- package/src/lib/design/thumb.js.map +1 -1
- package/src/lib/design/typecheck.d.ts +2 -0
- package/src/lib/design/typecheck.js +19 -2
- package/src/lib/design/typecheck.js.map +1 -1
- package/src/lib/design/variant-diff.d.ts +24 -6
- package/src/lib/design/variant-diff.js +26 -10
- package/src/lib/design/variant-diff.js.map +1 -1
- package/src/lib/design/warm-pages.d.ts +20 -0
- package/src/lib/design/warm-pages.js +78 -0
- package/src/lib/design/warm-pages.js.map +1 -0
- package/src/lib/playwright/failure-reporter.d.ts +35 -0
- package/src/lib/playwright/failure-reporter.js +66 -0
- package/src/lib/playwright/failure-reporter.js.map +1 -0
- package/src/lib/update/commits.d.ts +9 -0
- package/src/lib/update/commits.js +15 -1
- package/src/lib/update/commits.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +6 -0
- package/src/lib/update/migration-manifest.js +7 -0
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migrations-command.js +1 -0
- package/src/lib/update/migrations-command.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +22 -0
- package/src/lib/update/run-migrations.js +60 -1
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/update-command.d.ts +10 -0
- package/src/lib/update/update-command.js +28 -2
- package/src/lib/update/update-command.js.map +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.productStylesheetFilesOf = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const postcss_1 = __importDefault(require("postcss"));
|
|
10
|
+
const importedFilesOf = (file) => {
|
|
11
|
+
const files = [];
|
|
12
|
+
try {
|
|
13
|
+
postcss_1.default.parse((0, fs_1.readFileSync)(file, 'utf8')).walkAtRules('import', (rule) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const specifier = (_a = /^(?:url\(\s*)?['"]?([^'"\s)]+)/u.exec(rule.params.trim())) === null || _a === void 0 ? void 0 : _a[1];
|
|
16
|
+
if (specifier === null || specifier === void 0 ? void 0 : specifier.startsWith('.'))
|
|
17
|
+
files.push((0, path_1.resolve)((0, path_1.dirname)(file), specifier));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (_a) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return files;
|
|
24
|
+
};
|
|
25
|
+
/** The product's stylesheets and every file they reach through a relative `@import`, each resolved. */
|
|
26
|
+
const productStylesheetFilesOf = (source) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const root = (0, path_1.resolve)((0, path_1.dirname)(source.configFile), '../..');
|
|
29
|
+
const queue = ((_a = source.config.styles) !== null && _a !== void 0 ? _a : []).map((style) => (0, path_1.resolve)(root, style));
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
for (let file = queue.shift(); file !== undefined; file = queue.shift()) {
|
|
32
|
+
if (seen.has(file) || !(0, fs_1.existsSync)(file))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(file);
|
|
35
|
+
queue.push(...importedFilesOf(file));
|
|
36
|
+
}
|
|
37
|
+
return seen;
|
|
38
|
+
};
|
|
39
|
+
exports.productStylesheetFilesOf = productStylesheetFilesOf;
|
|
40
|
+
//# sourceMappingURL=product-stylesheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-stylesheets.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/product-stylesheets.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA8C;AAC9C,+BAAwC;AACxC,sDAA8B;AAG9B,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,iBAAO,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;;YACvE,MAAM,SAAS,GAAG,MAAA,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,0CAAG,CAAC,CAAC,CAAC;YAElF,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,uGAAuG;AAChG,MAAM,wBAAwB,GAAG,CAAC,MAAqB,EAAE,EAAE;;IAChE,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,MAAA,MAAM,CAAC,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;YAAE,SAAS;QAElD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAbW,QAAA,wBAAwB,4BAanC"}
|
|
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.renderIssuesOf = exports.renderIssueLineOf = void 0;
|
|
13
13
|
const browser_1 = require("../browser");
|
|
14
|
+
const contrast_check_1 = require("./contrast-check");
|
|
14
15
|
const css_source_1 = require("./css-source");
|
|
15
16
|
const serve_1 = require("../serve");
|
|
16
17
|
const shot_1 = require("../shot");
|
|
@@ -249,7 +250,7 @@ const inspectFrame = (options) => `((options) => {
|
|
|
249
250
|
report('WRAP', block, '"' + (text.length > 32 ? text.slice(0, 31) + '…' : text) + '" breaks onto ' + lines.length + ' lines');
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
|
-
|
|
253
|
+
${contrast_check_1.CONTRAST_STATEMENTS}
|
|
253
254
|
return found;
|
|
254
255
|
})(${JSON.stringify(Object.assign(Object.assign({}, options), { escapable: ESCAPABLE }))})`;
|
|
255
256
|
const stringsOf = (value) => Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
|
|
@@ -290,6 +291,7 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
290
291
|
fit: frame.fit,
|
|
291
292
|
skips: frame.skips,
|
|
292
293
|
namespaces: frame.namespaces,
|
|
294
|
+
contrast: frame.contrast,
|
|
293
295
|
})));
|
|
294
296
|
const { product, part, state, sketch } = frame.address;
|
|
295
297
|
issues.push(...found.map((issue) => (Object.assign(Object.assign({}, issue), { product, part, state, sketch, size: frame.size }))));
|
|
@@ -306,7 +308,7 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
306
308
|
* its content. Answers the rule breaks it finds, or why it could not draw.
|
|
307
309
|
*/
|
|
308
310
|
const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
309
|
-
var _a, _b, _c, _d, _e;
|
|
311
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
310
312
|
const { target, config, jobs } = options;
|
|
311
313
|
const resolveChromium = (_a = options.chromiumOf) !== null && _a !== void 0 ? _a : browser_1.chromiumOf;
|
|
312
314
|
if (jobs.length === 0)
|
|
@@ -370,12 +372,16 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
|
|
|
370
372
|
sketch,
|
|
371
373
|
}));
|
|
372
374
|
}
|
|
375
|
+
const exceptions = (0, contrast_check_1.contrastExceptionsOf)((_e = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _e === void 0 ? void 0 : _e.exceptions);
|
|
376
|
+
const pairs = (0, contrast_check_1.contrastPairsOf)((_f = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _f === void 0 ? void 0 : _f.pairs);
|
|
377
|
+
exceptions.problems.forEach((detail) => issues.push({ rule: 'CONTRAST', product, part: key, state: '-', size: '-', path: '-', detail, sketch }));
|
|
373
378
|
const widths = widthsOf(definition === null || definition === void 0 ? void 0 : definition.widths);
|
|
374
379
|
const sizes = part.layer === 'pages'
|
|
375
380
|
? Object.keys(drawn.presets).map((preset) => ({ preset, width: null }))
|
|
376
381
|
: widths.length > 0
|
|
377
382
|
? widths.map((width) => ({ preset: null, width }))
|
|
378
383
|
: [{ preset: null, width: null }];
|
|
384
|
+
let measuresPairs = true;
|
|
379
385
|
for (const state of states) {
|
|
380
386
|
for (const { preset, width } of sizes) {
|
|
381
387
|
const address = { product, part: key, state, preset, width, sketch, interaction: null };
|
|
@@ -387,11 +393,13 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
|
|
|
387
393
|
size: preset !== null && preset !== void 0 ? preset : (width ? `${width}px` : 'fitted'),
|
|
388
394
|
search: frame.search.toString(),
|
|
389
395
|
viewport: (0, shot_1.viewportOf)(frame.size),
|
|
390
|
-
fixed: ((
|
|
396
|
+
fixed: ((_g = frame.size) === null || _g === void 0 ? void 0 : _g.height) !== undefined,
|
|
391
397
|
fit: frame.size === null,
|
|
392
398
|
skips,
|
|
393
399
|
namespaces,
|
|
400
|
+
contrast: { exceptions: exceptions.selectors, pairs: measuresPairs ? pairs : [] },
|
|
394
401
|
});
|
|
402
|
+
measuresPairs = false;
|
|
395
403
|
}
|
|
396
404
|
}
|
|
397
405
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-check.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/render-check.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,wCAAwC;AAExC,6CAAsD;AACtD,oCAA8C;AAC9C,kCAA+D;AAC/D,oCAA+F;AAC/F,+CAA6C;AAC7C,uDAA8C;AAC9C,qDAAyF;
|
|
1
|
+
{"version":3,"file":"render-check.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/render-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SharedDirs } from '../imports';
|
|
2
|
+
import { Problem } from '../problem';
|
|
3
|
+
import { ResolvedProduct } from '../resolve-product';
|
|
4
|
+
/**
|
|
5
|
+
* A Tailwind class in the markup of a part that has a canonical form under the product's stylesheets, as
|
|
6
|
+
* Tailwind IntelliSense reports it: `w-[420px]` that can be written as `w-2xl`. The root font size the
|
|
7
|
+
* stylesheets set on `html` is the rem base.
|
|
8
|
+
*/
|
|
9
|
+
export declare const canonicalClassesOf: (product: ResolvedProduct & SharedDirs) => Problem[];
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.canonicalClassesOf = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const postcss_1 = __importDefault(require("postcss"));
|
|
11
|
+
const imports_1 = require("../imports");
|
|
12
|
+
const ts_source_1 = require("../ts-source");
|
|
13
|
+
const CANONICALIZE = `
|
|
14
|
+
const { __unstable__loadDesignSystem } = require(process.argv[1]);
|
|
15
|
+
const { css, base, rem, candidates } = JSON.parse(require('fs').readFileSync(0, 'utf8'));
|
|
16
|
+
__unstable__loadDesignSystem(css, { base })
|
|
17
|
+
.then((system) => process.stdout.write(JSON.stringify(candidates.map((c) => system.canonicalizeCandidates([c], { rem }).join(' ')))))
|
|
18
|
+
.catch((error) => { process.stderr.write(String(error && error.message || error)); process.exit(1); });
|
|
19
|
+
`;
|
|
20
|
+
const DEFAULT_REM = 16;
|
|
21
|
+
const stylesheetsOf = (product) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const source = [product, product.base].find((each) => { var _a; return !!((_a = each === null || each === void 0 ? void 0 : each.config.styles) === null || _a === void 0 ? void 0 : _a.length); });
|
|
24
|
+
if (!source)
|
|
25
|
+
return [];
|
|
26
|
+
const root = (0, path_1.resolve)((0, path_1.dirname)(source.configFile), '../..');
|
|
27
|
+
return ((_a = source.config.styles) !== null && _a !== void 0 ? _a : []).map((style) => (0, path_1.resolve)(root, style));
|
|
28
|
+
};
|
|
29
|
+
const remOf = (stylesheets) => {
|
|
30
|
+
const queue = [...stylesheets];
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
let rem = DEFAULT_REM;
|
|
33
|
+
for (let file = queue.shift(); file !== undefined; file = queue.shift()) {
|
|
34
|
+
if (seen.has(file) || !(0, fs_1.existsSync)(file))
|
|
35
|
+
continue;
|
|
36
|
+
seen.add(file);
|
|
37
|
+
try {
|
|
38
|
+
const root = postcss_1.default.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
39
|
+
root.walkAtRules('import', (rule) => {
|
|
40
|
+
var _a;
|
|
41
|
+
const specifier = (_a = /^(?:url\(\s*)?['"]?([^'"\s)]+)/u.exec(rule.params.trim())) === null || _a === void 0 ? void 0 : _a[1];
|
|
42
|
+
if (specifier === null || specifier === void 0 ? void 0 : specifier.startsWith('.'))
|
|
43
|
+
queue.push((0, path_1.resolve)((0, path_1.dirname)(file), specifier));
|
|
44
|
+
});
|
|
45
|
+
root.walkRules(/^(?:html|:root)$/u, (rule) => rule.walkDecls('font-size', (declaration) => {
|
|
46
|
+
var _a;
|
|
47
|
+
const [, amount, unit] = (_a = /^(\d*\.?\d+)(%|px)$/u.exec(declaration.value.trim())) !== null && _a !== void 0 ? _a : [];
|
|
48
|
+
if (amount)
|
|
49
|
+
rem = unit === '%' ? (DEFAULT_REM * Number(amount)) / 100 : Number(amount);
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
catch (_a) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return rem;
|
|
57
|
+
};
|
|
58
|
+
const candidatesIn = (texts) => texts.flatMap((text) => text.split(/[\s"'`<>]+/u).filter(Boolean));
|
|
59
|
+
const tsSourcesIn = (dir) => (0, fs_1.existsSync)(dir)
|
|
60
|
+
? (0, fs_1.readdirSync)(dir, { recursive: true })
|
|
61
|
+
.filter((path) => path.endsWith('.ts') && !path.endsWith('.d.ts') && !path.endsWith('.spec.ts'))
|
|
62
|
+
.map((path) => (0, path_1.resolve)(dir, path))
|
|
63
|
+
.map((file) => ({ file, source: (0, fs_1.readFileSync)(file, 'utf8') }))
|
|
64
|
+
: [];
|
|
65
|
+
const sourcesOf = (part) => [
|
|
66
|
+
{ file: part.file, source: part.source },
|
|
67
|
+
...tsSourcesIn((0, path_1.dirname)(part.file)).filter(({ file }) => file !== part.file),
|
|
68
|
+
];
|
|
69
|
+
const canonicalCache = new Map();
|
|
70
|
+
const canonicalFormsOf = (options) => {
|
|
71
|
+
var _a;
|
|
72
|
+
const key = `${options.rem}\n${options.css}`;
|
|
73
|
+
const known = (_a = canonicalCache.get(key)) !== null && _a !== void 0 ? _a : new Map();
|
|
74
|
+
const missing = [...new Set(options.candidates)].filter((candidate) => !known.has(candidate));
|
|
75
|
+
canonicalCache.set(key, known);
|
|
76
|
+
if (missing.length > 0) {
|
|
77
|
+
const tailwind = require.resolve('@tailwindcss/node', { paths: [options.target, __dirname] });
|
|
78
|
+
const output = (0, child_process_1.execFileSync)(process.execPath, ['-e', CANONICALIZE, tailwind], {
|
|
79
|
+
input: JSON.stringify({ css: options.css, base: options.target, rem: options.rem, candidates: missing }),
|
|
80
|
+
encoding: 'utf8',
|
|
81
|
+
maxBuffer: 1 << 28,
|
|
82
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
83
|
+
});
|
|
84
|
+
const forms = JSON.parse(output);
|
|
85
|
+
missing.forEach((candidate, index) => { var _a; return known.set(candidate, (_a = forms[index]) !== null && _a !== void 0 ? _a : candidate); });
|
|
86
|
+
}
|
|
87
|
+
return known;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A Tailwind class in the markup of a part that has a canonical form under the product's stylesheets, as
|
|
91
|
+
* Tailwind IntelliSense reports it: `w-[420px]` that can be written as `w-2xl`. The root font size the
|
|
92
|
+
* stylesheets set on `html` is the rem base.
|
|
93
|
+
*/
|
|
94
|
+
const canonicalClassesOf = (product) => {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
const stylesheets = stylesheetsOf(product);
|
|
97
|
+
if (stylesheets.length === 0)
|
|
98
|
+
return [];
|
|
99
|
+
const target = (0, path_1.resolve)((0, path_1.dirname)(product.configFile), '../..');
|
|
100
|
+
const below = product.parts.filter((part) => part.origin !== 'base').flatMap(sourcesOf);
|
|
101
|
+
const shared = (0, imports_1.ownSharedFilesOf)(product, below.map(({ file }) => file))
|
|
102
|
+
.filter((file) => file.endsWith('.ts'))
|
|
103
|
+
.map((file) => ({ file, source: (0, fs_1.readFileSync)(file, 'utf8') }));
|
|
104
|
+
const files = [...new Map([...below, ...shared].map((entry) => [entry.file, entry])).values()].sort((a, b) => a.file.localeCompare(b.file));
|
|
105
|
+
const candidatesOf = new Map(files.map(({ file, source }) => [file, [...new Set(candidatesIn((0, ts_source_1.textsOf)(source)))]]));
|
|
106
|
+
const css = stylesheets.map((file) => `@import ${JSON.stringify(file)};`).join('\n');
|
|
107
|
+
let forms;
|
|
108
|
+
try {
|
|
109
|
+
forms = canonicalFormsOf({ target, css, rem: remOf(stylesheets), candidates: [...candidatesOf.values()].flat() });
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const reason = ((_a = error.stderr) === null || _a === void 0 ? void 0 : _a.trim()) || error.message;
|
|
113
|
+
return [
|
|
114
|
+
{
|
|
115
|
+
rule: 'CANONICAL-CLASS',
|
|
116
|
+
file: (_b = stylesheets[0]) !== null && _b !== void 0 ? _b : product.dir,
|
|
117
|
+
message: `no Tailwind design system - ${reason}`,
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
return files.flatMap(({ file }) => {
|
|
122
|
+
var _a;
|
|
123
|
+
return ((_a = candidatesOf.get(file)) !== null && _a !== void 0 ? _a : []).flatMap((candidate) => {
|
|
124
|
+
const canonical = forms.get(candidate);
|
|
125
|
+
return canonical && canonical !== candidate
|
|
126
|
+
? [{ rule: 'CANONICAL-CLASS', file, message: `The class \`${candidate}\` can be written as \`${canonical}\`` }]
|
|
127
|
+
: [];
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
exports.canonicalClassesOf = canonicalClassesOf;
|
|
132
|
+
//# sourceMappingURL=canonical-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-class.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/canonical-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Problem } from '../problem';
|
|
2
|
+
import { ResolvedProduct } from '../resolve-product';
|
|
3
|
+
/**
|
|
4
|
+
* An `<svg>` written in the TS of a part outside foundations, or in a TS file below the part's folder. An `<svg>` that
|
|
5
|
+
* the code computes, for example the edges of a flow diagram, passes with a `data-et-drawing` attribute.
|
|
6
|
+
*/
|
|
7
|
+
export declare const inlineSvgsOf: (product: ResolvedProduct) => Problem[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inlineSvgsOf = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const SVG_TAG = /<svg\b[^>]*>/gu;
|
|
7
|
+
const DRAWING = /\sdata-et-drawing\b/u;
|
|
8
|
+
const tsFilesIn = (dir) => (0, fs_1.existsSync)(dir)
|
|
9
|
+
? (0, fs_1.readdirSync)(dir, { recursive: true })
|
|
10
|
+
.filter((path) => path.endsWith('.ts') && !path.endsWith('.d.ts'))
|
|
11
|
+
.map((path) => (0, path_1.resolve)(dir, path))
|
|
12
|
+
.sort()
|
|
13
|
+
: [];
|
|
14
|
+
/**
|
|
15
|
+
* An `<svg>` written in the TS of a part outside foundations, or in a TS file below the part's folder. An `<svg>` that
|
|
16
|
+
* the code computes, for example the edges of a flow diagram, passes with a `data-et-drawing` attribute.
|
|
17
|
+
*/
|
|
18
|
+
const inlineSvgsOf = (product) => [
|
|
19
|
+
...new Set(product.parts.filter((part) => part.layer !== 'foundations').flatMap((part) => tsFilesIn((0, path_1.dirname)(part.file)))),
|
|
20
|
+
]
|
|
21
|
+
.filter((file) => [...(0, fs_1.readFileSync)(file, 'utf8').matchAll(SVG_TAG)].some(([tag]) => !DRAWING.test(tag)))
|
|
22
|
+
.map((file) => ({
|
|
23
|
+
rule: 'INLINE-SVG',
|
|
24
|
+
file,
|
|
25
|
+
message: 'draws an <svg> inline - put it in assets/ and draw it with a helper of a foundations part, or mark a computed drawing with data-et-drawing',
|
|
26
|
+
}));
|
|
27
|
+
exports.inlineSvgsOf = inlineSvgsOf;
|
|
28
|
+
//# sourceMappingURL=inline-svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-svg.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/inline-svg.ts"],"names":[],"mappings":";;;AAAA,2BAA2D;AAC3D,+BAAwC;AAIxC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAEvC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAChC,IAAA,eAAU,EAAC,GAAG,CAAC;IACb,CAAC,CAAE,IAAA,gBAAW,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAc;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACjC,IAAI,EAAE;IACX,CAAC,CAAC,EAAE,CAAC;AAET;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAa,EAAE,CAClE;IACE,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9G;CACF;KACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACvG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACd,IAAI,EAAE,YAAY;IAClB,IAAI;IACJ,OAAO,EACL,4IAA4I;CAC/I,CAAC,CAAC,CAAC;AAZK,QAAA,YAAY,gBAYjB"}
|
|
@@ -2,3 +2,7 @@ import { Problem } from '../problem';
|
|
|
2
2
|
import { ResolvedProduct } from '../resolve-product';
|
|
3
3
|
/** A part that drives motion from script frames, which a timeline cannot stop at a given time. */
|
|
4
4
|
export declare const scriptedMotionOf: (product: ResolvedProduct) => Problem[];
|
|
5
|
+
/** A part whose motion runs between a state it does not have, or whose rule names a motion it does not declare. */
|
|
6
|
+
export declare const badMotionsOf: (product: ResolvedProduct) => Problem[];
|
|
7
|
+
/** A literal duration, delay or easing in a transition or animation of a part outside foundations, in its CSS or in the CSS of its TS. */
|
|
8
|
+
export declare const hardCodedMotionOf: (product: ResolvedProduct) => Problem[];
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.scriptedMotionOf = void 0;
|
|
3
|
+
exports.hardCodedMotionOf = exports.badMotionsOf = exports.scriptedMotionOf = void 0;
|
|
4
|
+
const css_source_1 = require("../css-source");
|
|
5
|
+
const part_definition_1 = require("../sketch/part-definition");
|
|
4
6
|
const ts_source_1 = require("../ts-source");
|
|
5
|
-
const TIMED = ['requestAnimationFrame', 'setInterval'];
|
|
7
|
+
const TIMED = ['requestAnimationFrame', 'setInterval', 'setTimeout'];
|
|
6
8
|
/** A part that drives motion from script frames, which a timeline cannot stop at a given time. */
|
|
7
9
|
const scriptedMotionOf = (product) => product.parts.flatMap((part) => [...new Set((0, ts_source_1.calledNamesOf)(part.source).filter((name) => TIMED.includes(name)))].map((name) => ({
|
|
8
10
|
rule: 'MOTION',
|
|
@@ -10,4 +12,46 @@ const scriptedMotionOf = (product) => product.parts.flatMap((part) => [...new Se
|
|
|
10
12
|
message: `calls ${name} - motion must be CSS animation, CSS transition or the Web Animations API`,
|
|
11
13
|
})));
|
|
12
14
|
exports.scriptedMotionOf = scriptedMotionOf;
|
|
15
|
+
/** A part whose motion runs between a state it does not have, or whose rule names a motion it does not declare. */
|
|
16
|
+
const badMotionsOf = (product) => product.parts.flatMap((part) => {
|
|
17
|
+
const states = (0, part_definition_1.stateNamesOf)(part.source);
|
|
18
|
+
const { motions, ruleMotions } = (0, part_definition_1.motionRefsOf)(part.source);
|
|
19
|
+
const problem = (rule, message) => ({ rule, file: part.file, message });
|
|
20
|
+
return [
|
|
21
|
+
...(states
|
|
22
|
+
? motions.flatMap(({ name, from, to }) => [from, to].flatMap((state) => state !== null && !states.includes(state)
|
|
23
|
+
? [
|
|
24
|
+
problem('MOTION-STATE', `motion "${name}" runs to or from "${state}", which is no state of the part`),
|
|
25
|
+
]
|
|
26
|
+
: []))
|
|
27
|
+
: []),
|
|
28
|
+
...ruleMotions.flatMap((name) => motions.some((motion) => motion.name === name)
|
|
29
|
+
? []
|
|
30
|
+
: [problem('MOTION-NAME', `a rule names motion "${name}", which the part does not declare`)]),
|
|
31
|
+
];
|
|
32
|
+
});
|
|
33
|
+
exports.badMotionsOf = badMotionsOf;
|
|
34
|
+
const TIMING = /^(transition|animation)(-duration|-delay|-timing-function)?$/;
|
|
35
|
+
const LITERAL = /(?<![\w-])(?:(?:\d*\.?\d+m?s|ease(?:-in|-out|-in-out)?|linear|step-start|step-end)(?![\w(-])|(?:cubic-bezier|steps|linear)\()/g;
|
|
36
|
+
const literalTimingsOf = (css) => (0, css_source_1.cssBlocksOf)(css).declarations.flatMap((declaration) => {
|
|
37
|
+
var _a;
|
|
38
|
+
const property = declaration.slice(0, declaration.indexOf(':')).trim();
|
|
39
|
+
if (!TIMING.test(property))
|
|
40
|
+
return [];
|
|
41
|
+
const value = ((_a = (0, css_source_1.declarationValueOf)(declaration)) !== null && _a !== void 0 ? _a : '').replace(/--[\w-]+/g, '');
|
|
42
|
+
return [...value.matchAll(LITERAL)].map(([literal]) => `${property}: ${literal.replace(/\($/, '(…)')}`);
|
|
43
|
+
});
|
|
44
|
+
const timingProblemsOf = (file, literals) => [...new Set(literals)].map((literal) => ({
|
|
45
|
+
rule: 'HARD-CODED-MOTION',
|
|
46
|
+
file,
|
|
47
|
+
message: `${literal} outside foundations - use a foundations motion token`,
|
|
48
|
+
}));
|
|
49
|
+
/** A literal duration, delay or easing in a transition or animation of a part outside foundations, in its CSS or in the CSS of its TS. */
|
|
50
|
+
const hardCodedMotionOf = (product) => product.parts
|
|
51
|
+
.filter((part) => part.layer !== 'foundations')
|
|
52
|
+
.flatMap((part) => [
|
|
53
|
+
...timingProblemsOf(part.file, (0, ts_source_1.textsOf)(part.source).flatMap(literalTimingsOf)),
|
|
54
|
+
...(part.css && part.cssSource ? timingProblemsOf(part.css, literalTimingsOf(part.cssSource)) : []),
|
|
55
|
+
]);
|
|
56
|
+
exports.hardCodedMotionOf = hardCodedMotionOf;
|
|
13
57
|
//# sourceMappingURL=motion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/motion.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/motion.ts"],"names":[],"mappings":";;;AAAA,8CAAgE;AAGhE,+DAAuE;AACvE,4CAAsD;AAEtD,MAAM,KAAK,GAAG,CAAC,uBAAuB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAErE,kGAAkG;AAC3F,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAa,EAAE,CACtE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,SAAS,IAAI,2EAA2E;CAClG,CAAC,CAAC,CACJ,CAAC;AAPS,QAAA,gBAAgB,oBAOzB;AAEJ,mHAAmH;AAC5G,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAa,EAAE,CAClE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEjG,OAAO;QACL,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACvC,CAAC,CAAC;oBACE,OAAO,CACL,cAAc,EACd,WAAW,IAAI,sBAAsB,KAAK,kCAAkC,CAC7E;iBACF;gBACH,CAAC,CAAC,EAAE,CACP,CACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;YAC5C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,wBAAwB,IAAI,oCAAoC,CAAC,CAAC,CAC/F;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AA3BQ,QAAA,YAAY,gBA2BpB;AAEL,MAAM,MAAM,GAAG,8DAA8D,CAAC;AAE9E,MAAM,OAAO,GACX,gIAAgI,CAAC;AAEnI,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE,CACvC,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,KAAK,GAAG,CAAC,MAAA,IAAA,+BAAkB,EAAC,WAAW,CAAC,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE/E,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1G,CAAC,CAAC,CAAC;AAEL,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAa,EAAE,CACvE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,EAAE,mBAAmB;IACzB,IAAI;IACJ,OAAO,EAAE,GAAG,OAAO,uDAAuD;CAC3E,CAAC,CAAC,CAAC;AAEN,0IAA0I;AACnI,MAAM,iBAAiB,GAAG,CAAC,OAAwB,EAAa,EAAE,CACvE,OAAO,CAAC,KAAK;KACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC;KAC9C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACjB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,mBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CACpG,CAAC,CAAC;AANM,QAAA,iBAAiB,qBAMvB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SharedDirs } from '../imports';
|
|
2
|
+
import { Problem } from '../problem';
|
|
3
|
+
import { ResolvedProduct } from '../resolve-product';
|
|
4
|
+
/**
|
|
5
|
+
* A declaration that a Tailwind utility of the product draws, in a CSS file below the folder of a part outside
|
|
6
|
+
* foundations or in the CSS of a TS file there: a core layout keyword such as `display: flex`, or a value of a
|
|
7
|
+
* spacing, colour, type, radius or shadow token that a `@theme` block of the product's stylesheets registers. A rule
|
|
8
|
+
* whose selectors all end on an SDK `.et-*` element passes: the part's markup cannot put a utility there. A product
|
|
9
|
+
* whose stylesheets import no `tailwindcss` has no utilities, so nothing is flagged.
|
|
10
|
+
*/
|
|
11
|
+
export declare const utilityCssOf: (product: ResolvedProduct & SharedDirs) => Problem[];
|