@things-factory/ops-master 10.1.248 → 10.1.250

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 (429) hide show
  1. package/dist-client/bootstrap.d.ts +19 -0
  2. package/dist-client/bootstrap.js +66 -0
  3. package/dist-client/bootstrap.js.map +1 -0
  4. package/dist-client/index.d.ts +17 -0
  5. package/dist-client/index.js +21 -0
  6. package/dist-client/index.js.map +1 -0
  7. package/dist-client/master-change-approval.d.ts +14 -0
  8. package/dist-client/master-change-approval.js +36 -0
  9. package/dist-client/master-change-approval.js.map +1 -0
  10. package/dist-client/master-change-policy-axes.d.ts +37 -0
  11. package/dist-client/master-change-policy-axes.js +29 -0
  12. package/dist-client/master-change-policy-axes.js.map +1 -0
  13. package/dist-client/master-change-policy-panel.d.ts +59 -0
  14. package/dist-client/master-change-policy-panel.js +454 -0
  15. package/dist-client/master-change-policy-panel.js.map +1 -0
  16. package/dist-client/master-change-providers.d.ts +4 -0
  17. package/dist-client/master-change-providers.js +91 -0
  18. package/dist-client/master-change-providers.js.map +1 -0
  19. package/dist-client/pages/master/applied-when-dialog.d.ts +48 -0
  20. package/dist-client/pages/master/applied-when-dialog.js +137 -0
  21. package/dist-client/pages/master/applied-when-dialog.js.map +1 -0
  22. package/dist-client/pages/master/assignment-fields.d.ts +27 -0
  23. package/dist-client/pages/master/assignment-fields.js +62 -0
  24. package/dist-client/pages/master/assignment-fields.js.map +1 -0
  25. package/dist-client/pages/master/equipment-class.d.ts +12 -0
  26. package/dist-client/pages/master/equipment-class.js +42 -0
  27. package/dist-client/pages/master/equipment-class.js.map +1 -0
  28. package/dist-client/pages/master/equipment.d.ts +12 -0
  29. package/dist-client/pages/master/equipment.js +58 -0
  30. package/dist-client/pages/master/equipment.js.map +1 -0
  31. package/dist-client/pages/master/grist-iso-duration.d.ts +20 -0
  32. package/dist-client/pages/master/grist-iso-duration.js +70 -0
  33. package/dist-client/pages/master/grist-iso-duration.js.map +1 -0
  34. package/dist-client/pages/master/grist-reference.d.ts +91 -0
  35. package/dist-client/pages/master/grist-reference.js +419 -0
  36. package/dist-client/pages/master/grist-reference.js.map +1 -0
  37. package/dist-client/pages/master/import-rows.d.ts +35 -0
  38. package/dist-client/pages/master/import-rows.js +66 -0
  39. package/dist-client/pages/master/import-rows.js.map +1 -0
  40. package/dist-client/pages/master/iso-duration.d.ts +34 -0
  41. package/dist-client/pages/master/iso-duration.js +76 -0
  42. package/dist-client/pages/master/iso-duration.js.map +1 -0
  43. package/dist-client/pages/master/master-options.d.ts +40 -0
  44. package/dist-client/pages/master/master-options.js +54 -0
  45. package/dist-client/pages/master/master-options.js.map +1 -0
  46. package/dist-client/pages/master/master-page-base.d.ts +369 -0
  47. package/dist-client/pages/master/master-page-base.js +657 -0
  48. package/dist-client/pages/master/master-page-base.js.map +1 -0
  49. package/dist-client/pages/master/material-class.d.ts +12 -0
  50. package/dist-client/pages/master/material-class.js +42 -0
  51. package/dist-client/pages/master/material-class.js.map +1 -0
  52. package/dist-client/pages/master/material-definition.d.ts +5 -0
  53. package/dist-client/pages/master/material-definition.js +14 -0
  54. package/dist-client/pages/master/material-definition.js.map +1 -0
  55. package/dist-client/pages/master/material-revision-fields.d.ts +2 -0
  56. package/dist-client/pages/master/material-revision-fields.js +43 -0
  57. package/dist-client/pages/master/material-revision-fields.js.map +1 -0
  58. package/dist-client/pages/master/operation-definition.d.ts +12 -0
  59. package/dist-client/pages/master/operation-definition.js +49 -0
  60. package/dist-client/pages/master/operation-definition.js.map +1 -0
  61. package/dist-client/pages/master/operational-location.d.ts +84 -0
  62. package/dist-client/pages/master/operational-location.js +432 -0
  63. package/dist-client/pages/master/operational-location.js.map +1 -0
  64. package/dist-client/pages/master/person.d.ts +12 -0
  65. package/dist-client/pages/master/person.js +41 -0
  66. package/dist-client/pages/master/person.js.map +1 -0
  67. package/dist-client/pages/master/personnel-class.d.ts +12 -0
  68. package/dist-client/pages/master/personnel-class.js +43 -0
  69. package/dist-client/pages/master/personnel-class.js.map +1 -0
  70. package/dist-client/pages/master/physical-asset-class.d.ts +12 -0
  71. package/dist-client/pages/master/physical-asset-class.js +40 -0
  72. package/dist-client/pages/master/physical-asset-class.js.map +1 -0
  73. package/dist-client/pages/master/physical-asset.d.ts +12 -0
  74. package/dist-client/pages/master/physical-asset.js +41 -0
  75. package/dist-client/pages/master/physical-asset.js.map +1 -0
  76. package/dist-client/pages/master/recipe-definition.d.ts +5 -0
  77. package/dist-client/pages/master/recipe-definition.js +14 -0
  78. package/dist-client/pages/master/recipe-definition.js.map +1 -0
  79. package/dist-client/pages/master/reference-targets.d.ts +42 -0
  80. package/dist-client/pages/master/reference-targets.js +82 -0
  81. package/dist-client/pages/master/reference-targets.js.map +1 -0
  82. package/dist-client/pages/master/revision-comparison.d.ts +49 -0
  83. package/dist-client/pages/master/revision-comparison.js +560 -0
  84. package/dist-client/pages/master/revision-comparison.js.map +1 -0
  85. package/dist-client/pages/master/revision-view.d.ts +34 -0
  86. package/dist-client/pages/master/revision-view.js +145 -0
  87. package/dist-client/pages/master/revision-view.js.map +1 -0
  88. package/dist-client/pages/master/revision-workspace.d.ts +50 -0
  89. package/dist-client/pages/master/revision-workspace.js +763 -0
  90. package/dist-client/pages/master/revision-workspace.js.map +1 -0
  91. package/dist-client/pages/master/route-definition.d.ts +19 -0
  92. package/dist-client/pages/master/route-definition.js +40 -0
  93. package/dist-client/pages/master/route-definition.js.map +1 -0
  94. package/dist-client/pages/master/stop-reason.d.ts +12 -0
  95. package/dist-client/pages/master/stop-reason.js +48 -0
  96. package/dist-client/pages/master/stop-reason.js.map +1 -0
  97. package/dist-client/pages/master/test-specification.d.ts +5 -0
  98. package/dist-client/pages/master/test-specification.js +14 -0
  99. package/dist-client/pages/master/test-specification.js.map +1 -0
  100. package/dist-client/pages/master-axes.d.ts +24 -0
  101. package/dist-client/pages/master-axes.js +39 -0
  102. package/dist-client/pages/master-axes.js.map +1 -0
  103. package/dist-client/route.d.ts +1 -0
  104. package/dist-client/route.js +81 -0
  105. package/dist-client/route.js.map +1 -0
  106. package/dist-client/tsconfig.tsbuildinfo +1 -0
  107. package/dist-server/index.d.ts +1 -0
  108. package/dist-server/index.js +19 -0
  109. package/dist-server/index.js.map +1 -0
  110. package/dist-server/service/ai-entry/master-entry-rules.d.ts +175 -0
  111. package/dist-server/service/ai-entry/master-entry-rules.js +302 -0
  112. package/dist-server/service/ai-entry/master-entry-rules.js.map +1 -0
  113. package/dist-server/service/ai-entry/master-entry-targets.d.ts +23 -0
  114. package/dist-server/service/ai-entry/master-entry-targets.js +293 -0
  115. package/dist-server/service/ai-entry/master-entry-targets.js.map +1 -0
  116. package/dist-server/service/approval-route.d.ts +37 -0
  117. package/dist-server/service/approval-route.js +34 -0
  118. package/dist-server/service/approval-route.js.map +1 -0
  119. package/dist-server/service/asset/asset-lifecycle.d.ts +106 -0
  120. package/dist-server/service/asset/asset-lifecycle.js +126 -0
  121. package/dist-server/service/asset/asset-lifecycle.js.map +1 -0
  122. package/dist-server/service/asset/asset-master-resolver.d.ts +53 -0
  123. package/dist-server/service/asset/asset-master-resolver.js +185 -0
  124. package/dist-server/service/asset/asset-master-resolver.js.map +1 -0
  125. package/dist-server/service/asset/asset-master.d.ts +21 -0
  126. package/dist-server/service/asset/asset-master.js +25 -0
  127. package/dist-server/service/asset/asset-master.js.map +1 -0
  128. package/dist-server/service/asset/asset-query.d.ts +16 -0
  129. package/dist-server/service/asset/asset-query.js +72 -0
  130. package/dist-server/service/asset/asset-query.js.map +1 -0
  131. package/dist-server/service/asset/index.d.ts +6 -0
  132. package/dist-server/service/asset/index.js +10 -0
  133. package/dist-server/service/asset/index.js.map +1 -0
  134. package/dist-server/service/asset/physical-asset-class.d.ts +34 -0
  135. package/dist-server/service/asset/physical-asset-class.js +104 -0
  136. package/dist-server/service/asset/physical-asset-class.js.map +1 -0
  137. package/dist-server/service/asset/physical-asset.d.ts +66 -0
  138. package/dist-server/service/asset/physical-asset.js +123 -0
  139. package/dist-server/service/asset/physical-asset.js.map +1 -0
  140. package/dist-server/service/assignment/applied-when.d.ts +24 -0
  141. package/dist-server/service/assignment/applied-when.js +16 -0
  142. package/dist-server/service/assignment/applied-when.js.map +1 -0
  143. package/dist-server/service/assignment/assignment-history.d.ts +92 -0
  144. package/dist-server/service/assignment/assignment-history.js +289 -0
  145. package/dist-server/service/assignment/assignment-history.js.map +1 -0
  146. package/dist-server/service/assignment/assignment-write.d.ts +42 -0
  147. package/dist-server/service/assignment/assignment-write.js +101 -0
  148. package/dist-server/service/assignment/assignment-write.js.map +1 -0
  149. package/dist-server/service/assignment/master-value-claim.d.ts +135 -0
  150. package/dist-server/service/assignment/master-value-claim.js +174 -0
  151. package/dist-server/service/assignment/master-value-claim.js.map +1 -0
  152. package/dist-server/service/equipment/equipment-class.d.ts +34 -0
  153. package/dist-server/service/equipment/equipment-class.js +104 -0
  154. package/dist-server/service/equipment/equipment-class.js.map +1 -0
  155. package/dist-server/service/equipment/equipment-master-resolver.d.ts +77 -0
  156. package/dist-server/service/equipment/equipment-master-resolver.js +266 -0
  157. package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -0
  158. package/dist-server/service/equipment/equipment-master.d.ts +30 -0
  159. package/dist-server/service/equipment/equipment-master.js +53 -0
  160. package/dist-server/service/equipment/equipment-master.js.map +1 -0
  161. package/dist-server/service/equipment/equipment-query.d.ts +16 -0
  162. package/dist-server/service/equipment/equipment-query.js +72 -0
  163. package/dist-server/service/equipment/equipment-query.js.map +1 -0
  164. package/dist-server/service/equipment/equipment.d.ts +71 -0
  165. package/dist-server/service/equipment/equipment.js +138 -0
  166. package/dist-server/service/equipment/equipment.js.map +1 -0
  167. package/dist-server/service/equipment/index.d.ts +8 -0
  168. package/dist-server/service/equipment/index.js +12 -0
  169. package/dist-server/service/equipment/index.js.map +1 -0
  170. package/dist-server/service/equipment/state-period-rules.d.ts +95 -0
  171. package/dist-server/service/equipment/state-period-rules.js +122 -0
  172. package/dist-server/service/equipment/state-period-rules.js.map +1 -0
  173. package/dist-server/service/equipment/stop-reason-query.d.ts +11 -0
  174. package/dist-server/service/equipment/stop-reason-query.js +39 -0
  175. package/dist-server/service/equipment/stop-reason-query.js.map +1 -0
  176. package/dist-server/service/equipment/stop-reason.d.ts +58 -0
  177. package/dist-server/service/equipment/stop-reason.js +114 -0
  178. package/dist-server/service/equipment/stop-reason.js.map +1 -0
  179. package/dist-server/service/index.d.ts +82 -0
  180. package/dist-server/service/index.js +145 -0
  181. package/dist-server/service/index.js.map +1 -0
  182. package/dist-server/service/location/index.d.ts +5 -0
  183. package/dist-server/service/location/index.js +9 -0
  184. package/dist-server/service/location/index.js.map +1 -0
  185. package/dist-server/service/location/location-master-resolver.d.ts +60 -0
  186. package/dist-server/service/location/location-master-resolver.js +313 -0
  187. package/dist-server/service/location/location-master-resolver.js.map +1 -0
  188. package/dist-server/service/location/location-master.d.ts +26 -0
  189. package/dist-server/service/location/location-master.js +28 -0
  190. package/dist-server/service/location/location-master.js.map +1 -0
  191. package/dist-server/service/location/location-query.d.ts +15 -0
  192. package/dist-server/service/location/location-query.js +56 -0
  193. package/dist-server/service/location/location-query.js.map +1 -0
  194. package/dist-server/service/location/operational-location.d.ts +116 -0
  195. package/dist-server/service/location/operational-location.js +157 -0
  196. package/dist-server/service/location/operational-location.js.map +1 -0
  197. package/dist-server/service/master-axis.d.ts +40 -0
  198. package/dist-server/service/master-axis.js +57 -0
  199. package/dist-server/service/master-axis.js.map +1 -0
  200. package/dist-server/service/master-change-approval/approval-input.d.ts +17 -0
  201. package/dist-server/service/master-change-approval/approval-input.js +35 -0
  202. package/dist-server/service/master-change-approval/approval-input.js.map +1 -0
  203. package/dist-server/service/master-change-approval/builtin-axes.d.ts +4 -0
  204. package/dist-server/service/master-change-approval/builtin-axes.js +96 -0
  205. package/dist-server/service/master-change-approval/builtin-axes.js.map +1 -0
  206. package/dist-server/service/master-change-approval/index.d.ts +14 -0
  207. package/dist-server/service/master-change-approval/index.js +37 -0
  208. package/dist-server/service/master-change-approval/index.js.map +1 -0
  209. package/dist-server/service/master-change-approval/master-change-axis.d.ts +54 -0
  210. package/dist-server/service/master-change-approval/master-change-axis.js +17 -0
  211. package/dist-server/service/master-change-approval/master-change-axis.js.map +1 -0
  212. package/dist-server/service/master-change-approval/master-change-flow.d.ts +65 -0
  213. package/dist-server/service/master-change-approval/master-change-flow.js +125 -0
  214. package/dist-server/service/master-change-approval/master-change-flow.js.map +1 -0
  215. package/dist-server/service/master-change-approval/master-change-resolver.d.ts +18 -0
  216. package/dist-server/service/master-change-approval/master-change-resolver.js +58 -0
  217. package/dist-server/service/master-change-approval/master-change-resolver.js.map +1 -0
  218. package/dist-server/service/master-change-policy.d.ts +122 -0
  219. package/dist-server/service/master-change-policy.js +304 -0
  220. package/dist-server/service/master-change-policy.js.map +1 -0
  221. package/dist-server/service/master-conformance-resolver.d.ts +34 -0
  222. package/dist-server/service/master-conformance-resolver.js +153 -0
  223. package/dist-server/service/master-conformance-resolver.js.map +1 -0
  224. package/dist-server/service/master-conformance.d.ts +80 -0
  225. package/dist-server/service/master-conformance.js +266 -0
  226. package/dist-server/service/master-conformance.js.map +1 -0
  227. package/dist-server/service/master-crud.d.ts +55 -0
  228. package/dist-server/service/master-crud.js +93 -0
  229. package/dist-server/service/master-crud.js.map +1 -0
  230. package/dist-server/service/master-list.d.ts +12 -0
  231. package/dist-server/service/master-list.js +30 -0
  232. package/dist-server/service/master-list.js.map +1 -0
  233. package/dist-server/service/master-page-query.d.ts +33 -0
  234. package/dist-server/service/master-page-query.js +55 -0
  235. package/dist-server/service/master-page-query.js.map +1 -0
  236. package/dist-server/service/master-page.d.ts +85 -0
  237. package/dist-server/service/master-page.js +104 -0
  238. package/dist-server/service/master-page.js.map +1 -0
  239. package/dist-server/service/material/index.d.ts +7 -0
  240. package/dist-server/service/material/index.js +12 -0
  241. package/dist-server/service/material/index.js.map +1 -0
  242. package/dist-server/service/material/material-axis-status.d.ts +8 -0
  243. package/dist-server/service/material/material-axis-status.js +19 -0
  244. package/dist-server/service/material/material-axis-status.js.map +1 -0
  245. package/dist-server/service/material/material-class.d.ts +34 -0
  246. package/dist-server/service/material/material-class.js +104 -0
  247. package/dist-server/service/material/material-class.js.map +1 -0
  248. package/dist-server/service/material/material-definition.d.ts +45 -0
  249. package/dist-server/service/material/material-definition.js +125 -0
  250. package/dist-server/service/material/material-definition.js.map +1 -0
  251. package/dist-server/service/material/material-effective-list.d.ts +39 -0
  252. package/dist-server/service/material/material-effective-list.js +54 -0
  253. package/dist-server/service/material/material-effective-list.js.map +1 -0
  254. package/dist-server/service/material/material-master-resolver.d.ts +106 -0
  255. package/dist-server/service/material/material-master-resolver.js +351 -0
  256. package/dist-server/service/material/material-master-resolver.js.map +1 -0
  257. package/dist-server/service/material/material-master.d.ts +9 -0
  258. package/dist-server/service/material/material-master.js +24 -0
  259. package/dist-server/service/material/material-master.js.map +1 -0
  260. package/dist-server/service/material/material-query.d.ts +16 -0
  261. package/dist-server/service/material/material-query.js +79 -0
  262. package/dist-server/service/material/material-query.js.map +1 -0
  263. package/dist-server/service/material/material-revision-content.d.ts +10 -0
  264. package/dist-server/service/material/material-revision-content.js +92 -0
  265. package/dist-server/service/material/material-revision-content.js.map +1 -0
  266. package/dist-server/service/material/material-revision-resolver.d.ts +60 -0
  267. package/dist-server/service/material/material-revision-resolver.js +96 -0
  268. package/dist-server/service/material/material-revision-resolver.js.map +1 -0
  269. package/dist-server/service/material/material-revision-service.d.ts +179 -0
  270. package/dist-server/service/material/material-revision-service.js +687 -0
  271. package/dist-server/service/material/material-revision-service.js.map +1 -0
  272. package/dist-server/service/material/material-revision.d.ts +86 -0
  273. package/dist-server/service/material/material-revision.js +339 -0
  274. package/dist-server/service/material/material-revision.js.map +1 -0
  275. package/dist-server/service/material/recipe-index.d.ts +23 -0
  276. package/dist-server/service/material/recipe-index.js +44 -0
  277. package/dist-server/service/material/recipe-index.js.map +1 -0
  278. package/dist-server/service/operation/index.d.ts +6 -0
  279. package/dist-server/service/operation/index.js +10 -0
  280. package/dist-server/service/operation/index.js.map +1 -0
  281. package/dist-server/service/operation/operation-definition.d.ts +52 -0
  282. package/dist-server/service/operation/operation-definition.js +143 -0
  283. package/dist-server/service/operation/operation-definition.js.map +1 -0
  284. package/dist-server/service/operation/operation-master-resolver.d.ts +52 -0
  285. package/dist-server/service/operation/operation-master-resolver.js +187 -0
  286. package/dist-server/service/operation/operation-master-resolver.js.map +1 -0
  287. package/dist-server/service/operation/operation-master.d.ts +21 -0
  288. package/dist-server/service/operation/operation-master.js +28 -0
  289. package/dist-server/service/operation/operation-master.js.map +1 -0
  290. package/dist-server/service/operation/operation-query.d.ts +15 -0
  291. package/dist-server/service/operation/operation-query.js +56 -0
  292. package/dist-server/service/operation/operation-query.js.map +1 -0
  293. package/dist-server/service/operation/operation-readiness-resolver.d.ts +39 -0
  294. package/dist-server/service/operation/operation-readiness-resolver.js +111 -0
  295. package/dist-server/service/operation/operation-readiness-resolver.js.map +1 -0
  296. package/dist-server/service/operation/operation-readiness.d.ts +34 -0
  297. package/dist-server/service/operation/operation-readiness.js +133 -0
  298. package/dist-server/service/operation/operation-readiness.js.map +1 -0
  299. package/dist-server/service/personnel/index.d.ts +6 -0
  300. package/dist-server/service/personnel/index.js +10 -0
  301. package/dist-server/service/personnel/index.js.map +1 -0
  302. package/dist-server/service/personnel/person.d.ts +51 -0
  303. package/dist-server/service/personnel/person.js +119 -0
  304. package/dist-server/service/personnel/person.js.map +1 -0
  305. package/dist-server/service/personnel/personnel-class-readiness.d.ts +22 -0
  306. package/dist-server/service/personnel/personnel-class-readiness.js +98 -0
  307. package/dist-server/service/personnel/personnel-class-readiness.js.map +1 -0
  308. package/dist-server/service/personnel/personnel-class.d.ts +54 -0
  309. package/dist-server/service/personnel/personnel-class.js +114 -0
  310. package/dist-server/service/personnel/personnel-class.js.map +1 -0
  311. package/dist-server/service/personnel/personnel-master-resolver.d.ts +53 -0
  312. package/dist-server/service/personnel/personnel-master-resolver.js +187 -0
  313. package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -0
  314. package/dist-server/service/personnel/personnel-master.d.ts +39 -0
  315. package/dist-server/service/personnel/personnel-master.js +34 -0
  316. package/dist-server/service/personnel/personnel-master.js.map +1 -0
  317. package/dist-server/service/personnel/personnel-query.d.ts +29 -0
  318. package/dist-server/service/personnel/personnel-query.js +79 -0
  319. package/dist-server/service/personnel/personnel-query.js.map +1 -0
  320. package/dist-server/service/personnel/qualification.d.ts +104 -0
  321. package/dist-server/service/personnel/qualification.js +147 -0
  322. package/dist-server/service/personnel/qualification.js.map +1 -0
  323. package/dist-server/service/quality/index.d.ts +4 -0
  324. package/dist-server/service/quality/index.js +8 -0
  325. package/dist-server/service/quality/index.js.map +1 -0
  326. package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +12 -0
  327. package/dist-server/service/quality/nonconformance-cause-resolver.js +60 -0
  328. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +1 -0
  329. package/dist-server/service/quality/nonconformance-cause.d.ts +20 -0
  330. package/dist-server/service/quality/nonconformance-cause.js +90 -0
  331. package/dist-server/service/quality/nonconformance-cause.js.map +1 -0
  332. package/dist-server/service/recipe/index.d.ts +10 -0
  333. package/dist-server/service/recipe/index.js +16 -0
  334. package/dist-server/service/recipe/index.js.map +1 -0
  335. package/dist-server/service/recipe/recipe-definition.d.ts +75 -0
  336. package/dist-server/service/recipe/recipe-definition.js +143 -0
  337. package/dist-server/service/recipe/recipe-definition.js.map +1 -0
  338. package/dist-server/service/recipe/recipe-effective-list.d.ts +49 -0
  339. package/dist-server/service/recipe/recipe-effective-list.js +96 -0
  340. package/dist-server/service/recipe/recipe-effective-list.js.map +1 -0
  341. package/dist-server/service/recipe/recipe-master-resolver.d.ts +28 -0
  342. package/dist-server/service/recipe/recipe-master-resolver.js +128 -0
  343. package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -0
  344. package/dist-server/service/recipe/recipe-master.d.ts +37 -0
  345. package/dist-server/service/recipe/recipe-master.js +47 -0
  346. package/dist-server/service/recipe/recipe-master.js.map +1 -0
  347. package/dist-server/service/recipe/recipe-query.d.ts +21 -0
  348. package/dist-server/service/recipe/recipe-query.js +82 -0
  349. package/dist-server/service/recipe/recipe-query.js.map +1 -0
  350. package/dist-server/service/recipe/recipe-revision-content.d.ts +32 -0
  351. package/dist-server/service/recipe/recipe-revision-content.js +70 -0
  352. package/dist-server/service/recipe/recipe-revision-content.js.map +1 -0
  353. package/dist-server/service/recipe/recipe-revision-line.d.ts +30 -0
  354. package/dist-server/service/recipe/recipe-revision-line.js +95 -0
  355. package/dist-server/service/recipe/recipe-revision-line.js.map +1 -0
  356. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +65 -0
  357. package/dist-server/service/recipe/recipe-revision-resolver.js +96 -0
  358. package/dist-server/service/recipe/recipe-revision-resolver.js.map +1 -0
  359. package/dist-server/service/recipe/recipe-revision-service.d.ts +183 -0
  360. package/dist-server/service/recipe/recipe-revision-service.js +754 -0
  361. package/dist-server/service/recipe/recipe-revision-service.js.map +1 -0
  362. package/dist-server/service/recipe/recipe-revision.d.ts +102 -0
  363. package/dist-server/service/recipe/recipe-revision.js +373 -0
  364. package/dist-server/service/recipe/recipe-revision.js.map +1 -0
  365. package/dist-server/service/recipe/route-definition.d.ts +51 -0
  366. package/dist-server/service/recipe/route-definition.js +114 -0
  367. package/dist-server/service/recipe/route-definition.js.map +1 -0
  368. package/dist-server/service/resource/class-lineage.d.ts +46 -0
  369. package/dist-server/service/resource/class-lineage.js +80 -0
  370. package/dist-server/service/resource/class-lineage.js.map +1 -0
  371. package/dist-server/service/resource/class-members.d.ts +36 -0
  372. package/dist-server/service/resource/class-members.js +59 -0
  373. package/dist-server/service/resource/class-members.js.map +1 -0
  374. package/dist-server/service/resource/referrers.d.ts +54 -0
  375. package/dist-server/service/resource/referrers.js +99 -0
  376. package/dist-server/service/resource/referrers.js.map +1 -0
  377. package/dist-server/service/resource/resource-class.d.ts +25 -0
  378. package/dist-server/service/resource/resource-class.js +29 -0
  379. package/dist-server/service/resource/resource-class.js.map +1 -0
  380. package/dist-server/service/revision-baseline.d.ts +71 -0
  381. package/dist-server/service/revision-baseline.js +87 -0
  382. package/dist-server/service/revision-baseline.js.map +1 -0
  383. package/dist-server/service/row-lock.d.ts +22 -0
  384. package/dist-server/service/row-lock.js +31 -0
  385. package/dist-server/service/row-lock.js.map +1 -0
  386. package/dist-server/service/status/axis-stamp.d.ts +16 -0
  387. package/dist-server/service/status/axis-stamp.js +22 -0
  388. package/dist-server/service/status/axis-stamp.js.map +1 -0
  389. package/dist-server/service/status/index.d.ts +3 -0
  390. package/dist-server/service/status/index.js +7 -0
  391. package/dist-server/service/status/index.js.map +1 -0
  392. package/dist-server/service/status/master-status.d.ts +38 -0
  393. package/dist-server/service/status/master-status.js +129 -0
  394. package/dist-server/service/status/master-status.js.map +1 -0
  395. package/dist-server/service/test-spec/criteria-check.d.ts +53 -0
  396. package/dist-server/service/test-spec/criteria-check.js +142 -0
  397. package/dist-server/service/test-spec/criteria-check.js.map +1 -0
  398. package/dist-server/service/test-spec/criteria-rows.d.ts +89 -0
  399. package/dist-server/service/test-spec/criteria-rows.js +139 -0
  400. package/dist-server/service/test-spec/criteria-rows.js.map +1 -0
  401. package/dist-server/service/test-spec/index.d.ts +6 -0
  402. package/dist-server/service/test-spec/index.js +11 -0
  403. package/dist-server/service/test-spec/index.js.map +1 -0
  404. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +34 -0
  405. package/dist-server/service/test-spec/test-spec-effective-list.js +42 -0
  406. package/dist-server/service/test-spec/test-spec-effective-list.js.map +1 -0
  407. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +44 -0
  408. package/dist-server/service/test-spec/test-spec-master-resolver.js +144 -0
  409. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -0
  410. package/dist-server/service/test-spec/test-spec-master.d.ts +6 -0
  411. package/dist-server/service/test-spec/test-spec-master.js +18 -0
  412. package/dist-server/service/test-spec/test-spec-master.js.map +1 -0
  413. package/dist-server/service/test-spec/test-spec-query.d.ts +15 -0
  414. package/dist-server/service/test-spec/test-spec-query.js +61 -0
  415. package/dist-server/service/test-spec/test-spec-query.js.map +1 -0
  416. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +59 -0
  417. package/dist-server/service/test-spec/test-spec-revision-resolver.js +96 -0
  418. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -0
  419. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +178 -0
  420. package/dist-server/service/test-spec/test-spec-revision-service.js +685 -0
  421. package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -0
  422. package/dist-server/service/test-spec/test-spec-revision.d.ts +86 -0
  423. package/dist-server/service/test-spec/test-spec-revision.js +334 -0
  424. package/dist-server/service/test-spec/test-spec-revision.js.map +1 -0
  425. package/dist-server/service/test-spec/test-specification.d.ts +47 -0
  426. package/dist-server/service/test-spec/test-specification.js +119 -0
  427. package/dist-server/service/test-spec/test-specification.js.map +1 -0
  428. package/dist-server/tsconfig.tsbuildinfo +1 -0
  429. package/package.json +4 -4
