@semacode/cli 2.3.0 → 3.0.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 (267) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +112 -41
  3. package/dist/agentContextPack.js +14 -10
  4. package/dist/agentEntryPoints.d.ts +5 -0
  5. package/dist/agentEntryPoints.js +102 -91
  6. package/dist/angular-consumer-standalone.d.ts +3 -1
  7. package/dist/angular-consumer-standalone.js +12 -8
  8. package/dist/bin.d.ts +6 -0
  9. package/dist/bin.js +130 -0
  10. package/dist/cliArgs.js +4 -4
  11. package/dist/cliControlError.d.ts +12 -0
  12. package/dist/cliControlError.js +47 -0
  13. package/dist/cliGrammar.d.ts +11 -0
  14. package/dist/cliGrammar.js +551 -0
  15. package/dist/cliHelp.d.ts +13 -0
  16. package/dist/cliHelp.js +19 -0
  17. package/dist/cliHelpTexto.d.ts +3 -0
  18. package/dist/cliHelpTexto.js +168 -0
  19. package/dist/cliRuntime.d.ts +2 -0
  20. package/dist/cliRuntime.js +31 -0
  21. package/dist/comandos.js +9 -22
  22. package/dist/contexto.js +5 -5
  23. package/dist/dev/index.d.ts +1 -0
  24. package/dist/dev/index.js +51 -9
  25. package/dist/discovery/catalog.js +3 -3
  26. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  27. package/dist/distribuicao/filesystemGlobal.js +701 -0
  28. package/dist/distribuicao/index.d.ts +7 -0
  29. package/dist/distribuicao/index.js +227 -0
  30. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  31. package/dist/distribuicao/launcherGlobal.js +643 -0
  32. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  33. package/dist/distribuicao/launcherWindows.js +326 -0
  34. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  35. package/dist/distribuicao/lockContextGlobal.js +17 -0
  36. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  37. package/dist/distribuicao/lockGlobal.js +520 -0
  38. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  39. package/dist/distribuicao/skillGlobal.js +652 -0
  40. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  41. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  42. package/dist/distribuicao/tipos.d.ts +50 -0
  43. package/dist/distribuicao/tipos.js +10 -0
  44. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  45. package/dist/distribuicao/versaoSemantica.js +62 -0
  46. package/dist/drift.part01.d.ts +34 -2
  47. package/dist/drift.part01.js +3 -0
  48. package/dist/drift.part04.d.ts +12 -2
  49. package/dist/drift.part04.js +89 -15
  50. package/dist/drift.part05.d.ts +2 -1
  51. package/dist/drift.part05.js +9 -6
  52. package/dist/drift.part06.d.ts +2 -1
  53. package/dist/drift.part06.js +115 -24
  54. package/dist/drift.part07.d.ts +11 -10
  55. package/dist/drift.part07.js +261 -255
  56. package/dist/drift.part08.d.ts +2 -1
  57. package/dist/drift.part08.js +35 -25
  58. package/dist/drift.part11.js +279 -32
  59. package/dist/drift.part12.d.ts +1 -1
  60. package/dist/drift.part12.js +196 -11
  61. package/dist/drift.part13.d.ts +18 -2
  62. package/dist/drift.part13.js +654 -76
  63. package/dist/drift.part14.js +21 -7
  64. package/dist/driftCacheCas.d.ts +43 -0
  65. package/dist/driftCacheCas.js +351 -0
  66. package/dist/driftCacheFilesystem.d.ts +64 -0
  67. package/dist/driftCacheFilesystem.js +313 -0
  68. package/dist/driftCacheModes.d.ts +38 -0
  69. package/dist/driftCacheModes.js +147 -0
  70. package/dist/driftCacheStore.d.ts +80 -0
  71. package/dist/driftCacheStore.js +603 -0
  72. package/dist/driftCatalogo.d.ts +65 -0
  73. package/dist/driftCatalogo.js +516 -0
  74. package/dist/driftEscopo.d.ts +21 -0
  75. package/dist/driftEscopo.js +647 -0
  76. package/dist/driftEscopoReferencias.d.ts +8 -0
  77. package/dist/driftEscopoReferencias.js +612 -0
  78. package/dist/driftOrcamento.d.ts +6 -0
  79. package/dist/driftOrcamento.js +20 -3
  80. package/dist/geracaoCore.js +4 -6
  81. package/dist/iaPrompts.d.ts +3 -3
  82. package/dist/iaPrompts.js +13 -14
  83. package/dist/index.d.ts +4 -1
  84. package/dist/index.js +6 -25
  85. package/dist/index.part01.d.ts +21 -14
  86. package/dist/index.part01.js +20 -165
  87. package/dist/index.part02.js +57 -43
  88. package/dist/index.part03.d.ts +23 -1
  89. package/dist/index.part03.js +83 -8
  90. package/dist/index.part04.d.ts +10 -2
  91. package/dist/index.part04.js +48 -14
  92. package/dist/index.part05.d.ts +1 -1
  93. package/dist/index.part05.js +109 -30
  94. package/dist/index.part06.js +34 -16
  95. package/dist/index.part07.js +31 -27
  96. package/dist/index.part08.d.ts +1 -1
  97. package/dist/index.part08.js +23 -28
  98. package/dist/init/templates.part01.js +393 -393
  99. package/dist/init/templates.part02.js +189 -189
  100. package/dist/initCommand.js +5 -1
  101. package/dist/initTemplatesBackend.js +73 -73
  102. package/dist/initTemplatesBase.js +7 -5
  103. package/dist/initTemplatesFlutter.js +137 -137
  104. package/dist/initTemplatesRuntime.js +350 -350
  105. package/dist/initTemplatesWeb.js +309 -309
  106. package/dist/pipelineConteudo/command.d.ts +1 -0
  107. package/dist/pipelineConteudo/command.js +4 -32
  108. package/dist/pipelineConteudo/help.d.ts +2 -0
  109. package/dist/pipelineConteudo/help.js +33 -0
  110. package/dist/profileAuthorCommand.js +3 -7
  111. package/dist/profileCommand.js +3 -7
  112. package/dist/projeto.d.ts +1 -1
  113. package/dist/projetoCarregar.d.ts +2 -2
  114. package/dist/projetoCarregar.js +69 -28
  115. package/dist/projetoCatalogo.d.ts +8 -0
  116. package/dist/projetoCatalogo.js +164 -0
  117. package/dist/projetoOrigens.d.ts +2 -0
  118. package/dist/projetoOrigens.js +65 -9
  119. package/dist/projetoTipos.d.ts +15 -5
  120. package/dist/resultadoCli.d.ts +20 -0
  121. package/dist/resultadoCli.js +57 -0
  122. package/dist/saidaCli.d.ts +35 -0
  123. package/dist/saidaCli.js +118 -0
  124. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  125. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  126. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  127. package/dist/sistemasInterativos/engineObservation.js +438 -0
  128. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  129. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  130. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  131. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  132. package/dist/sistemasInterativos/operations.d.ts +4 -39
  133. package/dist/sistemasInterativos/operations.js +5 -1164
  134. package/dist/skillCommand.d.ts +5 -0
  135. package/dist/skillCommand.js +88 -0
  136. package/dist/sync/index.js +35 -35
  137. package/docs/README.md +11 -7
  138. package/docs/ai-integration.md +18 -11
  139. package/docs/ai-onboarding.md +81 -62
  140. package/docs/ai-workflow.md +10 -4
  141. package/docs/auth.md +26 -26
  142. package/docs/cli.md +197 -79
  143. package/docs/commands.md +30 -6
  144. package/docs/database.md +15 -15
  145. package/docs/deploy.md +54 -41
  146. package/docs/documentation.md +11 -10
  147. package/docs/drift-cache.md +108 -0
  148. package/docs/env.md +16 -16
  149. package/docs/frontend.md +41 -41
  150. package/docs/getting-started.md +82 -57
  151. package/docs/i18n.md +15 -15
  152. package/docs/repositories.md +60 -43
  153. package/docs/rollback.md +38 -31
  154. package/docs/security.md +54 -32
  155. package/docs/sistemas-interativos.md +27 -27
  156. package/docs/support.md +8 -8
  157. package/docs/testing.md +123 -17
  158. package/docs/vocabulary.md +29 -29
  159. package/exemplos/agendamento.sema +1 -1
  160. package/exemplos/assinatura.sema +1 -1
  161. package/exemplos/auditoria.sema +1 -1
  162. package/exemplos/autenticacao.sema +1 -1
  163. package/exemplos/author_obra_comum.sema +1 -1
  164. package/exemplos/author_tema_sensivel.sema +1 -1
  165. package/exemplos/automacao.sema +1 -1
  166. package/exemplos/cadastro_usuario.sema +1 -1
  167. package/exemplos/calculadora.sema +1 -1
  168. package/exemplos/crud_simples.sema +1 -1
  169. package/exemplos/estoque.sema +1 -1
  170. package/exemplos/exportacao.sema +1 -1
  171. package/exemplos/fila.sema +1 -1
  172. package/exemplos/integracao_externa.sema +1 -1
  173. package/exemplos/multi_tenant.sema +1 -1
  174. package/exemplos/notificacao.sema +1 -1
  175. package/exemplos/operacao_estrategia.sema +132 -132
  176. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  177. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  178. package/exemplos/operacao_estrategia_gates.sema +106 -106
  179. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  180. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  181. package/exemplos/pagamento.sema +1 -1
  182. package/exemplos/pagamento_dominio.sema +1 -1
  183. package/exemplos/pedido.sema +1 -1
  184. package/exemplos/permissao.sema +1 -1
  185. package/exemplos/persistencia_vendor_first.sema +1 -1
  186. package/exemplos/profile_conversas.sema +165 -165
  187. package/exemplos/profile_game.sema +1 -1
  188. package/exemplos/profile_legal.sema +1 -1
  189. package/exemplos/profile_ops.sema +1 -1
  190. package/exemplos/profile_research.sema +1 -1
  191. package/exemplos/profile_software.sema +1 -1
  192. package/exemplos/profile_workflow_n8n.sema +1 -1
  193. package/exemplos/relatorio.sema +1 -1
  194. package/exemplos/replica_analitica_erp.sema +1 -1
  195. package/exemplos/testes_embutidos.sema +1 -1
  196. package/exemplos/tratamento_erro.sema +1 -1
  197. package/exemplos/upload_arquivo.sema +1 -1
  198. package/exemplos/webhook.sema +1 -1
  199. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  200. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  201. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  202. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  203. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  204. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  205. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  206. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  207. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  208. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  209. package/package.json +7 -2
  210. package/scripts/postinstall.mjs +148 -0
  211. package/skills/sema/SKILL.md +199 -0
  212. package/skills/sema/agents/openai.yaml +4 -0
  213. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  214. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  215. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  216. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  217. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  218. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  219. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  220. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  221. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  222. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  223. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  224. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  225. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  226. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  227. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  228. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  229. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  267. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -8,171 +8,171 @@ export function arquivosInitTemplatesFlutter(template, arquivosBase) {
8
8
  arquivos = [
9
9
  {
10
10
  caminhoRelativo: "sema.config.json",
11
- conteudo: `{
12
- "origens": ["./contratos"],
13
- "saida": "./generated",
14
- "alvos": ["dart"],
15
- "alvoPadrao": "dart",
16
- "estruturaSaida": "modulos",
17
- "framework": "base",
18
- "modoEstrito": true,
19
- "diretoriosCodigo": ["./lib"],
20
- "fontesLegado": ["flutter-consumer", "dart"],
21
- "diretoriosSaidaPorAlvo": {
22
- "dart": "./generated/dart"
23
- },
24
- "convencoesGeracaoPorProjeto": "base"
25
- }
11
+ conteudo: `{
12
+ "origens": ["./contratos"],
13
+ "saida": "./generated",
14
+ "alvos": ["dart"],
15
+ "alvoPadrao": "dart",
16
+ "estruturaSaida": "modulos",
17
+ "framework": "base",
18
+ "modoEstrito": true,
19
+ "diretoriosCodigo": ["./lib"],
20
+ "fontesLegado": ["flutter-consumer", "dart"],
21
+ "diretoriosSaidaPorAlvo": {
22
+ "dart": "./generated/dart"
23
+ },
24
+ "convencoesGeracaoPorProjeto": "base"
25
+ }
26
26
  `,
27
27
  },
28
28
  {
29
29
  caminhoRelativo: "pubspec.yaml",
30
- conteudo: `name: sema_flutter_consumer
31
- description: Starter Flutter consumer IA-first com Sema
32
- publish_to: "none"
33
-
34
- environment:
35
- sdk: ">=3.3.0 <4.0.0"
36
-
37
- dependencies:
38
- flutter:
39
- sdk: flutter
40
- go_router: ^14.0.0
30
+ conteudo: `name: sema_flutter_consumer
31
+ description: Starter Flutter consumer IA-first com Sema
32
+ publish_to: "none"
33
+
34
+ environment:
35
+ sdk: ">=3.3.0 <4.0.0"
36
+
37
+ dependencies:
38
+ flutter:
39
+ sdk: flutter
40
+ go_router: ^14.0.0
41
41
  `,
42
42
  },
43
43
  {
44
44
  caminhoRelativo: "contratos/showroom_consumer.sema",
45
- conteudo: `module showroom.consumer {
46
- task fetch_showroom_ranking {
47
- input {
48
- }
49
- output {
50
- resultado: Json
51
- }
52
- impl {
53
- dart: lib.sema_consumer_bridge.semaFetchShowroomRanking
54
- }
55
- vinculos {
56
- arquivo: "lib/sema_consumer_bridge.dart"
57
- simbolo: lib.sema_consumer_bridge.semaFetchShowroomRanking
58
- superficie: "/ranking"
59
- arquivo: "lib/router.dart"
60
- arquivo: "lib/screens/ranking_screen.dart"
61
- }
62
- guarantees {
63
- resultado existe
64
- }
65
- }
66
- }
45
+ conteudo: `module showroom.consumer {
46
+ task fetch_showroom_ranking {
47
+ input {
48
+ }
49
+ output {
50
+ resultado: Json
51
+ }
52
+ impl {
53
+ dart: lib.sema_consumer_bridge.semaFetchShowroomRanking
54
+ }
55
+ vinculos {
56
+ arquivo: "lib/sema_consumer_bridge.dart"
57
+ simbolo: lib.sema_consumer_bridge.semaFetchShowroomRanking
58
+ superficie: "/ranking"
59
+ arquivo: "lib/router.dart"
60
+ arquivo: "lib/screens/ranking_screen.dart"
61
+ }
62
+ guarantees {
63
+ resultado existe
64
+ }
65
+ }
66
+ }
67
67
  `,
68
68
  },
69
69
  {
70
70
  caminhoRelativo: "lib/sema_consumer_bridge.dart",
71
- conteudo: `Future<Map<String, dynamic>> semaFetchShowroomRanking() async {
72
- return {
73
- "ranking": [
74
- {"clube": "Tigres do Norte", "pontos": 33},
75
- {"clube": "Porto Azul", "pontos": 31},
76
- {"clube": "Galo de Ouro", "pontos": 28},
77
- ],
78
- };
79
- }
71
+ conteudo: `Future<Map<String, dynamic>> semaFetchShowroomRanking() async {
72
+ return {
73
+ "ranking": [
74
+ {"clube": "Tigres do Norte", "pontos": 33},
75
+ {"clube": "Porto Azul", "pontos": 31},
76
+ {"clube": "Galo de Ouro", "pontos": 28},
77
+ ],
78
+ };
79
+ }
80
80
  `,
81
81
  },
82
82
  {
83
83
  caminhoRelativo: "lib/router.dart",
84
- conteudo: `import "package:go_router/go_router.dart";
85
- import "package:flutter/widgets.dart";
86
- import "screens/ranking_screen.dart";
87
-
88
- final appRouter = GoRouter(
89
- routes: [
90
- GoRoute(
91
- path: "/ranking",
92
- builder: (BuildContext context, GoRouterState state) => const RankingScreen(),
93
- ),
94
- ],
95
- );
84
+ conteudo: `import "package:go_router/go_router.dart";
85
+ import "package:flutter/widgets.dart";
86
+ import "screens/ranking_screen.dart";
87
+
88
+ final appRouter = GoRouter(
89
+ routes: [
90
+ GoRoute(
91
+ path: "/ranking",
92
+ builder: (BuildContext context, GoRouterState state) => const RankingScreen(),
93
+ ),
94
+ ],
95
+ );
96
96
  `,
97
97
  },
98
98
  {
99
99
  caminhoRelativo: "lib/screens/ranking_screen.dart",
100
- conteudo: `import "package:flutter/widgets.dart";
101
- import "../sema_consumer_bridge.dart";
102
-
103
- class RankingScreen extends StatefulWidget {
104
- const RankingScreen({super.key});
105
-
106
- @override
107
- State<RankingScreen> createState() => _RankingScreenState();
108
- }
109
-
110
- class _RankingScreenState extends State<RankingScreen> {
111
- List<Map<String, dynamic>> ranking = const [];
112
-
113
- @override
114
- void initState() {
115
- super.initState();
116
- semaFetchShowroomRanking().then((payload) {
117
- final itens = (payload["ranking"] as List<dynamic>? ?? const [])
118
- .whereType<Map<String, dynamic>>()
119
- .toList();
120
- if (!mounted) return;
121
- setState(() {
122
- ranking = itens;
123
- });
124
- });
125
- }
126
-
127
- @override
128
- Widget build(BuildContext context) {
129
- return ListView(
130
- children: [
131
- const Padding(
132
- padding: EdgeInsets.all(16),
133
- child: Text("Ranking showroom"),
134
- ),
135
- ...ranking.map((item) => Padding(
136
- padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
137
- child: Text("\${item["clube"]} - \${item["pontos"]} pts"),
138
- )),
139
- ],
140
- );
141
- }
142
- }
100
+ conteudo: `import "package:flutter/widgets.dart";
101
+ import "../sema_consumer_bridge.dart";
102
+
103
+ class RankingScreen extends StatefulWidget {
104
+ const RankingScreen({super.key});
105
+
106
+ @override
107
+ State<RankingScreen> createState() => _RankingScreenState();
108
+ }
109
+
110
+ class _RankingScreenState extends State<RankingScreen> {
111
+ List<Map<String, dynamic>> ranking = const [];
112
+
113
+ @override
114
+ void initState() {
115
+ super.initState();
116
+ semaFetchShowroomRanking().then((payload) {
117
+ final itens = (payload["ranking"] as List<dynamic>? ?? const [])
118
+ .whereType<Map<String, dynamic>>()
119
+ .toList();
120
+ if (!mounted) return;
121
+ setState(() {
122
+ ranking = itens;
123
+ });
124
+ });
125
+ }
126
+
127
+ @override
128
+ Widget build(BuildContext context) {
129
+ return ListView(
130
+ children: [
131
+ const Padding(
132
+ padding: EdgeInsets.all(16),
133
+ child: Text("Ranking showroom"),
134
+ ),
135
+ ...ranking.map((item) => Padding(
136
+ padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
137
+ child: Text("\${item["clube"]} - \${item["pontos"]} pts"),
138
+ )),
139
+ ],
140
+ );
141
+ }
142
+ }
143
143
  `,
144
144
  },
145
145
  {
146
146
  caminhoRelativo: "lib/main.dart",
147
- conteudo: `import "package:flutter/material.dart";
148
- import "router.dart";
149
-
150
- void main() {
151
- runApp(const ShowroomApp());
152
- }
153
-
154
- class ShowroomApp extends StatelessWidget {
155
- const ShowroomApp({super.key});
156
-
157
- @override
158
- Widget build(BuildContext context) {
159
- return MaterialApp.router(
160
- routerConfig: appRouter,
161
- );
162
- }
163
- }
147
+ conteudo: `import "package:flutter/material.dart";
148
+ import "router.dart";
149
+
150
+ void main() {
151
+ runApp(const ShowroomApp());
152
+ }
153
+
154
+ class ShowroomApp extends StatelessWidget {
155
+ const ShowroomApp({super.key});
156
+
157
+ @override
158
+ Widget build(BuildContext context) {
159
+ return MaterialApp.router(
160
+ routerConfig: appRouter,
161
+ );
162
+ }
163
+ }
164
164
  `,
165
165
  },
166
166
  {
167
167
  caminhoRelativo: "README.md",
168
- conteudo: `# Starter Flutter Consumer + Sema
169
-
170
- - Contratos em \`contratos/\`
171
- - Bridge consumer canonico em \`lib/sema_consumer_bridge.dart\`
172
- - Rotas consumer em \`lib/router.dart\`
173
- - Superficies consumer em \`lib/screens/\`
174
- - O slice oficial desta fase e \`consumer bridge + router/screen surfaces\`
175
- - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual diff
168
+ conteudo: `# Starter Flutter Consumer + Sema
169
+
170
+ - Contratos em \`contratos/\`
171
+ - Bridge consumer canonico em \`lib/sema_consumer_bridge.dart\`
172
+ - Rotas consumer em \`lib/router.dart\`
173
+ - Superficies consumer em \`lib/screens/\`
174
+ - O slice oficial desta fase e \`consumer bridge + router/screen surfaces\`
175
+ - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual diff
176
176
  `,
177
177
  },
178
178
  ];