@ggui-ai/ui-gen 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/adapters/generation-dispatch.d.ts +6 -3
  2. package/dist/adapters/generation-dispatch.js +5161 -4312
  3. package/dist/adapters/generation-dispatch.js.map +1 -1
  4. package/dist/adapters/index.js +8 -5
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/advanced/index.d.ts +12 -8
  7. package/dist/advanced/index.js +4685 -3801
  8. package/dist/advanced/index.js.map +1 -1
  9. package/dist/blueprint-validator.js +8 -12
  10. package/dist/blueprint-validator.js.map +1 -1
  11. package/dist/boilerplate.d.ts +5 -2
  12. package/dist/boilerplate.js +120 -13
  13. package/dist/boilerplate.js.map +1 -1
  14. package/dist/check/index.d.ts +2 -2
  15. package/dist/check/index.js +72 -0
  16. package/dist/check/index.js.map +1 -1
  17. package/dist/compose.js +1 -1
  18. package/dist/compose.js.map +1 -1
  19. package/dist/{create-ui-generator-CCIeQaEe.d.ts → create-ui-generator-C8Ki9Wz1.d.ts} +18 -2
  20. package/dist/{design-mode-BHEE7flj.d.ts → design-mode-DLufhrNp.d.ts} +0 -6
  21. package/dist/{dispatch-BA5dJcg-.d.ts → dispatch-D2htzi9h.d.ts} +2 -2
  22. package/dist/evaluation/axis-checks/index.d.ts +4 -4
  23. package/dist/evaluation/axis-checks/index.js +347 -13
  24. package/dist/evaluation/axis-checks/index.js.map +1 -1
  25. package/dist/evaluation/axis-checks/registry.d.ts +2 -2
  26. package/dist/evaluation/axis-checks/registry.js +302 -1
  27. package/dist/evaluation/axis-checks/registry.js.map +1 -1
  28. package/dist/evaluation/index.d.ts +160 -8
  29. package/dist/evaluation/index.js +752 -81
  30. package/dist/evaluation/index.js.map +1 -1
  31. package/dist/fragments/index.js +1 -1
  32. package/dist/fragments/index.js.map +1 -1
  33. package/dist/{generate-8L_bc2iP.d.ts → generate-9IeNT4ZY.d.ts} +1 -1
  34. package/dist/harness/check/runtime-render/index.d.ts +3 -2
  35. package/dist/harness/check/runtime-render/index.js +8 -12
  36. package/dist/harness/check/runtime-render/index.js.map +1 -1
  37. package/dist/harness/index.d.ts +3 -2
  38. package/dist/harness/index.js +410 -255
  39. package/dist/harness/index.js.map +1 -1
  40. package/dist/harness/prompts.d.ts +2 -2
  41. package/dist/harness/prompts.js +7 -3
  42. package/dist/harness/prompts.js.map +1 -1
  43. package/dist/harness/result-types.d.ts +3 -3
  44. package/dist/harness/runtime.d.ts +13 -4
  45. package/dist/harness/runtime.js +131 -20
  46. package/dist/harness/runtime.js.map +1 -1
  47. package/dist/harness/types-public.d.ts +13 -2
  48. package/dist/harness/types-public.js +410 -255
  49. package/dist/harness/types-public.js.map +1 -1
  50. package/dist/harness/validator-trace-sink.d.ts +2 -2
  51. package/dist/index.d.ts +29 -7
  52. package/dist/index.js +4691 -3805
  53. package/dist/index.js.map +1 -1
  54. package/dist/patch.d.ts +3 -2
  55. package/dist/{prompts-k6m6reqe.d.ts → prompts-YU9piOgs.d.ts} +12 -46
  56. package/dist/styling-profile-CxfvV48g.d.ts +35 -0
  57. package/dist/tools/get-primitives-ts.d.ts +1 -1
  58. package/dist/tools/get-primitives-ts.js +1 -1
  59. package/dist/tools/get-primitives-ts.js.map +1 -1
  60. package/dist/{types-public-D24JLJgl.d.ts → types-public-DVSssdc-.d.ts} +39 -3
  61. package/dist/validation/index.d.ts +1 -1
  62. package/dist/validation/index.js +1 -1
  63. package/dist/validation/index.js.map +1 -1
  64. package/dist/workflows.d.ts +3 -2
  65. package/package.json +12 -12
  66. package/src/adapters/generation-dispatch.ts +6 -1
  67. package/src/boilerplate/free-design-prompt.ts +9 -0
  68. package/src/boilerplate/generate.ts +8 -1
  69. package/src/boilerplate/hard-sections.ts +45 -1
  70. package/src/boilerplate/styling-profile.ts +166 -0
  71. package/src/boilerplate/system-prompt.ts +22 -8
  72. package/src/boilerplate/templates/layouts/fullscreen-desktop.tsx.tmpl +5 -3
  73. package/src/boilerplate/templates/layouts/fullscreen-mobile.tsx.tmpl +3 -3
  74. package/src/boilerplate/templates/layouts/fullscreen-universal.tsx.tmpl +5 -3
  75. package/src/check/run-tier0.ts +154 -0
  76. package/src/contract-context.ts +28 -14
  77. package/src/create-harness.ts +4 -0
  78. package/src/create-ui-generator.ts +41 -2
  79. package/src/design-mode.ts +11 -1
  80. package/src/design-system-docs.ts +7 -4
  81. package/src/effort.ts +48 -0
  82. package/src/evaluation/axis-checks/checks/grid.ts +148 -0
  83. package/src/evaluation/axis-checks/checks/universal.ts +308 -0
  84. package/src/evaluation/axis-checks/dispatch.ts +78 -13
  85. package/src/evaluation/axis-checks/helpers.ts +12 -0
  86. package/src/evaluation/axis-checks/registry.ts +2 -0
  87. package/src/evaluation/design-identity.ts +96 -0
  88. package/src/evaluation/index.ts +17 -0
  89. package/src/evaluation/llm-evaluator.ts +13 -1
  90. package/src/evaluation/theme-css.ts +14 -0
  91. package/src/evaluation/types-public.ts +35 -1
  92. package/src/evaluation/visual-evaluator.ts +478 -45
  93. package/src/fragments/render.ts +1 -1
  94. package/src/harness/check/runtime-render/prepare-mockup.ts +18 -11
  95. package/src/harness/coding/init-session.ts +1 -0
  96. package/src/harness/coding/run-coding-turn.ts +6 -14
  97. package/src/harness/coding/run-eval-round.ts +31 -3
  98. package/src/harness/runtime.ts +10 -0
  99. package/src/harness/types-public.ts +11 -0
  100. package/src/index.ts +2 -0
  101. package/src/pin-fixtures.ts +98 -0
  102. package/src/run-check.ts +10 -10
  103. package/src/tools/get-primitives-ts.ts +1 -1
  104. package/src/tools.ts +2 -1
  105. package/src/validation/primitives.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  import { DataContract, JsonObject, PropsSpec, ActionSpec, StreamSpec } from '@ggui-ai/protocol';
