@ketvietlab/ketsuite 0.1.29 → 0.1.30

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 (762) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/modules/account_backend/index.js +0 -6
  3. package/dist/modules/account_backend/index.js.map +1 -1
  4. package/dist/modules/account_backend/screens/account-defaults.d.ts.map +1 -1
  5. package/dist/modules/account_backend/screens/account-defaults.js +1 -1
  6. package/dist/modules/account_backend/screens/account-defaults.js.map +1 -1
  7. package/dist/modules/account_backend/screens/account-form.d.ts.map +1 -1
  8. package/dist/modules/account_backend/screens/account-form.js +3 -1
  9. package/dist/modules/account_backend/screens/account-form.js.map +1 -1
  10. package/dist/modules/account_backend/screens/accounts-list.d.ts.map +1 -1
  11. package/dist/modules/account_backend/screens/accounts-list.js +1 -1
  12. package/dist/modules/account_backend/screens/accounts-list.js.map +1 -1
  13. package/dist/modules/account_backend/screens/customer-invoice-form.d.ts.map +1 -1
  14. package/dist/modules/account_backend/screens/customer-invoice-form.js +1 -1
  15. package/dist/modules/account_backend/screens/customer-invoice-form.js.map +1 -1
  16. package/dist/modules/account_backend/screens/customer-invoices-list.d.ts.map +1 -1
  17. package/dist/modules/account_backend/screens/customer-invoices-list.js +1 -1
  18. package/dist/modules/account_backend/screens/customer-invoices-list.js.map +1 -1
  19. package/dist/modules/account_backend/screens/journal-entries-list.d.ts.map +1 -1
  20. package/dist/modules/account_backend/screens/journal-entries-list.js +1 -1
  21. package/dist/modules/account_backend/screens/journal-entries-list.js.map +1 -1
  22. package/dist/modules/account_backend/screens/journal-entry-create.d.ts.map +1 -1
  23. package/dist/modules/account_backend/screens/journal-entry-create.js +1 -1
  24. package/dist/modules/account_backend/screens/journal-entry-create.js.map +1 -1
  25. package/dist/modules/account_backend/screens/journal-form.d.ts.map +1 -1
  26. package/dist/modules/account_backend/screens/journal-form.js +3 -3
  27. package/dist/modules/account_backend/screens/journal-form.js.map +1 -1
  28. package/dist/modules/account_backend/screens/journals-list.d.ts.map +1 -1
  29. package/dist/modules/account_backend/screens/journals-list.js +1 -1
  30. package/dist/modules/account_backend/screens/journals-list.js.map +1 -1
  31. package/dist/modules/account_backend/screens/move-detail.d.ts.map +1 -1
  32. package/dist/modules/account_backend/screens/move-detail.js +3 -1
  33. package/dist/modules/account_backend/screens/move-detail.js.map +1 -1
  34. package/dist/modules/account_backend/screens/opening-balances.d.ts.map +1 -1
  35. package/dist/modules/account_backend/screens/opening-balances.js +2 -2
  36. package/dist/modules/account_backend/screens/opening-balances.js.map +1 -1
  37. package/dist/modules/account_backend/screens/overview.js +4 -2
  38. package/dist/modules/account_backend/screens/overview.js.map +1 -1
  39. package/dist/modules/account_backend/screens/payment-form.d.ts.map +1 -1
  40. package/dist/modules/account_backend/screens/payment-form.js +1 -1
  41. package/dist/modules/account_backend/screens/payment-form.js.map +1 -1
  42. package/dist/modules/account_backend/screens/payment-term-form.d.ts.map +1 -1
  43. package/dist/modules/account_backend/screens/payment-term-form.js +4 -2
  44. package/dist/modules/account_backend/screens/payment-term-form.js.map +1 -1
  45. package/dist/modules/account_backend/screens/payment-terms-list.d.ts.map +1 -1
  46. package/dist/modules/account_backend/screens/payment-terms-list.js +1 -1
  47. package/dist/modules/account_backend/screens/payment-terms-list.js.map +1 -1
  48. package/dist/modules/account_backend/screens/payments-list.d.ts.map +1 -1
  49. package/dist/modules/account_backend/screens/payments-list.js +1 -1
  50. package/dist/modules/account_backend/screens/payments-list.js.map +1 -1
  51. package/dist/modules/account_backend/screens/period-closes.d.ts.map +1 -1
  52. package/dist/modules/account_backend/screens/period-closes.js +1 -1
  53. package/dist/modules/account_backend/screens/period-closes.js.map +1 -1
  54. package/dist/modules/account_backend/screens/tax-form.d.ts.map +1 -1
  55. package/dist/modules/account_backend/screens/tax-form.js +3 -1
  56. package/dist/modules/account_backend/screens/tax-form.js.map +1 -1
  57. package/dist/modules/account_backend/screens/taxes-list.d.ts.map +1 -1
  58. package/dist/modules/account_backend/screens/taxes-list.js +1 -1
  59. package/dist/modules/account_backend/screens/taxes-list.js.map +1 -1
  60. package/dist/modules/account_backend/screens/vendor-bill-form.d.ts.map +1 -1
  61. package/dist/modules/account_backend/screens/vendor-bill-form.js +1 -1
  62. package/dist/modules/account_backend/screens/vendor-bill-form.js.map +1 -1
  63. package/dist/modules/account_backend/screens/vendor-bills-list.d.ts.map +1 -1
  64. package/dist/modules/account_backend/screens/vendor-bills-list.js +1 -1
  65. package/dist/modules/account_backend/screens/vendor-bills-list.js.map +1 -1
  66. package/dist/modules/account_partner_backend/screens/accounting-terms.d.ts.map +1 -1
  67. package/dist/modules/account_partner_backend/screens/accounting-terms.js +1 -1
  68. package/dist/modules/account_partner_backend/screens/accounting-terms.js.map +1 -1
  69. package/dist/modules/activity_backend/index.d.ts.map +1 -1
  70. package/dist/modules/activity_backend/index.js +0 -2
  71. package/dist/modules/activity_backend/index.js.map +1 -1
  72. package/dist/modules/activity_backend/screens/activities-list.d.ts.map +1 -1
  73. package/dist/modules/activity_backend/screens/activities-list.js +1 -1
  74. package/dist/modules/activity_backend/screens/activities-list.js.map +1 -1
  75. package/dist/modules/address_backend/index.d.ts.map +1 -1
  76. package/dist/modules/address_backend/index.js +0 -2
  77. package/dist/modules/address_backend/index.js.map +1 -1
  78. package/dist/modules/address_backend/screens/catalogs-list.d.ts.map +1 -1
  79. package/dist/modules/address_backend/screens/catalogs-list.js +1 -1
  80. package/dist/modules/address_backend/screens/catalogs-list.js.map +1 -1
  81. package/dist/modules/attendance_backend/screens/credentials.d.ts.map +1 -1
  82. package/dist/modules/attendance_backend/screens/credentials.js +1 -1
  83. package/dist/modules/attendance_backend/screens/credentials.js.map +1 -1
  84. package/dist/modules/attendance_backend/screens/period.d.ts.map +1 -1
  85. package/dist/modules/attendance_backend/screens/period.js +1 -1
  86. package/dist/modules/attendance_backend/screens/period.js.map +1 -1
  87. package/dist/modules/backend/current-company.d.ts +4 -0
  88. package/dist/modules/backend/current-company.d.ts.map +1 -0
  89. package/dist/modules/backend/current-company.js +27 -0
  90. package/dist/modules/backend/current-company.js.map +1 -0
  91. package/dist/modules/backend/design/client/backend-shell.d.mts +2 -2
  92. package/dist/modules/backend/design/client/backend-shell.d.mts.map +1 -1
  93. package/dist/modules/backend/design/client/backend-shell.mjs +1 -1
  94. package/dist/modules/backend/design/client/backend-shell.mjs.map +4 -4
  95. package/dist/modules/backend/design/client/ket-table.d.mts +2 -2
  96. package/dist/modules/backend/design/client/ket-table.d.mts.map +1 -1
  97. package/dist/modules/backend/design/client/ket-table.mjs +1 -1
  98. package/dist/modules/backend/design/client/ket-table.mjs.map +3 -3
  99. package/dist/modules/backend/design/client/search-filter.d.mts +2 -2
  100. package/dist/modules/backend/design/client/search-filter.d.mts.map +1 -1
  101. package/dist/modules/backend/design/client/search-filter.mjs +1 -1
  102. package/dist/modules/backend/design/client/search-filter.mjs.map +3 -3
  103. package/dist/modules/backend/design/forms.css +31 -0
  104. package/dist/modules/backend/index.d.ts +1 -0
  105. package/dist/modules/backend/index.d.ts.map +1 -1
  106. package/dist/modules/backend/index.js +1 -0
  107. package/dist/modules/backend/index.js.map +1 -1
  108. package/dist/modules/backend/optional-read.d.ts +4 -0
  109. package/dist/modules/backend/optional-read.d.ts.map +1 -0
  110. package/dist/modules/backend/optional-read.js +7 -0
  111. package/dist/modules/backend/optional-read.js.map +1 -0
  112. package/dist/modules/company_backend/index.d.ts.map +1 -1
  113. package/dist/modules/company_backend/index.js +0 -2
  114. package/dist/modules/company_backend/index.js.map +1 -1
  115. package/dist/modules/company_backend/screens/branch-form.d.ts.map +1 -1
  116. package/dist/modules/company_backend/screens/branch-form.js +3 -1
  117. package/dist/modules/company_backend/screens/branch-form.js.map +1 -1
  118. package/dist/modules/company_backend/screens/companies-list.d.ts.map +1 -1
  119. package/dist/modules/company_backend/screens/companies-list.js +1 -1
  120. package/dist/modules/company_backend/screens/companies-list.js.map +1 -1
  121. package/dist/modules/company_backend/screens/company-form.d.ts.map +1 -1
  122. package/dist/modules/company_backend/screens/company-form.js +1 -3
  123. package/dist/modules/company_backend/screens/company-form.js.map +1 -1
  124. package/dist/modules/company_backend/screens/context.d.ts.map +1 -1
  125. package/dist/modules/company_backend/screens/context.js +1 -1
  126. package/dist/modules/company_backend/screens/context.js.map +1 -1
  127. package/dist/modules/company_backend/screens/hierarchy.d.ts.map +1 -1
  128. package/dist/modules/company_backend/screens/hierarchy.js +1 -1
  129. package/dist/modules/company_backend/screens/hierarchy.js.map +1 -1
  130. package/dist/modules/crm_backend/client/crm-case-modal.d.mts +7 -7
  131. package/dist/modules/crm_backend/client/crm-case-modal.d.mts.map +1 -1
  132. package/dist/modules/crm_backend/client/crm-case-modal.mjs +1 -1
  133. package/dist/modules/crm_backend/client/crm-case-modal.mjs.map +3 -3
  134. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts +50 -50
  135. package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts.map +1 -1
  136. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs +1 -1
  137. package/dist/modules/crm_backend/client/crm-configuration-modal.mjs.map +3 -3
  138. package/dist/modules/crm_backend/messages.d.ts +0 -10
  139. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  140. package/dist/modules/crm_backend/messages.js +0 -10
  141. package/dist/modules/crm_backend/messages.js.map +1 -1
  142. package/dist/modules/crm_backend/screens/activity-planner.d.ts.map +1 -1
  143. package/dist/modules/crm_backend/screens/activity-planner.js +1 -1
  144. package/dist/modules/crm_backend/screens/activity-planner.js.map +1 -1
  145. package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -1
  146. package/dist/modules/crm_backend/screens/case-create.js +1 -1
  147. package/dist/modules/crm_backend/screens/case-create.js.map +1 -1
  148. package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -1
  149. package/dist/modules/crm_backend/screens/case-detail.js +2 -2
  150. package/dist/modules/crm_backend/screens/case-detail.js.map +1 -1
  151. package/dist/modules/crm_backend/screens/cases-list.d.ts.map +1 -1
  152. package/dist/modules/crm_backend/screens/cases-list.js +1 -1
  153. package/dist/modules/crm_backend/screens/cases-list.js.map +1 -1
  154. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  155. package/dist/modules/crm_backend/screens/configuration.js +1 -1
  156. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  157. package/dist/modules/crm_backend/screens/leaderboard.d.ts.map +1 -1
  158. package/dist/modules/crm_backend/screens/leaderboard.js +1 -1
  159. package/dist/modules/crm_backend/screens/leaderboard.js.map +1 -1
  160. package/dist/modules/crm_backend/screens/pipeline.d.ts.map +1 -1
  161. package/dist/modules/crm_backend/screens/pipeline.js +1 -1
  162. package/dist/modules/crm_backend/screens/pipeline.js.map +1 -1
  163. package/dist/modules/flow/domain/command-check.d.ts +3 -0
  164. package/dist/modules/flow/domain/command-check.d.ts.map +1 -0
  165. package/dist/modules/flow/domain/command-check.js +9 -0
  166. package/dist/modules/flow/domain/command-check.js.map +1 -0
  167. package/dist/modules/flow/domain/command.d.ts +33 -0
  168. package/dist/modules/flow/domain/command.d.ts.map +1 -0
  169. package/dist/modules/flow/domain/command.js +35 -0
  170. package/dist/modules/flow/domain/command.js.map +1 -0
  171. package/dist/modules/flow/domain/issue-bulk.d.ts +50 -0
  172. package/dist/modules/flow/domain/issue-bulk.d.ts.map +1 -0
  173. package/dist/modules/flow/domain/issue-bulk.js +97 -0
  174. package/dist/modules/flow/domain/issue-bulk.js.map +1 -0
  175. package/dist/modules/flow/domain/issue-dependency.d.ts +19 -0
  176. package/dist/modules/flow/domain/issue-dependency.d.ts.map +1 -0
  177. package/dist/modules/flow/domain/issue-dependency.js +59 -0
  178. package/dist/modules/flow/domain/issue-dependency.js.map +1 -0
  179. package/dist/modules/flow/domain/issue-discussion.d.ts +52 -0
  180. package/dist/modules/flow/domain/issue-discussion.d.ts.map +1 -0
  181. package/dist/modules/flow/domain/issue-discussion.js +114 -0
  182. package/dist/modules/flow/domain/issue-discussion.js.map +1 -0
  183. package/dist/modules/flow/domain/issue-transfer.d.ts +62 -0
  184. package/dist/modules/flow/domain/issue-transfer.d.ts.map +1 -0
  185. package/dist/modules/flow/domain/issue-transfer.js +171 -0
  186. package/dist/modules/flow/domain/issue-transfer.js.map +1 -0
  187. package/dist/modules/flow/domain/issue-validation.d.ts +68 -0
  188. package/dist/modules/flow/domain/issue-validation.d.ts.map +1 -0
  189. package/dist/modules/flow/domain/issue-validation.js +136 -0
  190. package/dist/modules/flow/domain/issue-validation.js.map +1 -0
  191. package/dist/modules/flow/domain/issue-write.d.ts +118 -0
  192. package/dist/modules/flow/domain/issue-write.d.ts.map +1 -0
  193. package/dist/modules/flow/domain/issue-write.js +372 -0
  194. package/dist/modules/flow/domain/issue-write.js.map +1 -0
  195. package/dist/modules/flow/domain/sprint-lifecycle.d.ts +61 -0
  196. package/dist/modules/flow/domain/sprint-lifecycle.d.ts.map +1 -0
  197. package/dist/modules/flow/domain/sprint-lifecycle.js +145 -0
  198. package/dist/modules/flow/domain/sprint-lifecycle.js.map +1 -0
  199. package/dist/modules/flow/functions/board.d.ts +7 -0
  200. package/dist/modules/flow/functions/board.d.ts.map +1 -0
  201. package/dist/modules/flow/functions/board.js +59 -0
  202. package/dist/modules/flow/functions/board.js.map +1 -0
  203. package/dist/modules/flow/functions/column.d.ts +8 -0
  204. package/dist/modules/flow/functions/column.d.ts.map +1 -0
  205. package/dist/modules/flow/functions/column.js +64 -0
  206. package/dist/modules/flow/functions/column.js.map +1 -0
  207. package/dist/modules/flow/functions/effects.d.ts +21 -0
  208. package/dist/modules/flow/functions/effects.d.ts.map +1 -0
  209. package/dist/modules/flow/functions/effects.js +96 -0
  210. package/dist/modules/flow/functions/effects.js.map +1 -0
  211. package/dist/modules/flow/functions/entity-save.d.ts +4 -0
  212. package/dist/modules/flow/functions/entity-save.d.ts.map +1 -0
  213. package/dist/modules/flow/functions/entity-save.js +60 -0
  214. package/dist/modules/flow/functions/entity-save.js.map +1 -0
  215. package/dist/modules/flow/functions/epic.d.ts +26 -0
  216. package/dist/modules/flow/functions/epic.d.ts.map +1 -0
  217. package/dist/modules/flow/functions/epic.js +151 -0
  218. package/dist/modules/flow/functions/epic.js.map +1 -0
  219. package/dist/modules/flow/functions/field.d.ts +9 -0
  220. package/dist/modules/flow/functions/field.d.ts.map +1 -0
  221. package/dist/modules/flow/functions/field.js +117 -0
  222. package/dist/modules/flow/functions/field.js.map +1 -0
  223. package/dist/modules/flow/functions/index.d.ts +5 -0
  224. package/dist/modules/flow/functions/index.d.ts.map +1 -0
  225. package/dist/modules/flow/functions/index.js +42 -0
  226. package/dist/modules/flow/functions/index.js.map +1 -0
  227. package/dist/modules/flow/functions/issue-batch.d.ts +6 -0
  228. package/dist/modules/flow/functions/issue-batch.d.ts.map +1 -0
  229. package/dist/modules/flow/functions/issue-batch.js +149 -0
  230. package/dist/modules/flow/functions/issue-batch.js.map +1 -0
  231. package/dist/modules/flow/functions/issue-dependency.d.ts +8 -0
  232. package/dist/modules/flow/functions/issue-dependency.d.ts.map +1 -0
  233. package/dist/modules/flow/functions/issue-dependency.js +54 -0
  234. package/dist/modules/flow/functions/issue-dependency.js.map +1 -0
  235. package/dist/modules/flow/functions/issue-discussion.d.ts +6 -0
  236. package/dist/modules/flow/functions/issue-discussion.d.ts.map +1 -0
  237. package/dist/modules/flow/functions/issue-discussion.js +86 -0
  238. package/dist/modules/flow/functions/issue-discussion.js.map +1 -0
  239. package/dist/modules/flow/functions/issue-read.d.ts +18 -0
  240. package/dist/modules/flow/functions/issue-read.d.ts.map +1 -0
  241. package/dist/modules/flow/functions/issue-read.js +159 -0
  242. package/dist/modules/flow/functions/issue-read.js.map +1 -0
  243. package/dist/modules/flow/functions/issue-write.d.ts +9 -0
  244. package/dist/modules/flow/functions/issue-write.d.ts.map +1 -0
  245. package/dist/modules/flow/functions/issue-write.js +149 -0
  246. package/dist/modules/flow/functions/issue-write.js.map +1 -0
  247. package/dist/modules/flow/functions/issueType.d.ts +8 -0
  248. package/dist/modules/flow/functions/issueType.d.ts.map +1 -0
  249. package/dist/modules/flow/functions/issueType.js +66 -0
  250. package/dist/modules/flow/functions/issueType.js.map +1 -0
  251. package/dist/modules/flow/functions/page.d.ts +22 -0
  252. package/dist/modules/flow/functions/page.d.ts.map +1 -0
  253. package/dist/modules/flow/functions/page.js +202 -0
  254. package/dist/modules/flow/functions/page.js.map +1 -0
  255. package/dist/modules/flow/functions/project.d.ts +26 -0
  256. package/dist/modules/flow/functions/project.d.ts.map +1 -0
  257. package/dist/modules/flow/functions/project.js +381 -0
  258. package/dist/modules/flow/functions/project.js.map +1 -0
  259. package/dist/modules/flow/functions/sprint.d.ts +17 -0
  260. package/dist/modules/flow/functions/sprint.d.ts.map +1 -0
  261. package/dist/modules/flow/functions/sprint.js +173 -0
  262. package/dist/modules/flow/functions/sprint.js.map +1 -0
  263. package/dist/modules/flow/functions/tag.d.ts +14 -0
  264. package/dist/modules/flow/functions/tag.d.ts.map +1 -0
  265. package/dist/modules/flow/functions/tag.js +88 -0
  266. package/dist/modules/flow/functions/tag.js.map +1 -0
  267. package/dist/modules/flow/index.d.ts +8 -2
  268. package/dist/modules/flow/index.d.ts.map +1 -1
  269. package/dist/modules/flow/index.js +7 -2
  270. package/dist/modules/flow/index.js.map +1 -1
  271. package/dist/modules/flow/pages.d.ts +1 -1
  272. package/dist/modules/flow/pages.d.ts.map +1 -1
  273. package/dist/modules/flow/pages.js +1 -1
  274. package/dist/modules/flow/pages.js.map +1 -1
  275. package/dist/modules/flow/queries/calendar.d.ts +21 -0
  276. package/dist/modules/flow/queries/calendar.d.ts.map +1 -0
  277. package/dist/modules/flow/queries/calendar.js +31 -0
  278. package/dist/modules/flow/queries/calendar.js.map +1 -0
  279. package/dist/modules/flow/queries/issue-dependencies.d.ts +17 -0
  280. package/dist/modules/flow/queries/issue-dependencies.d.ts.map +1 -0
  281. package/dist/modules/flow/queries/issue-dependencies.js +46 -0
  282. package/dist/modules/flow/queries/issue-dependencies.js.map +1 -0
  283. package/dist/modules/flow/queries/issue-followers.d.ts +6 -0
  284. package/dist/modules/flow/queries/issue-followers.d.ts.map +1 -0
  285. package/dist/modules/flow/queries/issue-followers.js +18 -0
  286. package/dist/modules/flow/queries/issue-followers.js.map +1 -0
  287. package/dist/modules/flow/queries/issue-list.d.ts +153 -0
  288. package/dist/modules/flow/queries/issue-list.d.ts.map +1 -0
  289. package/dist/modules/flow/queries/issue-list.js +439 -0
  290. package/dist/modules/flow/queries/issue-list.js.map +1 -0
  291. package/dist/modules/flow/queries/options.d.ts +4 -0
  292. package/dist/modules/flow/queries/options.d.ts.map +1 -0
  293. package/dist/modules/flow/queries/options.js +13 -0
  294. package/dist/modules/flow/queries/options.js.map +1 -0
  295. package/dist/modules/flow/queries/progress.d.ts +24 -0
  296. package/dist/modules/flow/queries/progress.d.ts.map +1 -0
  297. package/dist/modules/flow/queries/progress.js +54 -0
  298. package/dist/modules/flow/queries/progress.js.map +1 -0
  299. package/dist/modules/flow/queries/project-list.d.ts +4 -0
  300. package/dist/modules/flow/queries/project-list.d.ts.map +1 -0
  301. package/dist/modules/flow/queries/project-list.js +19 -0
  302. package/dist/modules/flow/queries/project-list.js.map +1 -0
  303. package/dist/modules/flow_backend/messages.d.ts +1 -2
  304. package/dist/modules/flow_backend/messages.d.ts.map +1 -1
  305. package/dist/modules/flow_backend/messages.js +0 -2
  306. package/dist/modules/flow_backend/messages.js.map +1 -1
  307. package/dist/modules/flow_backend/routes.js +1 -1
  308. package/dist/modules/flow_backend/routes.js.map +1 -1
  309. package/dist/modules/flow_backend/screens/all-epics.d.ts.map +1 -1
  310. package/dist/modules/flow_backend/screens/all-epics.js +1 -1
  311. package/dist/modules/flow_backend/screens/all-epics.js.map +1 -1
  312. package/dist/modules/flow_backend/screens/all-pages.d.ts.map +1 -1
  313. package/dist/modules/flow_backend/screens/all-pages.js +1 -1
  314. package/dist/modules/flow_backend/screens/all-pages.js.map +1 -1
  315. package/dist/modules/flow_backend/screens/epic-detail.js +1 -1
  316. package/dist/modules/flow_backend/screens/epic-detail.js.map +1 -1
  317. package/dist/modules/flow_backend/screens/gantt.d.ts.map +1 -1
  318. package/dist/modules/flow_backend/screens/gantt.js +1 -1
  319. package/dist/modules/flow_backend/screens/gantt.js.map +1 -1
  320. package/dist/modules/flow_backend/screens/issue-detail.js +2 -1
  321. package/dist/modules/flow_backend/screens/issue-detail.js.map +1 -1
  322. package/dist/modules/flow_backend/screens/issues.d.ts.map +1 -1
  323. package/dist/modules/flow_backend/screens/issues.js +1 -1
  324. package/dist/modules/flow_backend/screens/issues.js.map +1 -1
  325. package/dist/modules/flow_backend/screens/map.js +1 -1
  326. package/dist/modules/flow_backend/screens/map.js.map +1 -1
  327. package/dist/modules/flow_backend/screens/my-work.d.ts.map +1 -1
  328. package/dist/modules/flow_backend/screens/my-work.js +1 -1
  329. package/dist/modules/flow_backend/screens/my-work.js.map +1 -1
  330. package/dist/modules/flow_backend/screens/page-detail.js +1 -1
  331. package/dist/modules/flow_backend/screens/page-detail.js.map +1 -1
  332. package/dist/modules/flow_backend/screens/project-create.d.ts.map +1 -1
  333. package/dist/modules/flow_backend/screens/project-create.js +1 -1
  334. package/dist/modules/flow_backend/screens/project-create.js.map +1 -1
  335. package/dist/modules/flow_backend/screens/project-pages.d.ts.map +1 -1
  336. package/dist/modules/flow_backend/screens/project-pages.js +1 -1
  337. package/dist/modules/flow_backend/screens/project-pages.js.map +1 -1
  338. package/dist/modules/flow_backend/screens/projects-list.d.ts.map +1 -1
  339. package/dist/modules/flow_backend/screens/projects-list.js +1 -1
  340. package/dist/modules/flow_backend/screens/projects-list.js.map +1 -1
  341. package/dist/modules/flow_backend/screens/sprints.d.ts.map +1 -1
  342. package/dist/modules/flow_backend/screens/sprints.js +1 -1
  343. package/dist/modules/flow_backend/screens/sprints.js.map +1 -1
  344. package/dist/modules/flow_staff_channel/channel-routes.js +1 -1
  345. package/dist/modules/flow_staff_channel/channel-routes.js.map +1 -1
  346. package/dist/modules/hospitality_billing/messages.d.ts.map +1 -1
  347. package/dist/modules/hospitality_billing/messages.js +0 -2
  348. package/dist/modules/hospitality_billing/messages.js.map +1 -1
  349. package/dist/modules/hospitality_billing/screens/billing.d.ts.map +1 -1
  350. package/dist/modules/hospitality_billing/screens/billing.js +1 -1
  351. package/dist/modules/hospitality_billing/screens/billing.js.map +1 -1
  352. package/dist/modules/hospitality_billing/screens/page-frame.d.ts +1 -2
  353. package/dist/modules/hospitality_billing/screens/page-frame.d.ts.map +1 -1
  354. package/dist/modules/hospitality_billing/screens/page-frame.js +1 -1
  355. package/dist/modules/hospitality_billing/screens/page-frame.js.map +1 -1
  356. package/dist/modules/hospitality_core/messages.js +2 -2
  357. package/dist/modules/hospitality_core/messages.js.map +1 -1
  358. package/dist/modules/hospitality_core/screens/check-out-prep.d.ts.map +1 -1
  359. package/dist/modules/hospitality_core/screens/check-out-prep.js +1 -1
  360. package/dist/modules/hospitality_core/screens/check-out-prep.js.map +1 -1
  361. package/dist/modules/hospitality_core/screens/front-desk.d.ts.map +1 -1
  362. package/dist/modules/hospitality_core/screens/front-desk.js +40 -40
  363. package/dist/modules/hospitality_core/screens/front-desk.js.map +1 -1
  364. package/dist/modules/hospitality_core/screens/page-frame.d.ts +2 -3
  365. package/dist/modules/hospitality_core/screens/page-frame.d.ts.map +1 -1
  366. package/dist/modules/hospitality_core/screens/page-frame.js +3 -3
  367. package/dist/modules/hospitality_core/screens/page-frame.js.map +1 -1
  368. package/dist/modules/hospitality_core/screens/tape-chart.d.ts.map +1 -1
  369. package/dist/modules/hospitality_core/screens/tape-chart.js +3 -12
  370. package/dist/modules/hospitality_core/screens/tape-chart.js.map +1 -1
  371. package/dist/modules/hr_backend/screens/employee-form.d.ts.map +1 -1
  372. package/dist/modules/hr_backend/screens/employee-form.js +1 -1
  373. package/dist/modules/hr_backend/screens/employee-form.js.map +1 -1
  374. package/dist/modules/hr_backend/screens/leaves-list.d.ts.map +1 -1
  375. package/dist/modules/hr_backend/screens/leaves-list.js +1 -1
  376. package/dist/modules/hr_backend/screens/leaves-list.js.map +1 -1
  377. package/dist/modules/livedoc/islands.d.ts +9 -0
  378. package/dist/modules/livedoc/islands.d.ts.map +1 -1
  379. package/dist/modules/loyalty_backend/messages.d.ts +0 -10
  380. package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
  381. package/dist/modules/loyalty_backend/messages.js +0 -10
  382. package/dist/modules/loyalty_backend/messages.js.map +1 -1
  383. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
  384. package/dist/modules/loyalty_backend/screens/index.js +5 -5
  385. package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
  386. package/dist/modules/loyalty_backend/screens/page-frame.d.ts +2 -3
  387. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
  388. package/dist/modules/loyalty_backend/screens/page-frame.js +2 -2
  389. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
  390. package/dist/modules/mail_backend/index.d.ts.map +1 -1
  391. package/dist/modules/mail_backend/index.js +0 -2
  392. package/dist/modules/mail_backend/index.js.map +1 -1
  393. package/dist/modules/mail_backend/screens/inbox-list.d.ts.map +1 -1
  394. package/dist/modules/mail_backend/screens/inbox-list.js +1 -1
  395. package/dist/modules/mail_backend/screens/inbox-list.js.map +1 -1
  396. package/dist/modules/mail_inbound_backend/index.d.ts.map +1 -1
  397. package/dist/modules/mail_inbound_backend/index.js +0 -2
  398. package/dist/modules/mail_inbound_backend/index.js.map +1 -1
  399. package/dist/modules/mail_inbound_backend/screens/inbound-list.d.ts.map +1 -1
  400. package/dist/modules/mail_inbound_backend/screens/inbound-list.js +1 -1
  401. package/dist/modules/mail_inbound_backend/screens/inbound-list.js.map +1 -1
  402. package/dist/modules/mail_transport_backend/index.d.ts.map +1 -1
  403. package/dist/modules/mail_transport_backend/index.js +0 -2
  404. package/dist/modules/mail_transport_backend/index.js.map +1 -1
  405. package/dist/modules/mail_transport_backend/screens/outbox-list.d.ts.map +1 -1
  406. package/dist/modules/mail_transport_backend/screens/outbox-list.js +1 -1
  407. package/dist/modules/mail_transport_backend/screens/outbox-list.js.map +1 -1
  408. package/dist/modules/manufacturing_backend/screens/order-execution.d.ts.map +1 -1
  409. package/dist/modules/manufacturing_backend/screens/order-execution.js +1 -1
  410. package/dist/modules/manufacturing_backend/screens/order-execution.js.map +1 -1
  411. package/dist/modules/oauth_backend/messages.d.ts +0 -4
  412. package/dist/modules/oauth_backend/messages.d.ts.map +1 -1
  413. package/dist/modules/oauth_backend/messages.js +0 -4
  414. package/dist/modules/oauth_backend/messages.js.map +1 -1
  415. package/dist/modules/oauth_backend/screens/index.d.ts.map +1 -1
  416. package/dist/modules/oauth_backend/screens/index.js +5 -5
  417. package/dist/modules/oauth_backend/screens/index.js.map +1 -1
  418. package/dist/modules/partner_backend/screens/form.d.ts.map +1 -1
  419. package/dist/modules/partner_backend/screens/form.js +3 -1
  420. package/dist/modules/partner_backend/screens/form.js.map +1 -1
  421. package/dist/modules/partner_backend/screens/list.d.ts.map +1 -1
  422. package/dist/modules/partner_backend/screens/list.js +1 -1
  423. package/dist/modules/partner_backend/screens/list.js.map +1 -1
  424. package/dist/modules/partner_backend/screens/new.d.ts.map +1 -1
  425. package/dist/modules/partner_backend/screens/new.js +1 -1
  426. package/dist/modules/partner_backend/screens/new.js.map +1 -1
  427. package/dist/modules/pricing_backend/index.js +0 -2
  428. package/dist/modules/pricing_backend/index.js.map +1 -1
  429. package/dist/modules/pricing_backend/screens/pricelist-detail.d.ts.map +1 -1
  430. package/dist/modules/pricing_backend/screens/pricelist-detail.js +1 -1
  431. package/dist/modules/pricing_backend/screens/pricelist-detail.js.map +1 -1
  432. package/dist/modules/pricing_backend/screens/pricelists-list.d.ts.map +1 -1
  433. package/dist/modules/pricing_backend/screens/pricelists-list.js +1 -1
  434. package/dist/modules/pricing_backend/screens/pricelists-list.js.map +1 -1
  435. package/dist/modules/product_backend/client/attribute-modal.d.mts +4 -4
  436. package/dist/modules/product_backend/client/attribute-modal.d.mts.map +1 -1
  437. package/dist/modules/product_backend/client/attribute-modal.mjs +1 -1
  438. package/dist/modules/product_backend/client/attribute-modal.mjs.map +3 -3
  439. package/dist/modules/product_backend/client/product-modal.d.mts +8 -8
  440. package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -1
  441. package/dist/modules/product_backend/client/product-modal.mjs +1 -1
  442. package/dist/modules/product_backend/client/product-modal.mjs.map +3 -3
  443. package/dist/modules/product_backend/client/variant-editor.d.mts +3 -3
  444. package/dist/modules/product_backend/client/variant-editor.d.mts.map +1 -1
  445. package/dist/modules/product_backend/client/variant-editor.mjs +1 -1
  446. package/dist/modules/product_backend/client/variant-editor.mjs.map +3 -3
  447. package/dist/modules/product_backend/screens/detail.d.ts.map +1 -1
  448. package/dist/modules/product_backend/screens/detail.js +3 -2
  449. package/dist/modules/product_backend/screens/detail.js.map +1 -1
  450. package/dist/modules/product_backend/screens/variant.d.ts.map +1 -1
  451. package/dist/modules/product_backend/screens/variant.js +3 -2
  452. package/dist/modules/product_backend/screens/variant.js.map +1 -1
  453. package/dist/modules/purchase_backend/client/purchase-order-modal.d.mts +185 -0
  454. package/dist/modules/purchase_backend/client/purchase-order-modal.d.mts.map +1 -0
  455. package/dist/modules/purchase_backend/client/purchase-order-modal.mjs +2 -0
  456. package/dist/modules/purchase_backend/client/purchase-order-modal.mjs.map +7 -0
  457. package/dist/modules/purchase_backend/client/vendor-pricelist-modal.d.mts +52 -0
  458. package/dist/modules/purchase_backend/client/vendor-pricelist-modal.d.mts.map +1 -0
  459. package/dist/modules/purchase_backend/client/vendor-pricelist-modal.mjs +2 -0
  460. package/dist/modules/purchase_backend/client/vendor-pricelist-modal.mjs.map +7 -0
  461. package/dist/modules/purchase_backend/index.js +83 -14
  462. package/dist/modules/purchase_backend/index.js.map +1 -1
  463. package/dist/modules/purchase_backend/modal/context.d.ts +4 -0
  464. package/dist/modules/purchase_backend/modal/context.d.ts.map +1 -0
  465. package/dist/modules/purchase_backend/modal/context.js +94 -0
  466. package/dist/modules/purchase_backend/modal/context.js.map +1 -0
  467. package/dist/modules/purchase_backend/modal/order-modal-view.d.ts +18 -0
  468. package/dist/modules/purchase_backend/modal/order-modal-view.d.ts.map +1 -0
  469. package/dist/modules/purchase_backend/modal/order-modal-view.js +290 -0
  470. package/dist/modules/purchase_backend/modal/order-modal-view.js.map +1 -0
  471. package/dist/modules/purchase_backend/modal/pricelist-context.d.ts +3 -0
  472. package/dist/modules/purchase_backend/modal/pricelist-context.d.ts.map +1 -0
  473. package/dist/modules/purchase_backend/modal/pricelist-context.js +36 -0
  474. package/dist/modules/purchase_backend/modal/pricelist-context.js.map +1 -0
  475. package/dist/modules/purchase_backend/modal/pricelist-view.d.ts +12 -0
  476. package/dist/modules/purchase_backend/modal/pricelist-view.d.ts.map +1 -0
  477. package/dist/modules/purchase_backend/modal/pricelist-view.js +78 -0
  478. package/dist/modules/purchase_backend/modal/pricelist-view.js.map +1 -0
  479. package/dist/modules/purchase_backend/screens/order-detail.d.ts.map +1 -1
  480. package/dist/modules/purchase_backend/screens/order-detail.js +4 -2
  481. package/dist/modules/purchase_backend/screens/order-detail.js.map +1 -1
  482. package/dist/modules/purchase_backend/screens/overview.d.ts +5 -0
  483. package/dist/modules/purchase_backend/screens/overview.d.ts.map +1 -1
  484. package/dist/modules/purchase_backend/screens/overview.js +27 -6
  485. package/dist/modules/purchase_backend/screens/overview.js.map +1 -1
  486. package/dist/modules/purchase_backend/screens/rfq-create.d.ts.map +1 -1
  487. package/dist/modules/purchase_backend/screens/rfq-create.js +1 -1
  488. package/dist/modules/purchase_backend/screens/rfq-create.js.map +1 -1
  489. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts +1 -1
  490. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts.map +1 -1
  491. package/dist/modules/purchase_backend/screens/rfqs-list.js +1 -1
  492. package/dist/modules/purchase_backend/screens/rfqs-list.js.map +1 -1
  493. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.d.ts.map +1 -1
  494. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js +1 -1
  495. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js.map +1 -1
  496. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts +2 -1
  497. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts.map +1 -1
  498. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js +2 -2
  499. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js.map +1 -1
  500. package/dist/modules/purchase_backend/search.d.ts +1 -1
  501. package/dist/modules/sale/functions/line-edit.d.ts +4 -0
  502. package/dist/modules/sale/functions/line-edit.d.ts.map +1 -0
  503. package/dist/modules/sale/functions/line-edit.js +120 -0
  504. package/dist/modules/sale/functions/line-edit.js.map +1 -0
  505. package/dist/modules/sale/index.d.ts.map +1 -1
  506. package/dist/modules/sale/index.js +16 -1
  507. package/dist/modules/sale/index.js.map +1 -1
  508. package/dist/modules/sale_backend/client/invoicing-policy-modal.d.mts +53 -0
  509. package/dist/modules/sale_backend/client/invoicing-policy-modal.d.mts.map +1 -0
  510. package/dist/modules/sale_backend/client/invoicing-policy-modal.mjs +2 -0
  511. package/dist/modules/sale_backend/client/invoicing-policy-modal.mjs.map +7 -0
  512. package/dist/modules/sale_backend/client/sale-order-modal.d.mts +161 -0
  513. package/dist/modules/sale_backend/client/sale-order-modal.d.mts.map +1 -0
  514. package/dist/modules/sale_backend/client/sale-order-modal.mjs +2 -0
  515. package/dist/modules/sale_backend/client/sale-order-modal.mjs.map +7 -0
  516. package/dist/modules/sale_backend/index.js +81 -20
  517. package/dist/modules/sale_backend/index.js.map +1 -1
  518. package/dist/modules/sale_backend/modal/context.d.ts +4 -0
  519. package/dist/modules/sale_backend/modal/context.d.ts.map +1 -0
  520. package/dist/modules/sale_backend/modal/context.js +94 -0
  521. package/dist/modules/sale_backend/modal/context.js.map +1 -0
  522. package/dist/modules/sale_backend/modal/order-modal-view.d.ts +18 -0
  523. package/dist/modules/sale_backend/modal/order-modal-view.d.ts.map +1 -0
  524. package/dist/modules/sale_backend/modal/order-modal-view.js +289 -0
  525. package/dist/modules/sale_backend/modal/order-modal-view.js.map +1 -0
  526. package/dist/modules/sale_backend/modal/policy-context.d.ts +3 -0
  527. package/dist/modules/sale_backend/modal/policy-context.d.ts.map +1 -0
  528. package/dist/modules/sale_backend/modal/policy-context.js +26 -0
  529. package/dist/modules/sale_backend/modal/policy-context.js.map +1 -0
  530. package/dist/modules/sale_backend/modal/policy-view.d.ts +11 -0
  531. package/dist/modules/sale_backend/modal/policy-view.d.ts.map +1 -0
  532. package/dist/modules/sale_backend/modal/policy-view.js +70 -0
  533. package/dist/modules/sale_backend/modal/policy-view.js.map +1 -0
  534. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts +1 -1
  535. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts.map +1 -1
  536. package/dist/modules/sale_backend/screens/invoicing-policies-list.js +1 -1
  537. package/dist/modules/sale_backend/screens/invoicing-policies-list.js.map +1 -1
  538. package/dist/modules/sale_backend/screens/invoicing-policy-create.d.ts.map +1 -1
  539. package/dist/modules/sale_backend/screens/invoicing-policy-create.js +1 -1
  540. package/dist/modules/sale_backend/screens/invoicing-policy-create.js.map +1 -1
  541. package/dist/modules/sale_backend/screens/order-detail.d.ts.map +1 -1
  542. package/dist/modules/sale_backend/screens/order-detail.js +3 -1
  543. package/dist/modules/sale_backend/screens/order-detail.js.map +1 -1
  544. package/dist/modules/sale_backend/screens/overview.d.ts +3 -0
  545. package/dist/modules/sale_backend/screens/overview.d.ts.map +1 -1
  546. package/dist/modules/sale_backend/screens/overview.js +22 -14
  547. package/dist/modules/sale_backend/screens/overview.js.map +1 -1
  548. package/dist/modules/sale_backend/screens/quotation-create.d.ts.map +1 -1
  549. package/dist/modules/sale_backend/screens/quotation-create.js +1 -1
  550. package/dist/modules/sale_backend/screens/quotation-create.js.map +1 -1
  551. package/dist/modules/sale_backend/screens/quotations-list.d.ts +1 -1
  552. package/dist/modules/sale_backend/screens/quotations-list.d.ts.map +1 -1
  553. package/dist/modules/sale_backend/screens/quotations-list.js +1 -1
  554. package/dist/modules/sale_backend/screens/quotations-list.js.map +1 -1
  555. package/dist/modules/sale_backend/screens/sales-orders-list.d.ts.map +1 -1
  556. package/dist/modules/sale_backend/screens/sales-orders-list.js +1 -1
  557. package/dist/modules/sale_backend/screens/sales-orders-list.js.map +1 -1
  558. package/dist/modules/stock/functions/inventory-preview.d.ts +4 -0
  559. package/dist/modules/stock/functions/inventory-preview.d.ts.map +1 -0
  560. package/dist/modules/stock/functions/inventory-preview.js +68 -0
  561. package/dist/modules/stock/functions/inventory-preview.js.map +1 -0
  562. package/dist/modules/stock/index.d.ts.map +1 -1
  563. package/dist/modules/stock/index.js +14 -1
  564. package/dist/modules/stock/index.js.map +1 -1
  565. package/dist/modules/stock_backend/client/inventory-count-modal.d.mts +60 -0
  566. package/dist/modules/stock_backend/client/inventory-count-modal.d.mts.map +1 -0
  567. package/dist/modules/stock_backend/client/inventory-count-modal.mjs +2 -0
  568. package/dist/modules/stock_backend/client/inventory-count-modal.mjs.map +7 -0
  569. package/dist/modules/stock_backend/client/stock-configuration-modal.d.mts +105 -0
  570. package/dist/modules/stock_backend/client/stock-configuration-modal.d.mts.map +1 -0
  571. package/dist/modules/stock_backend/client/stock-configuration-modal.mjs +2 -0
  572. package/dist/modules/stock_backend/client/stock-configuration-modal.mjs.map +7 -0
  573. package/dist/modules/stock_backend/client/stock-transfer-modal.d.mts +130 -0
  574. package/dist/modules/stock_backend/client/stock-transfer-modal.d.mts.map +1 -0
  575. package/dist/modules/stock_backend/client/stock-transfer-modal.mjs +2 -0
  576. package/dist/modules/stock_backend/client/stock-transfer-modal.mjs.map +7 -0
  577. package/dist/modules/stock_backend/functions/index.d.ts +10 -0
  578. package/dist/modules/stock_backend/functions/index.d.ts.map +1 -0
  579. package/dist/modules/stock_backend/functions/index.js +20 -0
  580. package/dist/modules/stock_backend/functions/index.js.map +1 -0
  581. package/dist/modules/stock_backend/functions.d.ts +1 -9
  582. package/dist/modules/stock_backend/functions.d.ts.map +1 -1
  583. package/dist/modules/stock_backend/functions.js +1 -18
  584. package/dist/modules/stock_backend/functions.js.map +1 -1
  585. package/dist/modules/stock_backend/index.js +52 -0
  586. package/dist/modules/stock_backend/index.js.map +1 -1
  587. package/dist/modules/stock_backend/islands.d.ts +8 -0
  588. package/dist/modules/stock_backend/islands.d.ts.map +1 -1
  589. package/dist/modules/stock_backend/islands.js +41 -0
  590. package/dist/modules/stock_backend/islands.js.map +1 -1
  591. package/dist/modules/stock_backend/modal/configuration-context.d.ts +3 -0
  592. package/dist/modules/stock_backend/modal/configuration-context.d.ts.map +1 -0
  593. package/dist/modules/stock_backend/modal/configuration-context.js +65 -0
  594. package/dist/modules/stock_backend/modal/configuration-context.js.map +1 -0
  595. package/dist/modules/stock_backend/modal/configuration-view.d.ts +21 -0
  596. package/dist/modules/stock_backend/modal/configuration-view.d.ts.map +1 -0
  597. package/dist/modules/stock_backend/modal/configuration-view.js +201 -0
  598. package/dist/modules/stock_backend/modal/configuration-view.js.map +1 -0
  599. package/dist/modules/stock_backend/modal/configuration.d.ts +20 -0
  600. package/dist/modules/stock_backend/modal/configuration.d.ts.map +1 -0
  601. package/dist/modules/stock_backend/modal/configuration.js +117 -0
  602. package/dist/modules/stock_backend/modal/configuration.js.map +1 -0
  603. package/dist/modules/stock_backend/modal/inventory-context.d.ts +3 -0
  604. package/dist/modules/stock_backend/modal/inventory-context.d.ts.map +1 -0
  605. package/dist/modules/stock_backend/modal/inventory-context.js +37 -0
  606. package/dist/modules/stock_backend/modal/inventory-context.js.map +1 -0
  607. package/dist/modules/stock_backend/modal/inventory-view.d.ts +14 -0
  608. package/dist/modules/stock_backend/modal/inventory-view.d.ts.map +1 -0
  609. package/dist/modules/stock_backend/modal/inventory-view.js +142 -0
  610. package/dist/modules/stock_backend/modal/inventory-view.js.map +1 -0
  611. package/dist/modules/stock_backend/modal/transfer-context.d.ts +3 -0
  612. package/dist/modules/stock_backend/modal/transfer-context.d.ts.map +1 -0
  613. package/dist/modules/stock_backend/modal/transfer-context.js +54 -0
  614. package/dist/modules/stock_backend/modal/transfer-context.js.map +1 -0
  615. package/dist/modules/stock_backend/modal/transfer-view.d.ts +15 -0
  616. package/dist/modules/stock_backend/modal/transfer-view.d.ts.map +1 -0
  617. package/dist/modules/stock_backend/modal/transfer-view.js +252 -0
  618. package/dist/modules/stock_backend/modal/transfer-view.js.map +1 -0
  619. package/dist/modules/stock_backend/routes.d.ts.map +1 -1
  620. package/dist/modules/stock_backend/routes.js +117 -34
  621. package/dist/modules/stock_backend/routes.js.map +1 -1
  622. package/dist/modules/stock_backend/screens/forecast.d.ts.map +1 -1
  623. package/dist/modules/stock_backend/screens/forecast.js +5 -32
  624. package/dist/modules/stock_backend/screens/forecast.js.map +1 -1
  625. package/dist/modules/stock_backend/screens/inventory.d.ts +3 -1
  626. package/dist/modules/stock_backend/screens/inventory.d.ts.map +1 -1
  627. package/dist/modules/stock_backend/screens/inventory.js +27 -74
  628. package/dist/modules/stock_backend/screens/inventory.js.map +1 -1
  629. package/dist/modules/stock_backend/screens/location-create.d.ts.map +1 -1
  630. package/dist/modules/stock_backend/screens/location-create.js +1 -1
  631. package/dist/modules/stock_backend/screens/location-create.js.map +1 -1
  632. package/dist/modules/stock_backend/screens/locations-list.d.ts +1 -1
  633. package/dist/modules/stock_backend/screens/locations-list.d.ts.map +1 -1
  634. package/dist/modules/stock_backend/screens/locations-list.js +1 -1
  635. package/dist/modules/stock_backend/screens/locations-list.js.map +1 -1
  636. package/dist/modules/stock_backend/screens/lot-create.d.ts.map +1 -1
  637. package/dist/modules/stock_backend/screens/lot-create.js +1 -1
  638. package/dist/modules/stock_backend/screens/lot-create.js.map +1 -1
  639. package/dist/modules/stock_backend/screens/lot-detail.d.ts.map +1 -1
  640. package/dist/modules/stock_backend/screens/lot-detail.js +3 -2
  641. package/dist/modules/stock_backend/screens/lot-detail.js.map +1 -1
  642. package/dist/modules/stock_backend/screens/lots-list.d.ts +1 -1
  643. package/dist/modules/stock_backend/screens/lots-list.d.ts.map +1 -1
  644. package/dist/modules/stock_backend/screens/lots-list.js +1 -1
  645. package/dist/modules/stock_backend/screens/lots-list.js.map +1 -1
  646. package/dist/modules/stock_backend/screens/overview.d.ts +9 -0
  647. package/dist/modules/stock_backend/screens/overview.d.ts.map +1 -0
  648. package/dist/modules/stock_backend/screens/overview.js +38 -0
  649. package/dist/modules/stock_backend/screens/overview.js.map +1 -0
  650. package/dist/modules/stock_backend/screens/picking-type-create.d.ts.map +1 -1
  651. package/dist/modules/stock_backend/screens/picking-type-create.js +1 -1
  652. package/dist/modules/stock_backend/screens/picking-type-create.js.map +1 -1
  653. package/dist/modules/stock_backend/screens/picking-types-list.d.ts +1 -1
  654. package/dist/modules/stock_backend/screens/picking-types-list.d.ts.map +1 -1
  655. package/dist/modules/stock_backend/screens/picking-types-list.js +1 -1
  656. package/dist/modules/stock_backend/screens/picking-types-list.js.map +1 -1
  657. package/dist/modules/stock_backend/screens/replenishment-create.d.ts.map +1 -1
  658. package/dist/modules/stock_backend/screens/replenishment-create.js +1 -1
  659. package/dist/modules/stock_backend/screens/replenishment-create.js.map +1 -1
  660. package/dist/modules/stock_backend/screens/replenishment-list.d.ts +2 -2
  661. package/dist/modules/stock_backend/screens/replenishment-list.d.ts.map +1 -1
  662. package/dist/modules/stock_backend/screens/replenishment-list.js +2 -2
  663. package/dist/modules/stock_backend/screens/replenishment-list.js.map +1 -1
  664. package/dist/modules/stock_backend/screens/stock-route-create.d.ts.map +1 -1
  665. package/dist/modules/stock_backend/screens/stock-route-create.js +1 -1
  666. package/dist/modules/stock_backend/screens/stock-route-create.js.map +1 -1
  667. package/dist/modules/stock_backend/screens/stock-route-detail.js +2 -1
  668. package/dist/modules/stock_backend/screens/stock-route-detail.js.map +1 -1
  669. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts +1 -1
  670. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts.map +1 -1
  671. package/dist/modules/stock_backend/screens/stock-routes-list.js +1 -1
  672. package/dist/modules/stock_backend/screens/stock-routes-list.js.map +1 -1
  673. package/dist/modules/stock_backend/screens/transfer-create.d.ts.map +1 -1
  674. package/dist/modules/stock_backend/screens/transfer-create.js +1 -1
  675. package/dist/modules/stock_backend/screens/transfer-create.js.map +1 -1
  676. package/dist/modules/stock_backend/screens/transfer-detail.d.ts.map +1 -1
  677. package/dist/modules/stock_backend/screens/transfer-detail.js +3 -2
  678. package/dist/modules/stock_backend/screens/transfer-detail.js.map +1 -1
  679. package/dist/modules/stock_backend/screens/transfers-list.d.ts +1 -1
  680. package/dist/modules/stock_backend/screens/transfers-list.d.ts.map +1 -1
  681. package/dist/modules/stock_backend/screens/transfers-list.js +1 -1
  682. package/dist/modules/stock_backend/screens/transfers-list.js.map +1 -1
  683. package/dist/modules/stock_backend/screens/warehouse-create.d.ts.map +1 -1
  684. package/dist/modules/stock_backend/screens/warehouse-create.js +1 -1
  685. package/dist/modules/stock_backend/screens/warehouse-create.js.map +1 -1
  686. package/dist/modules/stock_backend/screens/warehouses-list.d.ts +1 -1
  687. package/dist/modules/stock_backend/screens/warehouses-list.d.ts.map +1 -1
  688. package/dist/modules/stock_backend/screens/warehouses-list.js +1 -1
  689. package/dist/modules/stock_backend/screens/warehouses-list.js.map +1 -1
  690. package/dist/modules/stock_backend/search.d.ts +29 -0
  691. package/dist/modules/stock_backend/search.d.ts.map +1 -1
  692. package/dist/modules/stock_backend/search.js +22 -0
  693. package/dist/modules/stock_backend/search.js.map +1 -1
  694. package/dist/modules/user_backend/client/access-policy-modal.d.mts +4 -4
  695. package/dist/modules/user_backend/client/access-policy-modal.d.mts.map +1 -1
  696. package/dist/modules/user_backend/client/access-policy-modal.mjs +1 -1
  697. package/dist/modules/user_backend/client/access-policy-modal.mjs.map +3 -3
  698. package/dist/modules/user_backend/client/role-modal.d.mts +6 -6
  699. package/dist/modules/user_backend/client/role-modal.d.mts.map +1 -1
  700. package/dist/modules/user_backend/client/role-modal.mjs +1 -1
  701. package/dist/modules/user_backend/client/role-modal.mjs.map +3 -3
  702. package/dist/modules/user_backend/client/user-modal.d.mts +8 -8
  703. package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -1
  704. package/dist/modules/user_backend/client/user-modal.mjs +1 -1
  705. package/dist/modules/user_backend/client/user-modal.mjs.map +3 -3
  706. package/dist/modules/user_backend/messages.d.ts +0 -6
  707. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  708. package/dist/modules/user_backend/messages.js +0 -6
  709. package/dist/modules/user_backend/messages.js.map +1 -1
  710. package/dist/modules/user_backend/screens/access-policies-list.d.ts.map +1 -1
  711. package/dist/modules/user_backend/screens/access-policies-list.js +1 -1
  712. package/dist/modules/user_backend/screens/access-policies-list.js.map +1 -1
  713. package/dist/modules/user_backend/screens/profile-form.d.ts.map +1 -1
  714. package/dist/modules/user_backend/screens/profile-form.js +1 -1
  715. package/dist/modules/user_backend/screens/profile-form.js.map +1 -1
  716. package/dist/modules/user_backend/screens/roles-list.d.ts.map +1 -1
  717. package/dist/modules/user_backend/screens/roles-list.js +1 -1
  718. package/dist/modules/user_backend/screens/roles-list.js.map +1 -1
  719. package/dist/modules/user_backend/screens/users-list.d.ts.map +1 -1
  720. package/dist/modules/user_backend/screens/users-list.js +1 -1
  721. package/dist/modules/user_backend/screens/users-list.js.map +1 -1
  722. package/dist/modules/website_backend/screens/page-frame.d.ts +2 -3
  723. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  724. package/dist/modules/website_backend/screens/page-frame.js +2 -2
  725. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  726. package/dist/permission-catalogue.d.ts.map +1 -1
  727. package/dist/permission-catalogue.js +2 -0
  728. package/dist/permission-catalogue.js.map +1 -1
  729. package/dist/role-templates.d.ts.map +1 -1
  730. package/dist/role-templates.js +23 -3
  731. package/dist/role-templates.js.map +1 -1
  732. package/dist/scaffold/index.js +1 -1
  733. package/dist/ui/client/live-doc-shell.d.ts +27 -1
  734. package/dist/ui/client/live-doc-shell.d.ts.map +1 -1
  735. package/dist/ui/client/live-doc-shell.js +43 -5
  736. package/dist/ui/client/live-doc-shell.js.map +1 -1
  737. package/dist/ui/client/live-doc-tail.d.ts +4 -0
  738. package/dist/ui/client/live-doc-tail.d.ts.map +1 -0
  739. package/dist/ui/client/live-doc-tail.js +21 -0
  740. package/dist/ui/client/live-doc-tail.js.map +1 -0
  741. package/dist/ui/client/live-doc-view.d.ts +18 -0
  742. package/dist/ui/client/live-doc-view.d.ts.map +1 -1
  743. package/dist/ui/client/live-doc-view.js +183 -4
  744. package/dist/ui/client/live-doc-view.js.map +1 -1
  745. package/dist/ui/client/live-doc.css +81 -0
  746. package/dist/ui/client/live-doc.d.mts +6 -3
  747. package/dist/ui/client/live-doc.d.mts.map +1 -1
  748. package/dist/ui/client/live-doc.mjs +14 -10
  749. package/dist/ui/client/live-doc.mjs.map +4 -4
  750. package/dist/ui/layout.d.ts +2 -2
  751. package/dist/ui/layout.d.ts.map +1 -1
  752. package/dist/ui/layout.js +3 -3
  753. package/dist/ui/layout.js.map +1 -1
  754. package/package.json +4 -4
  755. package/dist/modules/flow/functions.d.ts +0 -3
  756. package/dist/modules/flow/functions.d.ts.map +0 -1
  757. package/dist/modules/flow/functions.js +0 -1857
  758. package/dist/modules/flow/functions.js.map +0 -1
  759. package/dist/modules/flow/operations.d.ts +0 -414
  760. package/dist/modules/flow/operations.d.ts.map +0 -1
  761. package/dist/modules/flow/operations.js +0 -1671
  762. package/dist/modules/flow/operations.js.map +0 -1
