@ethlete/cli 3.0.0-next.24 → 3.0.0-next.26

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 (194) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/design/define-call.ts +69 -0
  3. package/design/define-part.ts +43 -9
  4. package/design/embed-page.ts +37 -4
  5. package/design/icon-sheet.ts +151 -0
  6. package/design/logo-sheet.ts +52 -0
  7. package/design/mark-part.ts +79 -2
  8. package/design/motion-drive.ts +215 -0
  9. package/design/motion-runtime.ts +224 -5
  10. package/design/motion-tokens.ts +177 -0
  11. package/design/spring.ts +53 -0
  12. package/design/token-sheet.ts +87 -0
  13. package/design/web/frame-fill.ts +4 -0
  14. package/design/web/frame-scheme.ts +44 -0
  15. package/design/web/frame.ts +239 -31
  16. package/package.json +1 -1
  17. package/src/lib/design/calls-tsconfig.d.ts +2 -0
  18. package/src/lib/design/calls-tsconfig.js +11 -5
  19. package/src/lib/design/calls-tsconfig.js.map +1 -1
  20. package/src/lib/design/check.d.ts +1 -0
  21. package/src/lib/design/check.js +62 -6
  22. package/src/lib/design/check.js.map +1 -1
  23. package/src/lib/design/contact-sheet.d.ts +9 -0
  24. package/src/lib/design/contact-sheet.js +38 -4
  25. package/src/lib/design/contact-sheet.js.map +1 -1
  26. package/src/lib/design/design-command.js +56 -7
  27. package/src/lib/design/design-command.js.map +1 -1
  28. package/src/lib/design/draw-ledger.d.ts +36 -0
  29. package/src/lib/design/draw-ledger.js +52 -0
  30. package/src/lib/design/draw-ledger.js.map +1 -0
  31. package/src/lib/design/force-interactions.d.ts +2 -1
  32. package/src/lib/design/force-interactions.js +7 -4
  33. package/src/lib/design/force-interactions.js.map +1 -1
  34. package/src/lib/design/mcp-command.d.ts +81 -0
  35. package/src/lib/design/mcp-command.js +422 -0
  36. package/src/lib/design/mcp-command.js.map +1 -0
  37. package/src/lib/design/motion-command.d.ts +71 -0
  38. package/src/lib/design/motion-command.js +308 -0
  39. package/src/lib/design/motion-command.js.map +1 -0
  40. package/src/lib/design/motion-endpoint.d.ts +61 -0
  41. package/src/lib/design/motion-endpoint.js +133 -0
  42. package/src/lib/design/motion-endpoint.js.map +1 -0
  43. package/src/lib/design/motion-flow.d.ts +5 -0
  44. package/src/lib/design/motion-flow.js +29 -0
  45. package/src/lib/design/motion-flow.js.map +1 -0
  46. package/src/lib/design/motion-shot.d.ts +43 -0
  47. package/src/lib/design/motion-shot.js +97 -0
  48. package/src/lib/design/motion-shot.js.map +1 -0
  49. package/src/lib/design/paths.d.ts +14 -0
  50. package/src/lib/design/paths.js +50 -1
  51. package/src/lib/design/paths.js.map +1 -1
  52. package/src/lib/design/ready-shots.d.ts +7 -0
  53. package/src/lib/design/ready-shots.js +22 -1
  54. package/src/lib/design/ready-shots.js.map +1 -1
  55. package/src/lib/design/render-packages.d.ts +14 -0
  56. package/src/lib/design/render-packages.js +18 -3
  57. package/src/lib/design/render-packages.js.map +1 -1
  58. package/src/lib/design/render-worker.js +1 -0
  59. package/src/lib/design/render-worker.js.map +1 -1
  60. package/src/lib/design/render.js +3 -3
  61. package/src/lib/design/render.js.map +1 -1
  62. package/src/lib/design/serve.d.ts +2 -2
  63. package/src/lib/design/serve.js +191 -21
  64. package/src/lib/design/serve.js.map +1 -1
  65. package/src/lib/design/shot-command.d.ts +13 -4
  66. package/src/lib/design/shot-command.js +30 -24
  67. package/src/lib/design/shot-command.js.map +1 -1
  68. package/src/lib/design/shot-store.d.ts +24 -0
  69. package/src/lib/design/shot-store.js +120 -0
  70. package/src/lib/design/shot-store.js.map +1 -0
  71. package/src/lib/design/shot.d.ts +37 -1
  72. package/src/lib/design/shot.js +185 -34
  73. package/src/lib/design/shot.js.map +1 -1
  74. package/src/lib/design/sketch-command.js +197 -51
  75. package/src/lib/design/sketch-command.js.map +1 -1
  76. package/src/lib/design/ssr-shims.d.ts +2 -0
  77. package/src/lib/design/ssr-shims.js +12 -1
  78. package/src/lib/design/ssr-shims.js.map +1 -1
  79. package/src/lib/design/studio-api.d.ts +31 -0
  80. package/src/lib/design/studio-api.js +118 -1
  81. package/src/lib/design/studio-api.js.map +1 -1
  82. package/src/lib/design/system/check-system.d.ts +6 -2
  83. package/src/lib/design/system/check-system.js +102 -20
  84. package/src/lib/design/system/check-system.js.map +1 -1
  85. package/src/lib/design/system/colour.d.ts +4 -1
  86. package/src/lib/design/system/colour.js +54 -2
  87. package/src/lib/design/system/colour.js.map +1 -1
  88. package/src/lib/design/system/complete-command.d.ts +1 -1
  89. package/src/lib/design/system/complete-command.js +80 -6
  90. package/src/lib/design/system/complete-command.js.map +1 -1
  91. package/src/lib/design/system/complete.d.ts +172 -9
  92. package/src/lib/design/system/complete.js +792 -167
  93. package/src/lib/design/system/complete.js.map +1 -1
  94. package/src/lib/design/system/contrast-check.d.ts +6 -1
  95. package/src/lib/design/system/contrast-check.js +167 -12
  96. package/src/lib/design/system/contrast-check.js.map +1 -1
  97. package/src/lib/design/system/drawn-open-points.d.ts +16 -0
  98. package/src/lib/design/system/drawn-open-points.js +43 -0
  99. package/src/lib/design/system/drawn-open-points.js.map +1 -0
  100. package/src/lib/design/system/exceptions.d.ts +59 -0
  101. package/src/lib/design/system/exceptions.js +132 -0
  102. package/src/lib/design/system/exceptions.js.map +1 -0
  103. package/src/lib/design/system/flows/flow.d.ts +3 -0
  104. package/src/lib/design/system/flows/flow.js +5 -3
  105. package/src/lib/design/system/flows/flow.js.map +1 -1
  106. package/src/lib/design/system/handoff.d.ts +11 -0
  107. package/src/lib/design/system/handoff.js +30 -0
  108. package/src/lib/design/system/handoff.js.map +1 -0
  109. package/src/lib/design/system/inventory-approval.d.ts +41 -0
  110. package/src/lib/design/system/inventory-approval.js +71 -0
  111. package/src/lib/design/system/inventory-approval.js.map +1 -0
  112. package/src/lib/design/system/inventory.d.ts +65 -0
  113. package/src/lib/design/system/inventory.js +168 -0
  114. package/src/lib/design/system/inventory.js.map +1 -0
  115. package/src/lib/design/system/list-system.d.ts +4 -1
  116. package/src/lib/design/system/list-system.js +11 -3
  117. package/src/lib/design/system/list-system.js.map +1 -1
  118. package/src/lib/design/system/open-points.d.ts +101 -0
  119. package/src/lib/design/system/open-points.js +156 -0
  120. package/src/lib/design/system/open-points.js.map +1 -0
  121. package/src/lib/design/system/part-ready.d.ts +52 -0
  122. package/src/lib/design/system/part-ready.js +101 -0
  123. package/src/lib/design/system/part-ready.js.map +1 -0
  124. package/src/lib/design/system/read-open-points.d.ts +27 -0
  125. package/src/lib/design/system/read-open-points.js +81 -0
  126. package/src/lib/design/system/read-open-points.js.map +1 -0
  127. package/src/lib/design/system/ready-command.d.ts +7 -0
  128. package/src/lib/design/system/ready-command.js +65 -0
  129. package/src/lib/design/system/ready-command.js.map +1 -0
  130. package/src/lib/design/system/render-check.d.ts +2 -0
  131. package/src/lib/design/system/render-check.js +216 -32
  132. package/src/lib/design/system/render-check.js.map +1 -1
  133. package/src/lib/design/system/resolve-product.d.ts +4 -4
  134. package/src/lib/design/system/resolve-product.js +22 -7
  135. package/src/lib/design/system/resolve-product.js.map +1 -1
  136. package/src/lib/design/system/rules/implements.d.ts +7 -0
  137. package/src/lib/design/system/rules/implements.js +43 -0
  138. package/src/lib/design/system/rules/implements.js.map +1 -0
  139. package/src/lib/design/system/rules/motion.d.ts +2 -0
  140. package/src/lib/design/system/rules/motion.js +26 -1
  141. package/src/lib/design/system/rules/motion.js.map +1 -1
  142. package/src/lib/design/system/rules/option-values.d.ts +15 -0
  143. package/src/lib/design/system/rules/option-values.js +145 -0
  144. package/src/lib/design/system/rules/option-values.js.map +1 -0
  145. package/src/lib/design/system/rules/stale-replace.js +80 -3
  146. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  147. package/src/lib/design/system/rules/token-selectors.js +1 -1
  148. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  149. package/src/lib/design/system/sketch/baseline.d.ts +11 -2
  150. package/src/lib/design/system/sketch/baseline.js +4 -2
  151. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  152. package/src/lib/design/system/sketch/check-sketches.d.ts +1 -0
  153. package/src/lib/design/system/sketch/check-sketches.js +4 -2
  154. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  155. package/src/lib/design/system/sketch/host-edit.d.ts +4 -0
  156. package/src/lib/design/system/sketch/host-edit.js +68 -0
  157. package/src/lib/design/system/sketch/host-edit.js.map +1 -0
  158. package/src/lib/design/system/sketch/merge.d.ts +3 -2
  159. package/src/lib/design/system/sketch/merge.js +79 -12
  160. package/src/lib/design/system/sketch/merge.js.map +1 -1
  161. package/src/lib/design/system/sketch/merged-parts.d.ts +11 -1
  162. package/src/lib/design/system/sketch/merged-parts.js +24 -3
  163. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  164. package/src/lib/design/system/sketch/no-visible-change.d.ts +6 -0
  165. package/src/lib/design/system/sketch/no-visible-change.js +25 -1
  166. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  167. package/src/lib/design/system/sketch/overlay.js +11 -3
  168. package/src/lib/design/system/sketch/overlay.js.map +1 -1
  169. package/src/lib/design/system/sketch/part-definition.d.ts +36 -0
  170. package/src/lib/design/system/sketch/part-definition.js +56 -2
  171. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  172. package/src/lib/design/system/sketch/sketch.d.ts +47 -0
  173. package/src/lib/design/system/sketch/sketch.js +137 -44
  174. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  175. package/src/lib/design/system/sketch/unchanged-states.d.ts +4 -1
  176. package/src/lib/design/system/sketch/unchanged-states.js +9 -5
  177. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  178. package/src/lib/design/system/sketch/unused-closure.d.ts +12 -0
  179. package/src/lib/design/system/sketch/unused-closure.js +195 -0
  180. package/src/lib/design/system/sketch/unused-closure.js.map +1 -0
  181. package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
  182. package/src/lib/design/system/sketch/unused-files.js +6 -3
  183. package/src/lib/design/system/sketch/unused-files.js.map +1 -1
  184. package/src/lib/design/system/system-modules.js +6 -9
  185. package/src/lib/design/system/system-modules.js.map +1 -1
  186. package/src/lib/design/system/system-tsconfig.d.ts +2 -1
  187. package/src/lib/design/system/system-tsconfig.js +10 -6
  188. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  189. package/src/lib/design/system/ts-source.d.ts +3 -0
  190. package/src/lib/design/system/ts-source.js +21 -4
  191. package/src/lib/design/system/ts-source.js.map +1 -1
  192. package/src/lib/design/thumb.d.ts +31 -4
  193. package/src/lib/design/thumb.js +105 -40
  194. package/src/lib/design/thumb.js.map +1 -1
