@yss123/cage-cli 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/README.md +47 -3
  2. package/bin/cage.js +5 -0
  3. package/bin/create-cage-app.js +5 -0
  4. package/dist/analyze.d.ts +16 -0
  5. package/dist/analyze.js +18 -2
  6. package/dist/analyze.js.map +1 -1
  7. package/dist/approval-tree.d.ts +88 -0
  8. package/dist/approval-tree.js +18 -0
  9. package/dist/approval-tree.js.map +1 -0
  10. package/dist/baseline.d.ts +8 -0
  11. package/dist/baseline.js +13 -0
  12. package/dist/baseline.js.map +1 -1
  13. package/dist/bootstrap.d.ts +20 -0
  14. package/dist/bootstrap.js +75 -0
  15. package/dist/bootstrap.js.map +1 -0
  16. package/dist/budget.d.ts +7 -0
  17. package/dist/budget.js +49 -5
  18. package/dist/budget.js.map +1 -1
  19. package/dist/capabilities.d.ts +38 -0
  20. package/dist/capabilities.js +148 -0
  21. package/dist/capabilities.js.map +1 -0
  22. package/dist/config.d.ts +31 -2
  23. package/dist/config.js +22 -0
  24. package/dist/config.js.map +1 -1
  25. package/dist/context.d.ts +14 -0
  26. package/dist/context.js +35 -2
  27. package/dist/context.js.map +1 -1
  28. package/dist/create-prompt.d.ts +7 -0
  29. package/dist/create-prompt.js +12 -0
  30. package/dist/create-prompt.js.map +1 -1
  31. package/dist/create.d.ts +21 -1
  32. package/dist/create.js +23 -1
  33. package/dist/create.js.map +1 -1
  34. package/dist/derive.d.ts +23 -0
  35. package/dist/derive.js +40 -0
  36. package/dist/derive.js.map +1 -1
  37. package/dist/dev.d.ts +6 -0
  38. package/dist/dev.js +11 -0
  39. package/dist/dev.js.map +1 -1
  40. package/dist/doctor.d.ts +98 -0
  41. package/dist/doctor.js +93 -0
  42. package/dist/doctor.js.map +1 -0
  43. package/dist/env.d.ts +6 -0
  44. package/dist/env.js +11 -0
  45. package/dist/env.js.map +1 -1
  46. package/dist/findings.d.ts +27 -0
  47. package/dist/findings.js +20 -0
  48. package/dist/findings.js.map +1 -1
  49. package/dist/gen/contracts.d.ts +28 -0
  50. package/dist/gen/contracts.js +52 -12
  51. package/dist/gen/contracts.js.map +1 -1
  52. package/dist/gen/index.d.ts +26 -0
  53. package/dist/gen/index.js +69 -1
  54. package/dist/gen/index.js.map +1 -1
  55. package/dist/gen/zod-code.d.ts +42 -0
  56. package/dist/gen/zod-code.js +178 -16
  57. package/dist/gen/zod-code.js.map +1 -1
  58. package/dist/graph-approvals.d.ts +70 -0
  59. package/dist/graph-approvals.js +93 -0
  60. package/dist/graph-approvals.js.map +1 -0
  61. package/dist/graph-business.d.ts +135 -0
  62. package/dist/graph-business.js +404 -0
  63. package/dist/graph-business.js.map +1 -0
  64. package/dist/graph-command.d.ts +17 -0
  65. package/dist/graph-command.js +21 -0
  66. package/dist/graph-command.js.map +1 -1
  67. package/dist/graph-model.d.ts +44 -0
  68. package/dist/graph-model.js +36 -3
  69. package/dist/graph-model.js.map +1 -1
  70. package/dist/graph-presentation.d.ts +16 -0
  71. package/dist/graph-presentation.js +10 -1
  72. package/dist/graph-presentation.js.map +1 -1
  73. package/dist/graph-query.d.ts +95 -0
  74. package/dist/graph-query.js +62 -0
  75. package/dist/graph-query.js.map +1 -1
  76. package/dist/graph-relations.d.ts +20 -0
  77. package/dist/graph-relations.js +42 -10
  78. package/dist/graph-relations.js.map +1 -1
  79. package/dist/graph-search.d.ts +35 -0
  80. package/dist/graph-search.js +36 -0
  81. package/dist/graph-search.js.map +1 -1
  82. package/dist/graph-snapshot.d.ts +26 -0
  83. package/dist/graph-snapshot.js +30 -1
  84. package/dist/graph-snapshot.js.map +1 -1
  85. package/dist/graph.d.ts +13 -2
  86. package/dist/graph.js +61 -4
  87. package/dist/graph.js.map +1 -1
  88. package/dist/impact.d.ts +50 -0
  89. package/dist/impact.js +62 -2
  90. package/dist/impact.js.map +1 -1
  91. package/dist/index.d.ts +10 -0
  92. package/dist/index.js +10 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/init.d.ts +12 -0
  95. package/dist/init.js +15 -0
  96. package/dist/init.js.map +1 -1
  97. package/dist/load.d.ts +10 -0
  98. package/dist/load.js +15 -0
  99. package/dist/load.js.map +1 -1
  100. package/dist/main.d.ts +6 -0
  101. package/dist/main.js +93 -5
  102. package/dist/main.js.map +1 -1
  103. package/dist/migrate.d.ts +12 -0
  104. package/dist/migrate.js +17 -0
  105. package/dist/migrate.js.map +1 -1
  106. package/dist/ontology.d.ts +67 -2
  107. package/dist/ontology.js +94 -4
  108. package/dist/ontology.js.map +1 -1
  109. package/dist/process-rules.d.ts +21 -0
  110. package/dist/process-rules.js +100 -0
  111. package/dist/process-rules.js.map +1 -0
  112. package/dist/process.d.ts +32 -0
  113. package/dist/process.js +32 -0
  114. package/dist/process.js.map +1 -1
  115. package/dist/project-structure.d.ts +5 -0
  116. package/dist/project-structure.js +10 -0
  117. package/dist/project-structure.js.map +1 -1
  118. package/dist/registration.d.ts +16 -0
  119. package/dist/registration.js +56 -0
  120. package/dist/registration.js.map +1 -0
  121. package/dist/rules.d.ts +52 -0
  122. package/dist/rules.js +58 -0
  123. package/dist/rules.js.map +1 -1
  124. package/dist/runtime-diagnostics.d.ts +27 -0
  125. package/dist/runtime-diagnostics.js +60 -0
  126. package/dist/runtime-diagnostics.js.map +1 -0
  127. package/dist/snapshots.d.ts +40 -0
  128. package/dist/snapshots.js +62 -0
  129. package/dist/snapshots.js.map +1 -0
  130. package/dist/static-check.d.ts +33 -0
  131. package/dist/static-check.js +37 -1
  132. package/dist/static-check.js.map +1 -1
  133. package/dist/sync.d.ts +11 -0
  134. package/dist/sync.js +66 -9
  135. package/dist/sync.js.map +1 -1
  136. package/dist/upgrade.d.ts +16 -0
  137. package/dist/upgrade.js +21 -0
  138. package/dist/upgrade.js.map +1 -1
  139. package/dist/verify.d.ts +14 -0
  140. package/dist/verify.js +19 -0
  141. package/dist/verify.js.map +1 -1
  142. package/dist/version.js +5 -0
  143. package/dist/version.js.map +1 -1
  144. package/graph-ui/app.js +321 -27
  145. package/graph-ui/approval-flow.js +185 -0
  146. package/graph-ui/approval-parallel.js +110 -0
  147. package/graph-ui/approval-tree.js +17 -0
  148. package/graph-ui/business.css +1011 -0
  149. package/graph-ui/business.js +566 -0
  150. package/graph-ui/flowchart-interaction.js +177 -0
  151. package/graph-ui/flowchart.js +1059 -0
  152. package/graph-ui/graph-approvals.js +92 -0
  153. package/graph-ui/graph-business.js +403 -0
  154. package/graph-ui/graph-model.js +36 -3
  155. package/graph-ui/graph-relations.js +42 -10
  156. package/graph-ui/graph-search.js +36 -0
  157. package/graph-ui/index.html +26 -12
  158. package/graph-ui/model.js +28 -0
  159. package/graph-ui/relations.js +4 -0
  160. package/graph-ui/structure.js +44 -0
  161. package/graph-ui/style.css +12 -0
  162. package/package.json +6 -4
  163. package/templates/app/.dockerignore +2 -0
  164. package/templates/app/.env.example +10 -0
  165. package/templates/app/AGENTS.md +50 -10
  166. package/templates/app/README.md +9 -5
  167. package/templates/app/_gitignore +1 -0
  168. package/templates/app/apps/api/package.json +2 -2
  169. package/templates/app/apps/api/src/main.ts +5 -1
  170. package/templates/app/apps/api/src/worker.ts +3 -0
  171. package/templates/app/apps/web/index.html +1 -0
  172. package/templates/app/apps/web/package.json +7 -3
  173. package/templates/app/apps/web/src/app/app.tsx +122 -12
  174. package/templates/app/apps/web/src/app/styles/global.css +88 -8
  175. package/templates/app/apps/web/src/app/use-session.ts +43 -0
  176. package/templates/app/apps/web/src/app/workspace-layout.tsx +58 -19
  177. package/templates/app/apps/web/src/main.tsx +5 -0
  178. package/templates/app/apps/web/src/modules/approval/components/task-operation-dialog.tsx +61 -0
  179. package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +13 -5
  180. package/templates/app/apps/web/src/modules/approval/index.ts +4 -0
  181. package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +89 -38
  182. package/templates/app/apps/web/src/modules/approval/pages/approval-tasks.css +18 -0
  183. package/templates/app/apps/web/src/modules/auth/index.ts +4 -0
  184. package/templates/app/apps/web/src/modules/auth/pages/login-page.tsx +12 -0
  185. package/templates/app/apps/web/src/modules/inventory/index.ts +4 -0
  186. package/templates/app/apps/web/src/modules/inventory/pages/inventory-page.tsx +29 -1
  187. package/templates/app/apps/web/src/modules/purchase/components/approval-history.tsx +67 -0
  188. package/templates/app/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
  189. package/templates/app/apps/web/src/modules/purchase/components/order-reviewers.tsx +38 -0
  190. package/templates/app/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
  191. package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
  192. package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +32 -3
  193. package/templates/app/apps/web/src/modules/purchase/index.ts +5 -0
  194. package/templates/app/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
  195. package/templates/app/apps/web/src/modules/purchase/pages/purchase-intelligence.css +17 -0
  196. package/templates/app/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +156 -0
  197. package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +54 -22
  198. package/templates/app/apps/web/src/modules/workspace/index.ts +5 -0
  199. package/templates/app/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
  200. package/templates/app/apps/web/src/shared/hooks/use-command.ts +13 -0
  201. package/templates/app/apps/web/src/shared/lib/error-message.ts +15 -1
  202. package/templates/app/apps/web/src/shared/lib/navigation.ts +21 -0
  203. package/templates/app/apps/web/src/shared/ui/approval-member-picker.css +10 -0
  204. package/templates/app/apps/web/src/shared/ui/approval-member-picker.tsx +51 -0
  205. package/templates/app/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
  206. package/templates/app/apps/web/src/shared/ui/assistant-panel.css +134 -0
  207. package/templates/app/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
  208. package/templates/app/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
  209. package/templates/app/apps/web/src/shared/ui/attachment-upload.css +28 -0
  210. package/templates/app/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
  211. package/templates/app/apps/web/src/shared/ui/notice.tsx +7 -0
  212. package/templates/app/apps/web/src/shared/ui/page-heading.tsx +7 -0
  213. package/templates/app/apps/web/src/shared/ui/page-state.css +47 -0
  214. package/templates/app/apps/web/src/shared/ui/page-state.tsx +76 -0
  215. package/templates/app/apps/web/src/shared/ui/require-capability.tsx +34 -0
  216. package/templates/app/apps/web/vite.config.ts +5 -0
  217. package/templates/app/cage.config.json +23 -0
  218. package/templates/app/db/migrations/0002_draft.sql +12 -0
  219. package/templates/app/db/migrations/0003_draft.sql +8 -0
  220. package/templates/app/db/migrations/0004_draft.sql +27 -0
  221. package/templates/app/deploy/nginx.conf +52 -0
  222. package/templates/app/docs/ai/README.md +28 -2
  223. package/templates/app/docs/ai/approvals.md +260 -0
  224. package/templates/app/docs/ai/architecture.md +26 -0
  225. package/templates/app/docs/ai/commenting.md +203 -0
  226. package/templates/app/docs/ai/diagnostics.md +80 -0
  227. package/templates/app/docs/ai/files.md +93 -0
  228. package/templates/app/docs/ai/intelligence.md +348 -0
  229. package/templates/app/docs/ai/ontology-context.md +59 -4
  230. package/templates/app/docs/ai/primitives.md +34 -1
  231. package/templates/app/docs/ai/project-structure.md +8 -3
  232. package/templates/app/docs/ai/purchase-example.md +35 -7
  233. package/templates/app/docs/ai/recipes.md +10 -2
  234. package/templates/app/docs/ai/routing.md +86 -0
  235. package/templates/app/docs/ai/troubleshooting.md +5 -0
  236. package/templates/app/docs/ai/workflow.md +24 -11
  237. package/templates/app/docs/errors/CAGE-AI-001.md +61 -0
  238. package/templates/app/docs/errors/CAGE-APPR-001.md +13 -9
  239. package/templates/app/docs/errors/CAGE-APPR-002.md +2 -2
  240. package/templates/app/docs/errors/CAGE-APPR-003.md +1 -1
  241. package/templates/app/docs/errors/CAGE-APPR-004.md +4 -4
  242. package/templates/app/docs/errors/CAGE-APPR-005.md +4 -4
  243. package/templates/app/docs/errors/CAGE-APPR-006.md +29 -8
  244. package/templates/app/docs/errors/CAGE-APPR-007.md +9 -7
  245. package/templates/app/docs/errors/CAGE-APPR-010.md +5 -5
  246. package/templates/app/docs/errors/CAGE-AUDIT-001.md +53 -0
  247. package/templates/app/docs/errors/CAGE-AUTH-001.md +1 -1
  248. package/templates/app/docs/errors/CAGE-BIZ-001.md +51 -0
  249. package/templates/app/docs/errors/CAGE-BIZ-002.md +49 -0
  250. package/templates/app/docs/errors/CAGE-BUDGET-001.md +1 -1
  251. package/templates/app/docs/errors/CAGE-BUDGET-002.md +1 -1
  252. package/templates/app/docs/errors/CAGE-BUDGET-003.md +1 -1
  253. package/templates/app/docs/errors/CAGE-CMD-002.md +1 -1
  254. package/templates/app/docs/errors/CAGE-CMD-003.md +1 -1
  255. package/templates/app/docs/errors/CAGE-CONN-001.md +3 -3
  256. package/templates/app/docs/errors/CAGE-CONN-002.md +1 -1
  257. package/templates/app/docs/errors/CAGE-CONN-003.md +1 -1
  258. package/templates/app/docs/errors/CAGE-CONN-004.md +1 -1
  259. package/templates/app/docs/errors/CAGE-CONN-005.md +1 -1
  260. package/templates/app/docs/errors/CAGE-CONN-006.md +1 -1
  261. package/templates/app/docs/errors/CAGE-CONN-007.md +6 -6
  262. package/templates/app/docs/errors/CAGE-CONN-008.md +5 -5
  263. package/templates/app/docs/errors/CAGE-CONN-009.md +6 -6
  264. package/templates/app/docs/errors/CAGE-CONN-010.md +6 -6
  265. package/templates/app/docs/errors/CAGE-CONN-011.md +1 -1
  266. package/templates/app/docs/errors/CAGE-CONN-012.md +1 -1
  267. package/templates/app/docs/errors/CAGE-CONN-013.md +49 -0
  268. package/templates/app/docs/errors/CAGE-CONN-014.md +48 -0
  269. package/templates/app/docs/errors/CAGE-CONN-015.md +49 -0
  270. package/templates/app/docs/errors/CAGE-CREATE-001.md +10 -9
  271. package/templates/app/docs/errors/CAGE-DECL-001.md +2 -2
  272. package/templates/app/docs/errors/CAGE-DECL-002.md +7 -6
  273. package/templates/app/docs/errors/CAGE-DECL-003.md +1 -1
  274. package/templates/app/docs/errors/CAGE-DECL-004.md +1 -1
  275. package/templates/app/docs/errors/CAGE-DEP-001.md +2 -2
  276. package/templates/app/docs/errors/CAGE-DEP-002.md +1 -1
  277. package/templates/app/docs/errors/CAGE-DEP-003.md +2 -2
  278. package/templates/app/docs/errors/CAGE-DEP-004.md +1 -1
  279. package/templates/app/docs/errors/CAGE-DEP-005.md +1 -1
  280. package/templates/app/docs/errors/CAGE-DIAG-001.md +53 -0
  281. package/templates/app/docs/errors/CAGE-DLQ-001.md +2 -2
  282. package/templates/app/docs/errors/CAGE-ENV-001.md +4 -4
  283. package/templates/app/docs/errors/CAGE-ENV-002.md +51 -0
  284. package/templates/app/docs/errors/CAGE-ENV-003.md +48 -0
  285. package/templates/app/docs/errors/CAGE-EVENT-001.md +1 -1
  286. package/templates/app/docs/errors/CAGE-EVENT-002.md +7 -7
  287. package/templates/app/docs/errors/CAGE-FIELD-001.md +2 -2
  288. package/templates/app/docs/errors/CAGE-FIELD-002.md +1 -1
  289. package/templates/app/docs/errors/CAGE-FIELD-003.md +1 -1
  290. package/templates/app/docs/errors/CAGE-FIELD-004.md +1 -1
  291. package/templates/app/docs/errors/CAGE-FILE-001.md +56 -0
  292. package/templates/app/docs/errors/CAGE-GEN-001.md +2 -2
  293. package/templates/app/docs/errors/CAGE-GEN-002.md +1 -1
  294. package/templates/app/docs/errors/CAGE-GEN-003.md +53 -0
  295. package/templates/app/docs/errors/CAGE-GRANT-001.md +3 -3
  296. package/templates/app/docs/errors/CAGE-GRANT-002.md +2 -2
  297. package/templates/app/docs/errors/CAGE-GRANT-003.md +7 -6
  298. package/templates/app/docs/errors/CAGE-IMPACT-001.md +2 -2
  299. package/templates/app/docs/errors/CAGE-IMPACT-002.md +52 -0
  300. package/templates/app/docs/errors/CAGE-INIT-001.md +1 -1
  301. package/templates/app/docs/errors/CAGE-INIT-002.md +1 -1
  302. package/templates/app/docs/errors/CAGE-INIT-003.md +2 -2
  303. package/templates/app/docs/errors/CAGE-INIT-004.md +1 -1
  304. package/templates/app/docs/errors/CAGE-INIT-005.md +52 -0
  305. package/templates/app/docs/errors/CAGE-JOB-001.md +1 -1
  306. package/templates/app/docs/errors/CAGE-JOB-002.md +1 -1
  307. package/templates/app/docs/errors/CAGE-JOB-003.md +1 -1
  308. package/templates/app/docs/errors/CAGE-LINT-001.md +1 -1
  309. package/templates/app/docs/errors/CAGE-MIG-001.md +1 -1
  310. package/templates/app/docs/errors/CAGE-MIG-002.md +1 -1
  311. package/templates/app/docs/errors/CAGE-MIG-005.md +1 -1
  312. package/templates/app/docs/errors/CAGE-NAME-001.md +1 -1
  313. package/templates/app/docs/errors/CAGE-NAME-002.md +1 -1
  314. package/templates/app/docs/errors/CAGE-NAME-003.md +3 -3
  315. package/templates/app/docs/errors/CAGE-NAME-004.md +1 -1
  316. package/templates/app/docs/errors/CAGE-NAME-005.md +1 -1
  317. package/templates/app/docs/errors/CAGE-NAME-006.md +1 -1
  318. package/templates/app/docs/errors/CAGE-ORG-001.md +7 -6
  319. package/templates/app/docs/errors/CAGE-PAIR-002.md +6 -5
  320. package/templates/app/docs/errors/CAGE-QUERY-001.md +1 -1
  321. package/templates/app/docs/errors/CAGE-QUERY-002.md +2 -2
  322. package/templates/app/docs/errors/CAGE-QUERY-003.md +7 -6
  323. package/templates/app/docs/errors/CAGE-REACT-001.md +3 -3
  324. package/templates/app/docs/errors/CAGE-REACT-002.md +1 -1
  325. package/templates/app/docs/errors/CAGE-REACT-003.md +50 -0
  326. package/templates/app/docs/errors/CAGE-READS-001.md +9 -6
  327. package/templates/app/docs/errors/CAGE-REG-001.md +13 -12
  328. package/templates/app/docs/errors/CAGE-REG-002.md +2 -1
  329. package/templates/app/docs/errors/CAGE-REG-003.md +1 -1
  330. package/templates/app/docs/errors/CAGE-REL-001.md +14 -14
  331. package/templates/app/docs/errors/CAGE-ROUTE-001.md +7 -6
  332. package/templates/app/docs/errors/CAGE-SCOPE-001.md +1 -1
  333. package/templates/app/docs/errors/CAGE-SCOPE-002.md +2 -2
  334. package/templates/app/docs/errors/CAGE-SECRET-001.md +2 -2
  335. package/templates/app/docs/errors/CAGE-SECRET-002.md +1 -1
  336. package/templates/app/docs/errors/CAGE-SENS-001.md +5 -5
  337. package/templates/app/docs/errors/CAGE-SQL-001.md +1 -1
  338. package/templates/app/docs/errors/CAGE-SQL-002.md +1 -1
  339. package/templates/app/docs/errors/CAGE-STATE-001.md +3 -3
  340. package/templates/app/docs/errors/CAGE-STATE-002.md +1 -1
  341. package/templates/app/docs/errors/CAGE-STATE-003.md +1 -1
  342. package/templates/app/docs/errors/CAGE-STATE-004.md +1 -1
  343. package/templates/app/docs/errors/CAGE-STATE-005.md +3 -2
  344. package/templates/app/docs/errors/CAGE-STATE-010.md +5 -5
  345. package/templates/app/docs/errors/CAGE-STATE-011.md +5 -5
  346. package/templates/app/docs/errors/CAGE-STRUCT-001.md +1 -1
  347. package/templates/app/docs/errors/CAGE-STRUCT-002.md +1 -1
  348. package/templates/app/docs/errors/CAGE-SYNC-001.md +3 -2
  349. package/templates/app/docs/errors/CAGE-TEST-001.md +1 -1
  350. package/templates/app/docs/errors/CAGE-TEST-002.md +50 -0
  351. package/templates/app/docs/errors/CAGE-TEST-003.md +52 -0
  352. package/templates/app/docs/errors/CAGE-UNSAFE-001.md +3 -2
  353. package/templates/app/docs/errors/CAGE-UPGRADE-001.md +2 -2
  354. package/templates/app/docs/errors/CAGE-WORKER-001.md +48 -0
  355. package/templates/app/docs/errors/CAGE-WORKER-002.md +50 -0
  356. package/templates/app/docs/errors/CAGE-WORKER-003.md +48 -0
  357. package/templates/app/docs/errors/README.md +52 -2
  358. package/templates/app/package.json +3 -3
  359. package/templates/app/packages/contracts/package.json +1 -1
  360. package/templates/app/packages/contracts/src/aggregates/approval-member/index.ts +70 -0
  361. package/templates/app/packages/contracts/src/aggregates/dept/index.ts +10 -10
  362. package/templates/app/packages/contracts/src/aggregates/inventory/index.ts +5 -5
  363. package/templates/app/packages/contracts/src/aggregates/inventory-lock/index.ts +4 -4
  364. package/templates/app/packages/contracts/src/aggregates/purchase-order/index.ts +34 -12
  365. package/templates/app/packages/contracts/src/aggregates/role/index.ts +15 -15
  366. package/templates/app/packages/contracts/src/aggregates/user/index.ts +16 -16
  367. package/templates/app/packages/contracts/src/index.ts +16 -1
  368. package/templates/app/packages/contracts/src/queries/index.ts +2 -2
  369. package/templates/app/packages/domain/package.json +5 -4
  370. package/templates/app/packages/domain/src/index.ts +4 -0
  371. package/templates/app/packages/domain/src/integrations/erp.ts +15 -0
  372. package/templates/app/packages/domain/src/integrations/intelligence.ts +20 -0
  373. package/templates/app/packages/domain/src/modules/inventory/index.ts +1 -0
  374. package/templates/app/packages/domain/src/modules/inventory/inventory.ts +12 -0
  375. package/templates/app/packages/domain/src/modules/purchase/approval-members.ts +54 -0
  376. package/templates/app/packages/domain/src/modules/purchase/approvals.ts +38 -6
  377. package/templates/app/packages/domain/src/modules/purchase/index.ts +2 -0
  378. package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +224 -0
  379. package/templates/app/packages/domain/src/modules/purchase/jobs.ts +5 -0
  380. package/templates/app/packages/domain/src/modules/purchase/purchase-order.test.ts +9 -0
  381. package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +125 -4
  382. package/templates/app/packages/domain/src/modules/purchase/queries.ts +5 -0
  383. package/templates/app/packages/domain/src/workflows/purchase-inventory.ts +6 -0
  384. package/templates/app/packages/domain/src/workflows/purchase-process.ts +42 -0
  385. package/templates/blank/.dockerignore +2 -0
  386. package/templates/blank/.env.example +10 -0
  387. package/templates/blank/AGENTS.md +50 -10
  388. package/templates/blank/README.md +4 -1
  389. package/templates/blank/_gitignore +1 -0
  390. package/templates/blank/apps/api/package.json +1 -1
  391. package/templates/blank/apps/api/src/main.ts +4 -1
  392. package/templates/blank/apps/api/src/worker.ts +2 -0
  393. package/templates/blank/apps/web/index.html +1 -0
  394. package/templates/blank/apps/web/package.json +7 -3
  395. package/templates/blank/apps/web/src/app/app.tsx +80 -18
  396. package/templates/blank/apps/web/src/app/styles/global.css +90 -0
  397. package/templates/blank/apps/web/src/app/use-session.ts +43 -0
  398. package/templates/blank/apps/web/src/app/workspace-layout.tsx +30 -5
  399. package/templates/blank/apps/web/src/main.tsx +5 -0
  400. package/templates/blank/apps/web/src/modules/auth/index.ts +4 -0
  401. package/templates/blank/apps/web/src/modules/auth/pages/login-page.tsx +18 -1
  402. package/templates/blank/apps/web/src/modules/directory/index.ts +7 -0
  403. package/templates/blank/apps/web/src/modules/directory/pages/user-detail-page.tsx +78 -0
  404. package/templates/blank/apps/web/src/modules/directory/pages/users-page.tsx +93 -0
  405. package/templates/blank/apps/web/src/modules/workspace/index.ts +4 -0
  406. package/templates/blank/apps/web/src/modules/workspace/pages/home-page.tsx +17 -0
  407. package/templates/blank/apps/web/src/shared/lib/error-message.ts +11 -0
  408. package/templates/blank/apps/web/src/shared/lib/navigation.ts +21 -0
  409. package/templates/blank/apps/web/src/shared/ui/brand.tsx +10 -2
  410. package/templates/blank/apps/web/src/shared/ui/page-state.css +47 -0
  411. package/templates/blank/apps/web/src/shared/ui/page-state.tsx +76 -0
  412. package/templates/blank/apps/web/src/shared/ui/require-capability.tsx +34 -0
  413. package/templates/blank/apps/web/vite.config.ts +5 -0
  414. package/templates/blank/deploy/nginx.conf +52 -0
  415. package/templates/blank/docs/ai/README.md +28 -2
  416. package/templates/blank/docs/ai/approvals.md +260 -0
  417. package/templates/blank/docs/ai/architecture.md +26 -0
  418. package/templates/blank/docs/ai/commenting.md +203 -0
  419. package/templates/blank/docs/ai/diagnostics.md +80 -0
  420. package/templates/blank/docs/ai/files.md +93 -0
  421. package/templates/blank/docs/ai/intelligence.md +348 -0
  422. package/templates/blank/docs/ai/ontology-context.md +59 -4
  423. package/templates/blank/docs/ai/primitives.md +34 -1
  424. package/templates/blank/docs/ai/project-structure.md +8 -3
  425. package/templates/blank/docs/ai/purchase-example.md +35 -7
  426. package/templates/blank/docs/ai/recipes.md +10 -2
  427. package/templates/blank/docs/ai/routing.md +86 -0
  428. package/templates/blank/docs/ai/troubleshooting.md +5 -0
  429. package/templates/blank/docs/ai/workflow.md +24 -11
  430. package/templates/blank/docs/errors/CAGE-AI-001.md +61 -0
  431. package/templates/blank/docs/errors/CAGE-APPR-001.md +13 -9
  432. package/templates/blank/docs/errors/CAGE-APPR-002.md +2 -2
  433. package/templates/blank/docs/errors/CAGE-APPR-003.md +1 -1
  434. package/templates/blank/docs/errors/CAGE-APPR-004.md +4 -4
  435. package/templates/blank/docs/errors/CAGE-APPR-005.md +4 -4
  436. package/templates/blank/docs/errors/CAGE-APPR-006.md +29 -8
  437. package/templates/blank/docs/errors/CAGE-APPR-007.md +9 -7
  438. package/templates/blank/docs/errors/CAGE-APPR-010.md +5 -5
  439. package/templates/blank/docs/errors/CAGE-AUDIT-001.md +53 -0
  440. package/templates/blank/docs/errors/CAGE-AUTH-001.md +1 -1
  441. package/templates/blank/docs/errors/CAGE-BIZ-001.md +51 -0
  442. package/templates/blank/docs/errors/CAGE-BIZ-002.md +49 -0
  443. package/templates/blank/docs/errors/CAGE-BUDGET-001.md +1 -1
  444. package/templates/blank/docs/errors/CAGE-BUDGET-002.md +1 -1
  445. package/templates/blank/docs/errors/CAGE-BUDGET-003.md +1 -1
  446. package/templates/blank/docs/errors/CAGE-CMD-002.md +1 -1
  447. package/templates/blank/docs/errors/CAGE-CMD-003.md +1 -1
  448. package/templates/blank/docs/errors/CAGE-CONN-001.md +3 -3
  449. package/templates/blank/docs/errors/CAGE-CONN-002.md +1 -1
  450. package/templates/blank/docs/errors/CAGE-CONN-003.md +1 -1
  451. package/templates/blank/docs/errors/CAGE-CONN-004.md +1 -1
  452. package/templates/blank/docs/errors/CAGE-CONN-005.md +1 -1
  453. package/templates/blank/docs/errors/CAGE-CONN-006.md +1 -1
  454. package/templates/blank/docs/errors/CAGE-CONN-007.md +6 -6
  455. package/templates/blank/docs/errors/CAGE-CONN-008.md +5 -5
  456. package/templates/blank/docs/errors/CAGE-CONN-009.md +6 -6
  457. package/templates/blank/docs/errors/CAGE-CONN-010.md +6 -6
  458. package/templates/blank/docs/errors/CAGE-CONN-011.md +1 -1
  459. package/templates/blank/docs/errors/CAGE-CONN-012.md +1 -1
  460. package/templates/blank/docs/errors/CAGE-CONN-013.md +49 -0
  461. package/templates/blank/docs/errors/CAGE-CONN-014.md +48 -0
  462. package/templates/blank/docs/errors/CAGE-CONN-015.md +49 -0
  463. package/templates/blank/docs/errors/CAGE-CREATE-001.md +10 -9
  464. package/templates/blank/docs/errors/CAGE-DECL-001.md +2 -2
  465. package/templates/blank/docs/errors/CAGE-DECL-002.md +7 -6
  466. package/templates/blank/docs/errors/CAGE-DECL-003.md +1 -1
  467. package/templates/blank/docs/errors/CAGE-DECL-004.md +1 -1
  468. package/templates/blank/docs/errors/CAGE-DEP-001.md +2 -2
  469. package/templates/blank/docs/errors/CAGE-DEP-002.md +1 -1
  470. package/templates/blank/docs/errors/CAGE-DEP-003.md +2 -2
  471. package/templates/blank/docs/errors/CAGE-DEP-004.md +1 -1
  472. package/templates/blank/docs/errors/CAGE-DEP-005.md +1 -1
  473. package/templates/blank/docs/errors/CAGE-DIAG-001.md +53 -0
  474. package/templates/blank/docs/errors/CAGE-DLQ-001.md +2 -2
  475. package/templates/blank/docs/errors/CAGE-ENV-001.md +4 -4
  476. package/templates/blank/docs/errors/CAGE-ENV-002.md +51 -0
  477. package/templates/blank/docs/errors/CAGE-ENV-003.md +48 -0
  478. package/templates/blank/docs/errors/CAGE-EVENT-001.md +1 -1
  479. package/templates/blank/docs/errors/CAGE-EVENT-002.md +7 -7
  480. package/templates/blank/docs/errors/CAGE-FIELD-001.md +2 -2
  481. package/templates/blank/docs/errors/CAGE-FIELD-002.md +1 -1
  482. package/templates/blank/docs/errors/CAGE-FIELD-003.md +1 -1
  483. package/templates/blank/docs/errors/CAGE-FIELD-004.md +1 -1
  484. package/templates/blank/docs/errors/CAGE-FILE-001.md +56 -0
  485. package/templates/blank/docs/errors/CAGE-GEN-001.md +2 -2
  486. package/templates/blank/docs/errors/CAGE-GEN-002.md +1 -1
  487. package/templates/blank/docs/errors/CAGE-GEN-003.md +53 -0
  488. package/templates/blank/docs/errors/CAGE-GRANT-001.md +3 -3
  489. package/templates/blank/docs/errors/CAGE-GRANT-002.md +2 -2
  490. package/templates/blank/docs/errors/CAGE-GRANT-003.md +7 -6
  491. package/templates/blank/docs/errors/CAGE-IMPACT-001.md +2 -2
  492. package/templates/blank/docs/errors/CAGE-IMPACT-002.md +52 -0
  493. package/templates/blank/docs/errors/CAGE-INIT-001.md +1 -1
  494. package/templates/blank/docs/errors/CAGE-INIT-002.md +1 -1
  495. package/templates/blank/docs/errors/CAGE-INIT-003.md +2 -2
  496. package/templates/blank/docs/errors/CAGE-INIT-004.md +1 -1
  497. package/templates/blank/docs/errors/CAGE-INIT-005.md +52 -0
  498. package/templates/blank/docs/errors/CAGE-JOB-001.md +1 -1
  499. package/templates/blank/docs/errors/CAGE-JOB-002.md +1 -1
  500. package/templates/blank/docs/errors/CAGE-JOB-003.md +1 -1
  501. package/templates/blank/docs/errors/CAGE-LINT-001.md +1 -1
  502. package/templates/blank/docs/errors/CAGE-MIG-001.md +1 -1
  503. package/templates/blank/docs/errors/CAGE-MIG-002.md +1 -1
  504. package/templates/blank/docs/errors/CAGE-MIG-005.md +1 -1
  505. package/templates/blank/docs/errors/CAGE-NAME-001.md +1 -1
  506. package/templates/blank/docs/errors/CAGE-NAME-002.md +1 -1
  507. package/templates/blank/docs/errors/CAGE-NAME-003.md +3 -3
  508. package/templates/blank/docs/errors/CAGE-NAME-004.md +1 -1
  509. package/templates/blank/docs/errors/CAGE-NAME-005.md +1 -1
  510. package/templates/blank/docs/errors/CAGE-NAME-006.md +1 -1
  511. package/templates/blank/docs/errors/CAGE-ORG-001.md +7 -6
  512. package/templates/blank/docs/errors/CAGE-PAIR-002.md +6 -5
  513. package/templates/blank/docs/errors/CAGE-QUERY-001.md +1 -1
  514. package/templates/blank/docs/errors/CAGE-QUERY-002.md +2 -2
  515. package/templates/blank/docs/errors/CAGE-QUERY-003.md +7 -6
  516. package/templates/blank/docs/errors/CAGE-REACT-001.md +3 -3
  517. package/templates/blank/docs/errors/CAGE-REACT-002.md +1 -1
  518. package/templates/blank/docs/errors/CAGE-REACT-003.md +50 -0
  519. package/templates/blank/docs/errors/CAGE-READS-001.md +9 -6
  520. package/templates/blank/docs/errors/CAGE-REG-001.md +13 -12
  521. package/templates/blank/docs/errors/CAGE-REG-002.md +2 -1
  522. package/templates/blank/docs/errors/CAGE-REG-003.md +1 -1
  523. package/templates/blank/docs/errors/CAGE-REL-001.md +14 -14
  524. package/templates/blank/docs/errors/CAGE-ROUTE-001.md +7 -6
  525. package/templates/blank/docs/errors/CAGE-SCOPE-001.md +1 -1
  526. package/templates/blank/docs/errors/CAGE-SCOPE-002.md +2 -2
  527. package/templates/blank/docs/errors/CAGE-SECRET-001.md +2 -2
  528. package/templates/blank/docs/errors/CAGE-SECRET-002.md +1 -1
  529. package/templates/blank/docs/errors/CAGE-SENS-001.md +5 -5
  530. package/templates/blank/docs/errors/CAGE-SQL-001.md +1 -1
  531. package/templates/blank/docs/errors/CAGE-SQL-002.md +1 -1
  532. package/templates/blank/docs/errors/CAGE-STATE-001.md +3 -3
  533. package/templates/blank/docs/errors/CAGE-STATE-002.md +1 -1
  534. package/templates/blank/docs/errors/CAGE-STATE-003.md +1 -1
  535. package/templates/blank/docs/errors/CAGE-STATE-004.md +1 -1
  536. package/templates/blank/docs/errors/CAGE-STATE-005.md +3 -2
  537. package/templates/blank/docs/errors/CAGE-STATE-010.md +5 -5
  538. package/templates/blank/docs/errors/CAGE-STATE-011.md +5 -5
  539. package/templates/blank/docs/errors/CAGE-STRUCT-001.md +1 -1
  540. package/templates/blank/docs/errors/CAGE-STRUCT-002.md +1 -1
  541. package/templates/blank/docs/errors/CAGE-SYNC-001.md +3 -2
  542. package/templates/blank/docs/errors/CAGE-TEST-001.md +1 -1
  543. package/templates/blank/docs/errors/CAGE-TEST-002.md +50 -0
  544. package/templates/blank/docs/errors/CAGE-TEST-003.md +52 -0
  545. package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +3 -2
  546. package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +2 -2
  547. package/templates/blank/docs/errors/CAGE-WORKER-001.md +48 -0
  548. package/templates/blank/docs/errors/CAGE-WORKER-002.md +50 -0
  549. package/templates/blank/docs/errors/CAGE-WORKER-003.md +48 -0
  550. package/templates/blank/docs/errors/README.md +52 -2
  551. package/templates/blank/docs/examples/purchase-admin/apps/api/src/main.ts +5 -1
  552. package/templates/blank/docs/examples/purchase-admin/apps/api/src/worker.ts +3 -0
  553. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/app.tsx +122 -12
  554. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +88 -8
  555. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/use-session.ts +43 -0
  556. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/workspace-layout.tsx +58 -19
  557. package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +5 -0
  558. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/components/task-operation-dialog.tsx +61 -0
  559. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +13 -5
  560. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/index.ts +4 -0
  561. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +89 -38
  562. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks.css +18 -0
  563. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/index.ts +4 -0
  564. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/pages/login-page.tsx +12 -0
  565. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/index.ts +4 -0
  566. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/pages/inventory-page.tsx +29 -1
  567. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/approval-history.tsx +67 -0
  568. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
  569. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/order-reviewers.tsx +38 -0
  570. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
  571. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
  572. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +32 -3
  573. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/index.ts +5 -0
  574. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
  575. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-intelligence.css +17 -0
  576. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +156 -0
  577. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +54 -22
  578. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/index.ts +5 -0
  579. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
  580. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/hooks/use-command.ts +13 -0
  581. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +15 -1
  582. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/navigation.ts +21 -0
  583. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.css +10 -0
  584. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.tsx +51 -0
  585. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
  586. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.css +134 -0
  587. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
  588. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
  589. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.css +28 -0
  590. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
  591. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/notice.tsx +7 -0
  592. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-heading.tsx +7 -0
  593. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.css +47 -0
  594. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.tsx +76 -0
  595. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/require-capability.tsx +34 -0
  596. package/templates/blank/docs/examples/purchase-admin/cage.config.json +23 -0
  597. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/approval-member/index.ts +70 -0
  598. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/dept/index.ts +10 -10
  599. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory/index.ts +5 -5
  600. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory-lock/index.ts +4 -4
  601. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/purchase-order/index.ts +34 -12
  602. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +15 -15
  603. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +16 -16
  604. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/index.ts +16 -1
  605. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/queries/index.ts +2 -2
  606. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/index.ts +4 -0
  607. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/erp.ts +15 -0
  608. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/intelligence.ts +20 -0
  609. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/index.ts +1 -0
  610. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/inventory.ts +12 -0
  611. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approval-members.ts +54 -0
  612. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +38 -6
  613. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +2 -0
  614. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +224 -0
  615. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/jobs.ts +5 -0
  616. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +9 -0
  617. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +125 -4
  618. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/queries.ts +5 -0
  619. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-inventory.ts +6 -0
  620. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-process.ts +42 -0
  621. package/templates/blank/package.json +3 -3
  622. package/templates/blank/packages/contracts/package.json +1 -1
  623. package/templates/blank/packages/contracts/src/aggregates/dept/index.ts +10 -10
  624. package/templates/blank/packages/contracts/src/aggregates/role/index.ts +15 -15
  625. package/templates/blank/packages/contracts/src/aggregates/user/index.ts +16 -16
  626. package/templates/blank/packages/contracts/src/index.ts +1 -1
  627. package/templates/blank/packages/contracts/src/queries/index.ts +1 -1
  628. package/templates/blank/packages/domain/package.json +5 -4
  629. package/templates/blank/packages/domain/src/index.ts +2 -1