@@ -0,0 +1,372 @@
1
+ import { actorRequired, commandKey, invalid, issue, n, now } from './command.js';
2
+ import { ISSUE_PRIORITIES } from '../types.js';
3
+ import { assignableSprint, columnOf, fieldValueError, fieldsOfProject, issueEpic, issueType, parentIssueError, projectExists, userExists, } from './issue-validation.js';
4
+ import { readableRow } from '../membership.js';
5
+ import { deleteFrom, eq, from, inArray } from '@ketvietlab/ketjs';
6
+ import { followIssue } from './issue-discussion.js';
7
+ import { ensureThread, postMessage } from '../../mail/index.js';
8
+ export async function saveIssue(ctx, input) {
9
+ if (!commandKey(input.idempotencyKey))
10
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
11
+ if (!actorRequired(ctx))
12
+ return invalid(issue('actor', 'flow.error.actorRequired'));
13
+ if (!String(input.title ?? '').trim())
14
+ return invalid(issue('title', 'flow.error.required'));
15
+ if (!ISSUE_PRIORITIES.includes(String(input.priority ?? 'normal')))
16
+ return invalid(issue('priority', 'flow.error.invalidPriority'));
17
+ if (!(await projectExists(ctx, input.projectId)))
18
+ return invalid(issue('projectId', 'flow.error.notFound'));
19
+ const column = await columnOf(ctx, input.columnId);
20
+ if (!column || String(column.projectId) !== String(input.projectId))
21
+ return invalid(issue('columnId', 'flow.error.invalidColumn'));
22
+ if (!(await userExists(ctx, input.assigneeUserId)))
23
+ return invalid(issue('assigneeUserId', 'flow.error.notFound'));
24
+ const sprint = await assignableSprint(ctx, input.sprintId);
25
+ if (sprint === undefined)
26
+ return invalid(issue('sprintId', 'flow.error.sprintClosed'));
27
+ if (sprint && String(sprint.projectId) !== String(input.projectId))
28
+ return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
29
+ const epic = await issueEpic(ctx, input.epicId);
30
+ if (epic === undefined)
31
+ return invalid(issue('epicId', 'flow.error.notFound'));
32
+ if (epic && String(epic.projectId) !== String(input.projectId))
33
+ return invalid(issue('epicId', 'flow.error.epicProjectMismatch'));
34
+ const kind = await issueType(ctx, input.typeId);
35
+ if (kind === undefined)
36
+ return invalid(issue('typeId', 'flow.error.notFound'));
37
+ if (kind && String(kind.projectId) !== String(input.projectId))
38
+ return invalid(issue('typeId', 'flow.error.typeProjectMismatch'));
39
+ return ctx.tx(async (tx) => {
40
+ const existing = await readableRow(tx, 'flow.Issue', input.id);
41
+ if (existing && String(existing.projectId) !== String(input.projectId))
42
+ return invalid(issue('projectId', 'flow.error.immutableProject'));
43
+ // moveIssue is the only door into a column, because it is the one that
44
+ // checks `blocks` dependencies before letting an issue reach a terminal
45
+ // state. Save used to keep `existing.columnId` and still answer ok, so a
46
+ // caller asking for a different column was told the move had happened.
47
+ if (existing && String(existing.columnId) !== String(input.columnId))
48
+ return invalid(issue('columnId', 'flow.error.columnNeedsMove'));
49
+ const parentError = await parentIssueError(tx, input.id, input.parentIssueId, String(input.projectId));
50
+ if (parentError)
51
+ return invalid(parentError);
52
+ // Resolved before the issue row is touched: `tx` only rolls back on a
53
+ // thrown exception, not on a plain `return invalid(...)`, so validating
54
+ // tags after the insert/compareAndSet below committed a half-written
55
+ // issue (row present, no tags, caller told `ok: false`) on every bad
56
+ // tagId — found by seeding 1000 issues and finding "failed" ones that
57
+ // existed anyway.
58
+ const tagIds = input.tagIds ? [...new Set(input.tagIds)] : null;
59
+ if (tagIds) {
60
+ const tags = tagIds.length
61
+ ? await tx.db.all(from(tx.table('flow.Tag')).where(inArray(tx.table('flow.Tag').id, tagIds), eq(tx.table('flow.Tag').active, true)))
62
+ : [];
63
+ if (tags.length !== tagIds.length)
64
+ return invalid(issue('tagIds', 'flow.error.notFound'));
65
+ }
66
+ // Custom field values, resolved and checked here for the same reason the
67
+ // tags above are: `tx` rolls back on a thrown exception, not on a returned
68
+ // `invalid`, so anything validated after the write below leaves a
69
+ // half-written issue behind and still reports failure.
70
+ const fieldWrites = [];
71
+ if (input.fields) {
72
+ const defs = await fieldsOfProject(tx, input.projectId);
73
+ for (const [key, raw] of Object.entries(input.fields)) {
74
+ const field = defs.get(String(key));
75
+ // A field this project does not have, rather than one that is merely
76
+ // empty: naming it is a mistake worth reporting, the same as an epic
77
+ // from another board.
78
+ if (!field)
79
+ return invalid(issue(`field:${key}`, 'flow.error.fieldUnknown'));
80
+ const error = fieldValueError(field, raw);
81
+ if (error)
82
+ return invalid(error);
83
+ fieldWrites.push({ field, value: String(raw ?? '').trim() });
84
+ }
85
+ }
86
+ const timestamp = now();
87
+ const nextVersion = n(existing?.version) + 1;
88
+ // A reference the caller did not mention keeps what is stored; an
89
+ // explicit null clears it. `priority` and `estimate` below already read
90
+ // this way, but epic, sprint, parent, assignee and due date did not — so
91
+ // any caller sending a partial record silently cleared the rest. The
92
+ // issue detail screen is exactly that caller: its form carries no sprint
93
+ // and no parent field (both have their own action), so editing a title
94
+ // dropped the issue out of its sprint and orphaned its sub-task link.
95
+ const kept = (given, stored) => given === undefined ? (stored ?? null) : given || null;
96
+ const values = {
97
+ projectId: input.projectId,
98
+ columnId: existing ? existing.columnId : input.columnId,
99
+ typeId: input.typeId === undefined ? (existing?.typeId ?? null) : kind ? kind.id : null,
100
+ epicId: input.epicId === undefined ? (existing?.epicId ?? null) : epic ? epic.id : null,
101
+ sprintId: input.sprintId === undefined ? (existing?.sprintId ?? null) : sprint ? sprint.id : null,
102
+ parentIssueId: kept(input.parentIssueId, existing?.parentIssueId),
103
+ title: input.title.trim(),
104
+ assigneeUserId: kept(input.assigneeUserId, existing?.assigneeUserId),
105
+ priority: input.priority ?? existing?.priority ?? 'normal',
106
+ startDate: kept(input.startDate, existing?.startDate),
107
+ dueDate: kept(input.dueDate, existing?.dueDate),
108
+ estimate: input.estimate == null ? (existing?.estimate ?? null) : String(input.estimate),
109
+ active: true,
110
+ version: nextVersion,
111
+ updatedAt: timestamp,
112
+ };
113
+ let threadId;
114
+ if (existing) {
115
+ const expected = input.expectedVersion ?? n(existing.version);
116
+ const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: expected }, values);
117
+ if (!('dryRun' in changed) && !changed.matched)
118
+ return invalid(issue('version', 'flow.error.conflict', { current: existing.version }));
119
+ threadId = String(existing.threadId);
120
+ }
121
+ else {
122
+ const thread = await ensureIssueThread(tx, input.id, input.title.trim(), timestamp);
123
+ threadId = String(thread.id);
124
+ await tx.db.insert('flow.Issue', {
125
+ id: input.id,
126
+ ...values,
127
+ threadId: thread.id,
128
+ createdByUserId: tx.actor ?? null,
129
+ createdAt: timestamp,
130
+ });
131
+ }
132
+ if (tagIds) {
133
+ const IT = tx.table('flow.IssueTag');
134
+ await tx.db.del(deleteFrom(IT).where(eq(IT.issueId, input.id)));
135
+ for (const tagId of tagIds)
136
+ await tx.db.insertIfAbsent('flow.IssueTag', { id: `${input.id}:${tagId}`, issueId: input.id, tagId });
137
+ }
138
+ // One row per issue and field, so a value is replaced rather than
139
+ // accumulated. Emptying one deletes the row instead of storing "": a field
140
+ // nobody has answered and a field answered with nothing read the same on
141
+ // screen, and only one of them should cost a row.
142
+ for (const { field, value } of fieldWrites) {
143
+ const id = `${input.id}:${String(field.id)}`;
144
+ if (!value) {
145
+ const V = tx.table('flow.IssueFieldValue');
146
+ await tx.db.del(deleteFrom(V).where(eq(V.id, id)));
147
+ continue;
148
+ }
149
+ // insertIfAbsent then update, rather than branching on whether the row
150
+ // exists: `db.update` answers with a result object either way, so there
151
+ // is nothing truthy to branch on, and the pair is correct in both cases.
152
+ await tx.db.insertIfAbsent('flow.IssueFieldValue', {
153
+ id,
154
+ issueId: input.id,
155
+ fieldId: field.id,
156
+ value,
157
+ });
158
+ await tx.db.update('flow.IssueFieldValue', { id }, { value });
159
+ }
160
+ // Whoever opened it, and whoever it lands on, are subscribed to its
161
+ // thread. Until this existed the thread had no followers at all, so
162
+ // `postMessage` addressed nobody and every comment notified nobody — the
163
+ // discussion feature was wired end to end and silently inert.
164
+ if (!existing)
165
+ await followIssue(tx, threadId, tx.actor);
166
+ const assignee = values.assigneeUserId;
167
+ if (assignee)
168
+ await followIssue(tx, threadId, assignee);
169
+ // Only what actually moved: a system entry on every title edit is noise,
170
+ // and the timeline is the one place that has to stay readable.
171
+ const handedOver = assignee && String(assignee) !== String(existing?.assigneeUserId ?? '')
172
+ ? [
173
+ {
174
+ field: 'assigneeUserId',
175
+ ...(existing?.assigneeUserId ? { oldValue: String(existing.assigneeUserId) } : {}),
176
+ newValue: String(assignee),
177
+ },
178
+ ]
179
+ : [];
180
+ const rescheduled = existing
181
+ ? [
182
+ ...moved('dueDate', existing.dueDate, values.dueDate),
183
+ ...moved('priority', existing.priority, values.priority),
184
+ ]
185
+ : [];
186
+ if (handedOver.length || rescheduled.length)
187
+ await postMessage(tx, {
188
+ id: `${input.id}:assigned:${nextVersion}`,
189
+ threadId,
190
+ authorUserId: tx.actor ?? undefined,
191
+ kind: 'system',
192
+ // A message key, resolved by whoever renders the timeline — the same
193
+ // arrangement crm_backend's `entryBody` already reads. Handing an issue
194
+ // over keeps its own key, because that is the entry people look for.
195
+ body: rescheduled.length && !handedOver.length ? 'flow.timeline.changed' : 'flow.timeline.assigned',
196
+ tracking: [...handedOver, ...rescheduled],
197
+ });
198
+ return { ok: true, id: input.id, version: nextVersion };
199
+ });
200
+ }
201
+ /**
202
+ * One system entry per command, carrying every tracked field that moved.
203
+ *
204
+ * The timeline used to record exactly one thing — who an issue was handed to —
205
+ * so "who put this in Done, and when" had no answer anywhere in the system. The
206
+ * fields tracked are the ones a person asks about afterwards: the column, the
207
+ * deadline, the priority and the sprint. Title and description are deliberately
208
+ * out: an entry per keystroke is what makes a timeline unreadable, and both
209
+ * already have their own history in the Live Doc.
210
+ *
211
+ * One message rather than one per field, because a single edit that moved three
212
+ * of them is one thing that happened.
213
+ */
214
+ export async function trackIssueChange(tx, input) {
215
+ if (!input.changes.length || !input.threadId)
216
+ return;
217
+ await postMessage(tx, {
218
+ id: `${input.issueId}:changed:${input.version}`,
219
+ threadId: String(input.threadId),
220
+ authorUserId: tx.actor ?? undefined,
221
+ kind: 'system',
222
+ body: input.body,
223
+ tracking: input.changes,
224
+ });
225
+ }
226
+ /** A change worth an entry, or nothing when the value did not actually move. */
227
+ export const moved = (field, before, after) => {
228
+ const from = before == null || before === '' ? '' : String(before);
229
+ const to = after == null || after === '' ? '' : String(after);
230
+ if (from === to)
231
+ return [];
232
+ return [{ field, ...(from ? { oldValue: from } : {}), ...(to ? { newValue: to } : {}) }];
233
+ };
234
+ export async function ensureIssueThread(ctx, issueId, title, createdAt) {
235
+ return ensureThread(ctx, {
236
+ id: `thread:flow.Issue:${issueId}`,
237
+ resModel: 'flow.Issue',
238
+ resId: issueId,
239
+ displayName: title,
240
+ createdAt,
241
+ });
242
+ }
243
+ export async function moveIssue(ctx, input) {
244
+ if (!actorRequired(ctx))
245
+ return invalid(issue('actor', 'flow.error.actorRequired'));
246
+ if (!commandKey(input.idempotencyKey))
247
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
248
+ return ctx.tx(async (tx) => {
249
+ const held = await readableRow(tx, 'flow.Issue', input.id);
250
+ if (!held)
251
+ return invalid(issue('id', 'flow.error.notFound'));
252
+ const column = await columnOf(tx, input.columnId);
253
+ if (!column || String(column.projectId) !== String(held.projectId))
254
+ return invalid(issue('columnId', 'flow.error.invalidColumn'));
255
+ if (column.terminalState === true) {
256
+ const blockers = (await tx.db.select('flow.IssueDependency', { issueId: input.id, relation: 'blocks' })).map((row) => String(row.dependsOnIssueId));
257
+ if (blockers.length) {
258
+ const blockingIssues = await tx.db.all(from(tx.table('flow.Issue')).where(inArray(tx.table('flow.Issue').id, blockers)));
259
+ const columnIds = [...new Set(blockingIssues.map((row) => String(row.columnId)))];
260
+ const blockingColumns = columnIds.length
261
+ ? await tx.db.all(from(tx.table('flow.Column')).where(inArray(tx.table('flow.Column').id, columnIds)))
262
+ : [];
263
+ const terminal = new Set(blockingColumns.filter((row) => row.terminalState === true).map((row) => String(row.id)));
264
+ const open = blockingIssues.filter((row) => !terminal.has(String(row.columnId)));
265
+ if (open.length)
266
+ return invalid(issue('columnId', 'flow.error.blocked'));
267
+ }
268
+ }
269
+ const timestamp = now();
270
+ const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: input.expectedVersion }, { columnId: input.columnId, version: n(held.version) + 1, updatedAt: timestamp });
271
+ if (!('dryRun' in changed) && !changed.matched)
272
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
273
+ await trackIssueChange(tx, {
274
+ issueId: input.id,
275
+ threadId: held.threadId,
276
+ version: n(held.version) + 1,
277
+ body: 'flow.timeline.moved',
278
+ changes: moved('columnId', held.columnId, input.columnId),
279
+ });
280
+ return { ok: true, id: input.id, version: n(held.version) + 1 };
281
+ });
282
+ }
283
+ export async function assignSprint(ctx, input) {
284
+ if (!actorRequired(ctx))
285
+ return invalid(issue('actor', 'flow.error.actorRequired'));
286
+ if (!commandKey(input.idempotencyKey))
287
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
288
+ return ctx.tx(async (tx) => {
289
+ const held = await readableRow(tx, 'flow.Issue', input.id);
290
+ if (!held)
291
+ return invalid(issue('id', 'flow.error.notFound'));
292
+ const sprint = await assignableSprint(tx, input.sprintId);
293
+ if (sprint === undefined)
294
+ return invalid(issue('sprintId', 'flow.error.sprintClosed'));
295
+ if (sprint && String(sprint.projectId) !== String(held.projectId))
296
+ return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
297
+ const timestamp = now();
298
+ const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: input.expectedVersion }, { sprintId: sprint ? sprint.id : null, version: n(held.version) + 1, updatedAt: timestamp });
299
+ if (!('dryRun' in changed) && !changed.matched)
300
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
301
+ await trackIssueChange(tx, {
302
+ issueId: input.id,
303
+ threadId: held.threadId,
304
+ version: n(held.version) + 1,
305
+ body: 'flow.timeline.sprint',
306
+ changes: moved('sprintId', held.sprintId, sprint ? sprint.id : null),
307
+ });
308
+ return { ok: true, id: input.id, version: n(held.version) + 1 };
309
+ });
310
+ }
311
+ /**
312
+ * Leaves an issue's thread.
313
+ *
314
+ * The only way out of a subscription this module hands out freely: being
315
+ * assigned an issue, commenting on one, or being mentioned in one all
316
+ * subscribe you, and every comment afterwards reaches you. Without this the
317
+ * follower set only ever grows, and a single mention in a busy spec is a
318
+ * standing appointment nobody agreed to.
319
+ *
320
+ * Answers ok when there was nothing to remove, because "I do not want these"
321
+ * is satisfied either way.
322
+ */
323
+ /**
324
+ * Take an issue off the board without pretending it was finished.
325
+ *
326
+ * `Issue.active` has been in the model and in four indexes since Flow was
327
+ * written, `issue.list` has taken `includeArchived`, and nothing has ever
328
+ * written `false` — so the only way to clear a cancelled task was to drop it in
329
+ * the done column, which made every progress figure lie about it.
330
+ *
331
+ * Under compare-and-set, unlike `page.archive`: an issue carries a version
332
+ * because two people work the same one, and archiving from a stale screen is
333
+ * exactly the kind of mistake that guard exists for.
334
+ *
335
+ * What archiving is *not*: it is not completion and it is not deletion.
336
+ * Dependencies stay, so an archived blocker still blocks — silently unblocking
337
+ * work is the worst way to clear a blocker (FLW-DEC-011). Sub-tasks keep their
338
+ * parent, so restoring a parent restores the branch as it was.
339
+ */
340
+ export async function archiveIssue(ctx, input) {
341
+ return setIssueActive(ctx, input, false);
342
+ }
343
+ /**
344
+ * Put it back, exactly where it was.
345
+ *
346
+ * Unlike `page.restore` this needs no reparenting rule: a sub-task of an
347
+ * archived parent is still listed on every board and list of its own, so it
348
+ * cannot come back invisible the way a page under an archived page would.
349
+ */
350
+ export async function restoreIssue(ctx, input) {
351
+ return setIssueActive(ctx, input, true);
352
+ }
353
+ export async function setIssueActive(ctx, input, active) {
354
+ if (!actorRequired(ctx))
355
+ return invalid(issue('actor', 'flow.error.actorRequired'));
356
+ if (!commandKey(input.idempotencyKey))
357
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
358
+ return ctx.tx(async (tx) => {
359
+ const held = await readableRow(tx, 'flow.Issue', input.id);
360
+ if (!held)
361
+ return invalid(issue('id', 'flow.error.notFound'));
362
+ // Already where the caller wants it: say so rather than burning a version.
363
+ if (Boolean(held.active) === active)
364
+ return { ok: true, id: input.id, version: n(held.version) };
365
+ if (n(held.version) !== input.expectedVersion)
366
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
367
+ const version = n(held.version) + 1;
368
+ await tx.db.update('flow.Issue', { id: input.id }, { active, version, updatedAt: now() });
369
+ return { ok: true, id: input.id, version };
370
+ });
371
+ }
372
+ //# sourceMappingURL=issue-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-write.js","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/flow/domain/issue-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { Ctx } from '@ketvietlab/ketjs';
2
+ import type { FlowResult } from './command.ts';
3
+ /**
4
+ * Contend on one row per project, so an invariant that spans rows has
5
+ * something a database can serialize — see `flow.ProjectGuard`.
6
+ *
7
+ * The row is made on first use rather than with the project: a project that
8
+ * never starts a sprint never needs one, and creating it here means projects
9
+ * that predate this code get one the first time it matters.
10
+ */
11
+ export declare function serializeProject(ctx: Ctx, projectId: string): Promise<void>;
12
+ export declare function startSprint(ctx: Ctx, input: {
13
+ id: string;
14
+ idempotencyKey: string;
15
+ }): Promise<FlowResult>;
16
+ /**
17
+ * Close a sprint, and say what happens to the work that did not finish.
18
+ *
19
+ * Closing used to change one column and stop. The issues stayed in a sprint
20
+ * nobody would look at again, and moving them was one screen each — the step
21
+ * every sprint process has, done by hand.
22
+ *
23
+ * `carryTo` names where the unfinished work goes: another sprint of the same
24
+ * project that is still open, or `null` to take it out of the sprint entirely.
25
+ * Omitting it leaves the work where it is, which is what closing has always
26
+ * done, so no existing caller changes behaviour.
27
+ *
28
+ * The carry is not compare-and-set. A sprint close is a deliberate act on the
29
+ * whole set, and failing it because one issue was edited a second ago would be
30
+ * the wrong answer; the version still moves, so anyone with that issue open
31
+ * gets the conflict on their own next save.
32
+ */
33
+ /**
34
+ * Remove a sprint that was never started.
35
+ *
36
+ * Only `planned`, and there is no way back from `closed` at all. FLW-DEC-015
37
+ * asked which of the two a sprint is — a record of what a team did in a
38
+ * fortnight, or a planning tool somebody can take back — and the answer was
39
+ * the record. So `closed` is final: every figure that reports on the past
40
+ * reads a closed sprint, and those figures stay put. `closeSprint` is how a
41
+ * sprint ends; this is for the other case, one made by mistake or planned and
42
+ * then abandoned before it ever began.
43
+ *
44
+ * A sprint closed by accident is recovered by planning the next one, not by
45
+ * reopening the last.
46
+ *
47
+ * Issues planned into it are let go rather than deleted with it. They go back
48
+ * to the backlog, which is where they were before somebody put them in a
49
+ * sprint that never happened; taking the work away with the plan would be a
50
+ * surprise nobody asked for (FLW-016).
51
+ */
52
+ export declare function deleteSprint(ctx: Ctx, input: {
53
+ id: string;
54
+ idempotencyKey: string;
55
+ }): Promise<FlowResult>;
56
+ export declare function closeSprint(ctx: Ctx, input: {
57
+ id: string;
58
+ carryTo?: string | null;
59
+ idempotencyKey: string;
60
+ }): Promise<FlowResult>;
61
+ //# sourceMappingURL=sprint-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint-lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/flow/domain/sprint-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAK9C;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,UAAU,CAAC,CAerB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACrE,OAAO,CAAC,UAAU,CAAC,CAiDrB"}
@@ -0,0 +1,145 @@
1
+ import { actorRequired, commandKey, invalid, issue, n, now } from './command.js';
2
+ import { readableRow } from '../membership.js';
3
+ import { deleteFrom, eq } from '@ketvietlab/ketjs';
4
+ import { moved, trackIssueChange } from './issue-write.js';
5
+ /**
6
+ * Contend on one row per project, so an invariant that spans rows has
7
+ * something a database can serialize — see `flow.ProjectGuard`.
8
+ *
9
+ * The row is made on first use rather than with the project: a project that
10
+ * never starts a sprint never needs one, and creating it here means projects
11
+ * that predate this code get one the first time it matters.
12
+ */
13
+ export async function serializeProject(ctx, projectId) {
14
+ const id = `guard:${projectId}`;
15
+ await ctx.db.insertIfAbsent('flow.ProjectGuard', { id, projectId, updatedAt: now() });
16
+ await ctx.db.update('flow.ProjectGuard', { id }, { updatedAt: now() });
17
+ }
18
+ export async function startSprint(ctx, input) {
19
+ if (!actorRequired(ctx))
20
+ return invalid(issue('actor', 'flow.error.actorRequired'));
21
+ if (!commandKey(input.idempotencyKey))
22
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
23
+ return ctx.tx(async (tx) => {
24
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
25
+ if (!held)
26
+ return invalid(issue('id', 'flow.error.notFound'));
27
+ if (held.state !== 'planned')
28
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
29
+ // Take the project's guard row before reading, so a second caller doing
30
+ // the same thing waits here rather than racing past the check below. The
31
+ // read after it is a new statement and so takes a fresh snapshot, which is
32
+ // what lets it see a sprint the other transaction has just started.
33
+ await serializeProject(tx, String(held.projectId));
34
+ // A project runs at most one active sprint at a time, which is what makes
35
+ // "the current sprint" a well-defined thing for the board to show.
36
+ const active = await tx.db.select('flow.Sprint', { projectId: held.projectId, state: 'active' });
37
+ if (active.length)
38
+ return invalid(issue('id', 'flow.error.sprintAlreadyActive'));
39
+ await tx.db.update('flow.Sprint', { id: input.id }, { state: 'active' });
40
+ return { ok: true, id: input.id };
41
+ });
42
+ }
43
+ /**
44
+ * Close a sprint, and say what happens to the work that did not finish.
45
+ *
46
+ * Closing used to change one column and stop. The issues stayed in a sprint
47
+ * nobody would look at again, and moving them was one screen each — the step
48
+ * every sprint process has, done by hand.
49
+ *
50
+ * `carryTo` names where the unfinished work goes: another sprint of the same
51
+ * project that is still open, or `null` to take it out of the sprint entirely.
52
+ * Omitting it leaves the work where it is, which is what closing has always
53
+ * done, so no existing caller changes behaviour.
54
+ *
55
+ * The carry is not compare-and-set. A sprint close is a deliberate act on the
56
+ * whole set, and failing it because one issue was edited a second ago would be
57
+ * the wrong answer; the version still moves, so anyone with that issue open
58
+ * gets the conflict on their own next save.
59
+ */
60
+ /**
61
+ * Remove a sprint that was never started.
62
+ *
63
+ * Only `planned`, and there is no way back from `closed` at all. FLW-DEC-015
64
+ * asked which of the two a sprint is — a record of what a team did in a
65
+ * fortnight, or a planning tool somebody can take back — and the answer was
66
+ * the record. So `closed` is final: every figure that reports on the past
67
+ * reads a closed sprint, and those figures stay put. `closeSprint` is how a
68
+ * sprint ends; this is for the other case, one made by mistake or planned and
69
+ * then abandoned before it ever began.
70
+ *
71
+ * A sprint closed by accident is recovered by planning the next one, not by
72
+ * reopening the last.
73
+ *
74
+ * Issues planned into it are let go rather than deleted with it. They go back
75
+ * to the backlog, which is where they were before somebody put them in a
76
+ * sprint that never happened; taking the work away with the plan would be a
77
+ * surprise nobody asked for (FLW-016).
78
+ */
79
+ export async function deleteSprint(ctx, input) {
80
+ if (!actorRequired(ctx))
81
+ return invalid(issue('actor', 'flow.error.actorRequired'));
82
+ if (!commandKey(input.idempotencyKey))
83
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
84
+ return ctx.tx(async (tx) => {
85
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
86
+ if (!held)
87
+ return invalid(issue('id', 'flow.error.notFound'));
88
+ if (held.state !== 'planned')
89
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
90
+ const planned = await tx.db.select('flow.Issue', { sprintId: input.id });
91
+ for (const row of planned)
92
+ await tx.db.update('flow.Issue', { id: row.id }, { sprintId: null, updatedAt: now() });
93
+ const S = tx.table('flow.Sprint');
94
+ await tx.db.del(deleteFrom(S).where(eq(S.id, input.id)));
95
+ return { ok: true, id: input.id, released: planned.length };
96
+ });
97
+ }
98
+ export async function closeSprint(ctx, input) {
99
+ if (!actorRequired(ctx))
100
+ return invalid(issue('actor', 'flow.error.actorRequired'));
101
+ if (!commandKey(input.idempotencyKey))
102
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
103
+ return ctx.tx(async (tx) => {
104
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
105
+ if (!held)
106
+ return invalid(issue('id', 'flow.error.notFound'));
107
+ if (held.state !== 'active')
108
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
109
+ let carried = 0;
110
+ if (input.carryTo !== undefined) {
111
+ const target = input.carryTo ? await readableRow(tx, 'flow.Sprint', input.carryTo) : null;
112
+ if (input.carryTo) {
113
+ if (!target || String(target.projectId) !== String(held.projectId))
114
+ return invalid(issue('carryTo', 'flow.error.sprintProjectMismatch'));
115
+ if (target.state === 'closed')
116
+ return invalid(issue('carryTo', 'flow.error.sprintClosed'));
117
+ if (String(target.id) === String(held.id))
118
+ return invalid(issue('carryTo', 'flow.error.invalidSprintState'));
119
+ }
120
+ const terminal = new Set((await tx.db.select('flow.Column', {
121
+ projectId: held.projectId,
122
+ terminalState: true,
123
+ active: true,
124
+ })).map((row) => String(row.id)));
125
+ const members = await tx.db.select('flow.Issue', { sprintId: input.id, active: true });
126
+ const timestamp = now();
127
+ for (const row of members) {
128
+ if (terminal.has(String(row.columnId)))
129
+ continue;
130
+ await tx.db.update('flow.Issue', { id: row.id }, { sprintId: target ? target.id : null, version: n(row.version) + 1, updatedAt: timestamp });
131
+ await trackIssueChange(tx, {
132
+ issueId: String(row.id),
133
+ threadId: row.threadId,
134
+ version: n(row.version) + 1,
135
+ body: 'flow.timeline.sprint',
136
+ changes: moved('sprintId', row.sprintId, target ? target.id : null),
137
+ });
138
+ carried += 1;
139
+ }
140
+ }
141
+ await tx.db.update('flow.Sprint', { id: input.id }, { state: 'closed' });
142
+ return { ok: true, id: input.id, carried };
143
+ });
144
+ }
145
+ //# sourceMappingURL=sprint-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint-lifecycle.js","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/flow/domain/sprint-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Ctx, FnSpec } from '@ketvietlab/ketjs';
2
+ export declare function boardScopeHandler(ctx: Ctx): Promise<{
3
+ projectId: unknown;
4
+ }>;
5
+ export declare function boardRememberHandler(ctx: Ctx, args: Record<string, unknown>): Promise<import("../domain/command.ts").FlowResult>;
6
+ export declare const boardFunctions: Record<string, FnSpec>;
7
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/flow/functions/board.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAMpD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG;;GAS/C;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sDAejF;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuBjD,CAAA"}