@things-factory/ops-master 10.1.246 → 10.1.248

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/package.json +5 -5
  2. package/dist-client/bootstrap.d.ts +0 -19
  3. package/dist-client/bootstrap.js +0 -66
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/index.d.ts +0 -17
  6. package/dist-client/index.js +0 -21
  7. package/dist-client/index.js.map +0 -1
  8. package/dist-client/master-change-approval.d.ts +0 -14
  9. package/dist-client/master-change-approval.js +0 -36
  10. package/dist-client/master-change-approval.js.map +0 -1
  11. package/dist-client/master-change-policy-axes.d.ts +0 -37
  12. package/dist-client/master-change-policy-axes.js +0 -29
  13. package/dist-client/master-change-policy-axes.js.map +0 -1
  14. package/dist-client/master-change-policy-panel.d.ts +0 -59
  15. package/dist-client/master-change-policy-panel.js +0 -454
  16. package/dist-client/master-change-policy-panel.js.map +0 -1
  17. package/dist-client/master-change-providers.d.ts +0 -4
  18. package/dist-client/master-change-providers.js +0 -91
  19. package/dist-client/master-change-providers.js.map +0 -1
  20. package/dist-client/pages/master/applied-when-dialog.d.ts +0 -48
  21. package/dist-client/pages/master/applied-when-dialog.js +0 -137
  22. package/dist-client/pages/master/applied-when-dialog.js.map +0 -1
  23. package/dist-client/pages/master/assignment-fields.d.ts +0 -27
  24. package/dist-client/pages/master/assignment-fields.js +0 -62
  25. package/dist-client/pages/master/assignment-fields.js.map +0 -1
  26. package/dist-client/pages/master/equipment-class.d.ts +0 -12
  27. package/dist-client/pages/master/equipment-class.js +0 -42
  28. package/dist-client/pages/master/equipment-class.js.map +0 -1
  29. package/dist-client/pages/master/equipment.d.ts +0 -12
  30. package/dist-client/pages/master/equipment.js +0 -58
  31. package/dist-client/pages/master/equipment.js.map +0 -1
  32. package/dist-client/pages/master/grist-iso-duration.d.ts +0 -20
  33. package/dist-client/pages/master/grist-iso-duration.js +0 -70
  34. package/dist-client/pages/master/grist-iso-duration.js.map +0 -1
  35. package/dist-client/pages/master/grist-reference.d.ts +0 -91
  36. package/dist-client/pages/master/grist-reference.js +0 -419
  37. package/dist-client/pages/master/grist-reference.js.map +0 -1
  38. package/dist-client/pages/master/import-rows.d.ts +0 -35
  39. package/dist-client/pages/master/import-rows.js +0 -66
  40. package/dist-client/pages/master/import-rows.js.map +0 -1
  41. package/dist-client/pages/master/iso-duration.d.ts +0 -34
  42. package/dist-client/pages/master/iso-duration.js +0 -76
  43. package/dist-client/pages/master/iso-duration.js.map +0 -1
  44. package/dist-client/pages/master/master-options.d.ts +0 -40
  45. package/dist-client/pages/master/master-options.js +0 -54
  46. package/dist-client/pages/master/master-options.js.map +0 -1
  47. package/dist-client/pages/master/master-page-base.d.ts +0 -369
  48. package/dist-client/pages/master/master-page-base.js +0 -657
  49. package/dist-client/pages/master/master-page-base.js.map +0 -1
  50. package/dist-client/pages/master/material-class.d.ts +0 -12
  51. package/dist-client/pages/master/material-class.js +0 -42
  52. package/dist-client/pages/master/material-class.js.map +0 -1
  53. package/dist-client/pages/master/material-definition.d.ts +0 -5
  54. package/dist-client/pages/master/material-definition.js +0 -14
  55. package/dist-client/pages/master/material-definition.js.map +0 -1
  56. package/dist-client/pages/master/material-revision-fields.d.ts +0 -2
  57. package/dist-client/pages/master/material-revision-fields.js +0 -43
  58. package/dist-client/pages/master/material-revision-fields.js.map +0 -1
  59. package/dist-client/pages/master/operation-definition.d.ts +0 -12
  60. package/dist-client/pages/master/operation-definition.js +0 -49
  61. package/dist-client/pages/master/operation-definition.js.map +0 -1
  62. package/dist-client/pages/master/operational-location.d.ts +0 -84
  63. package/dist-client/pages/master/operational-location.js +0 -432
  64. package/dist-client/pages/master/operational-location.js.map +0 -1
  65. package/dist-client/pages/master/person.d.ts +0 -12
  66. package/dist-client/pages/master/person.js +0 -41
  67. package/dist-client/pages/master/person.js.map +0 -1
  68. package/dist-client/pages/master/personnel-class.d.ts +0 -12
  69. package/dist-client/pages/master/personnel-class.js +0 -43
  70. package/dist-client/pages/master/personnel-class.js.map +0 -1
  71. package/dist-client/pages/master/physical-asset-class.d.ts +0 -12
  72. package/dist-client/pages/master/physical-asset-class.js +0 -40
  73. package/dist-client/pages/master/physical-asset-class.js.map +0 -1
  74. package/dist-client/pages/master/physical-asset.d.ts +0 -12
  75. package/dist-client/pages/master/physical-asset.js +0 -41
  76. package/dist-client/pages/master/physical-asset.js.map +0 -1
  77. package/dist-client/pages/master/recipe-definition.d.ts +0 -5
  78. package/dist-client/pages/master/recipe-definition.js +0 -14
  79. package/dist-client/pages/master/recipe-definition.js.map +0 -1
  80. package/dist-client/pages/master/reference-targets.d.ts +0 -42
  81. package/dist-client/pages/master/reference-targets.js +0 -82
  82. package/dist-client/pages/master/reference-targets.js.map +0 -1
  83. package/dist-client/pages/master/revision-comparison.d.ts +0 -49
  84. package/dist-client/pages/master/revision-comparison.js +0 -560
  85. package/dist-client/pages/master/revision-comparison.js.map +0 -1
  86. package/dist-client/pages/master/revision-view.d.ts +0 -34
  87. package/dist-client/pages/master/revision-view.js +0 -145
  88. package/dist-client/pages/master/revision-view.js.map +0 -1
  89. package/dist-client/pages/master/revision-workspace.d.ts +0 -50
  90. package/dist-client/pages/master/revision-workspace.js +0 -763
  91. package/dist-client/pages/master/revision-workspace.js.map +0 -1
  92. package/dist-client/pages/master/route-definition.d.ts +0 -19
  93. package/dist-client/pages/master/route-definition.js +0 -40
  94. package/dist-client/pages/master/route-definition.js.map +0 -1
  95. package/dist-client/pages/master/stop-reason.d.ts +0 -12
  96. package/dist-client/pages/master/stop-reason.js +0 -48
  97. package/dist-client/pages/master/stop-reason.js.map +0 -1
  98. package/dist-client/pages/master/test-specification.d.ts +0 -5
  99. package/dist-client/pages/master/test-specification.js +0 -14
  100. package/dist-client/pages/master/test-specification.js.map +0 -1
  101. package/dist-client/pages/master-axes.d.ts +0 -24
  102. package/dist-client/pages/master-axes.js +0 -39
  103. package/dist-client/pages/master-axes.js.map +0 -1
  104. package/dist-client/route.d.ts +0 -1
  105. package/dist-client/route.js +0 -81
  106. package/dist-client/route.js.map +0 -1
  107. package/dist-client/tsconfig.tsbuildinfo +0 -1
  108. package/dist-server/index.d.ts +0 -1
  109. package/dist-server/index.js +0 -19
  110. package/dist-server/index.js.map +0 -1
  111. package/dist-server/service/ai-entry/master-entry-rules.d.ts +0 -175
  112. package/dist-server/service/ai-entry/master-entry-rules.js +0 -302
  113. package/dist-server/service/ai-entry/master-entry-rules.js.map +0 -1
  114. package/dist-server/service/ai-entry/master-entry-targets.d.ts +0 -23
  115. package/dist-server/service/ai-entry/master-entry-targets.js +0 -293
  116. package/dist-server/service/ai-entry/master-entry-targets.js.map +0 -1
  117. package/dist-server/service/approval-route.d.ts +0 -37
  118. package/dist-server/service/approval-route.js +0 -34
  119. package/dist-server/service/approval-route.js.map +0 -1
  120. package/dist-server/service/asset/asset-lifecycle.d.ts +0 -106
  121. package/dist-server/service/asset/asset-lifecycle.js +0 -126
  122. package/dist-server/service/asset/asset-lifecycle.js.map +0 -1
  123. package/dist-server/service/asset/asset-master-resolver.d.ts +0 -53
  124. package/dist-server/service/asset/asset-master-resolver.js +0 -185
  125. package/dist-server/service/asset/asset-master-resolver.js.map +0 -1
  126. package/dist-server/service/asset/asset-master.d.ts +0 -21
  127. package/dist-server/service/asset/asset-master.js +0 -25
  128. package/dist-server/service/asset/asset-master.js.map +0 -1
  129. package/dist-server/service/asset/asset-query.d.ts +0 -16
  130. package/dist-server/service/asset/asset-query.js +0 -72
  131. package/dist-server/service/asset/asset-query.js.map +0 -1
  132. package/dist-server/service/asset/index.d.ts +0 -6
  133. package/dist-server/service/asset/index.js +0 -10
  134. package/dist-server/service/asset/index.js.map +0 -1
  135. package/dist-server/service/asset/physical-asset-class.d.ts +0 -34
  136. package/dist-server/service/asset/physical-asset-class.js +0 -104
  137. package/dist-server/service/asset/physical-asset-class.js.map +0 -1
  138. package/dist-server/service/asset/physical-asset.d.ts +0 -66
  139. package/dist-server/service/asset/physical-asset.js +0 -123
  140. package/dist-server/service/asset/physical-asset.js.map +0 -1
  141. package/dist-server/service/assignment/applied-when.d.ts +0 -24
  142. package/dist-server/service/assignment/applied-when.js +0 -16
  143. package/dist-server/service/assignment/applied-when.js.map +0 -1
  144. package/dist-server/service/assignment/assignment-history.d.ts +0 -92
  145. package/dist-server/service/assignment/assignment-history.js +0 -289
  146. package/dist-server/service/assignment/assignment-history.js.map +0 -1
  147. package/dist-server/service/assignment/assignment-write.d.ts +0 -42
  148. package/dist-server/service/assignment/assignment-write.js +0 -101
  149. package/dist-server/service/assignment/assignment-write.js.map +0 -1
  150. package/dist-server/service/assignment/master-value-claim.d.ts +0 -135
  151. package/dist-server/service/assignment/master-value-claim.js +0 -174
  152. package/dist-server/service/assignment/master-value-claim.js.map +0 -1
  153. package/dist-server/service/equipment/equipment-class.d.ts +0 -34
  154. package/dist-server/service/equipment/equipment-class.js +0 -104
  155. package/dist-server/service/equipment/equipment-class.js.map +0 -1
  156. package/dist-server/service/equipment/equipment-master-resolver.d.ts +0 -77
  157. package/dist-server/service/equipment/equipment-master-resolver.js +0 -266
  158. package/dist-server/service/equipment/equipment-master-resolver.js.map +0 -1
  159. package/dist-server/service/equipment/equipment-master.d.ts +0 -30
  160. package/dist-server/service/equipment/equipment-master.js +0 -53
  161. package/dist-server/service/equipment/equipment-master.js.map +0 -1
  162. package/dist-server/service/equipment/equipment-query.d.ts +0 -16
  163. package/dist-server/service/equipment/equipment-query.js +0 -72
  164. package/dist-server/service/equipment/equipment-query.js.map +0 -1
  165. package/dist-server/service/equipment/equipment.d.ts +0 -71
  166. package/dist-server/service/equipment/equipment.js +0 -138
  167. package/dist-server/service/equipment/equipment.js.map +0 -1
  168. package/dist-server/service/equipment/index.d.ts +0 -8
  169. package/dist-server/service/equipment/index.js +0 -12
  170. package/dist-server/service/equipment/index.js.map +0 -1
  171. package/dist-server/service/equipment/state-period-rules.d.ts +0 -95
  172. package/dist-server/service/equipment/state-period-rules.js +0 -122
  173. package/dist-server/service/equipment/state-period-rules.js.map +0 -1
  174. package/dist-server/service/equipment/stop-reason-query.d.ts +0 -11
  175. package/dist-server/service/equipment/stop-reason-query.js +0 -39
  176. package/dist-server/service/equipment/stop-reason-query.js.map +0 -1
  177. package/dist-server/service/equipment/stop-reason.d.ts +0 -58
  178. package/dist-server/service/equipment/stop-reason.js +0 -114
  179. package/dist-server/service/equipment/stop-reason.js.map +0 -1
  180. package/dist-server/service/index.d.ts +0 -82
  181. package/dist-server/service/index.js +0 -145
  182. package/dist-server/service/index.js.map +0 -1
  183. package/dist-server/service/location/index.d.ts +0 -5
  184. package/dist-server/service/location/index.js +0 -9
  185. package/dist-server/service/location/index.js.map +0 -1
  186. package/dist-server/service/location/location-master-resolver.d.ts +0 -60
  187. package/dist-server/service/location/location-master-resolver.js +0 -313
  188. package/dist-server/service/location/location-master-resolver.js.map +0 -1
  189. package/dist-server/service/location/location-master.d.ts +0 -26
  190. package/dist-server/service/location/location-master.js +0 -28
  191. package/dist-server/service/location/location-master.js.map +0 -1
  192. package/dist-server/service/location/location-query.d.ts +0 -15
  193. package/dist-server/service/location/location-query.js +0 -56
  194. package/dist-server/service/location/location-query.js.map +0 -1
  195. package/dist-server/service/location/operational-location.d.ts +0 -116
  196. package/dist-server/service/location/operational-location.js +0 -157
  197. package/dist-server/service/location/operational-location.js.map +0 -1
  198. package/dist-server/service/master-axis.d.ts +0 -40
  199. package/dist-server/service/master-axis.js +0 -57
  200. package/dist-server/service/master-axis.js.map +0 -1
  201. package/dist-server/service/master-change-approval/approval-input.d.ts +0 -17
  202. package/dist-server/service/master-change-approval/approval-input.js +0 -35
  203. package/dist-server/service/master-change-approval/approval-input.js.map +0 -1
  204. package/dist-server/service/master-change-approval/builtin-axes.d.ts +0 -4
  205. package/dist-server/service/master-change-approval/builtin-axes.js +0 -96
  206. package/dist-server/service/master-change-approval/builtin-axes.js.map +0 -1
  207. package/dist-server/service/master-change-approval/index.d.ts +0 -14
  208. package/dist-server/service/master-change-approval/index.js +0 -37
  209. package/dist-server/service/master-change-approval/index.js.map +0 -1
  210. package/dist-server/service/master-change-approval/master-change-axis.d.ts +0 -54
  211. package/dist-server/service/master-change-approval/master-change-axis.js +0 -17
  212. package/dist-server/service/master-change-approval/master-change-axis.js.map +0 -1
  213. package/dist-server/service/master-change-approval/master-change-flow.d.ts +0 -65
  214. package/dist-server/service/master-change-approval/master-change-flow.js +0 -125
  215. package/dist-server/service/master-change-approval/master-change-flow.js.map +0 -1
  216. package/dist-server/service/master-change-approval/master-change-resolver.d.ts +0 -18
  217. package/dist-server/service/master-change-approval/master-change-resolver.js +0 -58
  218. package/dist-server/service/master-change-approval/master-change-resolver.js.map +0 -1
  219. package/dist-server/service/master-change-policy.d.ts +0 -122
  220. package/dist-server/service/master-change-policy.js +0 -304
  221. package/dist-server/service/master-change-policy.js.map +0 -1
  222. package/dist-server/service/master-conformance-resolver.d.ts +0 -34
  223. package/dist-server/service/master-conformance-resolver.js +0 -153
  224. package/dist-server/service/master-conformance-resolver.js.map +0 -1
  225. package/dist-server/service/master-conformance.d.ts +0 -80
  226. package/dist-server/service/master-conformance.js +0 -266
  227. package/dist-server/service/master-conformance.js.map +0 -1
  228. package/dist-server/service/master-crud.d.ts +0 -55
  229. package/dist-server/service/master-crud.js +0 -93
  230. package/dist-server/service/master-crud.js.map +0 -1
  231. package/dist-server/service/master-list.d.ts +0 -12
  232. package/dist-server/service/master-list.js +0 -30
  233. package/dist-server/service/master-list.js.map +0 -1
  234. package/dist-server/service/master-page-query.d.ts +0 -33
  235. package/dist-server/service/master-page-query.js +0 -55
  236. package/dist-server/service/master-page-query.js.map +0 -1
  237. package/dist-server/service/master-page.d.ts +0 -85
  238. package/dist-server/service/master-page.js +0 -104
  239. package/dist-server/service/master-page.js.map +0 -1
  240. package/dist-server/service/material/index.d.ts +0 -7
  241. package/dist-server/service/material/index.js +0 -12
  242. package/dist-server/service/material/index.js.map +0 -1
  243. package/dist-server/service/material/material-axis-status.d.ts +0 -8
  244. package/dist-server/service/material/material-axis-status.js +0 -19
  245. package/dist-server/service/material/material-axis-status.js.map +0 -1
  246. package/dist-server/service/material/material-class.d.ts +0 -34
  247. package/dist-server/service/material/material-class.js +0 -104
  248. package/dist-server/service/material/material-class.js.map +0 -1
  249. package/dist-server/service/material/material-definition.d.ts +0 -45
  250. package/dist-server/service/material/material-definition.js +0 -125
  251. package/dist-server/service/material/material-definition.js.map +0 -1
  252. package/dist-server/service/material/material-effective-list.d.ts +0 -39
  253. package/dist-server/service/material/material-effective-list.js +0 -54
  254. package/dist-server/service/material/material-effective-list.js.map +0 -1
  255. package/dist-server/service/material/material-master-resolver.d.ts +0 -106
  256. package/dist-server/service/material/material-master-resolver.js +0 -351
  257. package/dist-server/service/material/material-master-resolver.js.map +0 -1
  258. package/dist-server/service/material/material-master.d.ts +0 -9
  259. package/dist-server/service/material/material-master.js +0 -24
  260. package/dist-server/service/material/material-master.js.map +0 -1
  261. package/dist-server/service/material/material-query.d.ts +0 -16
  262. package/dist-server/service/material/material-query.js +0 -79
  263. package/dist-server/service/material/material-query.js.map +0 -1
  264. package/dist-server/service/material/material-revision-content.d.ts +0 -10
  265. package/dist-server/service/material/material-revision-content.js +0 -92
  266. package/dist-server/service/material/material-revision-content.js.map +0 -1
  267. package/dist-server/service/material/material-revision-resolver.d.ts +0 -60
  268. package/dist-server/service/material/material-revision-resolver.js +0 -96
  269. package/dist-server/service/material/material-revision-resolver.js.map +0 -1
  270. package/dist-server/service/material/material-revision-service.d.ts +0 -179
  271. package/dist-server/service/material/material-revision-service.js +0 -687
  272. package/dist-server/service/material/material-revision-service.js.map +0 -1
  273. package/dist-server/service/material/material-revision.d.ts +0 -86
  274. package/dist-server/service/material/material-revision.js +0 -339
  275. package/dist-server/service/material/material-revision.js.map +0 -1
  276. package/dist-server/service/material/recipe-index.d.ts +0 -23
  277. package/dist-server/service/material/recipe-index.js +0 -44
  278. package/dist-server/service/material/recipe-index.js.map +0 -1
  279. package/dist-server/service/operation/index.d.ts +0 -6
  280. package/dist-server/service/operation/index.js +0 -10
  281. package/dist-server/service/operation/index.js.map +0 -1
  282. package/dist-server/service/operation/operation-definition.d.ts +0 -52
  283. package/dist-server/service/operation/operation-definition.js +0 -143
  284. package/dist-server/service/operation/operation-definition.js.map +0 -1
  285. package/dist-server/service/operation/operation-master-resolver.d.ts +0 -52
  286. package/dist-server/service/operation/operation-master-resolver.js +0 -187
  287. package/dist-server/service/operation/operation-master-resolver.js.map +0 -1
  288. package/dist-server/service/operation/operation-master.d.ts +0 -21
  289. package/dist-server/service/operation/operation-master.js +0 -28
  290. package/dist-server/service/operation/operation-master.js.map +0 -1
  291. package/dist-server/service/operation/operation-query.d.ts +0 -15
  292. package/dist-server/service/operation/operation-query.js +0 -56
  293. package/dist-server/service/operation/operation-query.js.map +0 -1
  294. package/dist-server/service/operation/operation-readiness-resolver.d.ts +0 -39
  295. package/dist-server/service/operation/operation-readiness-resolver.js +0 -111
  296. package/dist-server/service/operation/operation-readiness-resolver.js.map +0 -1
  297. package/dist-server/service/operation/operation-readiness.d.ts +0 -34
  298. package/dist-server/service/operation/operation-readiness.js +0 -133
  299. package/dist-server/service/operation/operation-readiness.js.map +0 -1
  300. package/dist-server/service/personnel/index.d.ts +0 -6
  301. package/dist-server/service/personnel/index.js +0 -10
  302. package/dist-server/service/personnel/index.js.map +0 -1
  303. package/dist-server/service/personnel/person.d.ts +0 -51
  304. package/dist-server/service/personnel/person.js +0 -119
  305. package/dist-server/service/personnel/person.js.map +0 -1
  306. package/dist-server/service/personnel/personnel-class-readiness.d.ts +0 -22
  307. package/dist-server/service/personnel/personnel-class-readiness.js +0 -98
  308. package/dist-server/service/personnel/personnel-class-readiness.js.map +0 -1
  309. package/dist-server/service/personnel/personnel-class.d.ts +0 -54
  310. package/dist-server/service/personnel/personnel-class.js +0 -114
  311. package/dist-server/service/personnel/personnel-class.js.map +0 -1
  312. package/dist-server/service/personnel/personnel-master-resolver.d.ts +0 -53
  313. package/dist-server/service/personnel/personnel-master-resolver.js +0 -187
  314. package/dist-server/service/personnel/personnel-master-resolver.js.map +0 -1
  315. package/dist-server/service/personnel/personnel-master.d.ts +0 -39
  316. package/dist-server/service/personnel/personnel-master.js +0 -34
  317. package/dist-server/service/personnel/personnel-master.js.map +0 -1
  318. package/dist-server/service/personnel/personnel-query.d.ts +0 -29
  319. package/dist-server/service/personnel/personnel-query.js +0 -79
  320. package/dist-server/service/personnel/personnel-query.js.map +0 -1
  321. package/dist-server/service/personnel/qualification.d.ts +0 -104
  322. package/dist-server/service/personnel/qualification.js +0 -147
  323. package/dist-server/service/personnel/qualification.js.map +0 -1
  324. package/dist-server/service/quality/index.d.ts +0 -4
  325. package/dist-server/service/quality/index.js +0 -8
  326. package/dist-server/service/quality/index.js.map +0 -1
  327. package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +0 -12
  328. package/dist-server/service/quality/nonconformance-cause-resolver.js +0 -60
  329. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +0 -1
  330. package/dist-server/service/quality/nonconformance-cause.d.ts +0 -20
  331. package/dist-server/service/quality/nonconformance-cause.js +0 -90
  332. package/dist-server/service/quality/nonconformance-cause.js.map +0 -1
  333. package/dist-server/service/recipe/index.d.ts +0 -10
  334. package/dist-server/service/recipe/index.js +0 -16
  335. package/dist-server/service/recipe/index.js.map +0 -1
  336. package/dist-server/service/recipe/recipe-definition.d.ts +0 -75
  337. package/dist-server/service/recipe/recipe-definition.js +0 -143
  338. package/dist-server/service/recipe/recipe-definition.js.map +0 -1
  339. package/dist-server/service/recipe/recipe-effective-list.d.ts +0 -49
  340. package/dist-server/service/recipe/recipe-effective-list.js +0 -96
  341. package/dist-server/service/recipe/recipe-effective-list.js.map +0 -1
  342. package/dist-server/service/recipe/recipe-master-resolver.d.ts +0 -28
  343. package/dist-server/service/recipe/recipe-master-resolver.js +0 -128
  344. package/dist-server/service/recipe/recipe-master-resolver.js.map +0 -1
  345. package/dist-server/service/recipe/recipe-master.d.ts +0 -37
  346. package/dist-server/service/recipe/recipe-master.js +0 -47
  347. package/dist-server/service/recipe/recipe-master.js.map +0 -1
  348. package/dist-server/service/recipe/recipe-query.d.ts +0 -21
  349. package/dist-server/service/recipe/recipe-query.js +0 -82
  350. package/dist-server/service/recipe/recipe-query.js.map +0 -1
  351. package/dist-server/service/recipe/recipe-revision-content.d.ts +0 -32
  352. package/dist-server/service/recipe/recipe-revision-content.js +0 -70
  353. package/dist-server/service/recipe/recipe-revision-content.js.map +0 -1
  354. package/dist-server/service/recipe/recipe-revision-line.d.ts +0 -30
  355. package/dist-server/service/recipe/recipe-revision-line.js +0 -95
  356. package/dist-server/service/recipe/recipe-revision-line.js.map +0 -1
  357. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +0 -65
  358. package/dist-server/service/recipe/recipe-revision-resolver.js +0 -96
  359. package/dist-server/service/recipe/recipe-revision-resolver.js.map +0 -1
  360. package/dist-server/service/recipe/recipe-revision-service.d.ts +0 -183
  361. package/dist-server/service/recipe/recipe-revision-service.js +0 -754
  362. package/dist-server/service/recipe/recipe-revision-service.js.map +0 -1
  363. package/dist-server/service/recipe/recipe-revision.d.ts +0 -102
  364. package/dist-server/service/recipe/recipe-revision.js +0 -373
  365. package/dist-server/service/recipe/recipe-revision.js.map +0 -1
  366. package/dist-server/service/recipe/route-definition.d.ts +0 -51
  367. package/dist-server/service/recipe/route-definition.js +0 -114
  368. package/dist-server/service/recipe/route-definition.js.map +0 -1
  369. package/dist-server/service/resource/class-lineage.d.ts +0 -46
  370. package/dist-server/service/resource/class-lineage.js +0 -80
  371. package/dist-server/service/resource/class-lineage.js.map +0 -1
  372. package/dist-server/service/resource/class-members.d.ts +0 -36
  373. package/dist-server/service/resource/class-members.js +0 -59
  374. package/dist-server/service/resource/class-members.js.map +0 -1
  375. package/dist-server/service/resource/referrers.d.ts +0 -54
  376. package/dist-server/service/resource/referrers.js +0 -99
  377. package/dist-server/service/resource/referrers.js.map +0 -1
  378. package/dist-server/service/resource/resource-class.d.ts +0 -25
  379. package/dist-server/service/resource/resource-class.js +0 -29
  380. package/dist-server/service/resource/resource-class.js.map +0 -1
  381. package/dist-server/service/revision-baseline.d.ts +0 -71
  382. package/dist-server/service/revision-baseline.js +0 -87
  383. package/dist-server/service/revision-baseline.js.map +0 -1
  384. package/dist-server/service/row-lock.d.ts +0 -22
  385. package/dist-server/service/row-lock.js +0 -31
  386. package/dist-server/service/row-lock.js.map +0 -1
  387. package/dist-server/service/status/axis-stamp.d.ts +0 -16
  388. package/dist-server/service/status/axis-stamp.js +0 -22
  389. package/dist-server/service/status/axis-stamp.js.map +0 -1
  390. package/dist-server/service/status/index.d.ts +0 -3
  391. package/dist-server/service/status/index.js +0 -7
  392. package/dist-server/service/status/index.js.map +0 -1
  393. package/dist-server/service/status/master-status.d.ts +0 -38
  394. package/dist-server/service/status/master-status.js +0 -129
  395. package/dist-server/service/status/master-status.js.map +0 -1
  396. package/dist-server/service/test-spec/criteria-check.d.ts +0 -53
  397. package/dist-server/service/test-spec/criteria-check.js +0 -142
  398. package/dist-server/service/test-spec/criteria-check.js.map +0 -1
  399. package/dist-server/service/test-spec/criteria-rows.d.ts +0 -89
  400. package/dist-server/service/test-spec/criteria-rows.js +0 -139
  401. package/dist-server/service/test-spec/criteria-rows.js.map +0 -1
  402. package/dist-server/service/test-spec/index.d.ts +0 -6
  403. package/dist-server/service/test-spec/index.js +0 -11
  404. package/dist-server/service/test-spec/index.js.map +0 -1
  405. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +0 -34
  406. package/dist-server/service/test-spec/test-spec-effective-list.js +0 -42
  407. package/dist-server/service/test-spec/test-spec-effective-list.js.map +0 -1
  408. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +0 -44
  409. package/dist-server/service/test-spec/test-spec-master-resolver.js +0 -144
  410. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +0 -1
  411. package/dist-server/service/test-spec/test-spec-master.d.ts +0 -6
  412. package/dist-server/service/test-spec/test-spec-master.js +0 -18
  413. package/dist-server/service/test-spec/test-spec-master.js.map +0 -1
  414. package/dist-server/service/test-spec/test-spec-query.d.ts +0 -15
  415. package/dist-server/service/test-spec/test-spec-query.js +0 -61
  416. package/dist-server/service/test-spec/test-spec-query.js.map +0 -1
  417. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +0 -59
  418. package/dist-server/service/test-spec/test-spec-revision-resolver.js +0 -96
  419. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +0 -1
  420. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +0 -178
  421. package/dist-server/service/test-spec/test-spec-revision-service.js +0 -685
  422. package/dist-server/service/test-spec/test-spec-revision-service.js.map +0 -1
  423. package/dist-server/service/test-spec/test-spec-revision.d.ts +0 -86
  424. package/dist-server/service/test-spec/test-spec-revision.js +0 -334
  425. package/dist-server/service/test-spec/test-spec-revision.js.map +0 -1
  426. package/dist-server/service/test-spec/test-specification.d.ts +0 -47
  427. package/dist-server/service/test-spec/test-specification.js +0 -119
  428. package/dist-server/service/test-spec/test-specification.js.map +0 -1
  429. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,454 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { css, html, LitElement } from 'lit';