@@ -0,0 +1,1011 @@
1
+ /* 业务板块逐层进入流程图;节点、分支与箭头表达执行关系,代码按需展开。 */
2
+ /* 业务地图专属样式,由 index.html 在基础 style.css 之后加载。
3
+ * 配合 business.ts 与 flowchart.ts 的 DOM/SVG 状态,区分板块入口、流程画布、审批子图与证据详情;不决定业务执行。 */
4
+ .business-journeys {
5
+ margin: 22px 0 30px;
6
+ }
7
+ .business-journeys .business-flow-entry {
8
+ border-left: 3px solid #397a56;
9
+ padding: 25px;
10
+ }
11
+ .business-operations {
12
+ margin-top: 28px;
13
+ border-top: 1px solid #e1e8db;
14
+ padding-top: 18px;
15
+ }
16
+ .business-operations > summary {
17
+ color: #567260;
18
+ font-size: 13px;
19
+ cursor: pointer;
20
+ }
21
+ .business-process-controls {
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+ align-items: center;
25
+ gap: 12px 22px;
26
+ margin: 0 0 12px;
27
+ color: #4b6856;
28
+ font-size: 13px;
29
+ }
30
+ .business-process-controls > p {
31
+ flex-basis: 100%;
32
+ margin: 0 0 3px;
33
+ line-height: 1.8;
34
+ }
35
+ .business-process-controls label {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: 8px;
39
+ min-height: 32px;
40
+ cursor: pointer;
41
+ }
42
+ .business-process-controls input {
43
+ accent-color: #397a56;
44
+ width: 16px;
45
+ height: 16px;
46
+ }
47
+ .business-process-legend {
48
+ font-size: 12px;
49
+ color: #627c69;
50
+ line-height: 1.8;
51
+ margin: 0 0 18px;
52
+ }
53
+ .flow-node.association .flow-node-shape {
54
+ fill: #f4f7ef;
55
+ stroke-dasharray: 5 4;
56
+ }
57
+ .flow-edge.association .flow-edge-line {
58
+ stroke: #8b9975;
59
+ stroke-dasharray: 5 4;
60
+ }
61
+ /* 业务模式隐藏完整本体画布的旧工具区,保留同页共用的视图切换和检索入口。 */
62
+ .explorer.business-mode {
63
+ display: block;
64
+ height: auto;
65
+ min-height: 520px;
66
+ max-height: none;
67
+ overflow: clip;
68
+ }
69
+ .business-page .overview {
70
+ display: none;
71
+ }
72
+ .business-page .page-heading .eyebrow,
73
+ .business-page .page-heading p {
74
+ display: none;
75
+ }
76
+ .business-page .page-heading {
77
+ margin-bottom: 22px;
78
+ }
79
+ .business-health {
80
+ display: none;
81
+ }
82
+ .business-page .business-health {
83
+ display: flex;
84
+ align-items: center;
85
+ flex-wrap: wrap;
86
+ justify-content: space-between;
87
+ gap: 10px;
88
+ margin-top: 15px;
89
+ font-size: 10px;
90
+ color: #819378;
91
+ }
92
+ .business-mode .graph-subbar,
93
+ .business-mode .relation-guide,
94
+ .business-mode .canvas,
95
+ .business-mode .graph-footer,
96
+ .business-mode > .inspector {
97
+ display: none;
98
+ }
99
+ .business-mode .graph-toolbar {
100
+ background: #fcfdfa;
101
+ }
102
+ .business-mode .graph-panel {
103
+ height: auto;
104
+ }
105
+ .business-view {
106
+ padding: 26px 30px 36px;
107
+ }
108
+ .business-breadcrumb {
109
+ display: flex;
110
+ flex-wrap: wrap;
111
+ align-items: center;
112
+ gap: 10px;
113
+ color: #7b8e81;
114
+ font-size: 12px;
115
+ margin-bottom: 22px;
116
+ }
117
+ .business-breadcrumb a:hover {
118
+ color: var(--green);
119
+ text-decoration: underline;
120
+ text-underline-offset: 4px;
121
+ }
122
+ .business-breadcrumb strong {
123
+ color: #30483d;
124
+ font-weight: 500;
125
+ }
126
+ .business-intro,
127
+ .business-scene-heading {
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: space-between;
131
+ gap: 24px;
132
+ margin-bottom: 26px;
133
+ }
134
+ .business-kicker {
135
+ display: block;
136
+ font-size: 10px;
137
+ letter-spacing: 2px;
138
+ color: #7e927e;
139
+ margin-bottom: 11px;
140
+ }
141
+ .business-intro h2,
142
+ .business-scene-heading h2 {
143
+ margin: 0;
144
+ font-size: clamp(21px, 2vw, 29px);
145
+ line-height: 1.6;
146
+ letter-spacing: -0.5px;
147
+ font-weight: 600;
148
+ color: #244638;
149
+ overflow-wrap: anywhere;
150
+ }
151
+ .business-intro p {
152
+ font-size: 13px;
153
+ color: #758477;
154
+ line-height: 1.9;
155
+ margin: 12px 0 0;
156
+ }
157
+ .business-total {
158
+ flex-shrink: 0;
159
+ border: 1px solid #dce7d9;
160
+ color: #4d7757;
161
+ background: #f0f5ec;
162
+ border-radius: 30px;
163
+ padding: 7px 13px;
164
+ font-size: 12px;
165
+ }
166
+ /* 板块卡片和对象标签构成从业务主题进入流程的导航;实际跳转使用脚本生成的锚点 URL。 */
167
+ .business-blocks {
168
+ display: grid;
169
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 290px), 1fr));
170
+ gap: 18px;
171
+ }
172
+ .business-block {
173
+ display: flex;
174
+ flex-direction: column;
175
+ border: 1px solid #dce5d8;
176
+ border-radius: 9px;
177
+ padding: 25px 23px 0;
178
+ background: linear-gradient(135deg, #f6f9f2 0%, #fff 70%);
179
+ transition:
180
+ border-color 0.15s,
181
+ box-shadow 0.15s,
182
+ transform 0.15s;
183
+ min-height: 253px;
184
+ }
185
+ .business-block:hover {
186
+ border-color: #71a18a;
187
+ box-shadow: 0 8px 24px #28462f0e;
188
+ transform: translateY(-2px);
189
+ }
190
+ .business-block-top {
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: space-between;
194
+ }
195
+ .business-number {
196
+ font:
197
+ 23px 'Bahnschrift',
198
+ sans-serif;
199
+ font-weight: 300;
200
+ color: #97b293;
201
+ }
202
+ .business-block-kind {
203
+ font-size: 10px;
204
+ color: #83967b;
205
+ letter-spacing: 1.5px;
206
+ }
207
+ .business-block h3 {
208
+ font-size: 20px;
209
+ line-height: 1.6;
210
+ margin: 19px 0 12px;
211
+ font-weight: 600;
212
+ overflow-wrap: anywhere;
213
+ }
214
+ .business-object-chips {
215
+ display: flex;
216
+ flex-wrap: wrap;
217
+ gap: 7px;
218
+ }
219
+ .business-object-chips > span,
220
+ .object-chip-button {
221
+ border: 1px solid #e5ebdf;
222
+ background: #f6f8f2;
223
+ border-radius: 4px;
224
+ padding: 4px 8px;
225
+ font-size: 11px;
226
+ line-height: 1.5;
227
+ color: #637660;
228
+ }
229
+ .object-chip-button:hover {
230
+ border-color: #729b7a;
231
+ }
232
+ .business-block-description {
233
+ font-size: 12px;
234
+ color: #879380;
235
+ line-height: 1.9;
236
+ margin: 16px 0 20px;
237
+ flex: 1;
238
+ }
239
+ .business-block-footer {
240
+ border-top: 1px solid #e6ecdf;
241
+ padding: 16px 0;
242
+ display: flex;
243
+ flex-wrap: wrap;
244
+ justify-content: space-between;
245
+ gap: 10px;
246
+ font-size: 11px;
247
+ color: #829179;
248
+ }
249
+ .business-block-footer strong {
250
+ color: #3c7055;
251
+ font-weight: 500;
252
+ }
253
+ .business-reading-note {
254
+ border-top: 1px solid #e8ece2;
255
+ margin-top: 35px;
256
+ padding-top: 22px;
257
+ font-size: 12px;
258
+ color: #8c9985;
259
+ line-height: 1.9;
260
+ }
261
+ .business-reading-note strong {
262
+ color: #5e7c60;
263
+ font-weight: 500;
264
+ }
265
+ .business-reading-note p {
266
+ margin: 5px 0 0;
267
+ }
268
+ .business-scene-heading .button {
269
+ flex-shrink: 0;
270
+ }
271
+ .business-scene-description,
272
+ .business-flow-intro {
273
+ font-size: 12px;
274
+ color: #7e8c7a;
275
+ line-height: 1.9;
276
+ margin: 20px 0;
277
+ }
278
+ .business-section-title {
279
+ margin: 30px 0 14px;
280
+ font-size: 12px;
281
+ font-weight: 500;
282
+ color: #72906c;
283
+ letter-spacing: 1px;
284
+ }
285
+ .business-flow-grid {
286
+ display: grid;
287
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
288
+ gap: 13px;
289
+ }
290
+ .business-flow-entry {
291
+ display: flex;
292
+ flex-direction: column;
293
+ border: 1px solid #e1e8db;
294
+ border-radius: 7px;
295
+ padding: 20px;
296
+ background: #fff;
297
+ transition:
298
+ border-color 0.15s,
299
+ background 0.15s;
300
+ }
301
+ .business-flow-entry:hover {
302
+ border-color: #709d80;
303
+ background: #fafcf7;
304
+ }
305
+ .business-flow-entry > small {
306
+ font-size: 10px;
307
+ color: #8b9e83;
308
+ }
309
+ .business-flow-entry h4 {
310
+ font-size: 15px;
311
+ line-height: 1.7;
312
+ margin: 10px 0 6px;
313
+ overflow-wrap: anywhere;
314
+ }
315
+ .business-flow-entry p {
316
+ font-size: 11px;
317
+ line-height: 1.9;
318
+ color: #82917a;
319
+ margin: 0 0 16px;
320
+ flex: 1;
321
+ }
322
+ .business-flow-count {
323
+ font-size: 10px;
324
+ color: #4c7c58;
325
+ }
326
+ /* 流程画布与详情栏的工作区;inspecting 控制详情空间,画布尺寸变化由 ResizeObserver 通知相机。 */
327
+ .business-workspace {
328
+ display: grid;
329
+ grid-template-columns: minmax(0, 1fr);
330
+ gap: 20px;
331
+ align-items: start;
332
+ }
333
+ .business-workspace.inspecting {
334
+ grid-template-columns: minmax(0, 1fr) 350px;
335
+ }
336
+ .business-flowchart {
337
+ min-width: 0;
338
+ border: 1px solid #dce6d7;
339
+ border-radius: 8px;
340
+ overflow: hidden;
341
+ }
342
+ .flowchart-toolbar {
343
+ display: flex;
344
+ flex-wrap: wrap;
345
+ gap: 10px;
346
+ align-items: center;
347
+ justify-content: space-between;
348
+ padding: 12px 15px;
349
+ background: #fbfcf8;
350
+ border-bottom: 1px solid #e4eadf;
351
+ }
352
+ .flowchart-toolbar > strong {
353
+ font-size: 12px;
354
+ font-weight: 500;
355
+ color: #668262;
356
+ }
357
+ .flowchart-controls {
358
+ display: flex;
359
+ flex-wrap: wrap;
360
+ gap: 4px;
361
+ align-items: center;
362
+ }
363
+ .flowchart-controls button,
364
+ .flowchart-zoom button {
365
+ background: transparent;
366
+ border: 1px solid transparent;
367
+ border-radius: 4px;
368
+ color: #82957a;
369
+ min-width: 34px;
370
+ height: 32px;
371
+ padding: 4px 10px;
372
+ font-size: 12px;
373
+ }
374
+ .flowchart-controls button:hover,
375
+ .flowchart-controls button[aria-pressed='true'],
376
+ .flowchart-zoom button:hover {
377
+ background: #edf3e7;
378
+ border-color: #d7e3cf;
379
+ color: #416e47;
380
+ }
381
+ .flowchart-zoom {
382
+ position: absolute;
383
+ bottom: 16px;
384
+ left: 16px;
385
+ z-index: 2;
386
+ display: flex;
387
+ flex-wrap: wrap;
388
+ max-width: calc(100% - 32px);
389
+ align-items: center;
390
+ gap: 2px;
391
+ background: #fff;
392
+ border: 1px solid #d6e1d2;
393
+ border-radius: 7px;
394
+ box-shadow: 0 3px 16px #294b2414;
395
+ padding: 5px;
396
+ }
397
+ .flowchart-zoom .flowchart-percentage {
398
+ min-width: 58px;
399
+ color: #3d6951;
400
+ font-variant-numeric: tabular-nums;
401
+ }
402
+ .flowchart-zoom button:disabled {
403
+ opacity: 0.35;
404
+ cursor: default;
405
+ }
406
+ /* 画布禁止浏览器默认触控滚动,由手势状态机接管;SVG 内坐标仍由相机 transform 控制。 */
407
+ .flowchart-canvas {
408
+ position: relative;
409
+ width: 100%;
410
+ height: 640px;
411
+ overflow: hidden;
412
+ overscroll-behavior: contain;
413
+ background:
414
+ radial-gradient(#dfe7d8 0.7px, transparent 0.8px) 0 0 / 20px 20px,
415
+ #fcfdf9;
416
+ }
417
+ .flowchart-canvas > svg {
418
+ display: block;
419
+ width: 100%;
420
+ height: 100%;
421
+ cursor: grab;
422
+ touch-action: none;
423
+ user-select: none;
424
+ -webkit-user-select: none;
425
+ outline: none;
426
+ }
427
+ .flowchart-canvas > svg:focus-visible {
428
+ box-shadow: inset 0 0 0 2px #87a786;
429
+ }
430
+ .flowchart-canvas.mode-pan .flow-node,
431
+ .flowchart-canvas.mode-pan .flow-edge {
432
+ cursor: grab;
433
+ }
434
+ .flowchart-canvas > svg.interacting,
435
+ .flowchart-canvas > svg.interacting * {
436
+ cursor: grabbing !important;
437
+ }
438
+ /* 展开模式将当前工作区覆盖视窗,保留画布和详情;退出时复用同一阅读状态,不创建第二幅图。 */
439
+ .flow-workspace.expanded {
440
+ position: fixed;
441
+ inset: 12px;
442
+ z-index: 100;
443
+ padding: 12px;
444
+ background: #f8faf5;
445
+ border: 1px solid #cfdcc7;
446
+ border-radius: 12px;
447
+ box-shadow: 0 0 0 20px #243d2866;
448
+ align-items: stretch;
449
+ gap: 14px;
450
+ }
451
+ .flow-workspace.expanded .business-flowchart {
452
+ display: flex;
453
+ flex-direction: column;
454
+ height: 100%;
455
+ min-height: 0;
456
+ }
457
+ .flow-workspace.expanded .flowchart-canvas {
458
+ height: auto;
459
+ flex: 1;
460
+ min-height: 0;
461
+ }
462
+ .flow-workspace.expanded .business-detail {
463
+ height: 100%;
464
+ max-height: 100%;
465
+ }
466
+ .flowchart-footer {
467
+ display: flex;
468
+ flex-wrap: wrap;
469
+ justify-content: space-between;
470
+ gap: 8px;
471
+ border-top: 1px solid #e4eadf;
472
+ background: #fbfcf8;
473
+ padding: 11px 13px;
474
+ font-size: 9px;
475
+ color: #8b9a81;
476
+ line-height: 1.8;
477
+ }
478
+ .flow-node {
479
+ cursor: grab;
480
+ }
481
+ .flow-node-shape {
482
+ fill: #fff;
483
+ stroke: #c4d6bc;
484
+ stroke-width: 1.3;
485
+ filter: drop-shadow(0 3px 4px #294a2810);
486
+ }
487
+ .flow-node.decision .flow-node-shape {
488
+ fill: #f9f7ee;
489
+ stroke: #c4b88a;
490
+ }
491
+ .flow-node.approval-subflow .flow-node-shape {
492
+ fill: #fafaf3;
493
+ stroke: #b5bf9e;
494
+ }
495
+ /* 审批容器内部的条件、任务和跳过支路样式;布局尺寸和换行已由 approval-flow.ts 计算。 */
496
+ .approval-flow-content {
497
+ pointer-events: none;
498
+ }
499
+ .approval-flow-title {
500
+ fill: #35573b;
501
+ font-size: 17px;
502
+ font-weight: 600;
503
+ }
504
+ .approval-flow-subtitle,
505
+ .approval-flow-hint {
506
+ fill: #6c7f60;
507
+ font-size: 11px;
508
+ }
509
+ .approval-flow-line {
510
+ fill: none;
511
+ stroke: #8ba28e;
512
+ stroke-width: 1.3;
513
+ stroke-linejoin: round;
514
+ }
515
+ .approval-flow-line.skip {
516
+ stroke: #a5ae92;
517
+ }
518
+ .approval-flow-label-box {
519
+ fill: #fafaf3;
520
+ }
521
+ .approval-flow-branch {
522
+ fill: #61774f;
523
+ font-size: 12px;
524
+ }
525
+ .approval-task-shape {
526
+ fill: #fffef8;
527
+ stroke: #bac9ad;
528
+ }
529
+ .approval-task-title {
530
+ fill: #35573b;
531
+ font-size: 16px;
532
+ font-weight: 600;
533
+ }
534
+ .approval-task-actor,
535
+ .approval-task-rule {
536
+ fill: #5b7151;
537
+ font-size: 12px;
538
+ }
539
+ .approval-task-number-shape {
540
+ fill: #e8eddb;
541
+ }
542
+ .approval-task-number {
543
+ fill: #61794c;
544
+ font-size: 10px;
545
+ font-weight: 600;
546
+ }
547
+ .approval-condition-shape {
548
+ fill: #f7f2de;
549
+ stroke: #bfb27e;
550
+ }
551
+ .approval-condition-title {
552
+ fill: #6c6031;
553
+ font-size: 12px;
554
+ font-weight: 500;
555
+ }
556
+ /* AND 网关与分支标题使用独立形状,不能被误认成一个需要审批的任务;坐标由递归测量布局提供。 */
557
+ .approval-gateway-shape {
558
+ fill: #e9f0e4;
559
+ stroke: #72916f;
560
+ stroke-width: 1.5;
561
+ }
562
+ .approval-gateway-title {
563
+ fill: #35573b;
564
+ font-size: 12px;
565
+ font-weight: 600;
566
+ }
567
+ .approval-branch-shape {
568
+ fill: #f2f5ed;
569
+ stroke: #b5c5ab;
570
+ stroke-dasharray: 4 3;
571
+ }
572
+ .approval-flow-merge {
573
+ fill: #8ba28e;
574
+ }
575
+ .approval-flow-outcome {
576
+ fill: #3c6f48;
577
+ font-size: 12px;
578
+ font-weight: 500;
579
+ }
580
+ .approval-flow-rejection {
581
+ fill: #926451;
582
+ font-size: 11px;
583
+ }
584
+ .flow-node:hover .flow-node-shape,
585
+ .flow-node:focus-visible .flow-node-shape {
586
+ stroke: #668c60;
587
+ stroke-width: 2;
588
+ }
589
+ .flow-node.selected .flow-node-shape {
590
+ fill: #edf5e7;
591
+ stroke: #3e7e50;
592
+ stroke-width: 2;
593
+ }
594
+ .flow-node.path-source .flow-node-shape,
595
+ .flow-node.path-target .flow-node-shape {
596
+ stroke: #397a56;
597
+ stroke-width: 2.5;
598
+ }
599
+ .flow-node.path-target .flow-node-shape {
600
+ fill: #edf5e7;
601
+ }
602
+ .flow-node-title {
603
+ fill: #305539;
604
+ font-size: 16px;
605
+ font-weight: 600;
606
+ pointer-events: none;
607
+ }
608
+ .flow-node-state {
609
+ fill: #819574;
610
+ font-size: 11px;
611
+ pointer-events: none;
612
+ }
613
+ .flow-node-boundary {
614
+ fill: #84966e;
615
+ font-size: 10px;
616
+ pointer-events: none;
617
+ }
618
+ /* 主线、次要分支、关联及异步边分别呈现;透明粗命中线便于选择,不扩大实际可见线条。 */
619
+ .flow-edge {
620
+ cursor: pointer;
621
+ }
622
+ .flow-edge-line {
623
+ fill: none;
624
+ stroke: #537f60;
625
+ stroke-width: 2;
626
+ stroke-linejoin: round;
627
+ }
628
+ .flow-edge-direction {
629
+ fill: #537f60;
630
+ pointer-events: none;
631
+ }
632
+ .flow-edge.branch .flow-edge-line {
633
+ stroke: #a57950;
634
+ stroke-width: 1.7;
635
+ }
636
+ .flow-edge.branch .flow-edge-direction {
637
+ fill: #a57950;
638
+ }
639
+ .flow-edge.branch .flow-edge-label {
640
+ fill: #8c6545;
641
+ }
642
+ .flow-edge.association .flow-edge-line {
643
+ stroke: #8ba28e;
644
+ stroke-width: 1.3;
645
+ }
646
+ .flow-edge.async .flow-edge-line {
647
+ stroke-dasharray: 5 4;
648
+ }
649
+ .flow-edge-hit {
650
+ fill: none;
651
+ stroke: transparent;
652
+ stroke-width: 15;
653
+ }
654
+ .flow-edge-label-box {
655
+ fill: #fcfdf9;
656
+ }
657
+ .flow-edge-label {
658
+ fill: #527253;
659
+ font-size: 11px;
660
+ }
661
+ .flow-edge:hover .flow-edge-line,
662
+ .flow-edge.selected .flow-edge-line {
663
+ stroke: #397a56;
664
+ stroke-width: 2;
665
+ }
666
+ .flow-edge.selected .flow-edge-label {
667
+ fill: #3e7250;
668
+ }
669
+ .flow-edge:hover .flow-edge-direction,
670
+ .flow-edge.selected .flow-edge-direction {
671
+ fill: #397a56;
672
+ }
673
+ .business-detail-close {
674
+ position: absolute;
675
+ right: 13px;
676
+ top: 12px;
677
+ background: none;
678
+ color: #7f9174;
679
+ font-size: 22px;
680
+ padding: 0 5px;
681
+ }
682
+ /* 步骤详情承担说明、来源和技术入口,选中态跟随 URL;源码仅在展开时由脚本请求。 */
683
+ .business-detail {
684
+ min-width: 0;
685
+ border: 1px solid #dce6d7;
686
+ background: #fbfcf8;
687
+ border-radius: 8px;
688
+ padding: 24px;
689
+ position: relative;
690
+ max-height: 728px;
691
+ overflow: auto;
692
+ }
693
+ .business-detail > h3 {
694
+ font-size: 19px;
695
+ line-height: 1.7;
696
+ margin: 0 0 20px;
697
+ font-weight: 600;
698
+ overflow-wrap: anywhere;
699
+ }
700
+ .business-detail-tabs {
701
+ display: flex;
702
+ gap: 25px;
703
+ border-bottom: 1px solid #dfe7d8;
704
+ margin-bottom: 22px;
705
+ }
706
+ .business-detail-tabs button {
707
+ padding: 0 0 11px;
708
+ background: none;
709
+ font-size: 12px;
710
+ color: #8a987f;
711
+ border-bottom: 2px solid transparent;
712
+ }
713
+ .business-detail-tabs button.active {
714
+ color: #346c4e;
715
+ border-color: #346c4e;
716
+ }
717
+ .business-detail-section {
718
+ margin: 0 0 23px;
719
+ }
720
+ .business-detail-section h4 {
721
+ font-size: 11px;
722
+ font-weight: 500;
723
+ color: #6a8765;
724
+ margin: 0 0 9px;
725
+ }
726
+ .business-detail-section p {
727
+ font-size: 12px;
728
+ line-height: 1.95;
729
+ margin: 6px 0;
730
+ color: #4c6349;
731
+ overflow-wrap: anywhere;
732
+ }
733
+ .business-detail .source-note {
734
+ color: #8b9981;
735
+ font-size: 10px;
736
+ }
737
+ .business-evidence {
738
+ display: block;
739
+ text-align: left;
740
+ width: 100%;
741
+ border-bottom: 1px solid #e5ebdf;
742
+ background: none;
743
+ padding: 10px 0;
744
+ font-size: 11px;
745
+ line-height: 1.7;
746
+ color: #557a52;
747
+ }
748
+ .business-technical-link {
749
+ display: block;
750
+ background: none;
751
+ color: #8a9981;
752
+ font-size: 10px;
753
+ padding: 20px 0 0;
754
+ }
755
+ .business-source-picker {
756
+ display: flex;
757
+ flex-wrap: wrap;
758
+ gap: 6px;
759
+ margin-bottom: 16px;
760
+ }
761
+ .business-source-picker button {
762
+ background: #f0f4eb;
763
+ color: #7a8d70;
764
+ border: 1px solid #e1e8d9;
765
+ border-radius: 4px;
766
+ padding: 6px 9px;
767
+ font-size: 10px;
768
+ text-align: left;
769
+ line-height: 1.7;
770
+ }
771
+ .business-source-picker button.active {
772
+ color: #37694a;
773
+ border-color: #83a481;
774
+ background: #eaf2e3;
775
+ }
776
+ .business-empty {
777
+ font-size: 13px;
778
+ color: #84947b;
779
+ line-height: 2;
780
+ padding: 35px 0;
781
+ }
782
+ .business-approval-steps {
783
+ padding-left: 0;
784
+ list-style: none;
785
+ font-size: 12px;
786
+ line-height: 1.9;
787
+ }
788
+ .business-approval-steps > li {
789
+ margin: 10px 0;
790
+ padding-left: 3px;
791
+ }
792
+ .business-approval-steps strong {
793
+ display: block;
794
+ font-size: 12px;
795
+ font-weight: 500;
796
+ }
797
+ .business-approval-steps p {
798
+ font-size: 10px;
799
+ }
800
+ /* 并行分支在规则详情中保留树层级,独立左边线区分分支,不靠列表编号暗示执行先后。 */
801
+ .business-approval-branches {
802
+ margin: 8px 0;
803
+ padding-left: 16px;
804
+ list-style: none;
805
+ border-left: 2px solid #b5c5ab;
806
+ }
807
+ .business-approval-branches > li {
808
+ margin: 10px 0 14px;
809
+ }
810
+ /* 源码预览按行显示并保留原始缩进,横向溢出在代码框内滚动;行号只参与显示。 */
811
+ .source-preview {
812
+ min-width: 0;
813
+ margin-top: 12px;
814
+ }
815
+ .source-preview > summary {
816
+ font-size: 11px;
817
+ color: #6a865e;
818
+ cursor: pointer;
819
+ line-height: 1.9;
820
+ }
821
+ .source-body {
822
+ min-width: 0;
823
+ margin-top: 13px;
824
+ }
825
+ .source-tools {
826
+ display: flex;
827
+ align-items: start;
828
+ justify-content: space-between;
829
+ gap: 10px;
830
+ font-size: 10px;
831
+ color: #7d9372;
832
+ line-height: 1.8;
833
+ margin-bottom: 10px;
834
+ }
835
+ .source-tools > span {
836
+ overflow-wrap: anywhere;
837
+ }
838
+ .source-tools button {
839
+ flex-shrink: 0;
840
+ }
841
+ .source-code {
842
+ border: 1px solid #dce5d5;
843
+ border-radius: 5px;
844
+ overflow: auto;
845
+ background: #f1f5ec;
846
+ padding: 14px 0;
847
+ margin: 0;
848
+ font:
849
+ 11px/1.95 'Cascadia Code',
850
+ Consolas,
851
+ monospace;
852
+ color: #38593c;
853
+ tab-size: 2;
854
+ max-height: 55vh;
855
+ }
856
+ .source-line {
857
+ display: block;
858
+ white-space: pre;
859
+ min-height: 1.95em;
860
+ padding-right: 17px;
861
+ }
862
+ .source-line::before {
863
+ content: attr(data-line);
864
+ display: inline-block;
865
+ position: sticky;
866
+ left: 0;
867
+ width: 43px;
868
+ text-align: right;
869
+ margin-right: 14px;
870
+ padding-right: 11px;
871
+ color: #97a78b;
872
+ border-right: 1px solid #dae3d1;
873
+ background: #f1f5ec;
874
+ user-select: none;
875
+ }
876
+ .source-error {
877
+ font-size: 11px;
878
+ color: #9c6b4e;
879
+ line-height: 1.9;
880
+ overflow-wrap: anywhere;
881
+ }
882
+ .aggregate-list a.aggregate-button {
883
+ display: flex;
884
+ align-items: center;
885
+ }
886
+ .aggregate-button > span:nth-child(2) {
887
+ overflow-wrap: anywhere;
888
+ }
889
+ @media (min-width: 1600px) {
890
+ .business-blocks {
891
+ grid-template-columns: repeat(3, minmax(0, 1fr));
892
+ }
893
+ }
894
+ /* 随视窗收窄调整卡片与工作区宽度;后续断点将详情移到下方,并缩短触控画布高度。 */
895
+ @media (max-width: 1150px) {
896
+ .business-view {
897
+ padding: 24px 20px;
898
+ }
899
+ .business-workspace {
900
+ gap: 18px;
901
+ }
902
+ .business-workspace.inspecting {
903
+ grid-template-columns: minmax(0, 1fr) 310px;
904
+ }
905
+ .business-detail {
906
+ padding: 18px;
907
+ }
908
+ }
909
+ @media (max-width: 800px) {
910
+ .business-workspace,
911
+ .business-workspace.inspecting {
912
+ grid-template-columns: 1fr;
913
+ }
914
+ .business-detail {
915
+ max-height: none;
916
+ }
917
+ .flow-workspace.expanded.inspecting .business-detail {
918
+ position: absolute;
919
+ z-index: 5;
920
+ top: 82px;
921
+ right: 12px;
922
+ bottom: 12px;
923
+ width: min(350px, calc(100% - 24px));
924
+ height: auto;
925
+ box-shadow: -8px 0 30px #294b2424;
926
+ }
927
+ .business-intro,
928
+ .business-scene-heading {
929
+ align-items: start;
930
+ }
931
+ .business-total {
932
+ display: none;
933
+ }
934
+ .business-intro h2 {
935
+ font-size: 23px;
936
+ }
937
+ }
938
+ @media (max-width: 980px) {
939
+ .app-shell:has(.business-page) {
940
+ grid-template-columns: minmax(0, 1fr);
941
+ }
942
+ .app-shell:has(.business-page) .sidebar {
943
+ display: none;
944
+ }
945
+ .app-shell:has(.business-page) .mobile-filters {
946
+ display: inline-flex;
947
+ }
948
+ .app-shell:has(.business-page) .sidebar.open {
949
+ display: flex;
950
+ position: fixed;
951
+ top: 69px;
952
+ bottom: 0;
953
+ left: 0;
954
+ width: 220px;
955
+ z-index: 20;
956
+ overflow: auto;
957
+ box-shadow: 8px 0 30px #243b2520;
958
+ }
959
+ }
960
+ @media (max-width: 640px) {
961
+ .business-view {
962
+ padding: 20px 16px;
963
+ }
964
+ .business-intro h2 {
965
+ font-size: 21px;
966
+ }
967
+ .business-scene-heading {
968
+ flex-direction: column;
969
+ gap: 12px;
970
+ }
971
+ .business-block {
972
+ min-height: 235px;
973
+ padding: 21px 20px 0;
974
+ }
975
+ .business-breadcrumb {
976
+ gap: 7px;
977
+ margin-bottom: 23px;
978
+ font-size: 11px;
979
+ }
980
+ .flowchart-canvas {
981
+ height: 550px;
982
+ }
983
+ .flowchart-toolbar {
984
+ padding: 10px;
985
+ }
986
+ .flowchart-controls button {
987
+ padding: 4px 8px;
988
+ font-size: 11px;
989
+ }
990
+ .flowchart-zoom {
991
+ left: 10px;
992
+ bottom: 10px;
993
+ }
994
+ .flowchart-zoom button {
995
+ padding: 4px 7px;
996
+ }
997
+ .flowchart-toolbar > strong {
998
+ display: none;
999
+ }
1000
+ .flowchart-footer {
1001
+ font-size: 9px;
1002
+ padding: 8px 10px;
1003
+ }
1004
+ }
1005
+ /* 尊重系统减少动画偏好,只移除过渡效果,不影响拖动和相机坐标计算。 */
1006
+ @media (prefers-reduced-motion: reduce) {
1007
+ .business-block,
1008
+ .business-flow-entry {
1009
+ transition: none;
1010
+ }
1011
+ }