@@ -3,7 +3,59 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.coloursIn = void 0;
4
4
  const HEX = /(?<![&\w/])#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3,4})(?![\w-])/gi;
5
5
  const FUNCTION = /(?<![\w-])(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\(/gi;
6
- /** The hex colours and colour functions written in a piece of text. */
7
- const coloursIn = (text) => [...text.matchAll(HEX), ...text.matchAll(FUNCTION)].map((match) => match[0]);
6
+ const VAR = /var\(/giy;
7
+ const closingParenOf = (text, open) => {
8
+ let depth = 0;
9
+ for (let index = open; index < text.length; index++) {
10
+ if (text[index] === '(')
11
+ depth++;
12
+ else if (text[index] === ')' && --depth === 0)
13
+ return index;
14
+ }
15
+ return -1;
16
+ };
17
+ const withoutVars = (text) => {
18
+ let out = '';
19
+ let index = 0;
20
+ while (index < text.length) {
21
+ VAR.lastIndex = index;
22
+ if (!VAR.test(text)) {
23
+ out += text[index++];
24
+ continue;
25
+ }
26
+ const close = closingParenOf(text, index + 'var'.length);
27
+ if (close === -1)
28
+ return null;
29
+ out += ' ';
30
+ index = close + 1;
31
+ }
32
+ return out;
33
+ };
34
+ const channelsOf = (rest) => {
35
+ const slash = rest.indexOf('/');
36
+ if (slash !== -1)
37
+ return rest.slice(0, slash);
38
+ const comma = rest.lastIndexOf(',');
39
+ return comma === -1 ? rest : rest.slice(0, comma);
40
+ };
41
+ const isTokenRgb = (text, match) => {
42
+ if (!/^rgba?\($/iu.test(match[0]))
43
+ return false;
44
+ const open = match.index + match[0].length - 1;
45
+ const close = closingParenOf(text, open);
46
+ if (close === -1)
47
+ return false;
48
+ const args = text.slice(open + 1, close);
49
+ const rest = withoutVars(args);
50
+ return rest !== null && rest !== args && /^[\s,]*$/u.test(channelsOf(rest));
51
+ };
52
+ /**
53
+ * The hex colours and colour functions written in a piece of text. An `rgb()` or `rgba()` whose channels all come from
54
+ * `var()` is a token colour and does not count; its alpha may be a literal.
55
+ */
56
+ const coloursIn = (text) => [
57
+ ...[...text.matchAll(HEX)].map((match) => match[0]),
58
+ ...[...text.matchAll(FUNCTION)].filter((match) => !isTokenRgb(text, match)).map((match) => match[0]),
59
+ ];
8
60
  exports.coloursIn = coloursIn;
9
61
  //# sourceMappingURL=colour.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colour.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/colour.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,kEAAkE,CAAC;AAC/E,MAAM,QAAQ,GAAG,6DAA6D,CAAC;AAE/E,uEAAuE;AAChE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAA3G,QAAA,SAAS,aAAkG"}
1
+ {"version":3,"file":"colour.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/colour.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { chromiumOf } from '../browser';
2
- export declare const COMPLETE_USAGE = "complete <layer>/<name> [--product <name>]";
2
+ export declare const COMPLETE_USAGE = "complete <layer>/<name> [--variant <key> | --handoff] [--product <name>] | complete --handoff [--product <name>] | complete --request <layer>/<name>.<control>.<requirement> --reason <text> [--product <name>]";
3
3
  /** `et design complete <layer>/<name>` exits 1 while a control the part declares lacks a drawn, reviewed state or surface. */
4
4
  export declare const designComplete: (options: {
5
5
  target: string;
@@ -11,16 +11,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.designComplete = exports.COMPLETE_USAGE = void 0;
13
13
  const complete_1 = require("./complete");
14
+ const exceptions_1 = require("./exceptions");
15
+ const handoff_1 = require("./handoff");
14
16
  const resolve_product_1 = require("./resolve-product");
15
17
  const cli_args_1 = require("./sketch/cli-args");
16
18
  const sketch_1 = require("./sketch/sketch");
17
- exports.COMPLETE_USAGE = 'complete <layer>/<name> [--product <name>]';
19
+ exports.COMPLETE_USAGE = 'complete <layer>/<name> [--variant <key> | --handoff] [--product <name>] | complete --handoff [--product <name>] | complete --request <layer>/<name>.<control>.<requirement> --reason <text> [--product <name>]';
18
20
  /** `et design complete <layer>/<name>` exits 1 while a control the part declares lacks a drawn, reviewed state or surface. */
19
21
  const designComplete = (options) => __awaiter(void 0, void 0, void 0, function* () {
22
+ var _a, _b, _c, _d, _e;
20
23
  const { target, argv, invocation } = options;
21
- const args = (0, cli_args_1.argsOf)(argv, ['--product']);
24
+ const args = (0, cli_args_1.argsOf)(argv, ['--product', '--request', '--reason', '--variant']);
22
25
  const usage = `usage: ${invocation} ${exports.COMPLETE_USAGE}`;
23
- if (typeof args === 'string' || args.positional.length !== 1) {
26
+ const request = typeof args === 'string' ? undefined : args.values['--request'];
27
+ const handoff = typeof args !== 'string' && args.flags.has('--handoff');
28
+ if (typeof args === 'string' ||
29
+ args.positional.length > (request === undefined ? 1 : 0) ||
30
+ (args.positional.length === 0 && request === undefined && !handoff) ||
31
+ (handoff && (request !== undefined || args.values['--variant'] !== undefined)) ||
32
+ (request === undefined) !== (args.values['--reason'] === undefined) ||
33
+ (request !== undefined && args.values['--variant'] !== undefined)) {
24
34
  if (typeof args === 'string')
25
35
  console.error(args);
26
36
  console.error(usage);
@@ -31,6 +41,58 @@ const designComplete = (options) => __awaiter(void 0, void 0, void 0, function*
31
41
  console.error(config);
32
42
  return 1;
33
43
  }
44
+ if (request !== undefined) {
45
+ const product = (0, cli_args_1.oneProductOf)({ target, config, asked: args.values['--product'] });
46
+ const requested = typeof product === 'string'
47
+ ? product
48
+ : (0, exceptions_1.requestException)({ product, key: request, reason: (_a = args.values['--reason']) !== null && _a !== void 0 ? _a : '' });
49
+ if (typeof requested === 'string') {
50
+ console.error(requested);
51
+ return 1;
52
+ }
53
+ console.log(`requested exception ${request} - design complete still fails on it until the user approves it in Studio`);
54
+ return 0;
55
+ }
56
+ if (args.positional[0] === undefined) {
57
+ const product = (0, cli_args_1.oneProductOf)({ target, config, asked: args.values['--product'] });
58
+ if (typeof product === 'string') {
59
+ console.error(product);
60
+ return 1;
61
+ }
62
+ const parts = Object.keys((0, handoff_1.readHandoff)(product.dir));
63
+ let failed = 0;
64
+ for (const part of parts) {
65
+ const result = yield (0, complete_1.completenessOf)({ target, config, product, part, chromiumOf: options.chromiumOf });
66
+ if ('unavailable' in result) {
67
+ console.error(`design complete needs a browser: ${result.unavailable}`);
68
+ return 1;
69
+ }
70
+ if ('problem' in result) {
71
+ failed++;
72
+ console.error(`HANDOFF ${part} regressed - ${result.problem}`);
73
+ continue;
74
+ }
75
+ for (const exception of (_b = result.exceptions) !== null && _b !== void 0 ? _b : [])
76
+ console.log((0, exceptions_1.exceptionLineOf)(exception));
77
+ for (const gap of result.gaps)
78
+ console.error((0, complete_1.completenessGapLineOf)(gap));
79
+ for (const hint of (_c = result.hints) !== null && _c !== void 0 ? _c : [])
80
+ console.log(hint);
81
+ if (result.gaps.length > 0) {
82
+ failed++;
83
+ console.error(`HANDOFF ${part} regressed - ${result.gaps.length} gap(s)`);
84
+ }
85
+ else {
86
+ console.log(`HANDOFF ${part} complete`);
87
+ }
88
+ }
89
+ if (failed > 0) {
90
+ console.error(`${failed} of ${parts.length} handoff part(s) in ${product.name} are no longer design complete`);
91
+ return 1;
92
+ }
93
+ console.log(`${parts.length} handoff part(s) in ${product.name} are design complete`);
94
+ return 0;
95
+ }
34
96
  const parsed = (0, sketch_1.parseTarget)(args.positional[0]);
35
97
  if (typeof parsed === 'string') {
36
98
  console.error(parsed);
@@ -42,7 +104,10 @@ const designComplete = (options) => __awaiter(void 0, void 0, void 0, function*
42
104
  return 1;
43
105
  }
44
106
  const part = (0, resolve_product_1.partKeyOf)(parsed);
45
- const result = yield (0, complete_1.completenessOf)({ target, config, product, part, chromiumOf: options.chromiumOf });
107
+ const variant = args.values['--variant'];
108
+ const sketch = variant === undefined ? null : { target: part, variant };
109
+ const result = yield (0, complete_1.completenessOf)({ target, config, product, part, sketch, chromiumOf: options.chromiumOf });
110
+ const what = sketch ? `variant ${variant} of ${part}` : part;
46
111
  if ('problem' in result) {
47
112
  console.error(result.problem);
48
113
  return 1;
@@ -51,13 +116,22 @@ const designComplete = (options) => __awaiter(void 0, void 0, void 0, function*
51
116
  console.error(`design complete needs a browser: ${result.unavailable}`);
52
117
  return 1;
53
118
  }
119
+ for (const exception of (_d = result.exceptions) !== null && _d !== void 0 ? _d : [])
120
+ console.log((0, exceptions_1.exceptionLineOf)(exception));
54
121
  for (const gap of result.gaps)
55
122
  console.error((0, complete_1.completenessGapLineOf)(gap));
123
+ for (const hint of (_e = result.hints) !== null && _e !== void 0 ? _e : [])
124
+ console.log(hint);
56
125
  if (result.gaps.length > 0) {
57
- console.error(`${part} in ${product.name} is not design complete: ${result.gaps.length} gap(s)`);
126
+ console.error(`${what} in ${product.name} is not design complete: ${result.gaps.length} gap(s)`);
58
127
  return 1;
59
128
  }
60
- console.log(`${part} in ${product.name} is design complete`);
129
+ if (handoff) {
130
+ (0, handoff_1.recordHandoff)({ productDir: product.dir, part });
131
+ console.log(`${what} in ${product.name} is design complete and has the handoff status`);
132
+ return 0;
133
+ }
134
+ console.log(`${what} in ${product.name} is design complete`);
61
135
  return 0;
62
136
  });
63
137
  exports.designComplete = designComplete;
@@ -1 +1 @@
1
- {"version":3,"file":"complete-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/complete-command.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,yCAAmE;AACnE,uDAA8C;AAC9C,gDAAmE;AACnE,4CAA8C;AAEjC,QAAA,cAAc,GAAG,4CAA4C,CAAC;AAE3E,8HAA8H;AACvH,MAAM,cAAc,GAAG,CAAO,OAKpC,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAA,iBAAM,EAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,UAAU,IAAI,sBAAc,EAAE,CAAC;IAEvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAErB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAQ,EAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAElF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,2BAAS,EAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvG,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,IAAA,gCAAqB,EAAC,GAAG,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,4BAA4B,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;QAEjG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;IAE7D,OAAO,CAAC,CAAC;AACX,CAAC,CAAA,CAAC;AApEW,QAAA,cAAc,kBAoEzB"}
1
+ {"version":3,"file":"complete-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/complete-command.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,yCAAmE;AACnE,6CAAiE;AACjE,uCAAuD;AACvD,uDAA8C;AAC9C,gDAAmE;AACnE,4CAA8C;AAEjC,QAAA,cAAc,GACzB,iNAAiN,CAAC;AAEpN,8HAA8H;AACvH,MAAM,cAAc,GAAG,CAAO,OAKpC,EAAE,EAAE;;IACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAA,iBAAM,EAAC,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,UAAU,UAAU,IAAI,sBAAc,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAExE,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC;QACnE,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC;QAC9E,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACnE,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,EACjE,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAErB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAQ,EAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,SAAS,GACb,OAAO,OAAO,KAAK,QAAQ;YACzB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAA,6BAAgB,EAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mCAAI,EAAE,EAAE,CAAC,CAAC;QAEzF,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEzB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CACT,uBAAuB,OAAO,2EAA2E,CAC1G,CAAC;QAEF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAElF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAA,qBAAW,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAEvG,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBAExE,OAAO,CAAC,CAAC;YACX,CAAC;YAED,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;gBACxB,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,gBAAgB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,SAAS;YACX,CAAC;YAED,KAAK,MAAM,SAAS,IAAI,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAA,4BAAe,EAAC,SAAS,CAAC,CAAC,CAAC;YACzF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAA,gCAAqB,EAAC,GAAG,CAAC,CAAC,CAAC;YACzE,KAAK,MAAM,IAAI,IAAI,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,KAAK,CAAC,MAAM,uBAAuB,OAAO,CAAC,IAAI,gCAAgC,CAAC,CAAC;YAE/G,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,uBAAuB,OAAO,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAEtF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAElF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,2BAAS,EAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,IAAA,4BAAe,EAAC,SAAS,CAAC,CAAC,CAAC;IACzF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,IAAA,gCAAqB,EAAC,GAAG,CAAC,CAAC,CAAC;IACzE,KAAK,MAAM,IAAI,IAAI,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,4BAA4B,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;QAEjG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,IAAA,uBAAa,EAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,gDAAgD,CAAC,CAAC;QAExF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;IAE7D,OAAO,CAAC,CAAC;AACX,CAAC,CAAA,CAAC;AA/JW,QAAA,cAAc,kBA+JzB"}
@@ -1,16 +1,28 @@
1
1
  import { chromiumOf } from '../browser';
2
2
  import { DesignConfig } from '../paths';
3
- import { ResolvedProduct } from './resolve-product';
3
+ import { Browser } from '../thumb';
4
+ import { ResolvedPart, ResolvedProduct } from './resolve-product';
5
+ import { SketchVariant, SystemModules } from './system-modules';
6
+ import { ListedException } from './exceptions';
7
+ import { InventoryState } from './inventory-approval';
4
8
  /** One requirement of a part that `design complete` finds without evidence. `target` is `<part>[.<control>[.<requirement>]]`. */
5
9
  export type CompletenessGap = {
6
10
  code: string;
7
11
  target: string;
8
12
  detail: string;
9
13
  };
14
+ /** A box in the pixels of a drawn frame, as its `/__design/shot` picture shows it. */
15
+ export type FrameBox = {
16
+ x: number;
17
+ y: number;
18
+ width: number;
19
+ height: number;
20
+ };
10
21
  /**
11
22
  * An element of a drawn frame that looks interactive. `control` is a native control, an interactive role or a known
12
23
  * SDK control; `unclassified` has a pointer cursor or a matched `:hover` rule and sits in no control. `marked` is the
13
- * `data-et-control` that declares it, `within` every `data-et-control` around it, nearest first.
24
+ * `data-et-control` that declares it, `within` every `data-et-control` around it, nearest first. `owner` is the
25
+ * embedded part whose `data-et-part` root draws it, or `null` for the frame's own part.
14
26
  */
15
27
  export type FoundControl = {
16
28
  kind: 'control' | 'unclassified';
@@ -18,6 +30,37 @@ export type FoundControl = {
18
30
  path: string;
19
31
  marked: string | null;
20
32
  within: string[];
33
+ owner?: string | null;
34
+ box?: FrameBox | null;
35
+ };
36
+ /** A rule of the part's own stylesheet that sets `properties` on `path`, an element the embedded part `owner` draws. */
37
+ export type FoundOverride = {
38
+ owner: string;
39
+ selector: string;
40
+ path: string;
41
+ properties: string[];
42
+ };
43
+ /**
44
+ * A forced interaction on a drawn element: whether its box differs from rest, which colours change in one frame, and
45
+ * the classes of that interaction's variant no stylesheet defines when it does not differ.
46
+ */
47
+ export type SeenForce = {
48
+ interaction: string;
49
+ differs: boolean;
50
+ still?: string[];
51
+ undefinedClasses?: string[];
52
+ };
53
+ /**
54
+ * An option or menu item inside a drawn surface. `selected` is its ARIA selected, checked, pressed or current
55
+ * state, `look` its computed colours, so two options can be told apart without their text. `named` is set when an
56
+ * `aria-activedescendant` in the frame names its id, `keyboard` when it carries `data-active-source="keyboard"`.
57
+ */
58
+ export type SeenOption = {
59
+ selected: boolean;
60
+ look: string;
61
+ forced: SeenForce[];
62
+ named?: boolean;
63
+ keyboard?: boolean;
21
64
  };
22
65
  /** What one drawn frame of a state shows of the controls and surfaces its markup marks. */
23
66
  export type SeenFrame = {
@@ -25,20 +68,69 @@ export type SeenFrame = {
25
68
  interaction: string | null;
26
69
  controls: {
27
70
  id: string;
28
- forced: {
29
- interaction: string;
30
- differs: boolean;
31
- still?: string[];
32
- }[];
71
+ forced: SeenForce[];
72
+ selected?: boolean;
73
+ disabled?: boolean;
74
+ look?: string;
75
+ keyboard?: boolean;
76
+ box?: FrameBox | null;
33
77
  }[];
34
78
  surfaces: {
35
79
  id: string;
36
80
  shown: boolean;
81
+ options?: SeenOption[];
37
82
  }[];
38
83
  found?: FoundControl[];
84
+ overrides?: FoundOverride[];
85
+ };
86
+ export type DeclaredControl = {
87
+ kind: string;
88
+ input: string[];
89
+ part: string | null;
90
+ surfaces: Record<string, string>;
91
+ disabled: boolean;
39
92
  };
40
93
  /** The gaps of each part a control names in `part`, or why it could not be checked. */
41
94
  export type ReferencedParts = Record<string, CompletenessGap[] | string>;
95
+ export declare const declaredControlsOf: (value: unknown) => Record<string, DeclaredControl> | null;
96
+ /**
97
+ * Whether a state name shows an interaction: its last word, split at `-`, `_`, spaces and camelCase, or the whole name
98
+ * is hover, hovered, focus, focused, pressed, active or selected. `row-hover`, `collapseFocus` and `focus-visible`
99
+ * are; `active-only` and `inactive` are not.
100
+ */
101
+ export declare const isInteractionState: (state: string) => boolean;
102
+ /** Whether a part may draw interaction states: it is no page, and its `controls` declare a control of a checked kind. */
103
+ export declare const isControlPart: (options: {
104
+ part: string;
105
+ controls: unknown;
106
+ }) => boolean;
107
+ /**
108
+ * One `CONTROL-STATE` gap per element whose interaction states a part draws that is no control part. The element is
109
+ * the state name without its interaction words (`row-hover` names the row), or `control` when nothing is left.
110
+ */
111
+ export declare const controlStateGapsOf: (options: {
112
+ part: string;
113
+ controls: unknown;
114
+ states: string[];
115
+ }) => CompletenessGap[];
116
+ /** How much of its frame one rest state changes against `base`, the first state of its part, from 0 to 1. */
117
+ export type StateChange = {
118
+ state: string;
119
+ base: string;
120
+ share: number;
121
+ };
122
+ /**
123
+ * One hint per state of an element or component that is no control part whose pixels differ from its first state in
124
+ * under a tenth of the frame. Pages compose parts, so they get none; interaction states are left to `CONTROL-STATE`.
125
+ */
126
+ export declare const smallChangeHintsOf: (options: {
127
+ part: string;
128
+ controls: unknown;
129
+ changes: StateChange[];
130
+ }) => string[];
131
+ /** Whether a discovered element is an undeclared or unclassified finding of the part, not owned or declared. */
132
+ export declare const isFindingOf: (declared: Record<string, DeclaredControl>) => (found: FoundControl) => boolean;
133
+ export declare const findingKeyOf: (found: FoundControl) => string;
42
134
  /**
43
135
  * The gaps of one part, from its `controls` declaration, its state names and what each drawn frame showed.
44
136
  * A part that is not `reviewed` (its files differ from its merged.json hash) has no reviewed evidence at all.
@@ -51,23 +143,94 @@ export declare const completenessGapsOf: (options: {
51
143
  reviewed: boolean;
52
144
  grid?: unknown;
53
145
  referenced?: ReferencedParts;
146
+ inventory?: InventoryState;
54
147
  }) => CompletenessGap[];
55
148
  export declare const completenessGapLineOf: (gap: CompletenessGap) => string;
149
+ /** Whether a gap is a declared control that no state draws, or that lacks a drawn interaction, look or surface. */
150
+ export declare const isMissingStateGap: (gap: CompletenessGap) => boolean;
151
+ export declare const SDK_CONTROLS: string[];
152
+ export declare const PLAIN_CONTROL_SELECTOR: string;
153
+ /** Where a rest frame of a part is drawn: its state at a preset, or at a width, as `/__design/shot` takes it. */
154
+ export type FrameAddress = {
155
+ state: string;
156
+ preset: string | null;
157
+ width: number | null;
158
+ };
159
+ /**
160
+ * Draws every state of one part of the product, at rest and, unless `restOnly`, in each interaction it declares,
161
+ * once at its first preset or width, and answers what each frame showed, or why its module did not load as a string.
162
+ */
163
+ export declare const seePart: (options: {
164
+ product: ResolvedProduct;
165
+ part: ResolvedPart;
166
+ system: SystemModules;
167
+ base: string;
168
+ load: (id: string) => Promise<unknown>;
169
+ draw: <T>(job: (browser: Browser) => Promise<T>) => Promise<T>;
170
+ restOnly?: boolean;
171
+ sketch?: SketchVariant | null;
172
+ }) => Promise<string | {
173
+ definition: {
174
+ states?: unknown;
175
+ interactions?: unknown;
176
+ widths?: unknown;
177
+ controls?: unknown;
178
+ grid?: unknown;
179
+ } | undefined;
180
+ states: string[];
181
+ seen: SeenFrame[];
182
+ refused: string[];
183
+ changes: StateChange[];
184
+ addresses: FrameAddress[];
185
+ owner: ResolvedProduct | {
186
+ dir: string;
187
+ base: null;
188
+ };
189
+ hash: string;
190
+ }>;
191
+ /** The control ids a page draws at rest, the set its inventory approval holds. */
192
+ export declare const inventoryIdsOf: (frames: SeenFrame[]) => string[];
56
193
  /**
57
194
  * Draws every state of one part, at rest and in each interaction it declares, once at its first preset or width,
58
- * and answers the gaps of its `controls` declaration, or why it could not draw. A part a control names in `part`
59
- * is checked the same way, and its gaps fail the control.
195
+ * and answers the gaps of its `controls` declaration, or why it could not draw. A part a control names in `part`,
196
+ * and an embedded part whose `data-et-part` root draws a control, is checked the same way, and its gaps fail it -
197
+ * unless it is a part of the product's base, whose gaps stay its own.
198
+ * A page fails until the user approves its control inventory in Studio. An exception the user approved in Studio
199
+ * drops the gap it names until the part changes; a pending one still fails. With `sketch`, every part is drawn as
200
+ * that variant draws it, and a part the variant changes is not merged yet, so it never fails as unreviewed.
201
+ * A drawn control that no `controls` entry declares is a hint; the sketch check fails on one a sketch adds.
60
202
  */
61
203
  export declare const completenessOf: (options: {
62
204
  target: string;
63
205
  config: DesignConfig;
64
206
  product: ResolvedProduct;
65
207
  part: string;
208
+ sketch?: SketchVariant | null;
66
209
  chromiumOf?: typeof chromiumOf;
67
210
  }) => Promise<{
68
211
  gaps: CompletenessGap[];
212
+ exceptions?: ListedException[];
213
+ hints?: string[];
69
214
  } | {
70
215
  unavailable: string;
71
216
  } | {
72
217
  problem: string;
73
218
  }>;
219
+ /**
220
+ * Checks each named part as `completenessOf` does, sharing one server, browser and cache, and answers the gaps of
221
+ * each part, or why it could not be checked as a string.
222
+ */
223
+ export declare const partsCompletenessOf: (options: {
224
+ target: string;
225
+ config: DesignConfig;
226
+ product: ResolvedProduct;
227
+ parts: string[];
228
+ sketch?: SketchVariant | null;
229
+ chromiumOf?: typeof chromiumOf;
230
+ }) => Promise<{
231
+ gaps: Map<string, CompletenessGap[] | string>;
232
+ exceptions: ListedException[];
233
+ hints: Map<string, string[]>;
234
+ } | {
235
+ unavailable: string;
236
+ }>;