@@ -0,0 +1,560 @@
1
+ var MasterRevisionReview_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { addressController, writeAddress } from '@operato/utils/address.js';
4
+ import { materialRevisionFields } from './material-revision-fields.js';
5
+ import { LitElement, html, css } from 'lit';
6
+ import { customElement, property, state } from 'lit/decorators.js';
7
+ import { showEntity360, hideEntity360, navigateEntity360, canGoBackEntity360 } from '@operato/layout';
8
+ import { i18next, localize } from '@operato/i18n';
9
+ import { ScrollbarStyles } from '@operato/styles';
10
+ import { revisionDifferences, revisionDetailAddress, revisionSideAt, isBaseline, reasonOf } from './revision-view.js';
11
+ export const revisionText = (key, params = {}) => String(i18next.t('revision-ui.' + key, params));
12
+ export const revisionDate = (value) => value
13
+ ? new Intl.DateTimeFormat(i18next.language || 'en', { dateStyle: 'medium', timeStyle: 'short' }).format(new Date(value))
14
+ : '—';
15
+ export const revisionStyles = css `
16
+ .material-property { border: 1px solid var(--ui-line, #ddd); margin: 12px 0; padding: 12px; min-width: 0; }
17
+ .material-property legend { font-weight: 600; padding: 0 6px; }
18
+ .material-property-values { display: grid; grid-template-columns: minmax(70px, 1fr) minmax(0, 3fr); gap: 8px; }
19
+ .material-property-values dt { color: var(--md-sys-color-on-surface-variant); }
20
+ .material-property-values dd { margin: 0; overflow-wrap: anywhere; }
21
+ :host {
22
+ color: var(--md-sys-color-on-surface);
23
+ font: inherit;
24
+ }
25
+ table {
26
+ width: 100%;
27
+ border-collapse: collapse;
28
+ font-size: var(--ui-t-small, 13px);
29
+ }
30
+ th,
31
+ td {
32
+ padding: 10px 12px;
33
+ border-bottom: 1px solid var(--ui-line);
34
+ text-align: left;
35
+ vertical-align: top;
36
+ overflow-wrap: anywhere;
37
+ }
38
+ th {
39
+ color: var(--md-sys-color-on-surface-variant);
40
+ font-weight: 600;
41
+ }
42
+ .scroll {
43
+ overflow: auto;
44
+ }
45
+ .muted {
46
+ color: var(--md-sys-color-on-surface-variant);
47
+ }
48
+ .pill {
49
+ display: inline-block;
50
+ padding: 3px 8px;
51
+ border-radius: 4px;
52
+ background: var(--md-sys-color-secondary-container);
53
+ color: var(--md-sys-color-on-secondary-container);
54
+ }
55
+ .before {
56
+ color: var(--md-sys-color-on-surface-variant);
57
+ }
58
+ .after {
59
+ font-weight: 600;
60
+ }
61
+ h3 {
62
+ font-size: var(--ui-t-title, 16px);
63
+ margin: 16px 0 10px;
64
+ }
65
+ button {
66
+ font: inherit;
67
+ min-height: var(--form-action-height, 32px);
68
+ padding: 4px 12px;
69
+ border: 1px solid var(--ui-line);
70
+ border-radius: 4px;
71
+ color: inherit;
72
+ background: var(--md-sys-color-surface);
73
+ cursor: pointer;
74
+ }
75
+ button.primary {
76
+ background: var(--md-sys-color-primary);
77
+ color: var(--md-sys-color-on-primary);
78
+ border-color: transparent;
79
+ }
80
+ button:disabled {
81
+ opacity: 0.5;
82
+ cursor: default;
83
+ }
84
+ button:focus-visible,
85
+ a:focus-visible,
86
+ input:focus-visible,
87
+ textarea:focus-visible,
88
+ select:focus-visible,
89
+ summary:focus-visible {
90
+ outline: 2px solid var(--md-sys-color-primary);
91
+ outline-offset: 3px;
92
+ }
93
+ details {
94
+ margin: 12px 0;
95
+ }
96
+ summary {
97
+ cursor: pointer;
98
+ padding: 8px 0;
99
+ }
100
+ `;
101
+ let MasterRevisionComparison = class MasterRevisionComparison extends localize(i18next)(LitElement) {
102
+ constructor() {
103
+ super(...arguments);
104
+ this.axis = 'testSpecification';
105
+ }
106
+ static { this.styles = [ScrollbarStyles, revisionStyles]; }
107
+ display(field, value) {
108
+ if (value === undefined || value === null)
109
+ return '—';
110
+ if (this.axis === 'workShift') {
111
+ if (field === 'fromDate' || field === 'toDate')
112
+ return revisionText('day-offset-' + value);
113
+ if (field === 'daysOfWeek')
114
+ return String(value).split(',').map(day => revisionText('weekday-' + day)).join(', ');
115
+ }
116
+ return value;
117
+ }
118
+ render() {
119
+ const changes = revisionDifferences(this.axis, this.before, this.after);
120
+ return html `<h3>
121
+ ${revisionText('changes')} <span class="pill">${revisionText('change-count', { count: changes.length })}</span>
122
+ </h3>
123
+ ${!this.before ? html `<p class="muted">${revisionText('new-baseline')}</p>` : ''}
124
+ ${changes.length
125
+ ? html `<div class="scroll">
126
+ <table>
127
+ <thead>
128
+ <tr>
129
+ <th>${revisionText('change-kind')}</th>
130
+ <th>${revisionText('item')}</th>
131
+ <th>${revisionText('before')}</th>
132
+ <th>${revisionText('after')}</th>
133
+ </tr>
134
+ </thead>
135
+ <tbody>
136
+ ${changes.map(row => html `<tr>
137
+ <td><span class="pill">${revisionText(row.kind)}</span></td>
138
+ <td>
139
+ ${revisionText(row.section)}${row.label ? ' · ' + row.label : ''}<br />${revisionText(row.field)}
140
+ </td>
141
+ <td class="before">${this.display(row.field, row.before)}</td>
142
+ <td class="after">${this.display(row.field, row.after)}</td>
143
+ </tr>`)}
144
+ </tbody>
145
+ </table>
146
+ </div>`
147
+ : html `<p>${revisionText('no-content-change')}</p>`}`;
148
+ }
149
+ };
150
+ __decorate([
151
+ property(),
152
+ __metadata("design:type", String)
153
+ ], MasterRevisionComparison.prototype, "axis", void 0);
154
+ __decorate([
155
+ property({ attribute: false }),
156
+ __metadata("design:type", Object)
157
+ ], MasterRevisionComparison.prototype, "before", void 0);
158
+ __decorate([
159
+ property({ attribute: false }),
160
+ __metadata("design:type", Object)
161
+ ], MasterRevisionComparison.prototype, "after", void 0);
162
+ MasterRevisionComparison = __decorate([
163
+ customElement('ops-master-revision-comparison')
164
+ ], MasterRevisionComparison);
165
+ export { MasterRevisionComparison };
166
+ /** Uses the existing Worklist custom-element slot. No Worklist dependency in the master module. */
167
+ let MasterRevisionReview = class MasterRevisionReview extends localize(i18next)(LitElement) {
168
+ constructor() {
169
+ super(...arguments);
170
+ this.detailError = '';
171
+ }
172
+ static { MasterRevisionReview_1 = this; }
173
+ static { this.styles = [
174
+ ScrollbarStyles,
175
+ revisionStyles,
176
+ css `
177
+ :host {
178
+ display: block;
179
+ padding: 20px;
180
+ box-sizing: border-box;
181
+ }
182
+ .facts {
183
+ display: flex;
184
+ flex-wrap: wrap;
185
+ gap: 24px;
186
+ margin: 20px 0;
187
+ }
188
+ .facts p {
189
+ margin: 4px 0;
190
+ }
191
+ .impact {
192
+ padding: 12px;
193
+ background: var(--md-sys-color-surface-container);
194
+ }
195
+ h2 {
196
+ margin: 0;
197
+ font-size: var(--ui-t-title, 20px);
198
+ }
199
+ .entity-links {
200
+ display: flex;
201
+ flex-wrap: wrap;
202
+ gap: 16px 32px;
203
+ }
204
+ .entity-links a {
205
+ display: inline-block;
206
+ padding: 8px 0;
207
+ color: var(--md-sys-color-primary);
208
+ text-underline-offset: 3px;
209
+ }
210
+ `
211
+ ]; }
212
+ // Worklist recreates custom views on shell updates. The common dock has a stable owner.
213
+ static { this.dockOwner = {}; }
214
+ static { this.enabled = false; }
215
+ static { this.detailPath = ''; }
216
+ static { this.detailRevision = ''; }
217
+ static { this.onAddress = () => requestAnimationFrame(() => MasterRevisionReview_1.activeReview?.syncDetail()); }
218
+ connectedCallback() {
219
+ super.connectedCallback();
220
+ MasterRevisionReview_1.activeReview = this;
221
+ // One provider listener, not one view listener: routing may disconnect a view during dispatch.
222
+ MasterRevisionReview_1.stopAddress ??= addressController().subscribe(MasterRevisionReview_1.onAddress, false);
223
+ }
224
+ disconnectedCallback() {
225
+ if (MasterRevisionReview_1.activeReview === this)
226
+ MasterRevisionReview_1.activeReview = undefined;
227
+ requestAnimationFrame(() => {
228
+ if (!MasterRevisionReview_1.activeReview) {
229
+ hideEntity360(MasterRevisionReview_1.dockOwner, false);
230
+ MasterRevisionReview_1.enabled = false;
231
+ }
232
+ });
233
+ super.disconnectedCallback();
234
+ }
235
+ updated(changes) {
236
+ super.updated(changes);
237
+ if (changes.has('input') && MasterRevisionReview_1.enabled) {
238
+ if (location.pathname !== MasterRevisionReview_1.detailPath ||
239
+ this.input?.after?.detail?.revisionId !== MasterRevisionReview_1.detailRevision) {
240
+ hideEntity360(MasterRevisionReview_1.dockOwner, false);
241
+ MasterRevisionReview_1.enabled = false;
242
+ }
243
+ else
244
+ this.syncDetail();
245
+ }
246
+ }
247
+ syncDetail() {
248
+ if (MasterRevisionReview_1.activeReview !== this || !MasterRevisionReview_1.enabled)
249
+ return;
250
+ if (location.pathname !== MasterRevisionReview_1.detailPath) {
251
+ MasterRevisionReview_1.enabled = false;
252
+ hideEntity360(MasterRevisionReview_1.dockOwner, false);
253
+ return;
254
+ }
255
+ try {
256
+ const side = revisionSideAt(this.input, location.href);
257
+ if (side)
258
+ this.showDetail(side);
259
+ else
260
+ hideEntity360(MasterRevisionReview_1.dockOwner);
261
+ }
262
+ catch {
263
+ hideEntity360(MasterRevisionReview_1.dockOwner);
264
+ this.detailError = revisionText('detail-unavailable');
265
+ }
266
+ }
267
+ async closeDetail() {
268
+ const url = new URL(location.href);
269
+ url.searchParams.delete('f');
270
+ url.searchParams.delete('revision');
271
+ const { entity360Previous: _previous, ...state } = history.state ?? {};
272
+ if (!(await writeAddress(url, { state, replace: true })))
273
+ return;
274
+ hideEntity360(MasterRevisionReview_1.dockOwner);
275
+ }
276
+ showDetail(side, opener) {
277
+ const row = this.input[side];
278
+ showEntity360(MasterRevisionReview_1.dockOwner, {
279
+ key: revisionDetailAddress(this.input, side, location.href),
280
+ title: this.input.headline,
281
+ context: `${revisionText(side)} · ${revisionText('revision-value', { n: row.revisionNumber })}`,
282
+ labels: { close: revisionText('dock-close'), expand: revisionText('dock-expand'), collapse: revisionText('dock-collapse'),
283
+ resize: revisionText('dock-resize'), back: revisionText('dock-back') },
284
+ onClose: () => (MasterRevisionReview_1.activeReview ?? this).closeDetail(),
285
+ onBack: canGoBackEntity360() ? () => history.back() : undefined,
286
+ content: html `<ops-master-revision-360 .input=${this.input} .side=${side}
287
+ .activityApproval=${this.activityApproval}></ops-master-revision-360>`
288
+ }, () => {
289
+ const target = opener?.isConnected ? opener : MasterRevisionReview_1.activeReview?.renderRoot.querySelector(`[data-detail="${side}"]`);
290
+ target?.focus({ preventScroll: true });
291
+ });
292
+ }
293
+ async openDetail(side, opener) {
294
+ try {
295
+ const address = revisionDetailAddress(this.input, side, location.href);
296
+ this.detailError = '';
297
+ if (!MasterRevisionReview_1.enabled && new URL(location.href).searchParams.has('f')) {
298
+ const base = new URL(location.href);
299
+ base.searchParams.delete('f');
300
+ base.searchParams.delete('revision');
301
+ const { entity360Previous: _previous, ...state } = history.state ?? {};
302
+ if (!(await writeAddress(base, { state, replace: true })))
303
+ return;
304
+ }
305
+ if (!(await navigateEntity360(address)))
306
+ return;
307
+ MasterRevisionReview_1.enabled = true;
308
+ MasterRevisionReview_1.detailPath = location.pathname;
309
+ MasterRevisionReview_1.detailRevision = this.input.after.detail.revisionId;
310
+ this.showDetail(side, opener);
311
+ }
312
+ catch {
313
+ this.detailError = revisionText('detail-unavailable');
314
+ }
315
+ }
316
+ entityLink(side) {
317
+ const row = this.input[side];
318
+ if (!row)
319
+ return html `<span>${revisionText('no-before')}</span>`;
320
+ // A URL alone never opens a modal. Inspection is always an explicit user action.
321
+ if (!row.detail)
322
+ return html `<span>${revisionText('detail-unavailable')}</span>`;
323
+ return html `<div>
324
+ <span class="muted">${revisionText(side)}</span><br />
325
+ <a href=${revisionDetailAddress(this.input, side, location.href)} data-detail=${side}
326
+ @click=${(event) => {
327
+ if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey)
328
+ return;
329
+ event.preventDefault();
330
+ this.openDetail(side, event.currentTarget);
331
+ }}>${this.input.headline} · ${revisionText('revision-value', { n: row.revisionNumber })}</a>
332
+ </div>`;
333
+ }
334
+ render() {
335
+ const input = this.input;
336
+ if (!input)
337
+ return html ``;
338
+ const axis = input.revision?.arrangementId ? 'workShift' : input.revision?.recipeId ? 'recipeDefinition' : input.revision?.materialId ? 'materialDefinition' : 'testSpecification';
339
+ return html `<h2>${input.headline}</h2>
340
+ <div class="entity-links">${this.entityLink('before')}${this.entityLink('after')}</div>
341
+ ${this.detailError ? html `<p role="alert">${this.detailError}</p>` : ''}
342
+ <div class="facts">
343
+ <div>
344
+ <span class="muted">${revisionText('revision')}</span>
345
+ <p>
346
+ ${input.before ? revisionText('revision-value', { n: input.before.revisionNumber }) : revisionText('new')} →
347
+ ${revisionText('revision-value', { n: input.after.revisionNumber })}
348
+ </p>
349
+ </div>
350
+ <div>
351
+ <span class="muted">${revisionText('effectiveFrom')}</span>
352
+ <p>${revisionDate(input.effectiveFrom)} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</p>
353
+ </div>
354
+ <div>
355
+ <span class="muted">${revisionText('reason')}</span>
356
+ <p>${input.reason}</p>
357
+ </div>
358
+ </div>
359
+ <p class="impact">${revisionText(axis === 'workShift' ? 'shift-impact' : axis === 'recipeDefinition' ? 'recipe-impact' : axis === 'materialDefinition' ? 'material-impact' : 'spec-impact')}</p>
360
+ <ops-master-revision-comparison
361
+ .axis=${axis}
362
+ .before=${input.before}
363
+ .after=${input.after}
364
+ ></ops-master-revision-comparison>
365
+ <details>
366
+ <summary>${revisionText('full-content')}</summary>
367
+ ${revisionContents(input.after, axis)}
368
+ </details>
369
+ <p class="muted">${revisionText('signed-correction')}</p>`;
370
+ }
371
+ };
372
+ __decorate([
373
+ property({ attribute: false }),
374
+ __metadata("design:type", Object)
375
+ ], MasterRevisionReview.prototype, "input", void 0);
376
+ __decorate([
377
+ property({ attribute: false }),
378
+ __metadata("design:type", Object)
379
+ ], MasterRevisionReview.prototype, "activityApproval", void 0);
380
+ __decorate([
381
+ state(),
382
+ __metadata("design:type", Object)
383
+ ], MasterRevisionReview.prototype, "detailError", void 0);
384
+ MasterRevisionReview = MasterRevisionReview_1 = __decorate([
385
+ customElement('ops-master-revision-review')
386
+ ], MasterRevisionReview);
387
+ export { MasterRevisionReview };
388
+ export function revisionContents(value, axis) {
389
+ if (axis === 'workShift')
390
+ return html `<p>${revisionText('timezone')}: ${value.timezone}</p>
391
+ <div class="scroll"><table><thead><tr>${['name', 'fromDate', 'fromTime', 'toDate', 'toTime', 'daysOfWeek'].map(f => html `<th>${revisionText(f)}</th>`)}</tr></thead>
392
+ <tbody>${(value.shifts ?? []).map(row => html `<tr><td>${row.name}${row.description ? html `<br /><span class="muted">${row.description}</span>` : ''}</td><td>${revisionText('day-offset-' + row.fromDate)}</td><td>${row.fromTime}</td><td>${revisionText('day-offset-' + row.toDate)}</td><td>${row.toTime}</td><td>${row.daysOfWeek ? row.daysOfWeek.split(',').map(day => revisionText('weekday-' + day)).join(', ') : revisionText('every-day')}</td></tr>`)}</tbody></table></div>`;
393
+ if (axis === 'materialDefinition')
394
+ return materialRevisionFields(value);
395
+ return (axis === 'recipeDefinition' ? ['inputs', 'outputs'] : ['criteria']).map(section => {
396
+ const fields = section === 'criteria'
397
+ ? ['id', 'description', 'evaluatedPropertyId', 'minimum', 'maximum', 'uom', 'expression']
398
+ : section === 'inputs'
399
+ ? ['material', 'qty', 'operation']
400
+ : ['material', 'qty'];
401
+ return html `<h3>${revisionText(section)}</h3>
402
+ <div class="scroll">
403
+ <table class=${section === 'criteria' ? 'criteria' : ''}>
404
+ <thead>
405
+ <tr>
406
+ ${fields.map(field => html `<th>${revisionText(field)}</th>`)}
407
+ </tr>
408
+ </thead>
409
+ <tbody>
410
+ ${(value[section] ?? []).map((row) => html `<tr>
411
+ ${fields.map(field => html `<td>${(section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field) ? row.limit?.[field] : row[field]) ?? '—'}</td>`)}
412
+ </tr>`)}
413
+ </tbody>
414
+ </table>
415
+ </div>`;
416
+ });
417
+ }
418
+ /** Read-only revision contents. Layout, scrolling and closing belong to the common dock. */
419
+ let MasterRevision360 = class MasterRevision360 extends localize(i18next)(LitElement) {
420
+ constructor() {
421
+ super(...arguments);
422
+ this.side = 'after';
423
+ }
424
+ static { this.styles = [
425
+ ...MasterRevisionReview.styles,
426
+ css `
427
+ :host {
428
+ display: block;
429
+ min-height: 0;
430
+ }
431
+ section {
432
+ margin: 16px 0;
433
+ border-top: 1px solid var(--ui-line);
434
+ padding-top: 8px;
435
+ }
436
+ table.criteria { min-width: 640px; }
437
+ th, td { overflow-wrap: normal; word-break: normal; }
438
+ dl {
439
+ display: grid;
440
+ grid-template-columns: minmax(110px, 1fr) minmax(0, 3fr);
441
+ gap: 8px 16px;
442
+ }
443
+ dt {
444
+ color: var(--md-sys-color-on-surface-variant);
445
+ }
446
+ dd {
447
+ margin: 0;
448
+ overflow-wrap: anywhere;
449
+ }
450
+ `
451
+ ]; }
452
+ render() {
453
+ const row = this.input?.[this.side];
454
+ if (!row?.detail)
455
+ return html `<p role="alert">${revisionText('detail-unavailable')}</p>`;
456
+ const recipe = !!this.input.revision.recipeId;
457
+ const axis = this.input.revision.arrangementId ? 'workShift' : recipe ? 'recipeDefinition' : this.input.revision.materialId ? 'materialDefinition' : 'testSpecification';
458
+ const state = String(this.activityApproval?.activityThread?.activityInstance?.state ?? '').toLowerCase();
459
+ const judgment = String(this.activityApproval?.judgment ?? '').toLowerCase();
460
+ const status = this.side === 'before'
461
+ ? 'approval-baseline'
462
+ : judgment === 'rejected'
463
+ ? 'rejected'
464
+ : state === 'ended'
465
+ ? 'approved'
466
+ : state === 'aborted'
467
+ ? 'aborted'
468
+ : 'pending';
469
+ return html `<article>
470
+ <p>
471
+ <span class="pill">${revisionText(this.side)}</span> ·
472
+ ${revisionText('revision-value', { n: row.revisionNumber })} · ${revisionText(status)}
473
+ </p>
474
+ <p class="impact">${revisionText('fixed-review-context')}</p>
475
+ <section>
476
+ <h3>${revisionText('summary')}</h3>
477
+ <dl>
478
+ <dt>${revisionText('description')}</dt>
479
+ <dd>${row.description || '—'}</dd>
480
+ ${recipe
481
+ ? html `<dt>${revisionText('materialDefinitionName')}</dt>
482
+ <dd>${row.materialDefinitionName}</dd>
483
+ <dt>${revisionText('route')}</dt>
484
+ <dd>${row.route || '—'}</dd>`
485
+ : axis === 'materialDefinition' || axis === 'workShift' ? '' : html `<dt>${revisionText('version')}</dt>
486
+ <dd>${row.version}</dd>`}
487
+ </dl>
488
+ ${revisionContents(row, axis)}
489
+ </section>
490
+ <section>
491
+ <h3>${revisionText('state')}</h3>
492
+ <dl>
493
+ <dt>${revisionText(this.side === 'before' ? 'baseline-period' : 'proposed-start')}</dt>
494
+ <dd>
495
+ ${revisionDate(row.detail.validFrom ?? row.detail.effectiveFrom)}${this.side === 'before' ? html ` → ${row.detail.validTo ? revisionDate(row.detail.validTo) : revisionText('until-change')}` : ''}
496
+ </dd>
497
+ <dt>${revisionText('time-zone')}</dt>
498
+ <dd>${Intl.DateTimeFormat().resolvedOptions().timeZone}</dd>
499
+ </dl>
500
+ <p>${revisionText(this.side === 'before' ? 'baseline-period-hint' : 'proposed-start-hint')}</p>
501
+ </section>
502
+ <section>
503
+ <h3>${revisionText('related-entities')}</h3>
504
+ ${recipe
505
+ ? html `<p>
506
+ ${revisionText('inputs')}: ${[...new Set((row.inputs ?? []).map((r) => r.material))].join(', ')}
507
+ </p>
508
+ <p>
509
+ ${revisionText('outputs')}:
510
+ ${[...new Set((row.outputs ?? []).map((r) => r.material))].join(', ')}
511
+ </p>
512
+ <p>
513
+ ${revisionText('operation')}:
514
+ ${[...new Set((row.inputs ?? []).map((r) => r.operation).filter(Boolean))].join(', ') || '—'}
515
+ </p>`
516
+ : ''}
517
+ <p class="muted">${revisionText('relation-scope')}</p>
518
+ </section>
519
+ <section>
520
+ <h3>${revisionText('history')}</h3>
521
+ <dl>
522
+ <dt>${revisionText('created')}</dt>
523
+ <dd>${revisionDate(row.detail.createdAt)}</dd>
524
+ <dt>${revisionText('frozen')}</dt>
525
+ <dd>${revisionDate(row.detail.frozenAt)}</dd>
526
+ <dt>${revisionText('reason')}</dt>
527
+ <dd>
528
+ ${reasonOf(row.detail, revisionText('first-record'))}
529
+ ${isBaseline(row.detail) ? html `<div class="muted">${revisionText('first-record-why')}</div>` : ''}
530
+ </dd>
531
+ </dl>
532
+ <p class="muted">${revisionText('history-scope')}</p>
533
+ </section>
534
+ <details>
535
+ <summary>${revisionText('technical-details')}</summary>
536
+ <dl>
537
+ <dt>Revision ID</dt>
538
+ <dd>${row.detail.revisionId}</dd>
539
+ </dl>
540
+ </details>
541
+ </article>`;
542
+ }
543
+ };
544
+ __decorate([
545
+ property(),
546
+ __metadata("design:type", String)
547
+ ], MasterRevision360.prototype, "side", void 0);
548
+ __decorate([
549
+ property({ attribute: false }),
550
+ __metadata("design:type", Object)
551
+ ], MasterRevision360.prototype, "input", void 0);
552
+ __decorate([
553
+ property({ attribute: false }),
554
+ __metadata("design:type", Object)
555
+ ], MasterRevision360.prototype, "activityApproval", void 0);
556
+ MasterRevision360 = __decorate([
557
+ customElement('ops-master-revision-360')
558
+ ], MasterRevision360);
559
+ export { MasterRevision360 };
560
+ //# sourceMappingURL=revision-comparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-comparison.js","sourceRoot":"","sources":["../../../client/pages/master/revision-comparison.ts"],"names":[],"mappings":"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","sourcesContent":["import { addressController, writeAddress } from '@operato/utils/address.js'\nimport { materialRevisionFields } from './material-revision-fields.js'\nimport { LitElement, html, css } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { showEntity360, hideEntity360, navigateEntity360, canGoBackEntity360 } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport {\n revisionDifferences,\n RevisionAxis,\n RevisionSide,\n revisionDetailAddress,\n revisionSideAt,\n isBaseline,\n reasonOf\n} from './revision-view.js'\n\nexport const revisionText = (key: string, params: any = {}): string => String(i18next.t('revision-ui.' + key, params))\nexport const revisionDate = (value?: string) =>\n value\n ? new Intl.DateTimeFormat(i18next.language || 'en', { dateStyle: 'medium', timeStyle: 'short' }).format(\n new Date(value)\n )\n : '—'\nexport const revisionStyles = css`\n .material-property { border: 1px solid var(--ui-line, #ddd); margin: 12px 0; padding: 12px; min-width: 0; }\n .material-property legend { font-weight: 600; padding: 0 6px; }\n .material-property-values { display: grid; grid-template-columns: minmax(70px, 1fr) minmax(0, 3fr); gap: 8px; }\n .material-property-values dt { color: var(--md-sys-color-on-surface-variant); }\n .material-property-values dd { margin: 0; overflow-wrap: anywhere; }\n :host {\n color: var(--md-sys-color-on-surface);\n font: inherit;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--ui-t-small, 13px);\n }\n th,\n td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--ui-line);\n text-align: left;\n vertical-align: top;\n overflow-wrap: anywhere;\n }\n th {\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 600;\n }\n .scroll {\n overflow: auto;\n }\n .muted {\n color: var(--md-sys-color-on-surface-variant);\n }\n .pill {\n display: inline-block;\n padding: 3px 8px;\n border-radius: 4px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n }\n .before {\n color: var(--md-sys-color-on-surface-variant);\n }\n .after {\n font-weight: 600;\n }\n h3 {\n font-size: var(--ui-t-title, 16px);\n margin: 16px 0 10px;\n }\n button {\n font: inherit;\n min-height: var(--form-action-height, 32px);\n padding: 4px 12px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n color: inherit;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n }\n button.primary {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n border-color: transparent;\n }\n button:disabled {\n opacity: 0.5;\n cursor: default;\n }\n button:focus-visible,\n a:focus-visible,\n input:focus-visible,\n textarea:focus-visible,\n select:focus-visible,\n summary:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 3px;\n }\n details {\n margin: 12px 0;\n }\n summary {\n cursor: pointer;\n padding: 8px 0;\n }\n`\n@customElement('ops-master-revision-comparison')\nexport class MasterRevisionComparison extends localize(i18next)(LitElement) {\n static styles = [ScrollbarStyles, revisionStyles]\n @property() axis: RevisionAxis = 'testSpecification'\n @property({ attribute: false }) before: any\n @property({ attribute: false }) after: any\n private display(field: string, value: unknown) {\n if (value === undefined || value === null) return '—'\n if (this.axis === 'workShift') {\n if (field === 'fromDate' || field === 'toDate') return revisionText('day-offset-' + value)\n if (field === 'daysOfWeek') return String(value).split(',').map(day => revisionText('weekday-' + day)).join(', ')\n }\n return value\n }\n render() {\n const changes = revisionDifferences(this.axis, this.before, this.after)\n return html`<h3>\n ${revisionText('changes')} <span class=\"pill\">${revisionText('change-count', { count: changes.length })}</span>\n </h3>\n ${!this.before ? html`<p class=\"muted\">${revisionText('new-baseline')}</p>` : ''}\n ${\n changes.length\n ? html`<div class=\"scroll\">\n <table>\n <thead>\n <tr>\n <th>${revisionText('change-kind')}</th>\n <th>${revisionText('item')}</th>\n <th>${revisionText('before')}</th>\n <th>${revisionText('after')}</th>\n </tr>\n </thead>\n <tbody>\n ${changes.map(\n row =>\n html`<tr>\n <td><span class=\"pill\">${revisionText(row.kind)}</span></td>\n <td>\n ${revisionText(row.section)}${row.label ? ' · ' + row.label : ''}<br />${revisionText(row.field)}\n </td>\n <td class=\"before\">${this.display(row.field, row.before)}</td>\n <td class=\"after\">${this.display(row.field, row.after)}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n : html`<p>${revisionText('no-content-change')}</p>`\n }`\n }\n}\n\n/** Uses the existing Worklist custom-element slot. No Worklist dependency in the master module. */\n@customElement('ops-master-revision-review')\nexport class MasterRevisionReview extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n revisionStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n box-sizing: border-box;\n }\n .facts {\n display: flex;\n flex-wrap: wrap;\n gap: 24px;\n margin: 20px 0;\n }\n .facts p {\n margin: 4px 0;\n }\n .impact {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n }\n h2 {\n margin: 0;\n font-size: var(--ui-t-title, 20px);\n }\n .entity-links {\n display: flex;\n flex-wrap: wrap;\n gap: 16px 32px;\n }\n .entity-links a {\n display: inline-block;\n padding: 8px 0;\n color: var(--md-sys-color-primary);\n text-underline-offset: 3px;\n }\n `\n ]\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n @state() private detailError = ''\n // Worklist recreates custom views on shell updates. The common dock has a stable owner.\n private static dockOwner = {}\n private static activeReview?: MasterRevisionReview\n private static enabled = false\n private static detailPath = ''\n private static detailRevision = ''\n private static stopAddress?: () => void\n private static onAddress = () => requestAnimationFrame(() => MasterRevisionReview.activeReview?.syncDetail())\n connectedCallback() {\n super.connectedCallback()\n MasterRevisionReview.activeReview = this\n // One provider listener, not one view listener: routing may disconnect a view during dispatch.\n MasterRevisionReview.stopAddress ??= addressController().subscribe(MasterRevisionReview.onAddress, false)\n }\n disconnectedCallback() {\n if (MasterRevisionReview.activeReview === this) MasterRevisionReview.activeReview = undefined\n requestAnimationFrame(() => {\n if (!MasterRevisionReview.activeReview) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n }\n })\n super.disconnectedCallback()\n }\n updated(changes: any) {\n super.updated(changes)\n if (changes.has('input') && MasterRevisionReview.enabled) {\n if (location.pathname !== MasterRevisionReview.detailPath ||\n this.input?.after?.detail?.revisionId !== MasterRevisionReview.detailRevision) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n } else this.syncDetail()\n }\n }\n private syncDetail() {\n if (MasterRevisionReview.activeReview !== this || !MasterRevisionReview.enabled) return\n if (location.pathname !== MasterRevisionReview.detailPath) {\n MasterRevisionReview.enabled = false\n hideEntity360(MasterRevisionReview.dockOwner, false)\n return\n }\n try {\n const side = revisionSideAt(this.input, location.href)\n if (side) this.showDetail(side)\n else hideEntity360(MasterRevisionReview.dockOwner)\n } catch {\n hideEntity360(MasterRevisionReview.dockOwner)\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private async closeDetail() {\n const url = new URL(location.href)\n url.searchParams.delete('f')\n url.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n if (!(await writeAddress(url, { state, replace: true }))) return\n hideEntity360(MasterRevisionReview.dockOwner)\n }\n private showDetail(side: RevisionSide, opener?: HTMLElement) {\n const row = this.input[side]\n showEntity360(MasterRevisionReview.dockOwner, {\n key: revisionDetailAddress(this.input, side, location.href),\n title: this.input.headline,\n context: `${revisionText(side)} · ${revisionText('revision-value', { n: row.revisionNumber })}`,\n labels: { close: revisionText('dock-close'), expand: revisionText('dock-expand'), collapse: revisionText('dock-collapse'),\n resize: revisionText('dock-resize'), back: revisionText('dock-back') },\n onClose: () => (MasterRevisionReview.activeReview ?? this).closeDetail(),\n onBack: canGoBackEntity360() ? () => history.back() : undefined,\n content: html`<ops-master-revision-360 .input=${this.input} .side=${side}\n .activityApproval=${this.activityApproval}></ops-master-revision-360>`\n }, () => {\n const target = opener?.isConnected ? opener : MasterRevisionReview.activeReview?.renderRoot.querySelector<HTMLElement>(`[data-detail=\"${side}\"]`)\n target?.focus({ preventScroll: true })\n })\n }\n private async openDetail(side: RevisionSide, opener?: HTMLElement) {\n try {\n const address = revisionDetailAddress(this.input, side, location.href)\n this.detailError = ''\n if (!MasterRevisionReview.enabled && new URL(location.href).searchParams.has('f')) {\n const base = new URL(location.href)\n base.searchParams.delete('f')\n base.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n if (!(await writeAddress(base, { state, replace: true }))) return\n }\n if (!(await navigateEntity360(address))) return\n MasterRevisionReview.enabled = true\n MasterRevisionReview.detailPath = location.pathname\n MasterRevisionReview.detailRevision = this.input.after.detail.revisionId\n this.showDetail(side, opener)\n } catch {\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private entityLink(side: RevisionSide) {\n const row = this.input[side]\n if (!row) return html`<span>${revisionText('no-before')}</span>`\n // A URL alone never opens a modal. Inspection is always an explicit user action.\n if (!row.detail) return html`<span>${revisionText('detail-unavailable')}</span>`\n return html`<div>\n <span class=\"muted\">${revisionText(side)}</span><br />\n <a href=${revisionDetailAddress(this.input, side, location.href)} data-detail=${side}\n @click=${(event: MouseEvent) => {\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n this.openDetail(side, event.currentTarget as HTMLElement)\n }}>${this.input.headline} · ${revisionText('revision-value', { n: row.revisionNumber })}</a>\n </div>`\n }\n render() {\n const input = this.input\n if (!input) return html``\n const axis: RevisionAxis = input.revision?.arrangementId ? 'workShift' : input.revision?.recipeId ? 'recipeDefinition' : input.revision?.materialId ? 'materialDefinition' : 'testSpecification'\n return html`<h2>${input.headline}</h2>\n <div class=\"entity-links\">${this.entityLink('before')}${this.entityLink('after')}</div>\n ${this.detailError ? html`<p role=\"alert\">${this.detailError}</p>` : ''}\n <div class=\"facts\">\n <div>\n <span class=\"muted\">${revisionText('revision')}</span>\n <p>\n ${input.before ? revisionText('revision-value', { n: input.before.revisionNumber }) : revisionText('new')} →\n ${revisionText('revision-value', { n: input.after.revisionNumber })}\n </p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('effectiveFrom')}</span>\n <p>${revisionDate(input.effectiveFrom)} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('reason')}</span>\n <p>${input.reason}</p>\n </div>\n </div>\n <p class=\"impact\">${revisionText(axis === 'workShift' ? 'shift-impact' : axis === 'recipeDefinition' ? 'recipe-impact' : axis === 'materialDefinition' ? 'material-impact' : 'spec-impact')}</p>\n <ops-master-revision-comparison\n .axis=${axis}\n .before=${input.before}\n .after=${input.after}\n ></ops-master-revision-comparison>\n <details>\n <summary>${revisionText('full-content')}</summary>\n ${revisionContents(input.after, axis)}\n </details>\n <p class=\"muted\">${revisionText('signed-correction')}</p>`\n }\n}\n\nexport function revisionContents(value: any, axis: RevisionAxis) {\n if (axis === 'workShift') return html`<p>${revisionText('timezone')}: ${value.timezone}</p>\n <div class=\"scroll\"><table><thead><tr>${['name','fromDate','fromTime','toDate','toTime','daysOfWeek'].map(f => html`<th>${revisionText(f)}</th>`)}</tr></thead>\n <tbody>${(value.shifts ?? []).map(row => html`<tr><td>${row.name}${row.description ? html`<br /><span class=\"muted\">${row.description}</span>` : ''}</td><td>${revisionText('day-offset-' + row.fromDate)}</td><td>${row.fromTime}</td><td>${revisionText('day-offset-' + row.toDate)}</td><td>${row.toTime}</td><td>${row.daysOfWeek ? row.daysOfWeek.split(',').map(day => revisionText('weekday-' + day)).join(', ') : revisionText('every-day')}</td></tr>`)}</tbody></table></div>`\n\n if (axis === 'materialDefinition') return materialRevisionFields(value)\n return (axis === 'recipeDefinition' ? ['inputs', 'outputs'] : ['criteria']).map(section => {\n const fields =\n section === 'criteria'\n ? ['id', 'description', 'evaluatedPropertyId', 'minimum', 'maximum', 'uom', 'expression']\n : section === 'inputs'\n ? ['material', 'qty', 'operation']\n : ['material', 'qty']\n return html`<h3>${revisionText(section)}</h3>\n <div class=\"scroll\">\n <table class=${section === 'criteria' ? 'criteria' : ''}>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${revisionText(field)}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${(value[section] ?? []).map(\n (row: any) =>\n html`<tr>\n ${fields.map(field => html`<td>${(section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field) ? row.limit?.[field] : row[field]) ?? '—'}</td>`)}\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n })\n}\n\n/** Read-only revision contents. Layout, scrolling and closing belong to the common dock. */\n@customElement('ops-master-revision-360')\nexport class MasterRevision360 extends localize(i18next)(LitElement) {\n static styles = [\n ...MasterRevisionReview.styles,\n css`\n :host {\n display: block;\n min-height: 0;\n }\n section {\n margin: 16px 0;\n border-top: 1px solid var(--ui-line);\n padding-top: 8px;\n }\n table.criteria { min-width: 640px; }\n th, td { overflow-wrap: normal; word-break: normal; }\n dl {\n display: grid;\n grid-template-columns: minmax(110px, 1fr) minmax(0, 3fr);\n gap: 8px 16px;\n }\n dt {\n color: var(--md-sys-color-on-surface-variant);\n }\n dd {\n margin: 0;\n overflow-wrap: anywhere;\n }\n `\n ]\n @property() side: RevisionSide = 'after'\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n render() {\n const row = this.input?.[this.side]\n if (!row?.detail) return html`<p role=\"alert\">${revisionText('detail-unavailable')}</p>`\n const recipe = !!this.input.revision.recipeId\n const axis: RevisionAxis = this.input.revision.arrangementId ? 'workShift' : recipe ? 'recipeDefinition' : this.input.revision.materialId ? 'materialDefinition' : 'testSpecification'\n const state = String(this.activityApproval?.activityThread?.activityInstance?.state ?? '').toLowerCase()\n const judgment = String(this.activityApproval?.judgment ?? '').toLowerCase()\n const status =\n this.side === 'before'\n ? 'approval-baseline'\n : judgment === 'rejected'\n ? 'rejected'\n : state === 'ended'\n ? 'approved'\n : state === 'aborted'\n ? 'aborted'\n : 'pending'\n return html`<article>\n <p>\n <span class=\"pill\">${revisionText(this.side)}</span> ·\n ${revisionText('revision-value', { n: row.revisionNumber })} · ${revisionText(status)}\n </p>\n <p class=\"impact\">${revisionText('fixed-review-context')}</p>\n <section>\n <h3>${revisionText('summary')}</h3>\n <dl>\n <dt>${revisionText('description')}</dt>\n <dd>${row.description || '—'}</dd>\n ${\n recipe\n ? html`<dt>${revisionText('materialDefinitionName')}</dt>\n <dd>${row.materialDefinitionName}</dd>\n <dt>${revisionText('route')}</dt>\n <dd>${row.route || '—'}</dd>`\n : axis === 'materialDefinition' || axis === 'workShift' ? '' : html`<dt>${revisionText('version')}</dt>\n <dd>${row.version}</dd>`\n }\n </dl>\n ${revisionContents(row, axis)}\n </section>\n <section>\n <h3>${revisionText('state')}</h3>\n <dl>\n <dt>${revisionText(this.side === 'before' ? 'baseline-period' : 'proposed-start')}</dt>\n <dd>\n ${revisionDate(row.detail.validFrom ?? row.detail.effectiveFrom)}${this.side === 'before' ? html` → ${row.detail.validTo ? revisionDate(row.detail.validTo) : revisionText('until-change')}` : ''}\n </dd>\n <dt>${revisionText('time-zone')}</dt>\n <dd>${Intl.DateTimeFormat().resolvedOptions().timeZone}</dd>\n </dl>\n <p>${revisionText(this.side === 'before' ? 'baseline-period-hint' : 'proposed-start-hint')}</p>\n </section>\n <section>\n <h3>${revisionText('related-entities')}</h3>\n ${\n recipe\n ? html`<p>\n ${revisionText('inputs')}: ${[...new Set((row.inputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('outputs')}:\n ${[...new Set((row.outputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('operation')}:\n ${[...new Set((row.inputs ?? []).map((r: any) => r.operation).filter(Boolean))].join(', ') || '—'}\n </p>`\n : ''\n }\n <p class=\"muted\">${revisionText('relation-scope')}</p>\n </section>\n <section>\n <h3>${revisionText('history')}</h3>\n <dl>\n <dt>${revisionText('created')}</dt>\n <dd>${revisionDate(row.detail.createdAt)}</dd>\n <dt>${revisionText('frozen')}</dt>\n <dd>${revisionDate(row.detail.frozenAt)}</dd>\n <dt>${revisionText('reason')}</dt>\n <dd>\n ${reasonOf(row.detail, revisionText('first-record'))}\n ${isBaseline(row.detail) ? html`<div class=\"muted\">${revisionText('first-record-why')}</div>` : ''}\n </dd>\n </dl>\n <p class=\"muted\">${revisionText('history-scope')}</p>\n </section>\n <details>\n <summary>${revisionText('technical-details')}</summary>\n <dl>\n <dt>Revision ID</dt>\n <dd>${row.detail.revisionId}</dd>\n </dl>\n </details>\n </article>`\n }\n}\n"]}