@things-factory/ops-master 10.1.248 → 10.1.249

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 +3 -3
@@ -0,0 +1,48 @@
1
+ import { LitElement } from 'lit';
2
+ import '@material/web/button/filled-button.js';
3
+ import '@material/web/button/text-button.js';
4
+ import '@operato/popup/ox-popup-actions.js';
5
+ import { CLAIMED_FIELDS } from './assignment-fields.js';
6
+ /**
7
+ * **언제부터 그러한가를 묻는 자리.**
8
+ *
9
+ * ── 왜 날짜 칸 하나가 아닌가 ───────────────────────────────────────────────
10
+ * 그리드에 날짜 열을 하나 더하면 사람은 그것을 **또 하나의 값**으로 읽는다. 이 셋(자리 배정 · 근무조
11
+ * 선언 · 부모 관계)은 값이 아니라 **언제부터 그렇게 볼 것인가**를 함께 정하는 일이고, 과거를 적으면
12
+ * **지연 기록인지 정정인지**까지 갈라야 한다. 그래서 저장 직전에 한 번 묻는다.
13
+ *
14
+ * ```
15
+ * 바뀌기 전 → 바뀐 뒤
16
+ * 적용 시작 기본값 「지금부터」
17
+ * 과거 시각이면 지연 기록인가 이미 적은 것의 정정인가
18
+ * 미래 시각이면 지금 값은 그대로이고 변경이 예약된다고 알린다
19
+ * ```
20
+ *
21
+ * ⚠ **기록 시각은 안 묻는다.** 사람이 넣으면 「언제 알았나」를 사람이 정하게 된다 — 서버가 붙인다.
22
+ */
23
+ export interface AppliedAnswer {
24
+ at?: string;
25
+ kind?: 'change' | 'correction';
26
+ until?: string;
27
+ }
28
+ export interface AssignmentChange {
29
+ rowName: string;
30
+ field: string;
31
+ before: string;
32
+ after: string;
33
+ }
34
+ export declare class AppliedWhenDialog extends LitElement {
35
+ static styles: import("lit").CSSResult;
36
+ changes: AssignmentChange[];
37
+ onAnswer?: (answer: AppliedAnswer) => void;
38
+ onCancel?: () => void;
39
+ private at;
40
+ private kind;
41
+ private until;
42
+ /** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */
43
+ private get when();
44
+ private get past();
45
+ private get future();
46
+ render(): import("lit-html").TemplateResult<1>;
47
+ }
48
+ export { CLAIMED_FIELDS };
@@ -0,0 +1,137 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { LitElement, css, html } from 'lit';
3
+ import { customElement, property, state } from 'lit/decorators.js';
4
+ import '@material/web/button/filled-button.js';
5
+ import '@material/web/button/text-button.js';
6
+ import '@operato/popup/ox-popup-actions.js';
7
+ import { i18next } from '@operato/i18n';
8
+ import { CLAIMED_FIELDS } from './assignment-fields.js';
9
+ let AppliedWhenDialog = class AppliedWhenDialog extends LitElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.changes = [];
13
+ this.at = '';
14
+ this.kind = 'change';
15
+ this.until = '';
16
+ }
17
+ static { this.styles = css `
18
+ :host {
19
+ display: block;
20
+ padding: var(--spacing-medium, 12px);
21
+ }
22
+ .what {
23
+ display: grid;
24
+ grid-template-columns: auto 1fr;
25
+ gap: var(--spacing-tiny, 4px) var(--spacing-small, 8px);
26
+ margin-bottom: var(--spacing-medium, 12px);
27
+ }
28
+ .what span {
29
+ color: var(--md-sys-color-on-surface-variant);
30
+ }
31
+ .note {
32
+ color: var(--md-sys-color-on-surface-variant);
33
+ margin-top: var(--spacing-small, 8px);
34
+ }
35
+ `; }
36
+ /** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */
37
+ get when() {
38
+ return this.at ? new Date(this.at).getTime() : Date.now();
39
+ }
40
+ get past() {
41
+ return this.when < Date.now() - 60000;
42
+ }
43
+ get future() {
44
+ return this.when > Date.now() + 60000;
45
+ }
46
+ render() {
47
+ return html `
48
+ <div class="what">
49
+ ${this.changes.map(one => html `
50
+ <span>${one.rowName} · ${labelOf(one.field)}</span>
51
+ <div>${one.before || i18next.t('text.none')} → <b>${one.after || i18next.t('text.none')}</b></div>
52
+ `)}
53
+ </div>
54
+
55
+ <label>
56
+ ${i18next.t('label.applied-from')}
57
+ <input
58
+ type="datetime-local"
59
+ .value=${this.at}
60
+ @change=${(e) => (this.at = e.target.value)}
61
+ placeholder=${i18next.t('text.from-now')}
62
+ />
63
+ </label>
64
+
65
+ ${this.past
66
+ ? html `
67
+ <div>
68
+ <label>
69
+ <input type="radio" name="kind" ?checked=${this.kind === 'change'} @change=${() => (this.kind = 'change')} />
70
+ ${i18next.t('label.late-record')}
71
+ </label>
72
+ <label>
73
+ <input type="radio" name="kind" ?checked=${this.kind === 'correction'} @change=${() => (this.kind = 'correction')} />
74
+ ${i18next.t('label.correct-what-was-recorded')}
75
+ </label>
76
+ ${this.kind === 'correction'
77
+ ? html `
78
+ <label>
79
+ ${i18next.t('label.applied-until')}
80
+ <input type="datetime-local" .value=${this.until} @change=${(e) => (this.until = e.target.value)} />
81
+ </label>
82
+ `
83
+ : ''}
84
+ </div>
85
+ `
86
+ : ''}
87
+ ${this.future ? html `<div class="note">${i18next.t('text.change-is-scheduled')}</div>` : ''}
88
+
89
+ <ox-popup-actions>
90
+ <md-text-button slot="cancel" @click=${() => this.onCancel?.()}>${i18next.t('button.cancel')}</md-text-button>
91
+ <md-filled-button
92
+ slot="confirm"
93
+ @click=${() => this.onAnswer?.({
94
+ ...(this.at ? { at: new Date(this.at).toISOString() } : {}),
95
+ ...(this.past ? { kind: this.kind } : {}),
96
+ ...(this.past && this.kind === 'correction' && this.until ? { until: new Date(this.until).toISOString() } : {})
97
+ })}
98
+ >
99
+ ${i18next.t('button.save')}
100
+ </md-filled-button>
101
+ </ox-popup-actions>
102
+ `;
103
+ }
104
+ };
105
+ __decorate([
106
+ property({ type: Array }),
107
+ __metadata("design:type", Array)
108
+ ], AppliedWhenDialog.prototype, "changes", void 0);
109
+ __decorate([
110
+ property({ type: Object }),
111
+ __metadata("design:type", Function)
112
+ ], AppliedWhenDialog.prototype, "onAnswer", void 0);
113
+ __decorate([
114
+ property({ type: Object }),
115
+ __metadata("design:type", Function)
116
+ ], AppliedWhenDialog.prototype, "onCancel", void 0);
117
+ __decorate([
118
+ state(),
119
+ __metadata("design:type", Object)
120
+ ], AppliedWhenDialog.prototype, "at", void 0);
121
+ __decorate([
122
+ state(),
123
+ __metadata("design:type", String)
124
+ ], AppliedWhenDialog.prototype, "kind", void 0);
125
+ __decorate([
126
+ state(),
127
+ __metadata("design:type", Object)
128
+ ], AppliedWhenDialog.prototype, "until", void 0);
129
+ AppliedWhenDialog = __decorate([
130
+ customElement('applied-when-dialog')
131
+ ], AppliedWhenDialog);
132
+ export { AppliedWhenDialog };
133
+ function labelOf(field) {
134
+ return i18next.t(`field.${field}`, { defaultValue: field });
135
+ }
136
+ export { CLAIMED_FIELDS };
137
+ //# sourceMappingURL=applied-when-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applied-when-dialog.js","sourceRoot":"","sources":["../../../client/pages/master/applied-when-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/text-button.js'\nimport '@operato/popup/ox-popup-actions.js'\nimport { i18next } from '@operato/i18n'\n\nimport { CLAIMED_FIELDS } from './assignment-fields.js'\n\n/**\n * **언제부터 그러한가를 묻는 자리.**\n *\n * ── 왜 날짜 칸 하나가 아닌가 ───────────────────────────────────────────────\n * 그리드에 날짜 열을 하나 더하면 사람은 그것을 **또 하나의 값**으로 읽는다. 이 셋(자리 배정 · 근무조\n * 선언 · 부모 관계)은 값이 아니라 **언제부터 그렇게 볼 것인가**를 함께 정하는 일이고, 과거를 적으면\n * **지연 기록인지 정정인지**까지 갈라야 한다. 그래서 저장 직전에 한 번 묻는다.\n *\n * ```\n * 바뀌기 전 → 바뀐 뒤\n * 적용 시작 기본값 「지금부터」\n * 과거 시각이면 지연 기록인가 이미 적은 것의 정정인가\n * 미래 시각이면 지금 값은 그대로이고 변경이 예약된다고 알린다\n * ```\n *\n * ⚠ **기록 시각은 안 묻는다.** 사람이 넣으면 「언제 알았나」를 사람이 정하게 된다 — 서버가 붙인다.\n */\nexport interface AppliedAnswer {\n at?: string\n kind?: 'change' | 'correction'\n until?: string\n}\n\nexport interface AssignmentChange {\n rowName: string\n field: string\n before: string\n after: string\n}\n\n@customElement('applied-when-dialog')\nexport class AppliedWhenDialog extends LitElement {\n static styles = css`\n :host {\n display: block;\n padding: var(--spacing-medium, 12px);\n }\n .what {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: var(--spacing-tiny, 4px) var(--spacing-small, 8px);\n margin-bottom: var(--spacing-medium, 12px);\n }\n .what span {\n color: var(--md-sys-color-on-surface-variant);\n }\n .note {\n color: var(--md-sys-color-on-surface-variant);\n margin-top: var(--spacing-small, 8px);\n }\n `\n\n @property({ type: Array }) changes: AssignmentChange[] = []\n @property({ type: Object }) onAnswer?: (answer: AppliedAnswer) => void\n @property({ type: Object }) onCancel?: () => void\n\n @state() private at = ''\n @state() private kind: 'change' | 'correction' = 'change'\n @state() private until = ''\n\n /** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */\n private get when(): number {\n return this.at ? new Date(this.at).getTime() : Date.now()\n }\n\n private get past(): boolean {\n return this.when < Date.now() - 60000\n }\n\n private get future(): boolean {\n return this.when > Date.now() + 60000\n }\n\n render() {\n return html`\n <div class=\"what\">\n ${this.changes.map(\n one => html`\n <span>${one.rowName} · ${labelOf(one.field)}</span>\n <div>${one.before || i18next.t('text.none')} → <b>${one.after || i18next.t('text.none')}</b></div>\n `\n )}\n </div>\n\n <label>\n ${i18next.t('label.applied-from')}\n <input\n type=\"datetime-local\"\n .value=${this.at}\n @change=${(e: Event) => (this.at = (e.target as HTMLInputElement).value)}\n placeholder=${i18next.t('text.from-now')}\n />\n </label>\n\n ${this.past\n ? html`\n <div>\n <label>\n <input type=\"radio\" name=\"kind\" ?checked=${this.kind === 'change'} @change=${() => (this.kind = 'change')} />\n ${i18next.t('label.late-record')}\n </label>\n <label>\n <input type=\"radio\" name=\"kind\" ?checked=${this.kind === 'correction'} @change=${() => (this.kind = 'correction')} />\n ${i18next.t('label.correct-what-was-recorded')}\n </label>\n ${this.kind === 'correction'\n ? html`\n <label>\n ${i18next.t('label.applied-until')}\n <input type=\"datetime-local\" .value=${this.until} @change=${(e: Event) => (this.until = (e.target as HTMLInputElement).value)} />\n </label>\n `\n : ''}\n </div>\n `\n : ''}\n ${this.future ? html`<div class=\"note\">${i18next.t('text.change-is-scheduled')}</div>` : ''}\n\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.onCancel?.()}>${i18next.t('button.cancel')}</md-text-button>\n <md-filled-button\n slot=\"confirm\"\n @click=${() =>\n this.onAnswer?.({\n ...(this.at ? { at: new Date(this.at).toISOString() } : {}),\n ...(this.past ? { kind: this.kind } : {}),\n ...(this.past && this.kind === 'correction' && this.until ? { until: new Date(this.until).toISOString() } : {})\n })}\n >\n ${i18next.t('button.save')}\n </md-filled-button>\n </ox-popup-actions>\n `\n }\n}\n\nfunction labelOf(field: string): string {\n return i18next.t(`field.${field}`, { defaultValue: field })\n}\n\nexport { CLAIMED_FIELDS }\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.
3
+ *
4
+ * 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가
5
+ * 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**
6
+ */
7
+ export declare const CLAIMED_FIELDS: {
8
+ axis: string;
9
+ field: string;
10
+ }[];
11
+ /** 이 축에서 이력을 받는 칸들. */
12
+ export declare function claimedFieldsOf(axis: string): string[];
13
+ export interface AssignmentChange {
14
+ rowName: string;
15
+ field: string;
16
+ before: string;
17
+ after: string;
18
+ }
19
+ /**
20
+ * 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.
21
+ *
22
+ * ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는
23
+ * 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.
24
+ *
25
+ * ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.
26
+ */
27
+ export declare function assignmentChangesIn(axis: string, patches: readonly Record<string, unknown>[]): AssignmentChange[];
@@ -0,0 +1,62 @@
1
+ /**
2
+ * **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.
3
+ *
4
+ * 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가
5
+ * 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**
6
+ */
7
+ export const CLAIMED_FIELDS = [
8
+ { axis: 'equipment', field: 'homeLocation' },
9
+ { axis: 'operationalLocation', field: 'workShiftNames' },
10
+ { axis: 'operationalLocation', field: 'parentId' }
11
+ ];
12
+ /** 이 축에서 이력을 받는 칸들. */
13
+ export function claimedFieldsOf(axis) {
14
+ return CLAIMED_FIELDS.filter(one => one.axis === axis).map(one => one.field);
15
+ }
16
+ /**
17
+ * 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.
18
+ *
19
+ * ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는
20
+ * 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.
21
+ *
22
+ * ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.
23
+ */
24
+ export function assignmentChangesIn(axis, patches) {
25
+ const fields = claimedFieldsOf(axis);
26
+ if (!fields.length) {
27
+ return [];
28
+ }
29
+ const changes = [];
30
+ for (const patch of patches) {
31
+ /*
32
+ * **그리드가 무엇이 바뀌었는지 이미 들고 있다.** `__dirtyfields__` 에 칸마다 before·after 가
33
+ * 있고, 바뀐 행은 `__dirty__` 가 `M` 이다.
34
+ *
35
+ * ⚠ 처음에 `cuFlag` 를 봤다 — 그것은 서버로 보낼 때 붙는 이름이고 **이 시점에는 없다.** 그래서
36
+ * 창이 영영 안 떴다. 화면을 열어 보기 전에는 안 보였다(2026-09-22).
37
+ */
38
+ if (String(patch.__dirty__ ?? '').toUpperCase() !== 'M') {
39
+ continue;
40
+ }
41
+ const dirty = patch.__dirtyfields__;
42
+ for (const field of fields) {
43
+ const moved = dirty?.[field];
44
+ if (!moved) {
45
+ continue;
46
+ }
47
+ const before = show(moved.before);
48
+ const after = show(moved.after);
49
+ if (before !== after) {
50
+ changes.push({ rowName: String(patch.name ?? patch.id), field, before, after });
51
+ }
52
+ }
53
+ }
54
+ return changes;
55
+ }
56
+ function show(value) {
57
+ if (value === null || value === undefined || value === '') {
58
+ return '';
59
+ }
60
+ return Array.isArray(value) ? value.map(String).join(', ') : String(value);
61
+ }
62
+ //# sourceMappingURL=assignment-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignment-fields.js","sourceRoot":"","sources":["../../../client/pages/master/assignment-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsC;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE;IAC5C,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACxD,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,UAAU,EAAE;CACnD,CAAA;AAED,uBAAuB;AACvB,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC9E,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAA2C;IAC3F,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAEpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B;;;;;;WAMG;QACH,IAAI,MAAM,CAAE,KAAa,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACjE,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAI,KAAa,CAAC,eAAoF,CAAA;QAEjH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;YAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAE/B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5E,CAAC","sourcesContent":["/**\n * **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.\n *\n * 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가\n * 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**\n */\nexport const CLAIMED_FIELDS: { axis: string; field: string }[] = [\n { axis: 'equipment', field: 'homeLocation' },\n { axis: 'operationalLocation', field: 'workShiftNames' },\n { axis: 'operationalLocation', field: 'parentId' }\n]\n\n/** 이 축에서 이력을 받는 칸들. */\nexport function claimedFieldsOf(axis: string): string[] {\n return CLAIMED_FIELDS.filter(one => one.axis === axis).map(one => one.field)\n}\n\nexport interface AssignmentChange {\n rowName: string\n field: string\n before: string\n after: string\n}\n\n/**\n * 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.\n *\n * ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는\n * 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.\n *\n * ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.\n */\nexport function assignmentChangesIn(axis: string, patches: readonly Record<string, unknown>[]): AssignmentChange[] {\n const fields = claimedFieldsOf(axis)\n\n if (!fields.length) {\n return []\n }\n\n const changes: AssignmentChange[] = []\n\n for (const patch of patches) {\n /*\n * **그리드가 무엇이 바뀌었는지 이미 들고 있다.** `__dirtyfields__` 에 칸마다 before·after 가\n * 있고, 바뀐 행은 `__dirty__` 가 `M` 이다.\n *\n * ⚠ 처음에 `cuFlag` 를 봤다 — 그것은 서버로 보낼 때 붙는 이름이고 **이 시점에는 없다.** 그래서\n * 창이 영영 안 떴다. 화면을 열어 보기 전에는 안 보였다(2026-09-22).\n */\n if (String((patch as any).__dirty__ ?? '').toUpperCase() !== 'M') {\n continue\n }\n\n const dirty = (patch as any).__dirtyfields__ as Record<string, { before?: unknown; after?: unknown }> | undefined\n\n for (const field of fields) {\n const moved = dirty?.[field]\n\n if (!moved) {\n continue\n }\n\n const before = show(moved.before)\n const after = show(moved.after)\n\n if (before !== after) {\n changes.push({ rowName: String(patch.name ?? patch.id), field, before, after })\n }\n }\n }\n\n return changes\n}\n\nfunction show(value: unknown): string {\n if (value === null || value === undefined || value === '') {\n return ''\n }\n\n return Array.isArray(value) ? value.map(String).join(', ') : String(value)\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { MasterPageBase, MasterSpec } from './master-page-base.js';
2
+ /**
3
+ * 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.
4
+ *
5
+ * 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.
6
+ *
7
+ * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
8
+ * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
9
+ */
10
+ export declare class OpsMasterEquipmentClass extends MasterPageBase {
11
+ protected get spec(): MasterSpec;
12
+ }
@@ -0,0 +1,42 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement } from 'lit/decorators.js';
3
+ import { EFFECTIVE, IDENTITY, MasterPageBase } from './master-page-base.js';
4
+ /**
5
+ * 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.
6
+ *
7
+ * 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.
8
+ *
9
+ * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
10
+ * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
11
+ */
12
+ let OpsMasterEquipmentClass = class OpsMasterEquipmentClass extends MasterPageBase {
13
+ get spec() {
14
+ return {
15
+ key: 'equipmentClass',
16
+ title: 'equipment-class',
17
+ help: 'ops-master/equipment-class',
18
+ query: 'equipmentClasses',
19
+ mutation: 'updateMultipleEquipmentClass',
20
+ columns: [
21
+ ...IDENTITY,
22
+ { name: 'baseIds', label: 'base-classes', type: 'reference-list', reference: { queryName: 'equipmentClasses' }, width: 180 },
23
+ /*
24
+ * ── 나를 누가 쓰나 ────────────────────────────────────────────────
25
+ *
26
+ * 값의 주인이 이 표가 아니라 **저쪽 표**다. 그래서 여기서 못 고친다 — 바꾸려면 그쪽에서
27
+ * 이 이름을 가리키게 하거나 떼면 된다.
28
+ *
29
+ * 넘치면 **몇이 안 보이는지 함께 낸다.** 오류보고없이 자르면 「셋이 있다」와 「서른이 있는데
30
+ * 셋만 보인다」가 같아 보이고, 그 칸을 보고 사람이 판단을 내린다.
31
+ */
32
+ { name: 'members', label: 'members', type: 'list', width: 240, readonly: true },
33
+ ...EFFECTIVE
34
+ ]
35
+ };
36
+ }
37
+ };
38
+ OpsMasterEquipmentClass = __decorate([
39
+ customElement('ops-master-equipment-class')
40
+ ], OpsMasterEquipmentClass);
41
+ export { OpsMasterEquipmentClass };
42
+ //# sourceMappingURL=equipment-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment-class.js","sourceRoot":"","sources":["../../../client/pages/master/equipment-class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,uBAAuB,CAAA;AAEvF;;;;;;;GAOG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,cAAc;IACzD,IAAc,IAAI;QAChB,OAAO;YACL,GAAG,EAAE,gBAAgB;YACrB,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,4BAA4B;YAClC,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,8BAA8B;YACxC,OAAO,EAAE;gBACP,GAAG,QAAQ;gBACX,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;gBAC5H;;;;;;;;mBAQG;gBACH,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/E,GAAG,SAAS;aACb;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAzBY,uBAAuB;IADnC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,uBAAuB,CAyBnC","sourcesContent":["import { customElement } from 'lit/decorators.js'\n\nimport { EFFECTIVE, IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\n\n/**\n * 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.\n *\n * 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.\n *\n * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —\n * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.\n */\n@customElement('ops-master-equipment-class')\nexport class OpsMasterEquipmentClass extends MasterPageBase {\n protected get spec(): MasterSpec {\n return {\n key: 'equipmentClass',\n title: 'equipment-class',\n help: 'ops-master/equipment-class',\n query: 'equipmentClasses',\n mutation: 'updateMultipleEquipmentClass',\n columns: [\n ...IDENTITY,\n { name: 'baseIds', label: 'base-classes', type: 'reference-list', reference: { queryName: 'equipmentClasses' }, width: 180 },\n /*\n * ── 나를 누가 쓰나 ────────────────────────────────────────────────\n *\n * 값의 주인이 이 표가 아니라 **저쪽 표**다. 그래서 여기서 못 고친다 — 바꾸려면 그쪽에서\n * 이 이름을 가리키게 하거나 떼면 된다.\n *\n * 넘치면 **몇이 안 보이는지 함께 낸다.** 오류보고없이 자르면 「셋이 있다」와 「서른이 있는데\n * 셋만 보인다」가 같아 보이고, 그 칸을 보고 사람이 판단을 내린다.\n */\n { name: 'members', label: 'members', type: 'list', width: 240, readonly: true },\n ...EFFECTIVE\n ]\n }\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { MasterPageBase, MasterSpec } from './master-page-base.js';
2
+ /**
3
+ * 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.
4
+ *
5
+ * 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.
6
+ *
7
+ * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
8
+ * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
9
+ */
10
+ export declare class OpsMasterEquipment extends MasterPageBase {
11
+ protected get spec(): MasterSpec;
12
+ }
@@ -0,0 +1,58 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement } from 'lit/decorators.js';
3
+ import { EFFECTIVE, IDENTITY, MasterPageBase } from './master-page-base.js';
4
+ /**
5
+ * 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.
6
+ *
7
+ * 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.
8
+ *
9
+ * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
10
+ * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
11
+ */
12
+ let OpsMasterEquipment = class OpsMasterEquipment extends MasterPageBase {
13
+ get spec() {
14
+ return {
15
+ key: 'equipment',
16
+ axis: 'equipment',
17
+ title: 'equipment',
18
+ help: 'ops-master/equipment',
19
+ query: 'equipmentList',
20
+ mutation: 'updateMultipleEquipment',
21
+ columns: [
22
+ ...IDENTITY,
23
+ { name: 'kind', label: 'equipment-class', type: 'string', width: 200 },
24
+ { name: 'identity', label: 'identity', type: 'string', width: 200 },
25
+ {
26
+ name: 'homeLocation',
27
+ label: 'home-location',
28
+ type: 'reference',
29
+ reference: { queryName: 'operationalLocations' },
30
+ width: 140
31
+ },
32
+ /*
33
+ * ── 손으로 칠 수 있는 값이 아니다 ─────────────────────────────────
34
+ *
35
+ * `type: 'json'` 은 글자를 그대로 받아 `JSON.parse` 하고, 실패하면 **오류 없이 `null`**
36
+ * 로 둔다(`data-grid-body.js`). 그래서 이 칸을 고치려면 사람이 이런 것을 손으로 쳐야
37
+ * 했고, 오타 하나에 그 설비의 계획 가동 시간이 조용히 사라졌다.
38
+ *
39
+ * [{"id":"A조","fromDayOffset":0,"fromTime":"06:00","toDayOffset":0,"toTime":"14:00"}]
40
+ *
41
+ * 그리고 **정상은 이 칸이 비는 것**이다. 근무조는 자리가 선언하고 설비가 물려받는다
42
+ * (`OperationalLocation.workShiftNames`). 이 칸은 「이 설비만 따로 이렇게 가동한다」는
43
+ * 예외를 적는 자리다 — 예외가 없는 설비에 값이 있으면 화면이 거짓말을 한다.
44
+ *
45
+ * 읽기 전용으로 둔다. 값이 있으면 보이고, 고치는 길은 예외를 제대로 세울 때 만든다.
46
+ * 지금 상태로 열어 두는 것은 고칠 수 있는 척하면서 자료를 잃는 것이다.
47
+ */
48
+ { name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200, readonly: true },
49
+ ...EFFECTIVE
50
+ ]
51
+ };
52
+ }
53
+ };
54
+ OpsMasterEquipment = __decorate([
55
+ customElement('ops-master-equipment')
56
+ ], OpsMasterEquipment);
57
+ export { OpsMasterEquipment };
58
+ //# sourceMappingURL=equipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../../client/pages/master/equipment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,uBAAuB,CAAA;AAEvF;;;;;;;GAOG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,cAAc;IACpD,IAAc,IAAI;QAChB,OAAO;YACL,GAAG,EAAE,WAAW;YAChB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE;gBACP,GAAG,QAAQ;gBACX,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACtE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACnE;oBACE,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,eAAe;oBACtB,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;oBAChD,KAAK,EAAE,GAAG;iBACX;gBACD;;;;;;;;;;;;;;;mBAeG;gBACH,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC1F,GAAG,SAAS;aACb;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAzCY,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAyC9B","sourcesContent":["import { customElement } from 'lit/decorators.js'\n\nimport { EFFECTIVE, IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\n\n/**\n * 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.\n *\n * 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.\n *\n * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —\n * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.\n */\n@customElement('ops-master-equipment')\nexport class OpsMasterEquipment extends MasterPageBase {\n protected get spec(): MasterSpec {\n return {\n key: 'equipment',\n axis: 'equipment',\n title: 'equipment',\n help: 'ops-master/equipment',\n query: 'equipmentList',\n mutation: 'updateMultipleEquipment',\n columns: [\n ...IDENTITY,\n { name: 'kind', label: 'equipment-class', type: 'string', width: 200 },\n { name: 'identity', label: 'identity', type: 'string', width: 200 },\n {\n name: 'homeLocation',\n label: 'home-location',\n type: 'reference',\n reference: { queryName: 'operationalLocations' },\n width: 140\n },\n /*\n * ── 손으로 칠 수 있는 값이 아니다 ─────────────────────────────────\n *\n * `type: 'json'` 은 글자를 그대로 받아 `JSON.parse` 하고, 실패하면 **오류 없이 `null`**\n * 로 둔다(`data-grid-body.js`). 그래서 이 칸을 고치려면 사람이 이런 것을 손으로 쳐야\n * 했고, 오타 하나에 그 설비의 계획 가동 시간이 조용히 사라졌다.\n *\n * [{\"id\":\"A조\",\"fromDayOffset\":0,\"fromTime\":\"06:00\",\"toDayOffset\":0,\"toTime\":\"14:00\"}]\n *\n * 그리고 **정상은 이 칸이 비는 것**이다. 근무조는 자리가 선언하고 설비가 물려받는다\n * (`OperationalLocation.workShiftNames`). 이 칸은 「이 설비만 따로 이렇게 가동한다」는\n * 예외를 적는 자리다 — 예외가 없는 설비에 값이 있으면 화면이 거짓말을 한다.\n *\n * 읽기 전용으로 둔다. 값이 있으면 보이고, 고치는 길은 예외를 제대로 세울 때 만든다.\n * 지금 상태로 열어 두는 것은 고칠 수 있는 척하면서 자료를 잃는 것이다.\n */\n { name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200, readonly: true },\n ...EFFECTIVE\n ]\n }\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { OxGristEditor } from '@operato/data-grist';
2
+ export declare const OxGristRendererIsoDuration: (value: string | undefined) => import("lit-html").TemplateResult<1>;
3
+ export declare class OpsMasterGristEditorIsoDuration extends OxGristEditor {
4
+ get inlineEditable(): boolean;
5
+ /**
6
+ * 저장된 표기 → 편집기.
7
+ *
8
+ * 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는
9
+ * 표기와도 맞는다.
10
+ */
11
+ formatForEditor(value: any): number | "";
12
+ /**
13
+ * 편집기 → 저장할 표기.
14
+ *
15
+ * **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,
16
+ * 그 공정은 택트 계산에서 없는 것처럼 통과한다.
17
+ */
18
+ formatFromEditor(value: any): any;
19
+ get editorTemplate(): import("lit-html").TemplateResult<1>;
20
+ }
@@ -0,0 +1,70 @@
1
+ import { __decorate } from "tslib";
2
+ import { html } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ import { OxGristEditor } from '@operato/data-grist';
5
+ import { i18next } from '@operato/i18n';
6
+ import { durationText, isoDurationOfSeconds, secondsOfIsoDuration } from './iso-duration.js';
7
+ /**
8
+ * ISO 8601 기간 칸의 그리기와 고치기.
9
+ *
10
+ * `@operato/grist-editor` 의 `duration` 은 **초 숫자**용이라 여기 못 쓴다 — 자세한 사연은
11
+ * `iso-duration.ts` 첫 주석에 있다. 값의 해석은 그 파일이 하고, 여기는 화면만 맡는다.
12
+ */
13
+ /** 시·분·초 용어. 공용 패키지가 이미 갖고 있어 새로 만들지 않는다. */
14
+ function units() {
15
+ return {
16
+ hour: i18next.t('label.hours'),
17
+ minute: i18next.t('label.minutes'),
18
+ second: i18next.t('label.seconds')
19
+ };
20
+ }
21
+ export const OxGristRendererIsoDuration = (value) => html `<span>${durationText(value, units())}</span>`;
22
+ let OpsMasterGristEditorIsoDuration = class OpsMasterGristEditorIsoDuration extends OxGristEditor {
23
+ get inlineEditable() {
24
+ return true;
25
+ }
26
+ /**
27
+ * 저장된 표기 → 편집기.
28
+ *
29
+ * 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는
30
+ * 표기와도 맞는다.
31
+ */
32
+ formatForEditor(value) {
33
+ const seconds = secondsOfIsoDuration(value);
34
+ /*
35
+ * 해석할 수 없는 값이면 편집기를 비운다. 렌더러가 원문을 보여 주었으므로 사용자는 무엇이
36
+ * 이상했는지 이미 보았다.
37
+ */
38
+ return seconds === undefined ? '' : seconds;
39
+ }
40
+ /**
41
+ * 편집기 → 저장할 표기.
42
+ *
43
+ * **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,
44
+ * 그 공정은 택트 계산에서 없는 것처럼 통과한다.
45
+ */
46
+ formatFromEditor(value) {
47
+ const text = String(value ?? '').trim();
48
+ if (!text) {
49
+ return null;
50
+ }
51
+ const seconds = Number(text);
52
+ /*
53
+ * 숫자가 아니면 **저장하지 않고 앞의 값을 둔다.** 여기서 null 을 내면 사용자가 잘못 친 순간
54
+ * 원래 있던 소요시간이 사라진다.
55
+ */
56
+ if (!Number.isFinite(seconds) || seconds < 0) {
57
+ return this.value;
58
+ }
59
+ return isoDurationOfSeconds(seconds);
60
+ }
61
+ get editorTemplate() {
62
+ /* 초 단위. 작업표준서에 6.5초 같은 값이 있어 소수를 받는다. */
63
+ return html `<input type="number" min="0" step="0.1" .value=${this.value ?? ''} />`;
64
+ }
65
+ };
66
+ OpsMasterGristEditorIsoDuration = __decorate([
67
+ customElement('ops-master-grist-editor-iso-duration')
68
+ ], OpsMasterGristEditorIsoDuration);
69
+ export { OpsMasterGristEditorIsoDuration };
70
+ //# sourceMappingURL=grist-iso-duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grist-iso-duration.js","sourceRoot":"","sources":["../../../client/pages/master/grist-iso-duration.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE5F;;;;;GAKG;AAEH,6CAA6C;AAC7C,SAAS,KAAK;IACZ,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;KACnC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAyB,EAAE,EAAE,CACtE,IAAI,CAAA,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,SAAS,CAAA;AAG7C,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,aAAa;IAChE,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAU;QACxB,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAE3C;;;WAGG;QACH,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAC7C,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,KAAU;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAE5B;;;WAGG;QACH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QAED,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,cAAc;QAChB,yCAAyC;QACzC,OAAO,IAAI,CAAA,kDAAkD,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAA;IACpF,CAAC;CACF,CAAA;AAnDY,+BAA+B;IAD3C,aAAa,CAAC,sCAAsC,CAAC;GACzC,+BAA+B,CAmD3C","sourcesContent":["import { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\n\nimport { durationText, isoDurationOfSeconds, secondsOfIsoDuration } from './iso-duration.js'\n\n/**\n * ISO 8601 기간 칸의 그리기와 고치기.\n *\n * `@operato/grist-editor` 의 `duration` 은 **초 숫자**용이라 여기 못 쓴다 — 자세한 사연은\n * `iso-duration.ts` 첫 주석에 있다. 값의 해석은 그 파일이 하고, 여기는 화면만 맡는다.\n */\n\n/** 시·분·초 용어. 공용 패키지가 이미 갖고 있어 새로 만들지 않는다. */\nfunction units() {\n return {\n hour: i18next.t('label.hours'),\n minute: i18next.t('label.minutes'),\n second: i18next.t('label.seconds')\n }\n}\n\nexport const OxGristRendererIsoDuration = (value: string | undefined) =>\n html`<span>${durationText(value, units())}</span>`\n\n@customElement('ops-master-grist-editor-iso-duration')\nexport class OpsMasterGristEditorIsoDuration extends OxGristEditor {\n get inlineEditable() {\n return true\n }\n\n /**\n * 저장된 표기 → 편집기.\n *\n * 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는\n * 표기와도 맞는다.\n */\n formatForEditor(value: any) {\n const seconds = secondsOfIsoDuration(value)\n\n /*\n * 해석할 수 없는 값이면 편집기를 비운다. 렌더러가 원문을 보여 주었으므로 사용자는 무엇이\n * 이상했는지 이미 보았다.\n */\n return seconds === undefined ? '' : seconds\n }\n\n /**\n * 편집기 → 저장할 표기.\n *\n * **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,\n * 그 공정은 택트 계산에서 없는 것처럼 통과한다.\n */\n formatFromEditor(value: any) {\n const text = String(value ?? '').trim()\n\n if (!text) {\n return null\n }\n\n const seconds = Number(text)\n\n /*\n * 숫자가 아니면 **저장하지 않고 앞의 값을 둔다.** 여기서 null 을 내면 사용자가 잘못 친 순간\n * 원래 있던 소요시간이 사라진다.\n */\n if (!Number.isFinite(seconds) || seconds < 0) {\n return this.value\n }\n\n return isoDurationOfSeconds(seconds)\n }\n\n get editorTemplate() {\n /* 초 단위. 작업표준서에 6.5초 같은 값이 있어 소수를 받는다. */\n return html`<input type=\"number\" min=\"0\" step=\"0.1\" .value=${this.value ?? ''} />`\n }\n}\n"]}