3
- import { customElement, property, state } from 'lit/decorators.js';
4
- import { i18next, localize } from '@operato/i18n';
5
- import { navigate } from '@operato/shell';
6
- import { client } from '@operato/graphql';
7
- import { OxPrompt } from '@operato/popup';
8
- import gql from 'graphql-tag';
9
- import '@operato/help/ox-help-icon.js';
10
- /* The signal name is worklist's; ops-master builds on worklist since it owns the approval flow (ADR-0086). */
11
- import { ACTIVITY_PANEL_CONTENT } from '@things-factory/worklist/dist-client';
12
- import { axesForActivity, panelContentSignal } from './master-change-policy-axes.js';
13
- /**
14
- * **이 사업장이 어느 기준정보를 승인제로 두는가.**
15
- *
16
- * ── 왜 설정이 아닌가 (2026-09-23, 사용자 판단) ────────────────────────────
17
- * 처음에는 사업장 설정의 한 칸이었다. 설정은 내가 무엇을 보는지 고르는 자리이고, **다른 사람의 일이
18
- * 늘어나는 것은 설정이 아니다** — 축 하나를 승인제로 돌리면 그 축의 수정이 앞으로 결재로 흘러간다.
19
- * 그래서 업무를 다루는 화면으로 옮긴다.
20
- *
21
- * 그때 표가 두 자리에 선다. **자리마다 고르는 목록이 다르다** — `master-change-policy-axes.ts` 가
22
- * 그 판단을 갖는다. 제목은 이 부품이 아니라 **담는 쪽**이 붙인다.
23
- *
24
- * ── 이 선언이 무엇인가 ─────────────────────────────────────────────────────
25
- * 사람의 취향이 아니라 **이 사업장의 규칙**이다. 축마다 한 번 정하고, 정하면 그 축의 마스터는
26
- * 승인을 지나야 바뀐다.
27
- *
28
- * ── 왜 화면이 필요했나 ─────────────────────────────────────────────────────
29
- * 문은 있었는데 **그리로 가는 길이 없었다.** 정책을 안 정한 축은 화면이 열리다 말고 거절을 냈고
30
- * (`MASTER_POLICY_REQUIRED`), 정하러 들어갈 자리도 없었다.
31
- *
32
- * ── 소유자만 정한다 ────────────────────────────────────────────────────────
33
- * 읽기는 누구나 한다 — 기준정보를 고치려다 막힌 사람이 **왜 막혔는지** 여기서 알아야 한다.
34
- * 정하는 것은 도메인 소유자뿐이고, 소유자가 아니면 그렇게 적어 준다.
35
- */
36
- /*
37
- * ⚠ 문구 키에 `master-policy.` 를 붙인다. 번역이 한 평면에 병합되고 **마지막이 이기므로**,
38
- * `text.not-declared` 처럼 흔한 이름은 다른 패키지가 다른 뜻으로 이미 쓰고 있다 — plant 에서는
39
- * 「등록되지 않았습니다」였고, 이 화면이 그 말로 떴다(2026-09-22 화면에서 확인).
40
- */
41
- let MasterChangePolicyPanel = class MasterChangePolicyPanel extends localize(i18next)(LitElement) {
42
- constructor() {
43
- super(...arguments);
44
- this.axes = [];
45
- this.canDeclare = false;
46
- /**
47
- * **아직 못 읽은 것과 없는 것을 가른다.**
48
- *
49
- * 읽기 전에는 `axes` 가 비어 있고, 업무 하나로 좁힌 자리에서는 그 빈 목록이 곧바로 「이 업무를
50
- * 부르는 기준정보가 없습니다」로 그려졌다 — 잠깐 뒤에 표가 나타난다. 사람이 그 잠깐을 보면 없는
51
- * 줄 알고 나간다. 읽기 전에는 아무 말도 하지 않는다.
52
- */
53
- this.loaded = false;
54
- /** 못 읽었으면 못 읽었다고 말한다. 빈 표는 「없다」로 읽힌다. */
55
- this.failed = false;
56
- }
57
- static { this.styles = [
58
- css `
59
- table {
60
- width: 100%;
61
- border-collapse: collapse;
62
- }
63
-
64
- /* 머리줄은 내용과 달라야 한다 — 같은 글자에 같은 선이면 첫 줄도 자료로 읽힌다. */
65
- th {
66
- text-align: left;
67
- padding: var(--spacing-small, 8px);
68
- background: var(--md-sys-color-surface-container-high);
69
- color: var(--md-sys-color-on-surface-variant);
70
- font: var(--label-font);
71
- font-weight: 500;
72
- border-bottom: 1px solid var(--md-sys-color-outline);
73
- white-space: nowrap;
74
- }
75
-
76
- td {
77
- text-align: left;
78
- vertical-align: middle;
79
- padding: var(--spacing-small, 8px);
80
- border-bottom: 1px solid var(--md-sys-color-outline-variant);
81
- font: var(--label-font);
82
- color: var(--md-sys-color-on-surface);
83
- }
84
-
85
- tr:last-child td {
86
- border-bottom: none;
87
- }
88
-
89
- /*
90
- * 둘을 나란히 두고 **지금 것을 채워서** 보인다. 채운 쪽이 지금 서 있는 것이고, 못 누른다.
91
- * 반대쪽은 비어 있고 눌린다 — 무엇이 서 있는지와 무엇을 고를 수 있는지가 한 자리에서 읽힌다.
92
- *
93
- * 처음엔 두 쪽의 차이가 옅은 바탕색 하나였다. 나란히 놓고 보면 둘 다 버튼으로만 보여서 어느
94
- * 것이 지금 것인지 안 읽혔다(2026-09-22 화면에서 확인). 채움과 비움으로 가른다.
95
- *
96
- * 둘 다 비어 있으면 **아직 안 정한 것**이다. 그 줄만 두 쪽이 다 눌린다.
97
- */
98
- /*
99
- * 칸을 flex 로 만들지 않는다. 그러면 그 칸만 표의 줄 높이를 안 따라가서, 옆 칸의 글자와 단추가
100
- * 서로 다른 높이에 놓인다(2026-09-22 화면에서 확인). 칸은 칸으로 두고 단추 사이만 띄운다.
101
- */
102
- .choice {
103
- white-space: nowrap;
104
- text-align: right;
105
- }
106
-
107
- .choice button + button {
108
- margin-left: var(--spacing-small, 6px);
109
- }
110
-
111
- .choice button {
112
- padding: 3px 12px;
113
- border: 1px solid var(--md-sys-color-outline-variant);
114
- border-radius: var(--border-radius, 4px);
115
- background: transparent;
116
- color: var(--md-sys-color-on-surface-variant);
117
- font: var(--label-font);
118
- cursor: pointer;
119
- }
120
-
121
- .choice button:hover {
122
- border-color: var(--md-sys-color-primary);
123
- color: var(--md-sys-color-primary);
124
- }
125
-
126
- /*
127
- * 결재선이 없어 **아직 고를 수 없는 쪽**은 그렇게 보인다. 눌러는 진다 — 왜 못 고르는지는 눌러야
128
- * 들을 수 있고, 못 누르게 막으면 그 까닭이 어디에도 없다.
129
- */
130
- .choice button.blocked {
131
- border-style: dashed;
132
- color: var(--md-sys-color-outline);
133
- }
134
-
135
- .choice button.on {
136
- background: var(--md-sys-color-primary);
137
- color: var(--md-sys-color-on-primary);
138
- border-color: var(--md-sys-color-primary);
139
- font-weight: 700;
140
- cursor: default;
141
- }
142
-
143
- /*
144
- * 축 이름만으로는 무엇을 정하는 것인지 안 읽힌다 — 「라우팅」과 「제조법」이 무엇이 다른지
145
- * 여기서 알아야 고를 수 있다.
146
- *
147
- * 한 줄은 **이름 밑에 그냥 적는다.** 마우스를 올려야 보이는 것은 안 올려 보면 없는 것과 같다.
148
- *
149
- * 더 알고 싶은 사람에게는 도움말 아이콘이 있다. 축이 무엇이고 무엇을 좌우하는지는 이 화면이
150
- * 한 줄로 다 말할 것이 아니라 도움말이 맡을 내용이다 — 여기서는 /master-data/<축> 으로
151
- * 길만 낸다. 내용은 도움말 쪽이 채운다.
152
- */
153
- /*
154
- * 표준 도움말 아이콘은 18px 에 불투명도 0.75 다. 그것은 폼의 이름표 옆에 하나 놓일 때의 크기고,
155
- * 여기서는 14px 글자 옆에 열여섯 번 되풀이돼서 이름보다 먼저 보였다. 그래서 **이 표에서만**
156
- * 글자에 맞춰 줄이고 뒤로 물린다. 색과 동작은 표준 그대로다.
157
- */
158
- ox-help-icon {
159
- vertical-align: middle;
160
- --help-icon-size: 15px;
161
- --help-icon-opacity: 0.45;
162
- }
163
- .axis {
164
- white-space: nowrap;
165
- font-weight: 500;
166
- }
167
-
168
- .what {
169
- color: var(--md-sys-color-on-surface-variant);
170
- font-size: 11px;
171
- line-height: 1.35;
172
- }
173
-
174
- /* 설명이 남는 자리를 먹고, 이름과 버튼은 자기 폭만 쓴다. */
175
- .what-column {
176
- width: 100%;
177
- }
178
-
179
- /* 넓을 때는 설명이 자기 칸에 있다. 이름 밑의 것은 접혀 있다. */
180
- .folded {
181
- display: none;
182
- }
183
-
184
- /*
185
- * 좁아지면 **설명 칸을 접어 이름 밑으로 넣는다.** 세 칸이 다 남으면 이름과 버튼이 눌려서
186
- * 낱말마다 줄이 바뀐다 — 고르는 화면인데 고를 것이 안 읽힌다.
187
- */
188
- @media (max-width: 720px) {
189
- .what-column {
190
- display: none;
191
- }
192
-
193
- .folded {
194
- display: block;
195
- margin-top: 2px;
196
- white-space: normal;
197
- }
198
-
199
- .axis {
200
- white-space: normal;
201
- }
202
- }
203
-
204
- /*
205
- * 더 좁아지면 **설명을 아주 뺀다.** 접어 넣은 두 줄이 이름보다 길어져서, 줄마다 무엇을 고르는
206
- * 화면인지가 안 보인다. 알고 싶은 사람은 도움말 아이콘으로 간다.
207
- */
208
- @media (max-width: 480px) {
209
- .folded {
210
- display: none;
211
- }
212
- }
213
-
214
- /*
215
- * 결재를 타는 축은 **결재선이 있는지 없는지를 여기서 말한다.** 없으면 정하러 가는 길도 같이
216
- * 낸다 — 결재선이 어디서 정해지는지(업무 목록의 그 줄) 아는 사람이 많지 않다.
217
- */
218
- .line {
219
- margin-top: 3px;
220
- color: var(--md-sys-color-on-surface-variant);
221
- font-size: 11px;
222
- }
223
-
224
- .line a {
225
- color: var(--md-sys-color-primary);
226
- }
227
-
228
- .note {
229
- color: var(--md-sys-color-on-surface-variant);
230
- padding: var(--spacing-small, 8px);
231
- }
232
- `
233
- ]; }
234
- connectedCallback() {
235
- super.connectedCallback();
236
- this.load();
237
- }
238
- async load() {
239
- try {
240
- const response = await client.query({
241
- query: gql `
242
- query {
243
- masterChangePolicies
244
- }
245
- `,
246
- fetchPolicy: 'network-only'
247
- });
248
- /*
249
- * 오류가 예외로 안 오고 답에 실려 올 수 있다 — 그러면 `data` 가 비어 「축 0」으로 읽힌다. 못 읽은
250
- * 것이다.
251
- */
252
- if (response.errors?.length)
253
- throw new Error(response.errors.map((one) => one.message).join('; '));
254
- const found = response.data?.masterChangePolicies;
255
- this.axes = found?.axes ?? [];
256
- this.canDeclare = !!found?.canDeclare;
257
- this.failed = false;
258
- }
259
- catch (thrown) {
260
- /* 삼키지 않는다 — 빈 표를 그리면 「이 사업장은 아무것도 승인제가 아니다」로 읽힌다. */
261
- this.axes = [];
262
- this.failed = true;
263
- console.warn(thrown);
264
- }
265
- finally {
266
- this.loaded = true;
267
- }
268
- const signal = panelContentSignal(this.axes, this.activity, this.failed);
269
- if (signal) {
270
- this.dispatchEvent(new CustomEvent(ACTIVITY_PANEL_CONTENT, { detail: signal, bubbles: true, composed: true }));
271
- }
272
- }
273
- /**
274
- * 정하는 것도 바꾸는 것도 여기서 한다 — 바꾸면 정책 줄이 새로 서고, 지난 개정본은 자기 때의 줄을
275
- * 계속 가리킨다. **결재에 안 태운다**(2026-09-22): 사업장 소유자가 정하는 것이라 확인만 받는다.
276
- *
277
- * ⚠ **사유는 사람에게 안 묻는다.** 서버가 필수로 받지만 그것은 「누가 어디서 정했나」를 남기려는
278
- * 것이다. 시스템 설정에 사람이 글을 쓸 일이 아니다.
279
- */
280
- async declare(one, approvalRequired) {
281
- const { axis } = one;
282
- const how = i18next.t(approvalRequired ? 'master-policy.approval-required' : 'master-policy.direct-change-allowed');
283
- const name = i18next.t(`axis.${axis}`, { defaultValue: axis });
284
- /*
285
- * **걸 수 없는 것을 골라 보게 하지 않는다.** 결재선이 비어 있으면 서버가 거절하는데, 그것을 누른
286
- * 뒤에 알면 「예」를 고르고 나서 안 된다는 말을 듣는 꼴이다. 묻기 전에 먼저 본다.
287
- */
288
- if (approvalRequired && one.approvalReady === false) {
289
- await OxPrompt.open({
290
- type: 'warning',
291
- title: i18next.t('master-policy.approval-line-missing'),
292
- text: i18next.t('master-policy.set-the-approval-line', { activity: one.approvalActivity ?? '' }),
293
- confirmButton: { text: i18next.t('button.confirm') }
294
- });
295
- return;
296
- }
297
- /*
298
- * 경고다. 이 사업장의 기준정보가 앞으로 어떻게 바뀌는가를 정하는 자리고, 규제를 푸는 쪽으로
299
- * 누르면 결재 없이 바로 고쳐지기 시작한다. 되묻는 말투가 아니라 멈춰 세우는 말투여야 한다.
300
- */
301
- const yes = await OxPrompt.open({
302
- type: 'warning',
303
- title: i18next.t('master-policy.confirm-title'),
304
- text: i18next.t('master-policy.confirm-text', { master: name, how }),
305
- confirmButton: { text: i18next.t('button.confirm') },
306
- cancelButton: { text: i18next.t('button.cancel') }
307
- });
308
- if (!yes) {
309
- return;
310
- }
311
- /*
312
- * 거절을 삼키지 않는다. 앞서는 오류가 있으면 그냥 다시 읽었고, 사람은 눌렀는데 아무 일도 안
313
- * 일어나는 화면을 봤다. 규제를 거는 쪽은 **결재선이 비어 있으면 거절된다**
314
- * (`MASTER_APPROVAL_LINE_REQUIRED`) — 그 말을 그대로 보여야 어디를 고칠지 안다.
315
- */
316
- try {
317
- const response = await client.mutate({
318
- mutation: gql `
319
- mutation ($axis: String!, $approvalRequired: Boolean!, $reason: String!) {
320
- declareMasterChangePolicy(axis: $axis, approvalRequired: $approvalRequired, reason: $reason)
321
- }
322
- `,
323
- variables: { axis, approvalRequired, reason: i18next.t('master-policy.reason-from-setting') }
324
- });
325
- if (response.errors?.length) {
326
- throw new Error(response.errors[0].message);
327
- }
328
- }
329
- catch (error) {
330
- /*
331
- * 거절은 **틀이 이미 붉은 쪽지로 말한다** — 서버가 그 사람의 말로 지은 문장 그대로. 여기서 또
332
- * 창을 띄우면 같은 말이 두 번 나온다(2026-09-22 화면에서 확인). 여기서는 다시 읽기만 한다.
333
- */
334
- console.warn(error?.message ?? error);
335
- }
336
- this.load();
337
- }
338
- render() {
339
- /* 읽기 전에는 아무 말도 하지 않는다. 「없다」도 아직 말할 수 없다. */
340
- if (!this.loaded) {
341
- return html ``;
342
- }
343
- if (this.failed) {
344
- return html `<div class="note">${i18next.t('master-policy.could-not-read')}</div>`;
345
- }
346
- const shown = axesForActivity(this.axes, this.activity);
347
- /*
348
- * 좁혔는데 하나도 없으면 **그 사실을 말한다.** 빈 표를 두면 「이 업무를 부르는 축이 없다」와
349
- * 「아직 못 읽었다」가 같은 화면이 된다.
350
- */
351
- if (this.activity && !shown.length) {
352
- return html `<div class="note">${i18next.t('master-policy.no-axis-for-activity')}</div>`;
353
- }
354
- return html `
355
- <div>
356
- ${this.canDeclare ? '' : html `<div class="note">${i18next.t('master-policy.only-the-owner')}</div>`}
357
-
358
- <table>
359
- <tr>
360
- <th>${i18next.t('master-policy.field.axis')}</th>
361
- <th class="what-column">${i18next.t('master-policy.field.what')}</th>
362
- <th>${i18next.t('master-policy.field.state')}</th>
363
- </tr>
364
- ${shown.map(one => html `
365
- <tr>
366
- <td class="axis">
367
- ${i18next.t(`axis.${one.axis}`, { defaultValue: one.axis })}
368
- <ox-help-icon topic=${`/master-data/${one.axis}`}></ox-help-icon>
369
- <span class="what folded">${i18next.t(`axis-help.${one.axis}`, { defaultValue: '' })}</span>
370
- </td>
371
- <td class="what what-column">${i18next.t(`axis-help.${one.axis}`, { defaultValue: '' })}</td>
372
- ${!this.canDeclare
373
- ? html `<td>
374
- ${one.approvalRequired
375
- ? i18next.t('master-policy.approval-required')
376
- : i18next.t('master-policy.direct-change-allowed')}
377
- </td>`
378
- : one.revisable === false && one.approvalRequired !== true
379
- ? /*
380
- * 개정본 문이 없는 축은 소유자가 고를 것이 없다 — 버튼 대신 지금 상태와 한 줄(UX, 2026-09-24).
381
- * 막힌 버튼은 사람이 풀 수 있는 막힘(결재선 없음)에만 쓴다.
382
- */
383
- html `<td class="choice">
384
- ${i18next.t('master-policy.direct-change-allowed')}
385
- <div class="line">${i18next.t('master-policy.no-revision-path')}</div>
386
- </td>`
387
- : html `<td class="choice">
388
- <button
389
- class="${one.approvalRequired === true ? 'on' : ''} ${one.approvalReady === false
390
- ? 'blocked'
391
- : ''}"
392
- ?disabled=${one.approvalRequired === true}
393
- @click=${() => this.declare(one, true)}
394
- >
395
- ${i18next.t('master-policy.button.approval-required')}
396
- </button>
397
- <button
398
- class=${one.approvalRequired === false ? 'on' : ''}
399
- ?disabled=${one.approvalRequired === false}
400
- @click=${() => this.declare(one, false)}
401
- >
402
- ${i18next.t('master-policy.button.direct-change')}
403
- </button>
404
- ${one.revisable === false
405
- ? html `<div class="line">${i18next.t('master-policy.no-revision-path')}</div>`
406
- : ''}
407
- ${one.approvalActivity
408
- ? html `<div class="line">
409
- ${one.approvalReady
410
- ? i18next.t('master-policy.approval-line-set')
411
- : this.activity
412
- ? i18next.t('master-policy.approval-line-none-here')
413
- : html `${i18next.t('master-policy.approval-line-none')} ·
414
- <a
415
- href="javascript:void(0)"
416
- @click=${() => navigate('activity-detail?name=' + encodeURIComponent(one.approvalActivity))}
417
- >
418
- ${i18next.t('master-policy.go-set-the-line')}
419
- </a>`}
420
- </div>`
421
- : ''}
422
- </td>`}
423
- </tr>
424
- `)}
425
- </table>
426
- </div>
427
- `;
428
- }
429
- };
430
- __decorate([
431
- property({ type: String }),
432
- __metadata("design:type", String)
433
- ], MasterChangePolicyPanel.prototype, "activity", void 0);
434
- __decorate([
435
- state(),
436
- __metadata("design:type", Array)
437
- ], MasterChangePolicyPanel.prototype, "axes", void 0);
438
- __decorate([
439
- state(),
440
- __metadata("design:type", Object)
441
- ], MasterChangePolicyPanel.prototype, "canDeclare", void 0);
442
- __decorate([
443
- state(),
444
- __metadata("design:type", Object)
445
- ], MasterChangePolicyPanel.prototype, "loaded", void 0);
446
- __decorate([
447
- state(),
448
- __metadata("design:type", Object)
449
- ], MasterChangePolicyPanel.prototype, "failed", void 0);
450
- MasterChangePolicyPanel = __decorate([
451
- customElement('master-change-policy-panel')
452
- ], MasterChangePolicyPanel);
453
- export { MasterChangePolicyPanel };
454
- //# sourceMappingURL=master-change-policy-panel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"master-change-policy-panel.js","sourceRoot":"","sources":["../client/master-change-policy-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate } from '@operato/shell'\nimport { client } from '@operato/graphql'\nimport { OxPrompt } from '@operato/popup'\nimport gql from 'graphql-tag'\nimport '@operato/help/ox-help-icon.js'\n\n/* The signal name is worklist's; ops-master builds on worklist since it owns the approval flow (ADR-0086). */\nimport { ACTIVITY_PANEL_CONTENT } from '@things-factory/worklist/dist-client'\n\nimport { axesForActivity, panelContentSignal, PolicyAxis } from './master-change-policy-axes.js'\n\n/**\n * **이 사업장이 어느 기준정보를 승인제로 두는가.**\n *\n * ── 왜 설정이 아닌가 (2026-09-23, 사용자 판단) ────────────────────────────\n * 처음에는 사업장 설정의 한 칸이었다. 설정은 내가 무엇을 보는지 고르는 자리이고, **다른 사람의 일이\n * 늘어나는 것은 설정이 아니다** — 축 하나를 승인제로 돌리면 그 축의 수정이 앞으로 결재로 흘러간다.\n * 그래서 업무를 다루는 화면으로 옮긴다.\n *\n * 그때 표가 두 자리에 선다. **자리마다 고르는 목록이 다르다** — `master-change-policy-axes.ts` 가\n * 그 판단을 갖는다. 제목은 이 부품이 아니라 **담는 쪽**이 붙인다.\n *\n * ── 이 선언이 무엇인가 ─────────────────────────────────────────────────────\n * 사람의 취향이 아니라 **이 사업장의 규칙**이다. 축마다 한 번 정하고, 정하면 그 축의 마스터는\n * 승인을 지나야 바뀐다.\n *\n * ── 왜 화면이 필요했나 ─────────────────────────────────────────────────────\n * 문은 있었는데 **그리로 가는 길이 없었다.** 정책을 안 정한 축은 화면이 열리다 말고 거절을 냈고\n * (`MASTER_POLICY_REQUIRED`), 정하러 들어갈 자리도 없었다.\n *\n * ── 소유자만 정한다 ────────────────────────────────────────────────────────\n * 읽기는 누구나 한다 — 기준정보를 고치려다 막힌 사람이 **왜 막혔는지** 여기서 알아야 한다.\n * 정하는 것은 도메인 소유자뿐이고, 소유자가 아니면 그렇게 적어 준다.\n */\n/*\n * ⚠ 문구 키에 `master-policy.` 를 붙인다. 번역이 한 평면에 병합되고 **마지막이 이기므로**,\n * `text.not-declared` 처럼 흔한 이름은 다른 패키지가 다른 뜻으로 이미 쓰고 있다 — plant 에서는\n * 「등록되지 않았습니다」였고, 이 화면이 그 말로 떴다(2026-09-22 화면에서 확인).\n */\n@customElement('master-change-policy-panel')\nexport class MasterChangePolicyPanel extends localize(i18next)(LitElement) {\n static styles = [\n css`\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n /* 머리줄은 내용과 달라야 한다 — 같은 글자에 같은 선이면 첫 줄도 자료로 읽힌다. */\n th {\n text-align: left;\n padding: var(--spacing-small, 8px);\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface-variant);\n font: var(--label-font);\n font-weight: 500;\n border-bottom: 1px solid var(--md-sys-color-outline);\n white-space: nowrap;\n }\n\n td {\n text-align: left;\n vertical-align: middle;\n padding: var(--spacing-small, 8px);\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n font: var(--label-font);\n color: var(--md-sys-color-on-surface);\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n\n /*\n * 둘을 나란히 두고 **지금 것을 채워서** 보인다. 채운 쪽이 지금 서 있는 것이고, 못 누른다.\n * 반대쪽은 비어 있고 눌린다 — 무엇이 서 있는지와 무엇을 고를 수 있는지가 한 자리에서 읽힌다.\n *\n * 처음엔 두 쪽의 차이가 옅은 바탕색 하나였다. 나란히 놓고 보면 둘 다 버튼으로만 보여서 어느\n * 것이 지금 것인지 안 읽혔다(2026-09-22 화면에서 확인). 채움과 비움으로 가른다.\n *\n * 둘 다 비어 있으면 **아직 안 정한 것**이다. 그 줄만 두 쪽이 다 눌린다.\n */\n /*\n * 칸을 flex 로 만들지 않는다. 그러면 그 칸만 표의 줄 높이를 안 따라가서, 옆 칸의 글자와 단추가\n * 서로 다른 높이에 놓인다(2026-09-22 화면에서 확인). 칸은 칸으로 두고 단추 사이만 띄운다.\n */\n .choice {\n white-space: nowrap;\n text-align: right;\n }\n\n .choice button + button {\n margin-left: var(--spacing-small, 6px);\n }\n\n .choice button {\n padding: 3px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: var(--border-radius, 4px);\n background: transparent;\n color: var(--md-sys-color-on-surface-variant);\n font: var(--label-font);\n cursor: pointer;\n }\n\n .choice button:hover {\n border-color: var(--md-sys-color-primary);\n color: var(--md-sys-color-primary);\n }\n\n /*\n * 결재선이 없어 **아직 고를 수 없는 쪽**은 그렇게 보인다. 눌러는 진다 — 왜 못 고르는지는 눌러야\n * 들을 수 있고, 못 누르게 막으면 그 까닭이 어디에도 없다.\n */\n .choice button.blocked {\n border-style: dashed;\n color: var(--md-sys-color-outline);\n }\n\n .choice button.on {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n border-color: var(--md-sys-color-primary);\n font-weight: 700;\n cursor: default;\n }\n\n /*\n * 축 이름만으로는 무엇을 정하는 것인지 안 읽힌다 — 「라우팅」과 「제조법」이 무엇이 다른지\n * 여기서 알아야 고를 수 있다.\n *\n * 한 줄은 **이름 밑에 그냥 적는다.** 마우스를 올려야 보이는 것은 안 올려 보면 없는 것과 같다.\n *\n * 더 알고 싶은 사람에게는 도움말 아이콘이 있다. 축이 무엇이고 무엇을 좌우하는지는 이 화면이\n * 한 줄로 다 말할 것이 아니라 도움말이 맡을 내용이다 — 여기서는 /master-data/<축> 으로\n * 길만 낸다. 내용은 도움말 쪽이 채운다.\n */\n /*\n * 표준 도움말 아이콘은 18px 에 불투명도 0.75 다. 그것은 폼의 이름표 옆에 하나 놓일 때의 크기고,\n * 여기서는 14px 글자 옆에 열여섯 번 되풀이돼서 이름보다 먼저 보였다. 그래서 **이 표에서만**\n * 글자에 맞춰 줄이고 뒤로 물린다. 색과 동작은 표준 그대로다.\n */\n ox-help-icon {\n vertical-align: middle;\n --help-icon-size: 15px;\n --help-icon-opacity: 0.45;\n }\n .axis {\n white-space: nowrap;\n font-weight: 500;\n }\n\n .what {\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n line-height: 1.35;\n }\n\n /* 설명이 남는 자리를 먹고, 이름과 버튼은 자기 폭만 쓴다. */\n .what-column {\n width: 100%;\n }\n\n /* 넓을 때는 설명이 자기 칸에 있다. 이름 밑의 것은 접혀 있다. */\n .folded {\n display: none;\n }\n\n /*\n * 좁아지면 **설명 칸을 접어 이름 밑으로 넣는다.** 세 칸이 다 남으면 이름과 버튼이 눌려서\n * 낱말마다 줄이 바뀐다 — 고르는 화면인데 고를 것이 안 읽힌다.\n */\n @media (max-width: 720px) {\n .what-column {\n display: none;\n }\n\n .folded {\n display: block;\n margin-top: 2px;\n white-space: normal;\n }\n\n .axis {\n white-space: normal;\n }\n }\n\n /*\n * 더 좁아지면 **설명을 아주 뺀다.** 접어 넣은 두 줄이 이름보다 길어져서, 줄마다 무엇을 고르는\n * 화면인지가 안 보인다. 알고 싶은 사람은 도움말 아이콘으로 간다.\n */\n @media (max-width: 480px) {\n .folded {\n display: none;\n }\n }\n\n /*\n * 결재를 타는 축은 **결재선이 있는지 없는지를 여기서 말한다.** 없으면 정하러 가는 길도 같이\n * 낸다 — 결재선이 어디서 정해지는지(업무 목록의 그 줄) 아는 사람이 많지 않다.\n */\n .line {\n margin-top: 3px;\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n }\n\n .line a {\n color: var(--md-sys-color-primary);\n }\n\n .note {\n color: var(--md-sys-color-on-surface-variant);\n padding: var(--spacing-small, 8px);\n }\n `\n ]\n\n /**\n * 업무 하나의 화면에 설 때 그 업무의 이름. 없으면 축 전부를 보인다.\n *\n * 이름으로 좁힌다 — 축이 어느 업무를 부르는지는 서버가 `approvalActivity` 로 답한다.\n */\n @property({ type: String }) activity?: string\n\n @state() private axes: PolicyAxis[] = []\n @state() private canDeclare = false\n\n /**\n * **아직 못 읽은 것과 없는 것을 가른다.**\n *\n * 읽기 전에는 `axes` 가 비어 있고, 업무 하나로 좁힌 자리에서는 그 빈 목록이 곧바로 「이 업무를\n * 부르는 기준정보가 없습니다」로 그려졌다 — 잠깐 뒤에 표가 나타난다. 사람이 그 잠깐을 보면 없는\n * 줄 알고 나간다. 읽기 전에는 아무 말도 하지 않는다.\n */\n @state() private loaded = false\n\n /** 못 읽었으면 못 읽었다고 말한다. 빈 표는 「없다」로 읽힌다. */\n @state() private failed = false\n\n connectedCallback() {\n super.connectedCallback()\n this.load()\n }\n\n private async load() {\n try {\n const response = await client.query({\n query: gql`\n query {\n masterChangePolicies\n }\n `,\n fetchPolicy: 'network-only'\n })\n\n /*\n * 오류가 예외로 안 오고 답에 실려 올 수 있다 — 그러면 `data` 가 비어 「축 0」으로 읽힌다. 못 읽은\n * 것이다.\n */\n if (response.errors?.length) throw new Error(response.errors.map((one: any) => one.message).join('; '))\n\n const found = response.data?.masterChangePolicies\n\n this.axes = found?.axes ?? []\n this.canDeclare = !!found?.canDeclare\n this.failed = false\n } catch (thrown) {\n /* 삼키지 않는다 — 빈 표를 그리면 「이 사업장은 아무것도 승인제가 아니다」로 읽힌다. */\n this.axes = []\n this.failed = true\n console.warn(thrown)\n } finally {\n this.loaded = true\n }\n\n const signal = panelContentSignal(this.axes, this.activity, this.failed)\n if (signal) {\n this.dispatchEvent(new CustomEvent(ACTIVITY_PANEL_CONTENT, { detail: signal, bubbles: true, composed: true }))\n }\n }\n\n /**\n * 정하는 것도 바꾸는 것도 여기서 한다 — 바꾸면 정책 줄이 새로 서고, 지난 개정본은 자기 때의 줄을\n * 계속 가리킨다. **결재에 안 태운다**(2026-09-22): 사업장 소유자가 정하는 것이라 확인만 받는다.\n *\n * ⚠ **사유는 사람에게 안 묻는다.** 서버가 필수로 받지만 그것은 「누가 어디서 정했나」를 남기려는\n * 것이다. 시스템 설정에 사람이 글을 쓸 일이 아니다.\n */\n private async declare(\n one: { axis: string; revisable?: boolean; approvalReady?: boolean; approvalActivity?: string | null },\n approvalRequired: boolean\n ) {\n const { axis } = one\n const how = i18next.t(approvalRequired ? 'master-policy.approval-required' : 'master-policy.direct-change-allowed')\n const name = i18next.t(`axis.${axis}`, { defaultValue: axis })\n\n /*\n * **걸 수 없는 것을 골라 보게 하지 않는다.** 결재선이 비어 있으면 서버가 거절하는데, 그것을 누른\n * 뒤에 알면 「예」를 고르고 나서 안 된다는 말을 듣는 꼴이다. 묻기 전에 먼저 본다.\n */\n if (approvalRequired && one.approvalReady === false) {\n await OxPrompt.open({\n type: 'warning',\n title: i18next.t('master-policy.approval-line-missing'),\n text: i18next.t('master-policy.set-the-approval-line', { activity: one.approvalActivity ?? '' }),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n return\n }\n\n /*\n * 경고다. 이 사업장의 기준정보가 앞으로 어떻게 바뀌는가를 정하는 자리고, 규제를 푸는 쪽으로\n * 누르면 결재 없이 바로 고쳐지기 시작한다. 되묻는 말투가 아니라 멈춰 세우는 말투여야 한다.\n */\n const yes = await OxPrompt.open({\n type: 'warning',\n title: i18next.t('master-policy.confirm-title'),\n text: i18next.t('master-policy.confirm-text', { master: name, how }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n\n if (!yes) {\n return\n }\n\n /*\n * 거절을 삼키지 않는다. 앞서는 오류가 있으면 그냥 다시 읽었고, 사람은 눌렀는데 아무 일도 안\n * 일어나는 화면을 봤다. 규제를 거는 쪽은 **결재선이 비어 있으면 거절된다**\n * (`MASTER_APPROVAL_LINE_REQUIRED`) — 그 말을 그대로 보여야 어디를 고칠지 안다.\n */\n try {\n const response = await client.mutate({\n mutation: gql`\n mutation ($axis: String!, $approvalRequired: Boolean!, $reason: String!) {\n declareMasterChangePolicy(axis: $axis, approvalRequired: $approvalRequired, reason: $reason)\n }\n `,\n variables: { axis, approvalRequired, reason: i18next.t('master-policy.reason-from-setting') }\n })\n\n if (response.errors?.length) {\n throw new Error(response.errors[0].message)\n }\n } catch (error: any) {\n /*\n * 거절은 **틀이 이미 붉은 쪽지로 말한다** — 서버가 그 사람의 말로 지은 문장 그대로. 여기서 또\n * 창을 띄우면 같은 말이 두 번 나온다(2026-09-22 화면에서 확인). 여기서는 다시 읽기만 한다.\n */\n console.warn(error?.message ?? error)\n }\n\n this.load()\n }\n\n render() {\n /* 읽기 전에는 아무 말도 하지 않는다. 「없다」도 아직 말할 수 없다. */\n if (!this.loaded) {\n return html``\n }\n\n if (this.failed) {\n return html`<div class=\"note\">${i18next.t('master-policy.could-not-read')}</div>`\n }\n\n const shown = axesForActivity(this.axes, this.activity)\n\n /*\n * 좁혔는데 하나도 없으면 **그 사실을 말한다.** 빈 표를 두면 「이 업무를 부르는 축이 없다」와\n * 「아직 못 읽었다」가 같은 화면이 된다.\n */\n if (this.activity && !shown.length) {\n return html`<div class=\"note\">${i18next.t('master-policy.no-axis-for-activity')}</div>`\n }\n\n return html`\n <div>\n ${this.canDeclare ? '' : html`<div class=\"note\">${i18next.t('master-policy.only-the-owner')}</div>`}\n\n <table>\n <tr>\n <th>${i18next.t('master-policy.field.axis')}</th>\n <th class=\"what-column\">${i18next.t('master-policy.field.what')}</th>\n <th>${i18next.t('master-policy.field.state')}</th>\n </tr>\n ${shown.map(\n one => html`\n <tr>\n <td class=\"axis\">\n ${i18next.t(`axis.${one.axis}`, { defaultValue: one.axis })}\n <ox-help-icon topic=${`/master-data/${one.axis}`}></ox-help-icon>\n <span class=\"what folded\">${i18next.t(`axis-help.${one.axis}`, { defaultValue: '' })}</span>\n </td>\n <td class=\"what what-column\">${i18next.t(`axis-help.${one.axis}`, { defaultValue: '' })}</td>\n ${!this.canDeclare\n ? html`<td>\n ${one.approvalRequired\n ? i18next.t('master-policy.approval-required')\n : i18next.t('master-policy.direct-change-allowed')}\n </td>`\n : one.revisable === false && one.approvalRequired !== true\n ? /*\n * 개정본 문이 없는 축은 소유자가 고를 것이 없다 — 버튼 대신 지금 상태와 한 줄(UX, 2026-09-24).\n * 막힌 버튼은 사람이 풀 수 있는 막힘(결재선 없음)에만 쓴다.\n */\n html`<td class=\"choice\">\n ${i18next.t('master-policy.direct-change-allowed')}\n <div class=\"line\">${i18next.t('master-policy.no-revision-path')}</div>\n </td>`\n : html`<td class=\"choice\">\n <button\n class=\"${one.approvalRequired === true ? 'on' : ''} ${one.approvalReady === false\n ? 'blocked'\n : ''}\"\n ?disabled=${one.approvalRequired === true}\n @click=${() => this.declare(one, true)}\n >\n ${i18next.t('master-policy.button.approval-required')}\n </button>\n <button\n class=${one.approvalRequired === false ? 'on' : ''}\n ?disabled=${one.approvalRequired === false}\n @click=${() => this.declare(one, false)}\n >\n ${i18next.t('master-policy.button.direct-change')}\n </button>\n ${one.revisable === false\n ? html`<div class=\"line\">${i18next.t('master-policy.no-revision-path')}</div>`\n : ''}\n ${one.approvalActivity\n ? html`<div class=\"line\">\n ${one.approvalReady\n ? i18next.t('master-policy.approval-line-set')\n : this.activity\n ? i18next.t('master-policy.approval-line-none-here')\n : html`${i18next.t('master-policy.approval-line-none')} ·\n <a\n href=\"javascript:void(0)\"\n @click=${() =>\n navigate(\n 'activity-detail?name=' + encodeURIComponent(one.approvalActivity as string)\n )}\n >\n ${i18next.t('master-policy.go-set-the-line')}\n </a>`}\n </div>`\n : ''}\n </td>`}\n </tr>\n `\n )}\n </table>\n </div>\n `\n }\n}\n"]}
@@ -1,4 +0,0 @@
1
- /** Where an approval stands, read from worklist: rejected, pending, approved or aborted, and by whom. */
2
- export declare function provideMasterChangeStatus(): void;
3
- /** Submits a draft of each given axis through its submit mutation: `{ axis: mutationName }`. */
4
- export declare function provideMasterChangeApproval(mutations: Record<string, string>): void;
@@ -1,91 +0,0 @@
1
- import gql from 'graphql-tag';
2
- import { client } from '@operato/graphql';
3
- import { navigate } from '@operato/shell';
4
- /*
5
- * The answers to the two events the revision editor dispatches (`master-change-approval.ts`). ops-master
6
- * owns the approval flow (ADR-0086 decision 1, amended 2026-10-10), so it answers them itself; a module
7
- * whose axis lives elsewhere adds its axis with `provideMasterChangeApproval`.
8
- */
9
- let statusProvided = false;
10
- /** Where an approval stands, read from worklist: rejected, pending, approved or aborted, and by whom. */
11
- export function provideMasterChangeStatus() {
12
- if (statusProvided)
13
- return;
14
- statusProvided = true;
15
- document.addEventListener('master-change-status', event => {
16
- if (!(event instanceof CustomEvent))
17
- return;
18
- event.detail.respondWith(readStatus(event.detail.activityInstanceId));
19
- });
20
- }
21
- async function readStatus(activityInstanceId) {
22
- const response = await client.query({
23
- query: gql `
24
- query ($id: String!) {
25
- activityInstance(id: $id) {
26
- id
27
- state
28
- activityThreads {
29
- id
30
- round
31
- activityApprovals {
32
- id
33
- order
34
- judgment
35
- comment
36
- approver {
37
- name
38
- }
39
- approverRole {
40
- name
41
- }
42
- }
43
- }
44
- }
45
- }
46
- `,
47
- variables: { id: activityInstanceId },
48
- fetchPolicy: 'no-cache'
49
- });
50
- if (response.errors?.length)
51
- throw new Error(response.errors[0].message);
52
- const instance = response.data.activityInstance;
53
- if (!instance)
54
- return { state: 'unknown' };
55
- const thread = [...(instance.activityThreads ?? [])].sort((a, b) => (b.round ?? 0) - (a.round ?? 0))[0];
56
- const approvals = [...(thread?.activityApprovals ?? [])].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
57
- const rejected = approvals.find((row) => row.judgment === 'rejected');
58
- const pending = approvals.find((row) => !row.judgment);
59
- const shown = rejected ?? pending ?? approvals[approvals.length - 1];
60
- const state = String(instance.state).toLowerCase();
61
- return {
62
- state: rejected ? 'rejected' : state === 'ended' ? 'approved' : state === 'aborted' ? 'aborted' : 'pending',
63
- comment: rejected?.comment,
64
- who: shown?.approver?.name ?? shown?.approverRole?.name,
65
- ...(thread ? { open: () => navigate('activity-thread-view/' + thread.id) } : {})
66
- };
67
- }
68
- /** Submits a draft of each given axis through its submit mutation: `{ axis: mutationName }`. */
69
- export function provideMasterChangeApproval(mutations) {
70
- document.addEventListener('master-change-approval', event => {
71
- if (!(event instanceof CustomEvent))
72
- return;
73
- const request = event.detail;
74
- const mutation = mutations[request.axis];
75
- if (!mutation)
76
- return;
77
- request.respondWith(client
78
- .mutate({
79
- mutation: gql(`mutation ($revisionId: String!, $editGeneration: Int!) {
80
- ${mutation}(revisionId: $revisionId, editGeneration: $editGeneration)
81
- }`),
82
- variables: { revisionId: request.revisionId, editGeneration: request.editGeneration }
83
- })
84
- .then(response => {
85
- if (response.errors?.length)
86
- throw new Error(response.errors.map(error => error.message).join('\n'));
87
- return response.data[mutation];
88
- }));
89
- });
90
- }
91
- //# sourceMappingURL=master-change-providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"master-change-providers.js","sourceRoot":"","sources":["../client/master-change-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\nimport { navigate } from '@operato/shell'\n\nimport type { MasterChangeStatus } from './master-change-approval.js'\n\n/*\n * The answers to the two events the revision editor dispatches (`master-change-approval.ts`). ops-master\n * owns the approval flow (ADR-0086 decision 1, amended 2026-10-10), so it answers them itself; a module\n * whose axis lives elsewhere adds its axis with `provideMasterChangeApproval`.\n */\nlet statusProvided = false\n\n/** Where an approval stands, read from worklist: rejected, pending, approved or aborted, and by whom. */\nexport function provideMasterChangeStatus(): void {\n if (statusProvided) return\n statusProvided = true\n\n document.addEventListener('master-change-status', event => {\n if (!(event instanceof CustomEvent)) return\n event.detail.respondWith(readStatus(event.detail.activityInstanceId))\n })\n}\n\nasync function readStatus(activityInstanceId: string): Promise<MasterChangeStatus> {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n activityInstance(id: $id) {\n id\n state\n activityThreads {\n id\n round\n activityApprovals {\n id\n order\n judgment\n comment\n approver {\n name\n }\n approverRole {\n name\n }\n }\n }\n }\n }\n `,\n variables: { id: activityInstanceId },\n fetchPolicy: 'no-cache'\n })\n\n if (response.errors?.length) throw new Error(response.errors[0].message)\n\n const instance = response.data.activityInstance\n if (!instance) return { state: 'unknown' }\n\n const thread = [...(instance.activityThreads ?? [])].sort((a: any, b: any) => (b.round ?? 0) - (a.round ?? 0))[0]\n const approvals = [...(thread?.activityApprovals ?? [])].sort((a: any, b: any) => (a.order ?? 0) - (b.order ?? 0))\n const rejected = approvals.find((row: any) => row.judgment === 'rejected')\n const pending = approvals.find((row: any) => !row.judgment)\n const shown = rejected ?? pending ?? approvals[approvals.length - 1]\n const state = String(instance.state).toLowerCase()\n\n return {\n state: rejected ? 'rejected' : state === 'ended' ? 'approved' : state === 'aborted' ? 'aborted' : 'pending',\n comment: rejected?.comment,\n who: shown?.approver?.name ?? shown?.approverRole?.name,\n ...(thread ? { open: () => navigate('activity-thread-view/' + thread.id) } : {})\n }\n}\n\n/** Submits a draft of each given axis through its submit mutation: `{ axis: mutationName }`. */\nexport function provideMasterChangeApproval(mutations: Record<string, string>): void {\n document.addEventListener('master-change-approval', event => {\n if (!(event instanceof CustomEvent)) return\n\n const request = event.detail\n const mutation = mutations[request.axis]\n if (!mutation) return\n\n request.respondWith(\n client\n .mutate({\n mutation: gql(`mutation ($revisionId: String!, $editGeneration: Int!) {\n ${mutation}(revisionId: $revisionId, editGeneration: $editGeneration)\n }`),\n variables: { revisionId: request.revisionId, editGeneration: request.editGeneration }\n })\n .then(response => {\n if (response.errors?.length) throw new Error(response.errors.map(error => error.message).join('\\n'))\n return response.data[mutation]\n })\n )\n })\n}\n"]}