2
- import { D as DesignMode } from '../design-mode-BHEE7flj.js';
3
- import { b as EvalResult, E as EvalIssue } from '../types-public-D24JLJgl.js';
2
+ import { D as DesignMode } from '../design-mode-DLufhrNp.js';
3
+ import { b as EvalResult, E as EvalIssue } from '../types-public-DVSssdc-.js';
4
4
  export { j as jsonSchemaTypeToTs } from '../json-schema-ts-CbB78b3n.js';
5
5
  import '../axes-CzLEMDeB.js';
6
6
  import '../types-BOvHNG7K.js';
@@ -1049,6 +1049,63 @@ function isGadgetExportImported(source, pkg, exportName) {
1049
1049
  }
1050
1050
  return false;
1051
1051
  }
1052
+ function detectComponentNeverReturns(sourceCode) {
1053
+ const sf = ts4.createSourceFile(
1054
+ "source.tsx",
1055
+ sourceCode,
1056
+ ts4.ScriptTarget.Latest,
1057
+ /* setParentNodes */
1058
+ true,
1059
+ ts4.ScriptKind.TSX
1060
+ );
1061
+ const isFunctionLike = (n) => ts4.isFunctionDeclaration(n) || ts4.isFunctionExpression(n) || ts4.isArrowFunction(n) || ts4.isMethodDeclaration(n) || ts4.isClassDeclaration(n) || ts4.isClassExpression(n);
1062
+ function resolveTopLevel(name) {
1063
+ for (const st of sf.statements) {
1064
+ if (ts4.isFunctionDeclaration(st) && st.name?.text === name) return st;
1065
+ if (ts4.isVariableStatement(st)) {
1066
+ for (const decl of st.declarationList.declarations) {
1067
+ if (ts4.isIdentifier(decl.name) && decl.name.text === name && decl.initializer !== void 0 && (ts4.isArrowFunction(decl.initializer) || ts4.isFunctionExpression(decl.initializer))) {
1068
+ return decl.initializer;
1069
+ }
1070
+ }
1071
+ }
1072
+ }
1073
+ return void 0;
1074
+ }
1075
+ let component;
1076
+ for (const st of sf.statements) {
1077
+ if (ts4.isFunctionDeclaration(st) && st.modifiers?.some((m) => m.kind === ts4.SyntaxKind.DefaultKeyword)) {
1078
+ component = st;
1079
+ break;
1080
+ }
1081
+ if (ts4.isExportAssignment(st) && st.isExportEquals !== true) {
1082
+ const expr = st.expression;
1083
+ if (ts4.isArrowFunction(expr) || ts4.isFunctionExpression(expr)) component = expr;
1084
+ else if (ts4.isIdentifier(expr)) component = resolveTopLevel(expr.text);
1085
+ break;
1086
+ }
1087
+ }
1088
+ if (component === void 0) return null;
1089
+ const body = component.body;
1090
+ if (body === void 0 || !ts4.isBlock(body)) return null;
1091
+ let returnsValue = false;
1092
+ let jsxStatementLine;
1093
+ const visit = (node) => {
1094
+ if (returnsValue) return;
1095
+ if (ts4.isReturnStatement(node)) {
1096
+ if (node.expression !== void 0) returnsValue = true;
1097
+ return;
1098
+ }
1099
+ if (jsxStatementLine === void 0 && ts4.isExpressionStatement(node) && (ts4.isJsxElement(node.expression) || ts4.isJsxFragment(node.expression) || ts4.isJsxSelfClosingElement(node.expression))) {
1100
+ jsxStatementLine = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line + 1;
1101
+ }
1102
+ node.forEachChild((child) => {
1103
+ if (!isFunctionLike(child)) visit(child);
1104
+ });
1105
+ };
1106
+ for (const st of body.statements) if (!isFunctionLike(st)) visit(st);
1107
+ return returnsValue ? null : { jsxStatementLine };
1108
+ }
1052
1109
  async function runTier0Checks(sourceCode, contract, buildErrors, gadgetTypes, designMode = DEFAULT_DESIGN_MODE) {
1053
1110
  const issues = [];
1054
1111
  const lines = sourceCode.split("\n");
@@ -1062,6 +1119,7 @@ async function runTier0Checks(sourceCode, contract, buildErrors, gadgetTypes, de
1062
1119
  tier: 0,
1063
1120
  result: "fail",
1064
1121
  category: "compile",
1122
+ subcategory: "build-error",
1065
1123
  severity: "critical",
1066
1124
  description: `Component failed to compile:
1067
1125
  ${errorDetail}`,
@@ -1134,6 +1192,7 @@ ${errorDetail}`,
1134
1192
  tier: 0,
1135
1193
  result: "fail",
1136
1194
  category: "imports",
1195
+ subcategory: "disallowed-package",
1137
1196
  severity: "critical",
1138
1197
  description: `Import from "${pkg}" is not allowed`,
1139
1198
  fix: `Only import from: ${describeAllowedImports()}`,
@@ -1466,6 +1525,19 @@ ${errorDetail}`,
1466
1525
  fix: "Add export default function Component(props: Props) { ... }"
1467
1526
  });
1468
1527
  }
1528
+ const neverReturns = detectComponentNeverReturns(sourceCode);
1529
+ if (neverReturns !== null) {
1530
+ issues.push({
1531
+ tier: 0,
1532
+ result: "fail",
1533
+ category: "compile",
1534
+ subcategory: "renders-nothing",
1535
+ severity: "critical",
1536
+ description: neverReturns.jsxStatementLine === void 0 ? "The component never returns its tree \u2014 it renders a blank frame" : `The component never returns its tree: the JSX at line ${neverReturns.jsxStatementLine} sits at statement position, so it is built and thrown away and the frame renders blank`,
1537
+ fix: "Wrap the tree in the return the boilerplate gave you: `return (` before the root element and `);` after it.",
1538
+ ...neverReturns.jsxStatementLine === void 0 ? {} : { line: neverReturns.jsxStatementLine }
1539
+ });
1540
+ }
1469
1541
  if (contract) {
1470
1542
  try {
1471
1543
  const contractIssues = validateAllContracts(sourceCode, contract);