@ketvietlab/ketsuite 0.1.2 → 0.1.3

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 (2590) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -1
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +59 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/deployment.d.ts +5 -0
  8. package/dist/deployment.d.ts.map +1 -0
  9. package/dist/deployment.js +152 -0
  10. package/dist/deployment.js.map +1 -0
  11. package/dist/development.d.ts +8 -0
  12. package/dist/development.d.ts.map +1 -0
  13. package/dist/development.js +40 -0
  14. package/dist/development.js.map +1 -0
  15. package/dist/index.d.ts +77 -6
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +66 -6
  18. package/dist/index.js.map +1 -1
  19. package/dist/modules/account/analytics.d.ts +32 -0
  20. package/dist/modules/account/analytics.d.ts.map +1 -0
  21. package/dist/modules/account/analytics.js +457 -0
  22. package/dist/modules/account/analytics.js.map +1 -0
  23. package/dist/modules/account/assets-costing.d.ts +4 -0
  24. package/dist/modules/account/assets-costing.d.ts.map +1 -0
  25. package/dist/modules/account/assets-costing.js +1134 -0
  26. package/dist/modules/account/assets-costing.js.map +1 -0
  27. package/dist/modules/account/audit.d.ts +3 -0
  28. package/dist/modules/account/audit.d.ts.map +1 -0
  29. package/dist/modules/account/audit.js +14 -0
  30. package/dist/modules/account/audit.js.map +1 -0
  31. package/dist/modules/account/books.d.ts +4 -0
  32. package/dist/modules/account/books.d.ts.map +1 -0
  33. package/dist/modules/account/books.js +150 -0
  34. package/dist/modules/account/books.js.map +1 -0
  35. package/dist/modules/account/cash-receivables.d.ts +3 -0
  36. package/dist/modules/account/cash-receivables.d.ts.map +1 -0
  37. package/dist/modules/account/cash-receivables.js +1087 -0
  38. package/dist/modules/account/cash-receivables.js.map +1 -0
  39. package/dist/modules/account/close.d.ts +4 -0
  40. package/dist/modules/account/close.d.ts.map +1 -0
  41. package/dist/modules/account/close.js +343 -0
  42. package/dist/modules/account/close.js.map +1 -0
  43. package/dist/modules/account/date.d.ts +21 -0
  44. package/dist/modules/account/date.d.ts.map +1 -0
  45. package/dist/modules/account/date.js +70 -0
  46. package/dist/modules/account/date.js.map +1 -0
  47. package/dist/modules/account/functions.d.ts +131 -3
  48. package/dist/modules/account/functions.d.ts.map +1 -1
  49. package/dist/modules/account/functions.js +2570 -389
  50. package/dist/modules/account/functions.js.map +1 -1
  51. package/dist/modules/account/index.d.ts +1 -2
  52. package/dist/modules/account/index.d.ts.map +1 -1
  53. package/dist/modules/account/index.js +403 -8
  54. package/dist/modules/account/index.js.map +1 -1
  55. package/dist/modules/account/models.d.ts.map +1 -1
  56. package/dist/modules/account/models.js +748 -0
  57. package/dist/modules/account/models.js.map +1 -1
  58. package/dist/modules/account/money.d.ts +60 -0
  59. package/dist/modules/account/money.d.ts.map +1 -0
  60. package/dist/modules/account/money.js +237 -0
  61. package/dist/modules/account/money.js.map +1 -0
  62. package/dist/modules/account/open-items.d.ts +3 -0
  63. package/dist/modules/account/open-items.d.ts.map +1 -0
  64. package/dist/modules/account/open-items.js +390 -0
  65. package/dist/modules/account/open-items.js.map +1 -0
  66. package/dist/modules/account/opening.d.ts +3 -0
  67. package/dist/modules/account/opening.d.ts.map +1 -0
  68. package/dist/modules/account/opening.js +323 -0
  69. package/dist/modules/account/opening.js.map +1 -0
  70. package/dist/modules/account/period.d.ts +21 -0
  71. package/dist/modules/account/period.d.ts.map +1 -0
  72. package/dist/modules/account/period.js +155 -0
  73. package/dist/modules/account/period.js.map +1 -0
  74. package/dist/modules/account/relations.d.ts.map +1 -1
  75. package/dist/modules/account/relations.js +46 -0
  76. package/dist/modules/account/relations.js.map +1 -1
  77. package/dist/modules/account/reports.d.ts +4 -0
  78. package/dist/modules/account/reports.d.ts.map +1 -0
  79. package/dist/modules/account/reports.js +125 -0
  80. package/dist/modules/account/reports.js.map +1 -0
  81. package/dist/modules/account/setup.d.ts +3 -1
  82. package/dist/modules/account/setup.d.ts.map +1 -1
  83. package/dist/modules/account/setup.js +45 -160
  84. package/dist/modules/account/setup.js.map +1 -1
  85. package/dist/modules/account_activity_backend/index.d.ts.map +1 -1
  86. package/dist/modules/account_activity_backend/index.js +0 -1
  87. package/dist/modules/account_activity_backend/index.js.map +1 -1
  88. package/dist/modules/account_backend/index.js +3339 -494
  89. package/dist/modules/account_backend/index.js.map +1 -1
  90. package/dist/modules/account_backend/overview.d.ts +92 -0
  91. package/dist/modules/account_backend/overview.d.ts.map +1 -0
  92. package/dist/modules/account_backend/overview.js +257 -0
  93. package/dist/modules/account_backend/overview.js.map +1 -0
  94. package/dist/modules/account_backend/relation-control.d.ts +48 -0
  95. package/dist/modules/account_backend/relation-control.d.ts.map +1 -0
  96. package/dist/modules/account_backend/relation-control.js +67 -0
  97. package/dist/modules/account_backend/relation-control.js.map +1 -0
  98. package/dist/modules/account_backend/screens/account-defaults.d.ts +28 -0
  99. package/dist/modules/account_backend/screens/account-defaults.d.ts.map +1 -0
  100. package/dist/modules/account_backend/screens/account-defaults.js +60 -0
  101. package/dist/modules/account_backend/screens/account-defaults.js.map +1 -0
  102. package/dist/modules/account_backend/screens/account-form.d.ts +16 -0
  103. package/dist/modules/account_backend/screens/account-form.d.ts.map +1 -0
  104. package/dist/modules/account_backend/screens/account-form.js +53 -0
  105. package/dist/modules/account_backend/screens/account-form.js.map +1 -0
  106. package/dist/modules/account_backend/screens/accounting-books.d.ts +15 -0
  107. package/dist/modules/account_backend/screens/accounting-books.d.ts.map +1 -0
  108. package/dist/modules/account_backend/screens/accounting-books.js +86 -0
  109. package/dist/modules/account_backend/screens/accounting-books.js.map +1 -0
  110. package/dist/modules/account_backend/screens/accounts-list.d.ts +50 -0
  111. package/dist/modules/account_backend/screens/accounts-list.d.ts.map +1 -0
  112. package/dist/modules/account_backend/screens/accounts-list.js +66 -0
  113. package/dist/modules/account_backend/screens/accounts-list.js.map +1 -0
  114. package/dist/modules/account_backend/screens/customer-invoice-form.d.ts +13 -0
  115. package/dist/modules/account_backend/screens/customer-invoice-form.d.ts.map +1 -0
  116. package/dist/modules/account_backend/screens/customer-invoice-form.js +20 -0
  117. package/dist/modules/account_backend/screens/customer-invoice-form.js.map +1 -0
  118. package/dist/modules/account_backend/screens/customer-invoices-list.d.ts +62 -0
  119. package/dist/modules/account_backend/screens/customer-invoices-list.d.ts.map +1 -0
  120. package/dist/modules/account_backend/screens/customer-invoices-list.js +82 -0
  121. package/dist/modules/account_backend/screens/customer-invoices-list.js.map +1 -0
  122. package/dist/modules/account_backend/screens/general-ledger.d.ts +24 -0
  123. package/dist/modules/account_backend/screens/general-ledger.d.ts.map +1 -0
  124. package/dist/modules/account_backend/screens/general-ledger.js +73 -0
  125. package/dist/modules/account_backend/screens/general-ledger.js.map +1 -0
  126. package/dist/modules/account_backend/screens/index.d.ts +27 -0
  127. package/dist/modules/account_backend/screens/index.d.ts.map +1 -0
  128. package/dist/modules/account_backend/screens/index.js +27 -0
  129. package/dist/modules/account_backend/screens/index.js.map +1 -0
  130. package/dist/modules/account_backend/screens/journal-entries-list.d.ts +48 -0
  131. package/dist/modules/account_backend/screens/journal-entries-list.d.ts.map +1 -0
  132. package/dist/modules/account_backend/screens/journal-entries-list.js +58 -0
  133. package/dist/modules/account_backend/screens/journal-entries-list.js.map +1 -0
  134. package/dist/modules/account_backend/screens/journal-entry-create.d.ts +14 -0
  135. package/dist/modules/account_backend/screens/journal-entry-create.d.ts.map +1 -0
  136. package/dist/modules/account_backend/screens/journal-entry-create.js +41 -0
  137. package/dist/modules/account_backend/screens/journal-entry-create.js.map +1 -0
  138. package/dist/modules/account_backend/screens/journal-form.d.ts +15 -0
  139. package/dist/modules/account_backend/screens/journal-form.d.ts.map +1 -0
  140. package/dist/modules/account_backend/screens/journal-form.js +53 -0
  141. package/dist/modules/account_backend/screens/journal-form.js.map +1 -0
  142. package/dist/modules/account_backend/screens/journals-list.d.ts +51 -0
  143. package/dist/modules/account_backend/screens/journals-list.d.ts.map +1 -0
  144. package/dist/modules/account_backend/screens/journals-list.js +70 -0
  145. package/dist/modules/account_backend/screens/journals-list.js.map +1 -0
  146. package/dist/modules/account_backend/screens/move-detail.d.ts +26 -0
  147. package/dist/modules/account_backend/screens/move-detail.d.ts.map +1 -0
  148. package/dist/modules/account_backend/screens/move-detail.js +130 -0
  149. package/dist/modules/account_backend/screens/move-detail.js.map +1 -0
  150. package/dist/modules/account_backend/screens/opening-balances.d.ts +28 -0
  151. package/dist/modules/account_backend/screens/opening-balances.d.ts.map +1 -0
  152. package/dist/modules/account_backend/screens/opening-balances.js +96 -0
  153. package/dist/modules/account_backend/screens/opening-balances.js.map +1 -0
  154. package/dist/modules/account_backend/screens/overview.d.ts +62 -0
  155. package/dist/modules/account_backend/screens/overview.d.ts.map +1 -0
  156. package/dist/modules/account_backend/screens/overview.js +215 -0
  157. package/dist/modules/account_backend/screens/overview.js.map +1 -0
  158. package/dist/modules/account_backend/screens/partner-statement.d.ts +26 -0
  159. package/dist/modules/account_backend/screens/partner-statement.d.ts.map +1 -0
  160. package/dist/modules/account_backend/screens/partner-statement.js +82 -0
  161. package/dist/modules/account_backend/screens/partner-statement.js.map +1 -0
  162. package/dist/modules/account_backend/screens/payment-form.d.ts +14 -0
  163. package/dist/modules/account_backend/screens/payment-form.d.ts.map +1 -0
  164. package/dist/modules/account_backend/screens/payment-form.js +21 -0
  165. package/dist/modules/account_backend/screens/payment-form.js.map +1 -0
  166. package/dist/modules/account_backend/screens/payment-term-form.d.ts +25 -0
  167. package/dist/modules/account_backend/screens/payment-term-form.d.ts.map +1 -0
  168. package/dist/modules/account_backend/screens/payment-term-form.js +96 -0
  169. package/dist/modules/account_backend/screens/payment-term-form.js.map +1 -0
  170. package/dist/modules/account_backend/screens/payment-terms-list.d.ts +23 -0
  171. package/dist/modules/account_backend/screens/payment-terms-list.d.ts.map +1 -0
  172. package/dist/modules/account_backend/screens/payment-terms-list.js +104 -0
  173. package/dist/modules/account_backend/screens/payment-terms-list.js.map +1 -0
  174. package/dist/modules/account_backend/screens/payments-list.d.ts +62 -0
  175. package/dist/modules/account_backend/screens/payments-list.d.ts.map +1 -0
  176. package/dist/modules/account_backend/screens/payments-list.js +71 -0
  177. package/dist/modules/account_backend/screens/payments-list.js.map +1 -0
  178. package/dist/modules/account_backend/screens/period-closes.d.ts +21 -0
  179. package/dist/modules/account_backend/screens/period-closes.d.ts.map +1 -0
  180. package/dist/modules/account_backend/screens/period-closes.js +123 -0
  181. package/dist/modules/account_backend/screens/period-closes.js.map +1 -0
  182. package/dist/modules/account_backend/screens/shared.d.ts +16 -0
  183. package/dist/modules/account_backend/screens/shared.d.ts.map +1 -0
  184. package/dist/modules/account_backend/screens/shared.js +15 -0
  185. package/dist/modules/account_backend/screens/shared.js.map +1 -0
  186. package/dist/modules/account_backend/screens/tax-form.d.ts +14 -0
  187. package/dist/modules/account_backend/screens/tax-form.d.ts.map +1 -0
  188. package/dist/modules/account_backend/screens/tax-form.js +25 -0
  189. package/dist/modules/account_backend/screens/tax-form.js.map +1 -0
  190. package/dist/modules/account_backend/screens/taxes-list.d.ts +55 -0
  191. package/dist/modules/account_backend/screens/taxes-list.d.ts.map +1 -0
  192. package/dist/modules/account_backend/screens/taxes-list.js +83 -0
  193. package/dist/modules/account_backend/screens/taxes-list.js.map +1 -0
  194. package/dist/modules/account_backend/screens/trial-balance.d.ts +19 -0
  195. package/dist/modules/account_backend/screens/trial-balance.d.ts.map +1 -0
  196. package/dist/modules/account_backend/screens/trial-balance.js +75 -0
  197. package/dist/modules/account_backend/screens/trial-balance.js.map +1 -0
  198. package/dist/modules/account_backend/screens/vendor-bill-form.d.ts +13 -0
  199. package/dist/modules/account_backend/screens/vendor-bill-form.d.ts.map +1 -0
  200. package/dist/modules/account_backend/screens/vendor-bill-form.js +20 -0
  201. package/dist/modules/account_backend/screens/vendor-bill-form.js.map +1 -0
  202. package/dist/modules/account_backend/screens/vendor-bills-list.d.ts +62 -0
  203. package/dist/modules/account_backend/screens/vendor-bills-list.d.ts.map +1 -0
  204. package/dist/modules/account_backend/screens/vendor-bills-list.js +84 -0
  205. package/dist/modules/account_backend/screens/vendor-bills-list.js.map +1 -0
  206. package/dist/modules/account_mail_backend/index.d.ts.map +1 -1
  207. package/dist/modules/account_mail_backend/index.js +0 -1
  208. package/dist/modules/account_mail_backend/index.js.map +1 -1
  209. package/dist/modules/account_partner/index.js +0 -2
  210. package/dist/modules/account_partner/index.js.map +1 -1
  211. package/dist/modules/account_partner_backend/index.d.ts +1 -1
  212. package/dist/modules/account_partner_backend/index.d.ts.map +1 -1
  213. package/dist/modules/account_partner_backend/index.js +2 -3
  214. package/dist/modules/account_partner_backend/index.js.map +1 -1
  215. package/dist/modules/account_partner_backend/routes.d.ts.map +1 -1
  216. package/dist/modules/account_partner_backend/routes.js +19 -25
  217. package/dist/modules/account_partner_backend/routes.js.map +1 -1
  218. package/dist/modules/account_partner_backend/screens/accounting-terms.d.ts +20 -0
  219. package/dist/modules/account_partner_backend/screens/accounting-terms.d.ts.map +1 -0
  220. package/dist/modules/account_partner_backend/screens/accounting-terms.js +63 -0
  221. package/dist/modules/account_partner_backend/screens/accounting-terms.js.map +1 -0
  222. package/dist/modules/account_partner_backend/screens/index.d.ts +2 -0
  223. package/dist/modules/account_partner_backend/screens/index.d.ts.map +1 -0
  224. package/dist/modules/account_partner_backend/screens/index.js +2 -0
  225. package/dist/modules/account_partner_backend/screens/index.js.map +1 -0
  226. package/dist/modules/account_staff_channel/channel-routes.d.ts +2 -0
  227. package/dist/modules/account_staff_channel/channel-routes.d.ts.map +1 -0
  228. package/dist/modules/account_staff_channel/channel-routes.js +787 -0
  229. package/dist/modules/account_staff_channel/channel-routes.js.map +1 -0
  230. package/dist/modules/account_staff_channel/functions.d.ts.map +1 -0
  231. package/dist/modules/account_staff_channel/functions.js +143 -0
  232. package/dist/modules/account_staff_channel/functions.js.map +1 -0
  233. package/dist/modules/account_staff_channel/index.d.ts +5 -0
  234. package/dist/modules/account_staff_channel/index.d.ts.map +1 -0
  235. package/dist/modules/account_staff_channel/index.js +42 -0
  236. package/dist/modules/account_staff_channel/index.js.map +1 -0
  237. package/dist/modules/account_staff_channel/models.d.ts.map +1 -0
  238. package/dist/modules/account_staff_channel/models.js +30 -0
  239. package/dist/modules/account_staff_channel/models.js.map +1 -0
  240. package/dist/modules/activity/index.d.ts.map +1 -1
  241. package/dist/modules/activity/index.js +0 -1
  242. package/dist/modules/activity/index.js.map +1 -1
  243. package/dist/modules/activity_backend/index.d.ts +1 -1
  244. package/dist/modules/activity_backend/index.d.ts.map +1 -1
  245. package/dist/modules/activity_backend/index.js +3 -12
  246. package/dist/modules/activity_backend/index.js.map +1 -1
  247. package/dist/modules/activity_backend/routes.d.ts.map +1 -1
  248. package/dist/modules/activity_backend/routes.js +36 -22
  249. package/dist/modules/activity_backend/routes.js.map +1 -1
  250. package/dist/modules/activity_backend/screens/activities-list.d.ts +15 -0
  251. package/dist/modules/activity_backend/screens/activities-list.d.ts.map +1 -0
  252. package/dist/modules/activity_backend/screens/activities-list.js +40 -0
  253. package/dist/modules/activity_backend/screens/activities-list.js.map +1 -0
  254. package/dist/modules/activity_backend/screens/index.d.ts +2 -0
  255. package/dist/modules/activity_backend/screens/index.d.ts.map +1 -0
  256. package/dist/modules/activity_backend/screens/index.js +2 -0
  257. package/dist/modules/activity_backend/screens/index.js.map +1 -0
  258. package/dist/modules/address/data/VN/NOTICE.md +1 -1
  259. package/dist/modules/address/index.d.ts.map +1 -1
  260. package/dist/modules/address/index.js +0 -1
  261. package/dist/modules/address/index.js.map +1 -1
  262. package/dist/modules/address_backend/index.d.ts +1 -1
  263. package/dist/modules/address_backend/index.d.ts.map +1 -1
  264. package/dist/modules/address_backend/index.js +1 -3
  265. package/dist/modules/address_backend/index.js.map +1 -1
  266. package/dist/modules/address_backend/routes.d.ts.map +1 -1
  267. package/dist/modules/address_backend/routes.js +20 -27
  268. package/dist/modules/address_backend/routes.js.map +1 -1
  269. package/dist/modules/address_backend/screens/catalogs-list.d.ts +14 -0
  270. package/dist/modules/address_backend/screens/catalogs-list.d.ts.map +1 -0
  271. package/dist/modules/address_backend/screens/catalogs-list.js +38 -0
  272. package/dist/modules/address_backend/screens/catalogs-list.js.map +1 -0
  273. package/dist/modules/address_backend/screens/country-browser.d.ts +12 -0
  274. package/dist/modules/address_backend/screens/country-browser.d.ts.map +1 -0
  275. package/dist/modules/address_backend/screens/country-browser.js +74 -0
  276. package/dist/modules/address_backend/screens/country-browser.js.map +1 -0
  277. package/dist/modules/address_backend/screens/index.d.ts +4 -0
  278. package/dist/modules/address_backend/screens/index.d.ts.map +1 -0
  279. package/dist/modules/address_backend/screens/index.js +3 -0
  280. package/dist/modules/address_backend/screens/index.js.map +1 -0
  281. package/dist/modules/address_backend/screens/types.d.ts +20 -0
  282. package/dist/modules/address_backend/screens/types.d.ts.map +1 -0
  283. package/dist/modules/address_backend/screens/types.js.map +1 -0
  284. package/dist/modules/attendance/channel-routes.d.ts +2 -0
  285. package/dist/modules/attendance/channel-routes.d.ts.map +1 -0
  286. package/dist/modules/attendance/channel-routes.js +234 -0
  287. package/dist/modules/attendance/channel-routes.js.map +1 -0
  288. package/dist/modules/attendance/functions.d.ts.map +1 -1
  289. package/dist/modules/attendance/functions.js +171 -22
  290. package/dist/modules/attendance/functions.js.map +1 -1
  291. package/dist/modules/attendance/index.d.ts.map +1 -1
  292. package/dist/modules/attendance/index.js +4 -2
  293. package/dist/modules/attendance/index.js.map +1 -1
  294. package/dist/modules/attendance/messages.d.ts +6 -0
  295. package/dist/modules/attendance/messages.d.ts.map +1 -1
  296. package/dist/modules/attendance/messages.js +6 -0
  297. package/dist/modules/attendance/messages.js.map +1 -1
  298. package/dist/modules/attendance/models.d.ts.map +1 -1
  299. package/dist/modules/attendance/models.js +1 -0
  300. package/dist/modules/attendance/models.js.map +1 -1
  301. package/dist/modules/attendance_backend/index.d.ts +3 -1
  302. package/dist/modules/attendance_backend/index.d.ts.map +1 -1
  303. package/dist/modules/attendance_backend/index.js +65 -4
  304. package/dist/modules/attendance_backend/index.js.map +1 -1
  305. package/dist/modules/attendance_backend/routes.d.ts.map +1 -1
  306. package/dist/modules/attendance_backend/routes.js +240 -53
  307. package/dist/modules/attendance_backend/routes.js.map +1 -1
  308. package/dist/modules/attendance_backend/screens/credentials.d.ts +32 -0
  309. package/dist/modules/attendance_backend/screens/credentials.d.ts.map +1 -0
  310. package/dist/modules/attendance_backend/screens/credentials.js +84 -0
  311. package/dist/modules/attendance_backend/screens/credentials.js.map +1 -0
  312. package/dist/modules/attendance_backend/screens/index.d.ts +4 -0
  313. package/dist/modules/attendance_backend/screens/index.d.ts.map +1 -0
  314. package/dist/modules/attendance_backend/screens/index.js +4 -0
  315. package/dist/modules/attendance_backend/screens/index.js.map +1 -0
  316. package/dist/modules/attendance_backend/screens/my-work.d.ts +35 -0
  317. package/dist/modules/attendance_backend/screens/my-work.d.ts.map +1 -0
  318. package/dist/modules/attendance_backend/screens/my-work.js +189 -0
  319. package/dist/modules/attendance_backend/screens/my-work.js.map +1 -0
  320. package/dist/modules/attendance_backend/screens/period.d.ts +22 -0
  321. package/dist/modules/attendance_backend/screens/period.d.ts.map +1 -0
  322. package/dist/modules/attendance_backend/screens/period.js +85 -0
  323. package/dist/modules/attendance_backend/screens/period.js.map +1 -0
  324. package/dist/modules/attendance_backend/screens.d.ts +0 -4
  325. package/dist/modules/attendance_backend/screens.d.ts.map +1 -1
  326. package/dist/modules/attendance_backend/screens.js +1 -209
  327. package/dist/modules/attendance_backend/screens.js.map +1 -1
  328. package/dist/modules/backend/catalogue.d.ts.map +1 -1
  329. package/dist/modules/backend/catalogue.js +53 -115
  330. package/dist/modules/backend/catalogue.js.map +1 -1
  331. package/dist/modules/backend/chart.d.ts +42 -0
  332. package/dist/modules/backend/chart.d.ts.map +1 -0
  333. package/dist/modules/backend/chart.js +39 -0
  334. package/dist/modules/backend/chart.js.map +1 -0
  335. package/dist/modules/backend/design/HANDOFF.md +118 -38
  336. package/dist/modules/backend/design/auth.css +463 -0
  337. package/dist/modules/backend/design/brand/logo-dark.png +0 -0
  338. package/dist/modules/backend/design/brand/logo-light.png +0 -0
  339. package/dist/modules/backend/design/charts.css +229 -0
  340. package/dist/modules/backend/design/client/chart.d.mts +31 -0
  341. package/dist/modules/backend/design/client/chart.d.mts.map +1 -0
  342. package/dist/modules/backend/design/client/chart.mjs +23 -0
  343. package/dist/modules/backend/design/client/chart.mjs.map +7 -0
  344. package/dist/modules/backend/design/client/relation-select.d.mts +6 -1
  345. package/dist/modules/backend/design/client/relation-select.d.mts.map +1 -1
  346. package/dist/modules/backend/design/client/relation-select.mjs +2 -7
  347. package/dist/modules/backend/design/client/relation-select.mjs.map +7 -1
  348. package/dist/modules/backend/design/client/table-selection.d.mts +7 -0
  349. package/dist/modules/backend/design/client/table-selection.d.mts.map +1 -0
  350. package/dist/modules/backend/design/client/table-selection.mjs +2 -0
  351. package/dist/modules/backend/design/client/table-selection.mjs.map +7 -0
  352. package/dist/modules/backend/design/content.css +766 -0
  353. package/dist/modules/backend/design/controls.css +451 -0
  354. package/dist/modules/backend/design/design-system.css +2 -0
  355. package/dist/modules/backend/design/forms.css +1134 -0
  356. package/dist/modules/backend/design/foundation.css +423 -0
  357. package/dist/modules/backend/design/lists.css +1462 -0
  358. package/dist/modules/backend/design/record.css +526 -0
  359. package/dist/modules/backend/design/responsive.css +331 -0
  360. package/dist/modules/backend/design/tokens.css +317 -92
  361. package/dist/modules/backend/index.d.ts +12 -5
  362. package/dist/modules/backend/index.d.ts.map +1 -1
  363. package/dist/modules/backend/index.js +32 -15
  364. package/dist/modules/backend/index.js.map +1 -1
  365. package/dist/modules/backend/islands.d.ts.map +1 -1
  366. package/dist/modules/backend/islands.js +22 -4
  367. package/dist/modules/backend/islands.js.map +1 -1
  368. package/dist/modules/backend/joints.d.ts +1 -1
  369. package/dist/modules/backend/joints.d.ts.map +1 -1
  370. package/dist/modules/backend/joints.js +14 -6
  371. package/dist/modules/backend/joints.js.map +1 -1
  372. package/dist/modules/backend/list-search.d.ts +33 -0
  373. package/dist/modules/backend/list-search.d.ts.map +1 -0
  374. package/dist/modules/backend/list-search.js +232 -0
  375. package/dist/modules/backend/list-search.js.map +1 -0
  376. package/dist/modules/backend/menus.d.ts.map +1 -1
  377. package/dist/modules/backend/menus.js +3 -12
  378. package/dist/modules/backend/menus.js.map +1 -1
  379. package/dist/modules/backend/messages.d.ts +1 -1
  380. package/dist/modules/backend/messages.d.ts.map +1 -1
  381. package/dist/modules/backend/messages.js +48 -35
  382. package/dist/modules/backend/messages.js.map +1 -1
  383. package/dist/modules/backend/paging.d.ts +1 -1
  384. package/dist/modules/backend/paging.d.ts.map +1 -1
  385. package/dist/modules/backend/paging.js +1 -1
  386. package/dist/modules/backend/paging.js.map +1 -1
  387. package/dist/modules/backend/relation-select.d.ts +2 -57
  388. package/dist/modules/backend/relation-select.d.ts.map +1 -1
  389. package/dist/modules/backend/relation-select.js +2 -0
  390. package/dist/modules/backend/relation-select.js.map +1 -1
  391. package/dist/modules/backend/routes.d.ts +1 -8
  392. package/dist/modules/backend/routes.d.ts.map +1 -1
  393. package/dist/modules/backend/routes.js +36 -111
  394. package/dist/modules/backend/routes.js.map +1 -1
  395. package/dist/modules/backend/screen.d.ts +130 -0
  396. package/dist/modules/backend/screen.d.ts.map +1 -0
  397. package/dist/modules/backend/screen.js +205 -0
  398. package/dist/modules/backend/screen.js.map +1 -0
  399. package/dist/modules/backend/screens.d.ts +11 -14
  400. package/dist/modules/backend/screens.d.ts.map +1 -1
  401. package/dist/modules/backend/screens.js +13 -70
  402. package/dist/modules/backend/screens.js.map +1 -1
  403. package/dist/modules/business_report_staff_channel/channel-routes.d.ts +2 -0
  404. package/dist/modules/business_report_staff_channel/channel-routes.d.ts.map +1 -0
  405. package/dist/modules/business_report_staff_channel/channel-routes.js +438 -0
  406. package/dist/modules/business_report_staff_channel/channel-routes.js.map +1 -0
  407. package/dist/modules/business_report_staff_channel/index.d.ts +5 -0
  408. package/dist/modules/business_report_staff_channel/index.d.ts.map +1 -0
  409. package/dist/modules/business_report_staff_channel/index.js +18 -0
  410. package/dist/modules/business_report_staff_channel/index.js.map +1 -0
  411. package/dist/modules/calendar/index.d.ts.map +1 -1
  412. package/dist/modules/calendar/index.js +0 -1
  413. package/dist/modules/calendar/index.js.map +1 -1
  414. package/dist/modules/calendar/recurrence.d.ts.map +1 -1
  415. package/dist/modules/calendar/recurrence.js +3 -11
  416. package/dist/modules/calendar/recurrence.js.map +1 -1
  417. package/dist/modules/calendar_activity/index.d.ts.map +1 -1
  418. package/dist/modules/calendar_activity/index.js +0 -2
  419. package/dist/modules/calendar_activity/index.js.map +1 -1
  420. package/dist/modules/calendar_backend/index.d.ts +1 -1
  421. package/dist/modules/calendar_backend/index.d.ts.map +1 -1
  422. package/dist/modules/calendar_backend/index.js +1 -3
  423. package/dist/modules/calendar_backend/index.js.map +1 -1
  424. package/dist/modules/calendar_backend/routes.d.ts.map +1 -1
  425. package/dist/modules/calendar_backend/routes.js +10 -22
  426. package/dist/modules/calendar_backend/routes.js.map +1 -1
  427. package/dist/modules/calendar_backend/screens/calendar.d.ts +5 -0
  428. package/dist/modules/calendar_backend/screens/calendar.d.ts.map +1 -0
  429. package/dist/modules/calendar_backend/screens/calendar.js +10 -0
  430. package/dist/modules/calendar_backend/screens/calendar.js.map +1 -0
  431. package/dist/modules/calendar_backend/screens/index.d.ts +2 -0
  432. package/dist/modules/calendar_backend/screens/index.d.ts.map +1 -0
  433. package/dist/modules/calendar_backend/screens/index.js +2 -0
  434. package/dist/modules/calendar_backend/screens/index.js.map +1 -0
  435. package/dist/modules/calendar_mail_transport/index.d.ts.map +1 -1
  436. package/dist/modules/calendar_mail_transport/index.js +0 -2
  437. package/dist/modules/calendar_mail_transport/index.js.map +1 -1
  438. package/dist/modules/channel_api/core.d.ts +253 -0
  439. package/dist/modules/channel_api/core.d.ts.map +1 -0
  440. package/dist/modules/channel_api/core.js +587 -0
  441. package/dist/modules/channel_api/core.js.map +1 -0
  442. package/dist/modules/channel_api/customer.d.ts +21 -0
  443. package/dist/modules/channel_api/customer.d.ts.map +1 -0
  444. package/dist/modules/channel_api/customer.js +368 -0
  445. package/dist/modules/channel_api/customer.js.map +1 -0
  446. package/dist/modules/channel_api/index.d.ts +6 -0
  447. package/dist/modules/channel_api/index.d.ts.map +1 -0
  448. package/dist/modules/channel_api/index.js +66 -0
  449. package/dist/modules/channel_api/index.js.map +1 -0
  450. package/dist/modules/channel_api/openapi.d.ts +17 -0
  451. package/dist/modules/channel_api/openapi.d.ts.map +1 -0
  452. package/dist/modules/channel_api/openapi.js +105 -0
  453. package/dist/modules/channel_api/openapi.js.map +1 -0
  454. package/dist/modules/channel_api/staff.d.ts +7 -0
  455. package/dist/modules/channel_api/staff.d.ts.map +1 -0
  456. package/dist/modules/channel_api/staff.js +209 -0
  457. package/dist/modules/channel_api/staff.js.map +1 -0
  458. package/dist/modules/company/functions.d.ts.map +1 -1
  459. package/dist/modules/company/functions.js +93 -12
  460. package/dist/modules/company/functions.js.map +1 -1
  461. package/dist/modules/company/index.js +3 -3
  462. package/dist/modules/company/index.js.map +1 -1
  463. package/dist/modules/company/messages.d.ts +8 -0
  464. package/dist/modules/company/messages.d.ts.map +1 -1
  465. package/dist/modules/company/messages.js +8 -0
  466. package/dist/modules/company/messages.js.map +1 -1
  467. package/dist/modules/company/models.d.ts +2 -2
  468. package/dist/modules/company/models.d.ts.map +1 -1
  469. package/dist/modules/company/models.js +12 -2
  470. package/dist/modules/company/models.js.map +1 -1
  471. package/dist/modules/company_backend/index.d.ts +2 -1
  472. package/dist/modules/company_backend/index.d.ts.map +1 -1
  473. package/dist/modules/company_backend/index.js +25 -4
  474. package/dist/modules/company_backend/index.js.map +1 -1
  475. package/dist/modules/company_backend/routes.d.ts.map +1 -1
  476. package/dist/modules/company_backend/routes.js +314 -96
  477. package/dist/modules/company_backend/routes.js.map +1 -1
  478. package/dist/modules/company_backend/screens/branch-form.d.ts +18 -0
  479. package/dist/modules/company_backend/screens/branch-form.d.ts.map +1 -0
  480. package/dist/modules/company_backend/screens/branch-form.js +63 -0
  481. package/dist/modules/company_backend/screens/branch-form.js.map +1 -0
  482. package/dist/modules/company_backend/screens/companies-list.d.ts +18 -0
  483. package/dist/modules/company_backend/screens/companies-list.d.ts.map +1 -0
  484. package/dist/modules/company_backend/screens/companies-list.js +49 -0
  485. package/dist/modules/company_backend/screens/companies-list.js.map +1 -0
  486. package/dist/modules/company_backend/screens/company-form.d.ts +25 -0
  487. package/dist/modules/company_backend/screens/company-form.d.ts.map +1 -0
  488. package/dist/modules/company_backend/screens/company-form.js +159 -0
  489. package/dist/modules/company_backend/screens/company-form.js.map +1 -0
  490. package/dist/modules/company_backend/screens/context.d.ts +30 -0
  491. package/dist/modules/company_backend/screens/context.d.ts.map +1 -0
  492. package/dist/modules/company_backend/screens/context.js +48 -0
  493. package/dist/modules/company_backend/screens/context.js.map +1 -0
  494. package/dist/modules/company_backend/screens/hierarchy.d.ts +16 -0
  495. package/dist/modules/company_backend/screens/hierarchy.d.ts.map +1 -0
  496. package/dist/modules/company_backend/screens/hierarchy.js +41 -0
  497. package/dist/modules/company_backend/screens/hierarchy.js.map +1 -0
  498. package/dist/modules/company_backend/screens/index.d.ts +7 -0
  499. package/dist/modules/company_backend/screens/index.d.ts.map +1 -0
  500. package/dist/modules/company_backend/screens/index.js +6 -0
  501. package/dist/modules/company_backend/screens/index.js.map +1 -0
  502. package/dist/modules/company_backend/screens/types.d.ts +22 -0
  503. package/dist/modules/company_backend/screens/types.d.ts.map +1 -0
  504. package/dist/modules/company_backend/screens/types.js +2 -0
  505. package/dist/modules/company_backend/screens/types.js.map +1 -0
  506. package/dist/modules/crm/functions.d.ts +1 -1
  507. package/dist/modules/crm/functions.d.ts.map +1 -1
  508. package/dist/modules/crm/functions.js +534 -75
  509. package/dist/modules/crm/functions.js.map +1 -1
  510. package/dist/modules/crm/index.d.ts +2 -1
  511. package/dist/modules/crm/index.d.ts.map +1 -1
  512. package/dist/modules/crm/index.js +3 -4
  513. package/dist/modules/crm/index.js.map +1 -1
  514. package/dist/modules/crm/jobs.d.ts +10 -0
  515. package/dist/modules/crm/jobs.d.ts.map +1 -1
  516. package/dist/modules/crm/jobs.js +50 -1
  517. package/dist/modules/crm/jobs.js.map +1 -1
  518. package/dist/modules/crm/messages.d.ts +14 -1
  519. package/dist/modules/crm/messages.d.ts.map +1 -1
  520. package/dist/modules/crm/messages.js +26 -0
  521. package/dist/modules/crm/messages.js.map +1 -1
  522. package/dist/modules/crm/models.d.ts.map +1 -1
  523. package/dist/modules/crm/models.js +25 -0
  524. package/dist/modules/crm/models.js.map +1 -1
  525. package/dist/modules/crm/operations.d.ts +110 -1
  526. package/dist/modules/crm/operations.d.ts.map +1 -1
  527. package/dist/modules/crm/operations.js +612 -84
  528. package/dist/modules/crm/operations.js.map +1 -1
  529. package/dist/modules/crm_backend/client/crm-kanban-view.d.mts.map +1 -1
  530. package/dist/modules/crm_backend/client/crm-kanban-view.mjs +132 -32
  531. package/dist/modules/crm_backend/client/crm-kanban-view.mjs.map +1 -1
  532. package/dist/modules/crm_backend/client/crm.css +398 -63
  533. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  534. package/dist/modules/crm_backend/index.js +12 -4
  535. package/dist/modules/crm_backend/index.js.map +1 -1
  536. package/dist/modules/crm_backend/messages.d.ts +212 -0
  537. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  538. package/dist/modules/crm_backend/messages.js +212 -0
  539. package/dist/modules/crm_backend/messages.js.map +1 -1
  540. package/dist/modules/crm_backend/relation-control.d.ts +51 -0
  541. package/dist/modules/crm_backend/relation-control.d.ts.map +1 -0
  542. package/dist/modules/crm_backend/relation-control.js +107 -0
  543. package/dist/modules/crm_backend/relation-control.js.map +1 -0
  544. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  545. package/dist/modules/crm_backend/routes.js +1068 -260
  546. package/dist/modules/crm_backend/routes.js.map +1 -1
  547. package/dist/modules/crm_backend/screens/activity-planner.d.ts +22 -0
  548. package/dist/modules/crm_backend/screens/activity-planner.d.ts.map +1 -0
  549. package/dist/modules/crm_backend/screens/activity-planner.js +159 -0
  550. package/dist/modules/crm_backend/screens/activity-planner.js.map +1 -0
  551. package/dist/modules/crm_backend/screens/case-create.d.ts +15 -0
  552. package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -0
  553. package/dist/modules/crm_backend/screens/case-create.js +19 -0
  554. package/dist/modules/crm_backend/screens/case-create.js.map +1 -0
  555. package/dist/modules/crm_backend/screens/case-detail.d.ts +46 -0
  556. package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -0
  557. package/dist/modules/crm_backend/screens/case-detail.js +506 -0
  558. package/dist/modules/crm_backend/screens/case-detail.js.map +1 -0
  559. package/dist/modules/crm_backend/screens/cases-list.d.ts +16 -0
  560. package/dist/modules/crm_backend/screens/cases-list.d.ts.map +1 -0
  561. package/dist/modules/crm_backend/screens/cases-list.js +86 -0
  562. package/dist/modules/crm_backend/screens/cases-list.js.map +1 -0
  563. package/dist/modules/crm_backend/screens/configuration.d.ts +28 -0
  564. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -0
  565. package/dist/modules/crm_backend/screens/configuration.js +115 -0
  566. package/dist/modules/crm_backend/screens/configuration.js.map +1 -0
  567. package/dist/modules/crm_backend/screens/index.d.ts +14 -0
  568. package/dist/modules/crm_backend/screens/index.d.ts.map +1 -0
  569. package/dist/modules/crm_backend/screens/index.js +8 -0
  570. package/dist/modules/crm_backend/screens/index.js.map +1 -0
  571. package/dist/modules/crm_backend/screens/leaderboard.d.ts +12 -0
  572. package/dist/modules/crm_backend/screens/leaderboard.d.ts.map +1 -0
  573. package/dist/modules/crm_backend/screens/leaderboard.js +89 -0
  574. package/dist/modules/crm_backend/screens/leaderboard.js.map +1 -0
  575. package/dist/modules/crm_backend/screens/pipeline.d.ts +21 -0
  576. package/dist/modules/crm_backend/screens/pipeline.d.ts.map +1 -0
  577. package/dist/modules/crm_backend/screens/pipeline.js +22 -0
  578. package/dist/modules/crm_backend/screens/pipeline.js.map +1 -0
  579. package/dist/modules/crm_sale/index.d.ts.map +1 -1
  580. package/dist/modules/crm_sale/index.js +3 -4
  581. package/dist/modules/crm_sale/index.js.map +1 -1
  582. package/dist/modules/crm_sale/messages.d.ts +3 -1
  583. package/dist/modules/crm_sale/messages.d.ts.map +1 -1
  584. package/dist/modules/crm_sale/messages.js +4 -0
  585. package/dist/modules/crm_sale/messages.js.map +1 -1
  586. package/dist/modules/crm_sale/sale-functions.d.ts +8 -1
  587. package/dist/modules/crm_sale/sale-functions.d.ts.map +1 -1
  588. package/dist/modules/crm_sale/sale-functions.js +184 -55
  589. package/dist/modules/crm_sale/sale-functions.js.map +1 -1
  590. package/dist/modules/crm_staff_channel/channel-routes.d.ts +2 -0
  591. package/dist/modules/crm_staff_channel/channel-routes.d.ts.map +1 -0
  592. package/dist/modules/crm_staff_channel/channel-routes.js +788 -0
  593. package/dist/modules/crm_staff_channel/channel-routes.js.map +1 -0
  594. package/dist/modules/crm_staff_channel/index.d.ts +5 -0
  595. package/dist/modules/crm_staff_channel/index.d.ts.map +1 -0
  596. package/dist/modules/crm_staff_channel/index.js +30 -0
  597. package/dist/modules/crm_staff_channel/index.js.map +1 -0
  598. package/dist/modules/crm_website/functions.d.ts.map +1 -1
  599. package/dist/modules/crm_website/functions.js +89 -10
  600. package/dist/modules/crm_website/functions.js.map +1 -1
  601. package/dist/modules/crm_website/index.js +1 -2
  602. package/dist/modules/crm_website/index.js.map +1 -1
  603. package/dist/modules/crm_website/messages.d.ts +4 -1
  604. package/dist/modules/crm_website/messages.d.ts.map +1 -1
  605. package/dist/modules/crm_website/messages.js +6 -0
  606. package/dist/modules/crm_website/messages.js.map +1 -1
  607. package/dist/modules/crm_website/models.d.ts.map +1 -1
  608. package/dist/modules/crm_website/models.js +18 -0
  609. package/dist/modules/crm_website/models.js.map +1 -1
  610. package/dist/modules/crm_website/routes.d.ts.map +1 -1
  611. package/dist/modules/crm_website/routes.js +44 -12
  612. package/dist/modules/crm_website/routes.js.map +1 -1
  613. package/dist/modules/crm_website/screens.d.ts +7 -1
  614. package/dist/modules/crm_website/screens.d.ts.map +1 -1
  615. package/dist/modules/crm_website/screens.js +13 -8
  616. package/dist/modules/crm_website/screens.js.map +1 -1
  617. package/dist/modules/flow/functions.d.ts +3 -0
  618. package/dist/modules/flow/functions.d.ts.map +1 -0
  619. package/dist/modules/flow/functions.js +1876 -0
  620. package/dist/modules/flow/functions.js.map +1 -0
  621. package/dist/modules/flow/index.d.ts +12 -0
  622. package/dist/modules/flow/index.d.ts.map +1 -0
  623. package/dist/modules/flow/index.js +30 -0
  624. package/dist/modules/flow/index.js.map +1 -0
  625. package/dist/modules/flow/jobs.d.ts +3 -0
  626. package/dist/modules/flow/jobs.d.ts.map +1 -0
  627. package/dist/modules/flow/jobs.js +136 -0
  628. package/dist/modules/flow/jobs.js.map +1 -0
  629. package/dist/modules/flow/membership.d.ts +72 -0
  630. package/dist/modules/flow/membership.d.ts.map +1 -0
  631. package/dist/modules/flow/membership.js +176 -0
  632. package/dist/modules/flow/membership.js.map +1 -0
  633. package/dist/modules/flow/messages.d.ts +79 -0
  634. package/dist/modules/flow/messages.d.ts.map +1 -0
  635. package/dist/modules/flow/messages.js +152 -0
  636. package/dist/modules/flow/messages.js.map +1 -0
  637. package/dist/modules/flow/models.d.ts +3 -0
  638. package/dist/modules/flow/models.d.ts.map +1 -0
  639. package/dist/modules/flow/models.js +453 -0
  640. package/dist/modules/flow/models.js.map +1 -0
  641. package/dist/modules/flow/operations.d.ts +408 -0
  642. package/dist/modules/flow/operations.d.ts.map +1 -0
  643. package/dist/modules/flow/operations.js +1665 -0
  644. package/dist/modules/flow/operations.js.map +1 -0
  645. package/dist/modules/flow/pages.d.ts +146 -0
  646. package/dist/modules/flow/pages.d.ts.map +1 -0
  647. package/dist/modules/flow/pages.js +394 -0
  648. package/dist/modules/flow/pages.js.map +1 -0
  649. package/dist/modules/flow/projects.d.ts +41 -0
  650. package/dist/modules/flow/projects.d.ts.map +1 -0
  651. package/dist/modules/flow/projects.js +74 -0
  652. package/dist/modules/flow/projects.js.map +1 -0
  653. package/dist/modules/flow/search.d.ts +57 -0
  654. package/dist/modules/flow/search.d.ts.map +1 -0
  655. package/dist/modules/flow/search.js +110 -0
  656. package/dist/modules/flow/search.js.map +1 -0
  657. package/dist/modules/flow/types.d.ts +17 -0
  658. package/dist/modules/flow/types.d.ts.map +1 -0
  659. package/dist/modules/flow/types.js +13 -0
  660. package/dist/modules/flow/types.js.map +1 -0
  661. package/dist/modules/flow_backend/functions.d.ts +3 -0
  662. package/dist/modules/flow_backend/functions.d.ts.map +1 -0
  663. package/dist/modules/flow_backend/functions.js +162 -0
  664. package/dist/modules/flow_backend/functions.js.map +1 -0
  665. package/dist/modules/flow_backend/index.d.ts +3 -0
  666. package/dist/modules/flow_backend/index.d.ts.map +1 -0
  667. package/dist/modules/flow_backend/index.js +96 -0
  668. package/dist/modules/flow_backend/index.js.map +1 -0
  669. package/dist/modules/flow_backend/islands.d.ts +3 -0
  670. package/dist/modules/flow_backend/islands.d.ts.map +1 -0
  671. package/dist/modules/flow_backend/islands.js +31 -0
  672. package/dist/modules/flow_backend/islands.js.map +1 -0
  673. package/dist/modules/flow_backend/messages.d.ts +248 -0
  674. package/dist/modules/flow_backend/messages.d.ts.map +1 -0
  675. package/dist/modules/flow_backend/messages.js +470 -0
  676. package/dist/modules/flow_backend/messages.js.map +1 -0
  677. package/dist/modules/flow_backend/relation-control.d.ts +53 -0
  678. package/dist/modules/flow_backend/relation-control.d.ts.map +1 -0
  679. package/dist/modules/flow_backend/relation-control.js +106 -0
  680. package/dist/modules/flow_backend/relation-control.js.map +1 -0
  681. package/dist/modules/flow_backend/routes.d.ts +3 -0
  682. package/dist/modules/flow_backend/routes.d.ts.map +1 -0
  683. package/dist/modules/flow_backend/routes.js +2519 -0
  684. package/dist/modules/flow_backend/routes.js.map +1 -0
  685. package/dist/modules/flow_backend/screens/all-epics.d.ts +19 -0
  686. package/dist/modules/flow_backend/screens/all-epics.d.ts.map +1 -0
  687. package/dist/modules/flow_backend/screens/all-epics.js +59 -0
  688. package/dist/modules/flow_backend/screens/all-epics.js.map +1 -0
  689. package/dist/modules/flow_backend/screens/all-pages.d.ts +19 -0
  690. package/dist/modules/flow_backend/screens/all-pages.d.ts.map +1 -0
  691. package/dist/modules/flow_backend/screens/all-pages.js +65 -0
  692. package/dist/modules/flow_backend/screens/all-pages.js.map +1 -0
  693. package/dist/modules/flow_backend/screens/board.d.ts +5 -0
  694. package/dist/modules/flow_backend/screens/board.d.ts.map +1 -0
  695. package/dist/modules/flow_backend/screens/board.js +7 -0
  696. package/dist/modules/flow_backend/screens/board.js.map +1 -0
  697. package/dist/modules/flow_backend/screens/epic-detail.d.ts +22 -0
  698. package/dist/modules/flow_backend/screens/epic-detail.d.ts.map +1 -0
  699. package/dist/modules/flow_backend/screens/epic-detail.js +41 -0
  700. package/dist/modules/flow_backend/screens/epic-detail.js.map +1 -0
  701. package/dist/modules/flow_backend/screens/gantt.d.ts +21 -0
  702. package/dist/modules/flow_backend/screens/gantt.d.ts.map +1 -0
  703. package/dist/modules/flow_backend/screens/gantt.js +42 -0
  704. package/dist/modules/flow_backend/screens/gantt.js.map +1 -0
  705. package/dist/modules/flow_backend/screens/index.d.ts +29 -0
  706. package/dist/modules/flow_backend/screens/index.d.ts.map +1 -0
  707. package/dist/modules/flow_backend/screens/index.js +23 -0
  708. package/dist/modules/flow_backend/screens/index.js.map +1 -0
  709. package/dist/modules/flow_backend/screens/issue-detail.d.ts +38 -0
  710. package/dist/modules/flow_backend/screens/issue-detail.d.ts.map +1 -0
  711. package/dist/modules/flow_backend/screens/issue-detail.js +336 -0
  712. package/dist/modules/flow_backend/screens/issue-detail.js.map +1 -0
  713. package/dist/modules/flow_backend/screens/issues.d.ts +34 -0
  714. package/dist/modules/flow_backend/screens/issues.d.ts.map +1 -0
  715. package/dist/modules/flow_backend/screens/issues.js +118 -0
  716. package/dist/modules/flow_backend/screens/issues.js.map +1 -0
  717. package/dist/modules/flow_backend/screens/map.d.ts +13 -0
  718. package/dist/modules/flow_backend/screens/map.d.ts.map +1 -0
  719. package/dist/modules/flow_backend/screens/map.js +16 -0
  720. package/dist/modules/flow_backend/screens/map.js.map +1 -0
  721. package/dist/modules/flow_backend/screens/my-work.d.ts +42 -0
  722. package/dist/modules/flow_backend/screens/my-work.d.ts.map +1 -0
  723. package/dist/modules/flow_backend/screens/my-work.js +157 -0
  724. package/dist/modules/flow_backend/screens/my-work.js.map +1 -0
  725. package/dist/modules/flow_backend/screens/nav.d.ts +3 -0
  726. package/dist/modules/flow_backend/screens/nav.d.ts.map +1 -0
  727. package/dist/modules/flow_backend/screens/nav.js +79 -0
  728. package/dist/modules/flow_backend/screens/nav.js.map +1 -0
  729. package/dist/modules/flow_backend/screens/page-detail.d.ts +31 -0
  730. package/dist/modules/flow_backend/screens/page-detail.d.ts.map +1 -0
  731. package/dist/modules/flow_backend/screens/page-detail.js +113 -0
  732. package/dist/modules/flow_backend/screens/page-detail.js.map +1 -0
  733. package/dist/modules/flow_backend/screens/project-create.d.ts +26 -0
  734. package/dist/modules/flow_backend/screens/project-create.d.ts.map +1 -0
  735. package/dist/modules/flow_backend/screens/project-create.js +56 -0
  736. package/dist/modules/flow_backend/screens/project-create.js.map +1 -0
  737. package/dist/modules/flow_backend/screens/project-epics.d.ts +33 -0
  738. package/dist/modules/flow_backend/screens/project-epics.d.ts.map +1 -0
  739. package/dist/modules/flow_backend/screens/project-epics.js +90 -0
  740. package/dist/modules/flow_backend/screens/project-epics.js.map +1 -0
  741. package/dist/modules/flow_backend/screens/project-pages.d.ts +34 -0
  742. package/dist/modules/flow_backend/screens/project-pages.d.ts.map +1 -0
  743. package/dist/modules/flow_backend/screens/project-pages.js +66 -0
  744. package/dist/modules/flow_backend/screens/project-pages.js.map +1 -0
  745. package/dist/modules/flow_backend/screens/project-settings.d.ts +69 -0
  746. package/dist/modules/flow_backend/screens/project-settings.d.ts.map +1 -0
  747. package/dist/modules/flow_backend/screens/project-settings.js +248 -0
  748. package/dist/modules/flow_backend/screens/project-settings.js.map +1 -0
  749. package/dist/modules/flow_backend/screens/projects-list.d.ts +30 -0
  750. package/dist/modules/flow_backend/screens/projects-list.d.ts.map +1 -0
  751. package/dist/modules/flow_backend/screens/projects-list.js +121 -0
  752. package/dist/modules/flow_backend/screens/projects-list.js.map +1 -0
  753. package/dist/modules/flow_backend/screens/shared.d.ts +28 -0
  754. package/dist/modules/flow_backend/screens/shared.d.ts.map +1 -0
  755. package/dist/modules/flow_backend/screens/shared.js +46 -0
  756. package/dist/modules/flow_backend/screens/shared.js.map +1 -0
  757. package/dist/modules/flow_backend/screens/sprints.d.ts +33 -0
  758. package/dist/modules/flow_backend/screens/sprints.d.ts.map +1 -0
  759. package/dist/modules/flow_backend/screens/sprints.js +159 -0
  760. package/dist/modules/flow_backend/screens/sprints.js.map +1 -0
  761. package/dist/modules/flow_staff_channel/channel-routes.d.ts +2 -0
  762. package/dist/modules/flow_staff_channel/channel-routes.d.ts.map +1 -0
  763. package/dist/modules/flow_staff_channel/channel-routes.js +444 -0
  764. package/dist/modules/flow_staff_channel/channel-routes.js.map +1 -0
  765. package/dist/modules/flow_staff_channel/index.d.ts +5 -0
  766. package/dist/modules/flow_staff_channel/index.d.ts.map +1 -0
  767. package/dist/modules/flow_staff_channel/index.js +30 -0
  768. package/dist/modules/flow_staff_channel/index.js.map +1 -0
  769. package/dist/modules/hospitality_billing/functions.d.ts +18 -0
  770. package/dist/modules/hospitality_billing/functions.d.ts.map +1 -0
  771. package/dist/modules/hospitality_billing/functions.js +426 -0
  772. package/dist/modules/hospitality_billing/functions.js.map +1 -0
  773. package/dist/modules/hospitality_billing/index.d.ts +3 -0
  774. package/dist/modules/hospitality_billing/index.d.ts.map +1 -0
  775. package/dist/modules/hospitality_billing/index.js +25 -0
  776. package/dist/modules/hospitality_billing/index.js.map +1 -0
  777. package/dist/modules/hospitality_billing/jobs.d.ts +17 -0
  778. package/dist/modules/hospitality_billing/jobs.d.ts.map +1 -0
  779. package/dist/modules/hospitality_billing/jobs.js +83 -0
  780. package/dist/modules/hospitality_billing/jobs.js.map +1 -0
  781. package/dist/modules/hospitality_billing/menus.d.ts +9 -0
  782. package/dist/modules/hospitality_billing/menus.d.ts.map +1 -0
  783. package/dist/modules/hospitality_billing/menus.js +25 -0
  784. package/dist/modules/hospitality_billing/menus.js.map +1 -0
  785. package/dist/modules/hospitality_billing/messages.d.ts +3 -0
  786. package/dist/modules/hospitality_billing/messages.d.ts.map +1 -0
  787. package/dist/modules/hospitality_billing/messages.js +163 -0
  788. package/dist/modules/hospitality_billing/messages.js.map +1 -0
  789. package/dist/modules/hospitality_billing/models.d.ts +3 -0
  790. package/dist/modules/hospitality_billing/models.d.ts.map +1 -0
  791. package/dist/modules/hospitality_billing/models.js +65 -0
  792. package/dist/modules/hospitality_billing/models.js.map +1 -0
  793. package/dist/modules/hospitality_billing/routes.d.ts +3 -0
  794. package/dist/modules/hospitality_billing/routes.d.ts.map +1 -0
  795. package/dist/modules/hospitality_billing/routes.js +189 -0
  796. package/dist/modules/hospitality_billing/routes.js.map +1 -0
  797. package/dist/modules/hospitality_billing/screens/billing.d.ts +3 -0
  798. package/dist/modules/hospitality_billing/screens/billing.d.ts.map +1 -0
  799. package/dist/modules/hospitality_billing/screens/billing.js +20 -0
  800. package/dist/modules/hospitality_billing/screens/billing.js.map +1 -0
  801. package/dist/modules/hospitality_billing/screens/charge-rules.d.ts +12 -0
  802. package/dist/modules/hospitality_billing/screens/charge-rules.d.ts.map +1 -0
  803. package/dist/modules/hospitality_billing/screens/charge-rules.js +86 -0
  804. package/dist/modules/hospitality_billing/screens/charge-rules.js.map +1 -0
  805. package/dist/modules/hospitality_billing/screens/index.d.ts +4 -0
  806. package/dist/modules/hospitality_billing/screens/index.d.ts.map +1 -0
  807. package/dist/modules/hospitality_billing/screens/index.js +4 -0
  808. package/dist/modules/hospitality_billing/screens/index.js.map +1 -0
  809. package/dist/modules/hospitality_billing/screens/page-frame.d.ts +14 -0
  810. package/dist/modules/hospitality_billing/screens/page-frame.d.ts.map +1 -0
  811. package/dist/modules/hospitality_billing/screens/page-frame.js +6 -0
  812. package/dist/modules/hospitality_billing/screens/page-frame.js.map +1 -0
  813. package/dist/modules/hospitality_billing/screens/shared.d.ts +64 -0
  814. package/dist/modules/hospitality_billing/screens/shared.d.ts.map +1 -0
  815. package/dist/modules/hospitality_billing/screens/shared.js +117 -0
  816. package/dist/modules/hospitality_billing/screens/shared.js.map +1 -0
  817. package/dist/modules/hospitality_core/calendar.d.ts.map +1 -1
  818. package/dist/modules/hospitality_core/calendar.js +2 -1
  819. package/dist/modules/hospitality_core/calendar.js.map +1 -1
  820. package/dist/modules/hospitality_core/functions.d.ts.map +1 -1
  821. package/dist/modules/hospitality_core/functions.js +114 -14
  822. package/dist/modules/hospitality_core/functions.js.map +1 -1
  823. package/dist/modules/hospitality_core/index.d.ts +2 -2
  824. package/dist/modules/hospitality_core/index.d.ts.map +1 -1
  825. package/dist/modules/hospitality_core/index.js +3 -2
  826. package/dist/modules/hospitality_core/index.js.map +1 -1
  827. package/dist/modules/hospitality_core/inventory.d.ts +53 -4
  828. package/dist/modules/hospitality_core/inventory.d.ts.map +1 -1
  829. package/dist/modules/hospitality_core/inventory.js +121 -14
  830. package/dist/modules/hospitality_core/inventory.js.map +1 -1
  831. package/dist/modules/hospitality_core/menus.d.ts.map +1 -1
  832. package/dist/modules/hospitality_core/menus.js +31 -0
  833. package/dist/modules/hospitality_core/menus.js.map +1 -1
  834. package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
  835. package/dist/modules/hospitality_core/messages.js +383 -183
  836. package/dist/modules/hospitality_core/messages.js.map +1 -1
  837. package/dist/modules/hospitality_core/models.d.ts +1 -1
  838. package/dist/modules/hospitality_core/models.d.ts.map +1 -1
  839. package/dist/modules/hospitality_core/models.js +47 -2
  840. package/dist/modules/hospitality_core/models.js.map +1 -1
  841. package/dist/modules/hospitality_core/night-audit.d.ts +1 -0
  842. package/dist/modules/hospitality_core/night-audit.d.ts.map +1 -1
  843. package/dist/modules/hospitality_core/night-audit.js +39 -1
  844. package/dist/modules/hospitality_core/night-audit.js.map +1 -1
  845. package/dist/modules/hospitality_core/online-booking.d.ts +5 -0
  846. package/dist/modules/hospitality_core/online-booking.d.ts.map +1 -0
  847. package/dist/modules/hospitality_core/online-booking.js +775 -0
  848. package/dist/modules/hospitality_core/online-booking.js.map +1 -0
  849. package/dist/modules/hospitality_core/operations.d.ts +21 -1
  850. package/dist/modules/hospitality_core/operations.d.ts.map +1 -1
  851. package/dist/modules/hospitality_core/operations.js +432 -67
  852. package/dist/modules/hospitality_core/operations.js.map +1 -1
  853. package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
  854. package/dist/modules/hospitality_core/routes.js +503 -106
  855. package/dist/modules/hospitality_core/routes.js.map +1 -1
  856. package/dist/modules/hospitality_core/screens/amenities.d.ts +10 -0
  857. package/dist/modules/hospitality_core/screens/amenities.d.ts.map +1 -0
  858. package/dist/modules/hospitality_core/screens/amenities.js +65 -0
  859. package/dist/modules/hospitality_core/screens/amenities.js.map +1 -0
  860. package/dist/modules/hospitality_core/screens/building-detail.d.ts +3 -0
  861. package/dist/modules/hospitality_core/screens/building-detail.d.ts.map +1 -0
  862. package/dist/modules/hospitality_core/screens/building-detail.js +69 -0
  863. package/dist/modules/hospitality_core/screens/building-detail.js.map +1 -0
  864. package/dist/modules/hospitality_core/screens/cleaning-task-detail.d.ts +7 -0
  865. package/dist/modules/hospitality_core/screens/cleaning-task-detail.d.ts.map +1 -0
  866. package/dist/modules/hospitality_core/screens/cleaning-task-detail.js +109 -0
  867. package/dist/modules/hospitality_core/screens/cleaning-task-detail.js.map +1 -0
  868. package/dist/modules/hospitality_core/screens/cleaning-tasks.d.ts +20 -0
  869. package/dist/modules/hospitality_core/screens/cleaning-tasks.d.ts.map +1 -0
  870. package/dist/modules/hospitality_core/screens/cleaning-tasks.js +139 -0
  871. package/dist/modules/hospitality_core/screens/cleaning-tasks.js.map +1 -0
  872. package/dist/modules/hospitality_core/screens/content.d.ts +3 -0
  873. package/dist/modules/hospitality_core/screens/content.d.ts.map +1 -0
  874. package/dist/modules/hospitality_core/screens/content.js +114 -0
  875. package/dist/modules/hospitality_core/screens/content.js.map +1 -0
  876. package/dist/modules/hospitality_core/screens/floor-detail.d.ts +3 -0
  877. package/dist/modules/hospitality_core/screens/floor-detail.d.ts.map +1 -0
  878. package/dist/modules/hospitality_core/screens/floor-detail.js +74 -0
  879. package/dist/modules/hospitality_core/screens/floor-detail.js.map +1 -0
  880. package/dist/modules/hospitality_core/screens/folio-detail.d.ts +3 -0
  881. package/dist/modules/hospitality_core/screens/folio-detail.d.ts.map +1 -0
  882. package/dist/modules/hospitality_core/screens/folio-detail.js +142 -0
  883. package/dist/modules/hospitality_core/screens/folio-detail.js.map +1 -0
  884. package/dist/modules/hospitality_core/screens/folios.d.ts +3 -0
  885. package/dist/modules/hospitality_core/screens/folios.d.ts.map +1 -0
  886. package/dist/modules/hospitality_core/screens/folios.js +7 -0
  887. package/dist/modules/hospitality_core/screens/folios.js.map +1 -0
  888. package/dist/modules/hospitality_core/screens/front-desk.d.ts +35 -0
  889. package/dist/modules/hospitality_core/screens/front-desk.d.ts.map +1 -0
  890. package/dist/modules/hospitality_core/screens/front-desk.js +195 -0
  891. package/dist/modules/hospitality_core/screens/front-desk.js.map +1 -0
  892. package/dist/modules/hospitality_core/screens/housekeeping-room-detail.d.ts +3 -0
  893. package/dist/modules/hospitality_core/screens/housekeeping-room-detail.d.ts.map +1 -0
  894. package/dist/modules/hospitality_core/screens/housekeeping-room-detail.js +121 -0
  895. package/dist/modules/hospitality_core/screens/housekeeping-room-detail.js.map +1 -0
  896. package/dist/modules/hospitality_core/screens/housekeeping-rooms.d.ts +9 -0
  897. package/dist/modules/hospitality_core/screens/housekeeping-rooms.d.ts.map +1 -0
  898. package/dist/modules/hospitality_core/screens/housekeeping-rooms.js +54 -0
  899. package/dist/modules/hospitality_core/screens/housekeeping-rooms.js.map +1 -0
  900. package/dist/modules/hospitality_core/screens/index.d.ts +33 -0
  901. package/dist/modules/hospitality_core/screens/index.d.ts.map +1 -0
  902. package/dist/modules/hospitality_core/screens/index.js +33 -0
  903. package/dist/modules/hospitality_core/screens/index.js.map +1 -0
  904. package/dist/modules/hospitality_core/screens/inventory.d.ts +8 -0
  905. package/dist/modules/hospitality_core/screens/inventory.d.ts.map +1 -0
  906. package/dist/modules/hospitality_core/screens/inventory.js +122 -0
  907. package/dist/modules/hospitality_core/screens/inventory.js.map +1 -0
  908. package/dist/modules/hospitality_core/screens/new-property.d.ts +3 -0
  909. package/dist/modules/hospitality_core/screens/new-property.d.ts.map +1 -0
  910. package/dist/modules/hospitality_core/screens/new-property.js +8 -0
  911. package/dist/modules/hospitality_core/screens/new-property.js.map +1 -0
  912. package/dist/modules/hospitality_core/screens/new-room-type.d.ts +3 -0
  913. package/dist/modules/hospitality_core/screens/new-room-type.d.ts.map +1 -0
  914. package/dist/modules/hospitality_core/screens/new-room-type.js +8 -0
  915. package/dist/modules/hospitality_core/screens/new-room-type.js.map +1 -0
  916. package/dist/modules/hospitality_core/screens/new-room.d.ts +3 -0
  917. package/dist/modules/hospitality_core/screens/new-room.d.ts.map +1 -0
  918. package/dist/modules/hospitality_core/screens/new-room.js +8 -0
  919. package/dist/modules/hospitality_core/screens/new-room.js.map +1 -0
  920. package/dist/modules/hospitality_core/screens/night-audit.d.ts +10 -0
  921. package/dist/modules/hospitality_core/screens/night-audit.d.ts.map +1 -0
  922. package/dist/modules/hospitality_core/screens/night-audit.js +67 -0
  923. package/dist/modules/hospitality_core/screens/night-audit.js.map +1 -0
  924. package/dist/modules/hospitality_core/screens/page-frame.d.ts +15 -0
  925. package/dist/modules/hospitality_core/screens/page-frame.d.ts.map +1 -0
  926. package/dist/modules/hospitality_core/screens/page-frame.js +10 -0
  927. package/dist/modules/hospitality_core/screens/page-frame.js.map +1 -0
  928. package/dist/modules/hospitality_core/screens/policies.d.ts +10 -0
  929. package/dist/modules/hospitality_core/screens/policies.d.ts.map +1 -0
  930. package/dist/modules/hospitality_core/screens/policies.js +72 -0
  931. package/dist/modules/hospitality_core/screens/policies.js.map +1 -0
  932. package/dist/modules/hospitality_core/screens/properties.d.ts +7 -0
  933. package/dist/modules/hospitality_core/screens/properties.d.ts.map +1 -0
  934. package/dist/modules/hospitality_core/screens/properties.js +45 -0
  935. package/dist/modules/hospitality_core/screens/properties.js.map +1 -0
  936. package/dist/modules/hospitality_core/screens/property-detail.d.ts +3 -0
  937. package/dist/modules/hospitality_core/screens/property-detail.d.ts.map +1 -0
  938. package/dist/modules/hospitality_core/screens/property-detail.js +92 -0
  939. package/dist/modules/hospitality_core/screens/property-detail.js.map +1 -0
  940. package/dist/modules/hospitality_core/screens/rate-plans.d.ts +10 -0
  941. package/dist/modules/hospitality_core/screens/rate-plans.d.ts.map +1 -0
  942. package/dist/modules/hospitality_core/screens/rate-plans.js +123 -0
  943. package/dist/modules/hospitality_core/screens/rate-plans.js.map +1 -0
  944. package/dist/modules/hospitality_core/screens/reservation-detail.d.ts +11 -0
  945. package/dist/modules/hospitality_core/screens/reservation-detail.d.ts.map +1 -0
  946. package/dist/modules/hospitality_core/screens/reservation-detail.js +237 -0
  947. package/dist/modules/hospitality_core/screens/reservation-detail.js.map +1 -0
  948. package/dist/modules/hospitality_core/screens/reservations.d.ts +17 -0
  949. package/dist/modules/hospitality_core/screens/reservations.d.ts.map +1 -0
  950. package/dist/modules/hospitality_core/screens/reservations.js +166 -0
  951. package/dist/modules/hospitality_core/screens/reservations.js.map +1 -0
  952. package/dist/modules/hospitality_core/screens/room-detail.d.ts +3 -0
  953. package/dist/modules/hospitality_core/screens/room-detail.d.ts.map +1 -0
  954. package/dist/modules/hospitality_core/screens/room-detail.js +75 -0
  955. package/dist/modules/hospitality_core/screens/room-detail.js.map +1 -0
  956. package/dist/modules/hospitality_core/screens/room-type-detail.d.ts +3 -0
  957. package/dist/modules/hospitality_core/screens/room-type-detail.d.ts.map +1 -0
  958. package/dist/modules/hospitality_core/screens/room-type-detail.js +91 -0
  959. package/dist/modules/hospitality_core/screens/room-type-detail.js.map +1 -0
  960. package/dist/modules/hospitality_core/screens/room-types.d.ts +3 -0
  961. package/dist/modules/hospitality_core/screens/room-types.d.ts.map +1 -0
  962. package/dist/modules/hospitality_core/screens/room-types.js +61 -0
  963. package/dist/modules/hospitality_core/screens/room-types.js.map +1 -0
  964. package/dist/modules/hospitality_core/screens/rooms.d.ts +10 -0
  965. package/dist/modules/hospitality_core/screens/rooms.d.ts.map +1 -0
  966. package/dist/modules/hospitality_core/screens/rooms.js +150 -0
  967. package/dist/modules/hospitality_core/screens/rooms.js.map +1 -0
  968. package/dist/modules/hospitality_core/screens/services.d.ts +18 -0
  969. package/dist/modules/hospitality_core/screens/services.d.ts.map +1 -0
  970. package/dist/modules/hospitality_core/screens/services.js +196 -0
  971. package/dist/modules/hospitality_core/screens/services.js.map +1 -0
  972. package/dist/modules/hospitality_core/screens/shared.d.ts +777 -0
  973. package/dist/modules/hospitality_core/screens/shared.d.ts.map +1 -0
  974. package/dist/modules/hospitality_core/screens/shared.js +1586 -0
  975. package/dist/modules/hospitality_core/screens/shared.js.map +1 -0
  976. package/dist/modules/hospitality_core/screens/stay-detail.d.ts +3 -0
  977. package/dist/modules/hospitality_core/screens/stay-detail.d.ts.map +1 -0
  978. package/dist/modules/hospitality_core/screens/stay-detail.js +233 -0
  979. package/dist/modules/hospitality_core/screens/stay-detail.js.map +1 -0
  980. package/dist/modules/hospitality_core/screens/stay-notices.d.ts +9 -0
  981. package/dist/modules/hospitality_core/screens/stay-notices.d.ts.map +1 -0
  982. package/dist/modules/hospitality_core/screens/stay-notices.js +87 -0
  983. package/dist/modules/hospitality_core/screens/stay-notices.js.map +1 -0
  984. package/dist/modules/hospitality_core/screens/stays.d.ts +3 -0
  985. package/dist/modules/hospitality_core/screens/stays.d.ts.map +1 -0
  986. package/dist/modules/hospitality_core/screens/stays.js +7 -0
  987. package/dist/modules/hospitality_core/screens/stays.js.map +1 -0
  988. package/dist/modules/hospitality_core/screens/tape-chart.d.ts +7 -0
  989. package/dist/modules/hospitality_core/screens/tape-chart.d.ts.map +1 -0
  990. package/dist/modules/hospitality_core/screens/tape-chart.js +99 -0
  991. package/dist/modules/hospitality_core/screens/tape-chart.js.map +1 -0
  992. package/dist/modules/hospitality_core/services.d.ts.map +1 -1
  993. package/dist/modules/hospitality_core/services.js +133 -30
  994. package/dist/modules/hospitality_core/services.js.map +1 -1
  995. package/dist/modules/hospitality_core/stay-notices.js +2 -2
  996. package/dist/modules/hospitality_core/stay-notices.js.map +1 -1
  997. package/dist/modules/hospitality_core/types.d.ts +26 -5
  998. package/dist/modules/hospitality_core/types.d.ts.map +1 -1
  999. package/dist/modules/hospitality_core/types.js +47 -5
  1000. package/dist/modules/hospitality_core/types.js.map +1 -1
  1001. package/dist/modules/hospitality_staff_channel/channel-routes.d.ts +2 -0
  1002. package/dist/modules/hospitality_staff_channel/channel-routes.d.ts.map +1 -0
  1003. package/dist/modules/hospitality_staff_channel/channel-routes.js +1227 -0
  1004. package/dist/modules/hospitality_staff_channel/channel-routes.js.map +1 -0
  1005. package/dist/modules/hospitality_staff_channel/index.d.ts +5 -0
  1006. package/dist/modules/hospitality_staff_channel/index.d.ts.map +1 -0
  1007. package/dist/modules/hospitality_staff_channel/index.js +34 -0
  1008. package/dist/modules/hospitality_staff_channel/index.js.map +1 -0
  1009. package/dist/modules/hr/functions.d.ts.map +1 -1
  1010. package/dist/modules/hr/functions.js +108 -44
  1011. package/dist/modules/hr/functions.js.map +1 -1
  1012. package/dist/modules/hr/index.d.ts.map +1 -1
  1013. package/dist/modules/hr/index.js +0 -1
  1014. package/dist/modules/hr/index.js.map +1 -1
  1015. package/dist/modules/hr_backend/index.d.ts +2 -1
  1016. package/dist/modules/hr_backend/index.d.ts.map +1 -1
  1017. package/dist/modules/hr_backend/index.js +39 -7
  1018. package/dist/modules/hr_backend/index.js.map +1 -1
  1019. package/dist/modules/hr_backend/routes.d.ts.map +1 -1
  1020. package/dist/modules/hr_backend/routes.js +279 -42
  1021. package/dist/modules/hr_backend/routes.js.map +1 -1
  1022. package/dist/modules/hr_backend/screens/employee-form.d.ts +28 -0
  1023. package/dist/modules/hr_backend/screens/employee-form.d.ts.map +1 -0
  1024. package/dist/modules/hr_backend/screens/employee-form.js +110 -0
  1025. package/dist/modules/hr_backend/screens/employee-form.js.map +1 -0
  1026. package/dist/modules/hr_backend/screens/employees-list.d.ts +22 -0
  1027. package/dist/modules/hr_backend/screens/employees-list.d.ts.map +1 -0
  1028. package/dist/modules/hr_backend/screens/employees-list.js +53 -0
  1029. package/dist/modules/hr_backend/screens/employees-list.js.map +1 -0
  1030. package/dist/modules/hr_backend/screens/index.d.ts +5 -0
  1031. package/dist/modules/hr_backend/screens/index.d.ts.map +1 -0
  1032. package/dist/modules/hr_backend/screens/index.js +5 -0
  1033. package/dist/modules/hr_backend/screens/index.js.map +1 -0
  1034. package/dist/modules/hr_backend/screens/leaves-list.d.ts +22 -0
  1035. package/dist/modules/hr_backend/screens/leaves-list.d.ts.map +1 -0
  1036. package/dist/modules/hr_backend/screens/leaves-list.js +78 -0
  1037. package/dist/modules/hr_backend/screens/leaves-list.js.map +1 -0
  1038. package/dist/modules/hr_backend/screens/roster.d.ts +19 -0
  1039. package/dist/modules/hr_backend/screens/roster.d.ts.map +1 -0
  1040. package/dist/modules/hr_backend/screens/roster.js +83 -0
  1041. package/dist/modules/hr_backend/screens/roster.js.map +1 -0
  1042. package/dist/modules/inventory_staff_channel/channel-routes.d.ts +2 -0
  1043. package/dist/modules/inventory_staff_channel/channel-routes.d.ts.map +1 -0
  1044. package/dist/modules/inventory_staff_channel/channel-routes.js +724 -0
  1045. package/dist/modules/inventory_staff_channel/channel-routes.js.map +1 -0
  1046. package/dist/modules/inventory_staff_channel/index.d.ts +5 -0
  1047. package/dist/modules/inventory_staff_channel/index.d.ts.map +1 -0
  1048. package/dist/modules/inventory_staff_channel/index.js +38 -0
  1049. package/dist/modules/inventory_staff_channel/index.js.map +1 -0
  1050. package/dist/modules/livedoc/documents.d.ts +48 -0
  1051. package/dist/modules/livedoc/documents.d.ts.map +1 -0
  1052. package/dist/modules/livedoc/documents.js +99 -0
  1053. package/dist/modules/livedoc/documents.js.map +1 -0
  1054. package/dist/modules/livedoc/functions.d.ts +3 -0
  1055. package/dist/modules/livedoc/functions.d.ts.map +1 -0
  1056. package/dist/modules/livedoc/functions.js +47 -0
  1057. package/dist/modules/livedoc/functions.js.map +1 -0
  1058. package/dist/modules/livedoc/index.d.ts +22 -0
  1059. package/dist/modules/livedoc/index.d.ts.map +1 -0
  1060. package/dist/modules/livedoc/index.js +37 -0
  1061. package/dist/modules/livedoc/index.js.map +1 -0
  1062. package/dist/modules/livedoc/islands.d.ts +3 -0
  1063. package/dist/modules/livedoc/islands.d.ts.map +1 -0
  1064. package/dist/modules/livedoc/islands.js +22 -0
  1065. package/dist/modules/livedoc/islands.js.map +1 -0
  1066. package/dist/modules/livedoc/routes.d.ts +11 -0
  1067. package/dist/modules/livedoc/routes.d.ts.map +1 -0
  1068. package/dist/modules/livedoc/routes.js +232 -0
  1069. package/dist/modules/livedoc/routes.js.map +1 -0
  1070. package/dist/modules/livedoc/sync.d.ts +124 -0
  1071. package/dist/modules/livedoc/sync.d.ts.map +1 -0
  1072. package/dist/modules/livedoc/sync.js +218 -0
  1073. package/dist/modules/livedoc/sync.js.map +1 -0
  1074. package/dist/modules/loyalty/admin-functions.d.ts.map +1 -1
  1075. package/dist/modules/loyalty/admin-functions.js +42 -6
  1076. package/dist/modules/loyalty/admin-functions.js.map +1 -1
  1077. package/dist/modules/loyalty/engine.d.ts +1 -0
  1078. package/dist/modules/loyalty/engine.d.ts.map +1 -1
  1079. package/dist/modules/loyalty/engine.js +88 -28
  1080. package/dist/modules/loyalty/engine.js.map +1 -1
  1081. package/dist/modules/loyalty/index.d.ts.map +1 -1
  1082. package/dist/modules/loyalty/index.js +10 -2
  1083. package/dist/modules/loyalty/index.js.map +1 -1
  1084. package/dist/modules/loyalty/ledger.d.ts.map +1 -1
  1085. package/dist/modules/loyalty/ledger.js +11 -0
  1086. package/dist/modules/loyalty/ledger.js.map +1 -1
  1087. package/dist/modules/loyalty/membership-functions.d.ts.map +1 -1
  1088. package/dist/modules/loyalty/membership-functions.js +23 -7
  1089. package/dist/modules/loyalty/membership-functions.js.map +1 -1
  1090. package/dist/modules/loyalty/messages.d.ts +8 -0
  1091. package/dist/modules/loyalty/messages.d.ts.map +1 -1
  1092. package/dist/modules/loyalty/messages.js +8 -0
  1093. package/dist/modules/loyalty/messages.js.map +1 -1
  1094. package/dist/modules/loyalty/models.d.ts.map +1 -1
  1095. package/dist/modules/loyalty/models.js +20 -0
  1096. package/dist/modules/loyalty/models.js.map +1 -1
  1097. package/dist/modules/loyalty/order-functions.d.ts +16 -1
  1098. package/dist/modules/loyalty/order-functions.d.ts.map +1 -1
  1099. package/dist/modules/loyalty/order-functions.js +513 -291
  1100. package/dist/modules/loyalty/order-functions.js.map +1 -1
  1101. package/dist/modules/loyalty/stats.d.ts +17 -0
  1102. package/dist/modules/loyalty/stats.d.ts.map +1 -0
  1103. package/dist/modules/loyalty/stats.js +178 -0
  1104. package/dist/modules/loyalty/stats.js.map +1 -0
  1105. package/dist/modules/loyalty/stored-value.d.ts +42 -0
  1106. package/dist/modules/loyalty/stored-value.d.ts.map +1 -0
  1107. package/dist/modules/loyalty/stored-value.js +368 -0
  1108. package/dist/modules/loyalty/stored-value.js.map +1 -0
  1109. package/dist/modules/loyalty/types.d.ts +6 -4
  1110. package/dist/modules/loyalty/types.d.ts.map +1 -1
  1111. package/dist/modules/loyalty/types.js +1 -1
  1112. package/dist/modules/loyalty/types.js.map +1 -1
  1113. package/dist/modules/loyalty_backend/index.js +443 -172
  1114. package/dist/modules/loyalty_backend/index.js.map +1 -1
  1115. package/dist/modules/loyalty_backend/messages.d.ts +58 -1
  1116. package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
  1117. package/dist/modules/loyalty_backend/messages.js +114 -0
  1118. package/dist/modules/loyalty_backend/messages.js.map +1 -1
  1119. package/dist/modules/loyalty_backend/screens/index.d.ts +90 -0
  1120. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -0
  1121. package/dist/modules/loyalty_backend/screens/index.js +912 -0
  1122. package/dist/modules/loyalty_backend/screens/index.js.map +1 -0
  1123. package/dist/modules/loyalty_backend/screens/page-frame.d.ts +14 -0
  1124. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -0
  1125. package/dist/modules/loyalty_backend/screens/page-frame.js +13 -0
  1126. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -0
  1127. package/dist/modules/loyalty_pos/channel.d.ts +2 -0
  1128. package/dist/modules/loyalty_pos/channel.d.ts.map +1 -0
  1129. package/dist/modules/loyalty_pos/channel.js +270 -0
  1130. package/dist/modules/loyalty_pos/channel.js.map +1 -0
  1131. package/dist/modules/loyalty_pos/functions.d.ts +11 -17
  1132. package/dist/modules/loyalty_pos/functions.d.ts.map +1 -1
  1133. package/dist/modules/loyalty_pos/functions.js +454 -94
  1134. package/dist/modules/loyalty_pos/functions.js.map +1 -1
  1135. package/dist/modules/loyalty_pos/index.js +6 -16
  1136. package/dist/modules/loyalty_pos/index.js.map +1 -1
  1137. package/dist/modules/loyalty_pos/jobs.d.ts +3 -0
  1138. package/dist/modules/loyalty_pos/jobs.d.ts.map +1 -0
  1139. package/dist/modules/loyalty_pos/jobs.js +30 -0
  1140. package/dist/modules/loyalty_pos/jobs.js.map +1 -0
  1141. package/dist/modules/loyalty_sale/functions.d.ts +2 -2
  1142. package/dist/modules/loyalty_sale/functions.d.ts.map +1 -1
  1143. package/dist/modules/loyalty_sale/functions.js +53 -34
  1144. package/dist/modules/loyalty_sale/functions.js.map +1 -1
  1145. package/dist/modules/loyalty_sale/index.js +0 -2
  1146. package/dist/modules/loyalty_sale/index.js.map +1 -1
  1147. package/dist/modules/mail/functions.d.ts.map +1 -1
  1148. package/dist/modules/mail/functions.js +48 -6
  1149. package/dist/modules/mail/functions.js.map +1 -1
  1150. package/dist/modules/mail/index.d.ts.map +1 -1
  1151. package/dist/modules/mail/index.js +0 -1
  1152. package/dist/modules/mail/index.js.map +1 -1
  1153. package/dist/modules/mail/operations.d.ts +19 -0
  1154. package/dist/modules/mail/operations.d.ts.map +1 -1
  1155. package/dist/modules/mail/operations.js +69 -0
  1156. package/dist/modules/mail/operations.js.map +1 -1
  1157. package/dist/modules/mail_backend/index.d.ts +1 -1
  1158. package/dist/modules/mail_backend/index.d.ts.map +1 -1
  1159. package/dist/modules/mail_backend/index.js +5 -14
  1160. package/dist/modules/mail_backend/index.js.map +1 -1
  1161. package/dist/modules/mail_backend/islands.js +2 -2
  1162. package/dist/modules/mail_backend/islands.js.map +1 -1
  1163. package/dist/modules/mail_backend/routes.d.ts.map +1 -1
  1164. package/dist/modules/mail_backend/routes.js +25 -20
  1165. package/dist/modules/mail_backend/routes.js.map +1 -1
  1166. package/dist/modules/mail_backend/screens/inbox-list.d.ts +9 -0
  1167. package/dist/modules/mail_backend/screens/inbox-list.d.ts.map +1 -0
  1168. package/dist/modules/mail_backend/screens/inbox-list.js +13 -0
  1169. package/dist/modules/mail_backend/screens/inbox-list.js.map +1 -0
  1170. package/dist/modules/mail_backend/screens/index.d.ts +3 -0
  1171. package/dist/modules/mail_backend/screens/index.d.ts.map +1 -0
  1172. package/dist/modules/mail_backend/screens/index.js +2 -0
  1173. package/dist/modules/mail_backend/screens/index.js.map +1 -0
  1174. package/dist/modules/mail_inbound/index.d.ts.map +1 -1
  1175. package/dist/modules/mail_inbound/index.js +0 -1
  1176. package/dist/modules/mail_inbound/index.js.map +1 -1
  1177. package/dist/modules/mail_inbound_backend/index.d.ts +1 -1
  1178. package/dist/modules/mail_inbound_backend/index.d.ts.map +1 -1
  1179. package/dist/modules/mail_inbound_backend/index.js +3 -12
  1180. package/dist/modules/mail_inbound_backend/index.js.map +1 -1
  1181. package/dist/modules/mail_inbound_backend/routes.d.ts.map +1 -1
  1182. package/dist/modules/mail_inbound_backend/routes.js +6 -21
  1183. package/dist/modules/mail_inbound_backend/routes.js.map +1 -1
  1184. package/dist/modules/mail_inbound_backend/screens/inbound-list.d.ts +8 -0
  1185. package/dist/modules/mail_inbound_backend/screens/inbound-list.d.ts.map +1 -0
  1186. package/dist/modules/mail_inbound_backend/screens/inbound-list.js +20 -0
  1187. package/dist/modules/mail_inbound_backend/screens/inbound-list.js.map +1 -0
  1188. package/dist/modules/mail_inbound_backend/screens/index.d.ts +3 -0
  1189. package/dist/modules/mail_inbound_backend/screens/index.d.ts.map +1 -0
  1190. package/dist/modules/mail_inbound_backend/screens/index.js +2 -0
  1191. package/dist/modules/mail_inbound_backend/screens/index.js.map +1 -0
  1192. package/dist/modules/mail_staff_channel/channel-routes.d.ts +2 -0
  1193. package/dist/modules/mail_staff_channel/channel-routes.d.ts.map +1 -0
  1194. package/dist/modules/mail_staff_channel/channel-routes.js +183 -0
  1195. package/dist/modules/mail_staff_channel/channel-routes.js.map +1 -0
  1196. package/dist/modules/mail_staff_channel/index.d.ts +5 -0
  1197. package/dist/modules/mail_staff_channel/index.d.ts.map +1 -0
  1198. package/dist/modules/mail_staff_channel/index.js +28 -0
  1199. package/dist/modules/mail_staff_channel/index.js.map +1 -0
  1200. package/dist/modules/mail_transport/index.d.ts.map +1 -1
  1201. package/dist/modules/mail_transport/index.js +0 -1
  1202. package/dist/modules/mail_transport/index.js.map +1 -1
  1203. package/dist/modules/mail_transport_backend/index.d.ts +1 -1
  1204. package/dist/modules/mail_transport_backend/index.d.ts.map +1 -1
  1205. package/dist/modules/mail_transport_backend/index.js +3 -12
  1206. package/dist/modules/mail_transport_backend/index.js.map +1 -1
  1207. package/dist/modules/mail_transport_backend/routes.d.ts.map +1 -1
  1208. package/dist/modules/mail_transport_backend/routes.js +23 -22
  1209. package/dist/modules/mail_transport_backend/routes.js.map +1 -1
  1210. package/dist/modules/mail_transport_backend/screens/index.d.ts +3 -0
  1211. package/dist/modules/mail_transport_backend/screens/index.d.ts.map +1 -0
  1212. package/dist/modules/mail_transport_backend/screens/index.js +2 -0
  1213. package/dist/modules/mail_transport_backend/screens/index.js.map +1 -0
  1214. package/dist/modules/mail_transport_backend/screens/outbox-list.d.ts +9 -0
  1215. package/dist/modules/mail_transport_backend/screens/outbox-list.d.ts.map +1 -0
  1216. package/dist/modules/mail_transport_backend/screens/outbox-list.js +29 -0
  1217. package/dist/modules/mail_transport_backend/screens/outbox-list.js.map +1 -0
  1218. package/dist/modules/manufacturing/functions.d.ts +3 -0
  1219. package/dist/modules/manufacturing/functions.d.ts.map +1 -0
  1220. package/dist/modules/manufacturing/functions.js +912 -0
  1221. package/dist/modules/manufacturing/functions.js.map +1 -0
  1222. package/dist/modules/manufacturing/index.d.ts +6 -0
  1223. package/dist/modules/manufacturing/index.d.ts.map +1 -0
  1224. package/dist/modules/manufacturing/index.js +42 -0
  1225. package/dist/modules/manufacturing/index.js.map +1 -0
  1226. package/dist/modules/manufacturing/models.d.ts +8 -0
  1227. package/dist/modules/manufacturing/models.d.ts.map +1 -0
  1228. package/dist/modules/manufacturing/models.js +145 -0
  1229. package/dist/modules/manufacturing/models.js.map +1 -0
  1230. package/dist/modules/manufacturing/relations.d.ts.map +1 -0
  1231. package/dist/modules/manufacturing/relations.js +37 -0
  1232. package/dist/modules/manufacturing/relations.js.map +1 -0
  1233. package/dist/modules/manufacturing/types.d.ts +7 -0
  1234. package/dist/modules/manufacturing/types.d.ts.map +1 -0
  1235. package/dist/modules/manufacturing/types.js +11 -0
  1236. package/dist/modules/manufacturing/types.js.map +1 -0
  1237. package/dist/modules/manufacturing_backend/index.d.ts +5 -0
  1238. package/dist/modules/manufacturing_backend/index.d.ts.map +1 -0
  1239. package/dist/modules/manufacturing_backend/index.js +146 -0
  1240. package/dist/modules/manufacturing_backend/index.js.map +1 -0
  1241. package/dist/modules/manufacturing_backend/routes.d.ts +3 -0
  1242. package/dist/modules/manufacturing_backend/routes.d.ts.map +1 -0
  1243. package/dist/modules/manufacturing_backend/routes.js +477 -0
  1244. package/dist/modules/manufacturing_backend/routes.js.map +1 -0
  1245. package/dist/modules/manufacturing_backend/screens/bom-create.d.ts +15 -0
  1246. package/dist/modules/manufacturing_backend/screens/bom-create.d.ts.map +1 -0
  1247. package/dist/modules/manufacturing_backend/screens/bom-create.js +39 -0
  1248. package/dist/modules/manufacturing_backend/screens/bom-create.js.map +1 -0
  1249. package/dist/modules/manufacturing_backend/screens/boms-list.d.ts +18 -0
  1250. package/dist/modules/manufacturing_backend/screens/boms-list.d.ts.map +1 -0
  1251. package/dist/modules/manufacturing_backend/screens/boms-list.js +36 -0
  1252. package/dist/modules/manufacturing_backend/screens/boms-list.js.map +1 -0
  1253. package/dist/modules/manufacturing_backend/screens/index.d.ts +8 -0
  1254. package/dist/modules/manufacturing_backend/screens/index.d.ts.map +1 -0
  1255. package/dist/modules/manufacturing_backend/screens/index.js +8 -0
  1256. package/dist/modules/manufacturing_backend/screens/index.js.map +1 -0
  1257. package/dist/modules/manufacturing_backend/screens/order-create.d.ts +13 -0
  1258. package/dist/modules/manufacturing_backend/screens/order-create.d.ts.map +1 -0
  1259. package/dist/modules/manufacturing_backend/screens/order-create.js +20 -0
  1260. package/dist/modules/manufacturing_backend/screens/order-create.js.map +1 -0
  1261. package/dist/modules/manufacturing_backend/screens/order-execution.d.ts +7 -0
  1262. package/dist/modules/manufacturing_backend/screens/order-execution.d.ts.map +1 -0
  1263. package/dist/modules/manufacturing_backend/screens/order-execution.js +129 -0
  1264. package/dist/modules/manufacturing_backend/screens/order-execution.js.map +1 -0
  1265. package/dist/modules/manufacturing_backend/screens/orders-list.d.ts +21 -0
  1266. package/dist/modules/manufacturing_backend/screens/orders-list.d.ts.map +1 -0
  1267. package/dist/modules/manufacturing_backend/screens/orders-list.js +49 -0
  1268. package/dist/modules/manufacturing_backend/screens/orders-list.js.map +1 -0
  1269. package/dist/modules/manufacturing_backend/screens/work-center-form.d.ts +24 -0
  1270. package/dist/modules/manufacturing_backend/screens/work-center-form.d.ts.map +1 -0
  1271. package/dist/modules/manufacturing_backend/screens/work-center-form.js +80 -0
  1272. package/dist/modules/manufacturing_backend/screens/work-center-form.js.map +1 -0
  1273. package/dist/modules/manufacturing_backend/screens/work-centers-list.d.ts +23 -0
  1274. package/dist/modules/manufacturing_backend/screens/work-centers-list.d.ts.map +1 -0
  1275. package/dist/modules/manufacturing_backend/screens/work-centers-list.js +61 -0
  1276. package/dist/modules/manufacturing_backend/screens/work-centers-list.js.map +1 -0
  1277. package/dist/modules/oauth/index.d.ts.map +1 -1
  1278. package/dist/modules/oauth/index.js +0 -1
  1279. package/dist/modules/oauth/index.js.map +1 -1
  1280. package/dist/modules/oauth/models.d.ts.map +1 -1
  1281. package/dist/modules/oauth/models.js +2 -1
  1282. package/dist/modules/oauth/models.js.map +1 -1
  1283. package/dist/modules/oauth_backend/index.d.ts +1 -1
  1284. package/dist/modules/oauth_backend/index.d.ts.map +1 -1
  1285. package/dist/modules/oauth_backend/index.js +3 -5
  1286. package/dist/modules/oauth_backend/index.js.map +1 -1
  1287. package/dist/modules/oauth_backend/messages.d.ts +4 -0
  1288. package/dist/modules/oauth_backend/messages.d.ts.map +1 -1
  1289. package/dist/modules/oauth_backend/messages.js +4 -0
  1290. package/dist/modules/oauth_backend/messages.js.map +1 -1
  1291. package/dist/modules/oauth_backend/routes.d.ts.map +1 -1
  1292. package/dist/modules/oauth_backend/routes.js +28 -30
  1293. package/dist/modules/oauth_backend/routes.js.map +1 -1
  1294. package/dist/modules/oauth_backend/screens/index.d.ts +66 -0
  1295. package/dist/modules/oauth_backend/screens/index.d.ts.map +1 -0
  1296. package/dist/modules/oauth_backend/screens/index.js +306 -0
  1297. package/dist/modules/oauth_backend/screens/index.js.map +1 -0
  1298. package/dist/modules/partner/functions.d.ts.map +1 -1
  1299. package/dist/modules/partner/functions.js +74 -6
  1300. package/dist/modules/partner/functions.js.map +1 -1
  1301. package/dist/modules/partner/index.d.ts.map +1 -1
  1302. package/dist/modules/partner/index.js +0 -1
  1303. package/dist/modules/partner/index.js.map +1 -1
  1304. package/dist/modules/partner/models.d.ts +4 -4
  1305. package/dist/modules/partner/models.d.ts.map +1 -1
  1306. package/dist/modules/partner/models.js +9 -7
  1307. package/dist/modules/partner/models.js.map +1 -1
  1308. package/dist/modules/partner/types.d.ts +2 -2
  1309. package/dist/modules/partner/types.js +2 -2
  1310. package/dist/modules/partner_backend/client/address-view.mjs +5 -5
  1311. package/dist/modules/partner_backend/client/address-view.mjs.map +1 -1
  1312. package/dist/modules/partner_backend/client/address.css +22 -10
  1313. package/dist/modules/partner_backend/client/partner.css +116 -0
  1314. package/dist/modules/partner_backend/index.d.ts +1 -1
  1315. package/dist/modules/partner_backend/index.d.ts.map +1 -1
  1316. package/dist/modules/partner_backend/index.js +34 -4
  1317. package/dist/modules/partner_backend/index.js.map +1 -1
  1318. package/dist/modules/partner_backend/menus.js +2 -2
  1319. package/dist/modules/partner_backend/menus.js.map +1 -1
  1320. package/dist/modules/partner_backend/routes.d.ts +3 -1
  1321. package/dist/modules/partner_backend/routes.d.ts.map +1 -1
  1322. package/dist/modules/partner_backend/routes.js +236 -91
  1323. package/dist/modules/partner_backend/routes.js.map +1 -1
  1324. package/dist/modules/partner_backend/screens/form.d.ts +21 -0
  1325. package/dist/modules/partner_backend/screens/form.d.ts.map +1 -0
  1326. package/dist/modules/partner_backend/screens/form.js +101 -0
  1327. package/dist/modules/partner_backend/screens/form.js.map +1 -0
  1328. package/dist/modules/partner_backend/screens/index.d.ts +5 -0
  1329. package/dist/modules/partner_backend/screens/index.d.ts.map +1 -0
  1330. package/dist/modules/partner_backend/screens/index.js +4 -0
  1331. package/dist/modules/partner_backend/screens/index.js.map +1 -0
  1332. package/dist/modules/partner_backend/screens/list.d.ts +6 -0
  1333. package/dist/modules/partner_backend/screens/list.d.ts.map +1 -0
  1334. package/dist/modules/partner_backend/screens/list.js +94 -0
  1335. package/dist/modules/partner_backend/screens/list.js.map +1 -0
  1336. package/dist/modules/partner_backend/screens/new.d.ts +5 -0
  1337. package/dist/modules/partner_backend/screens/new.d.ts.map +1 -0
  1338. package/dist/modules/partner_backend/screens/new.js +58 -0
  1339. package/dist/modules/partner_backend/screens/new.js.map +1 -0
  1340. package/dist/modules/partner_backend/screens/types.d.ts +44 -0
  1341. package/dist/modules/partner_backend/screens/types.d.ts.map +1 -0
  1342. package/dist/modules/partner_backend/screens/types.js +2 -0
  1343. package/dist/modules/partner_backend/screens/types.js.map +1 -0
  1344. package/dist/modules/partner_mail_backend/index.d.ts +5 -0
  1345. package/dist/modules/partner_mail_backend/index.d.ts.map +1 -0
  1346. package/dist/modules/partner_mail_backend/index.js +29 -0
  1347. package/dist/modules/partner_mail_backend/index.js.map +1 -0
  1348. package/dist/modules/pos/functions.d.ts +18 -2
  1349. package/dist/modules/pos/functions.d.ts.map +1 -1
  1350. package/dist/modules/pos/functions.js +3279 -345
  1351. package/dist/modules/pos/functions.js.map +1 -1
  1352. package/dist/modules/pos/index.d.ts +2 -1
  1353. package/dist/modules/pos/index.d.ts.map +1 -1
  1354. package/dist/modules/pos/index.js +5 -5
  1355. package/dist/modules/pos/index.js.map +1 -1
  1356. package/dist/modules/pos/models.d.ts.map +1 -1
  1357. package/dist/modules/pos/models.js +189 -1
  1358. package/dist/modules/pos/models.js.map +1 -1
  1359. package/dist/modules/pos/relations.d.ts.map +1 -1
  1360. package/dist/modules/pos/relations.js +11 -0
  1361. package/dist/modules/pos/relations.js.map +1 -1
  1362. package/dist/modules/pos_backend/index.js +182 -154
  1363. package/dist/modules/pos_backend/index.js.map +1 -1
  1364. package/dist/modules/pos_backend/screens.d.ts +1 -0
  1365. package/dist/modules/pos_backend/screens.d.ts.map +1 -1
  1366. package/dist/modules/pos_backend/screens.js +28 -38
  1367. package/dist/modules/pos_backend/screens.js.map +1 -1
  1368. package/dist/modules/pos_channel/catalog.d.ts +27 -0
  1369. package/dist/modules/pos_channel/catalog.d.ts.map +1 -0
  1370. package/dist/modules/pos_channel/catalog.js +310 -0
  1371. package/dist/modules/pos_channel/catalog.js.map +1 -0
  1372. package/dist/modules/pos_channel/index.d.ts +7 -0
  1373. package/dist/modules/pos_channel/index.d.ts.map +1 -0
  1374. package/dist/modules/pos_channel/index.js +61 -0
  1375. package/dist/modules/pos_channel/index.js.map +1 -0
  1376. package/dist/modules/pos_channel/offline.d.ts +66 -0
  1377. package/dist/modules/pos_channel/offline.d.ts.map +1 -0
  1378. package/dist/modules/pos_channel/offline.js +16 -0
  1379. package/dist/modules/pos_channel/offline.js.map +1 -0
  1380. package/dist/modules/pos_channel/operations.d.ts +422 -0
  1381. package/dist/modules/pos_channel/operations.d.ts.map +1 -0
  1382. package/dist/modules/pos_channel/operations.js +1781 -0
  1383. package/dist/modules/pos_channel/operations.js.map +1 -0
  1384. package/dist/modules/pos_channel/sync.d.ts +6 -0
  1385. package/dist/modules/pos_channel/sync.d.ts.map +1 -0
  1386. package/dist/modules/pos_channel/sync.js +1161 -0
  1387. package/dist/modules/pos_channel/sync.js.map +1 -0
  1388. package/dist/modules/pricing/index.d.ts.map +1 -1
  1389. package/dist/modules/pricing/index.js +3 -4
  1390. package/dist/modules/pricing/index.js.map +1 -1
  1391. package/dist/modules/pricing_backend/index.js +135 -78
  1392. package/dist/modules/pricing_backend/index.js.map +1 -1
  1393. package/dist/modules/pricing_backend/screens/index.d.ts +5 -0
  1394. package/dist/modules/pricing_backend/screens/index.d.ts.map +1 -0
  1395. package/dist/modules/pricing_backend/screens/index.js +4 -0
  1396. package/dist/modules/pricing_backend/screens/index.js.map +1 -0
  1397. package/dist/modules/pricing_backend/screens/pricelist-create.d.ts +10 -0
  1398. package/dist/modules/pricing_backend/screens/pricelist-create.d.ts.map +1 -0
  1399. package/dist/modules/pricing_backend/screens/pricelist-create.js +30 -0
  1400. package/dist/modules/pricing_backend/screens/pricelist-create.js.map +1 -0
  1401. package/dist/modules/pricing_backend/screens/pricelist-detail.d.ts +15 -0
  1402. package/dist/modules/pricing_backend/screens/pricelist-detail.d.ts.map +1 -0
  1403. package/dist/modules/pricing_backend/screens/pricelist-detail.js +164 -0
  1404. package/dist/modules/pricing_backend/screens/pricelist-detail.js.map +1 -0
  1405. package/dist/modules/pricing_backend/screens/pricelists-list.d.ts +11 -0
  1406. package/dist/modules/pricing_backend/screens/pricelists-list.d.ts.map +1 -0
  1407. package/dist/modules/pricing_backend/screens/pricelists-list.js +27 -0
  1408. package/dist/modules/pricing_backend/screens/pricelists-list.js.map +1 -0
  1409. package/dist/modules/pricing_backend/screens/shared.d.ts +21 -0
  1410. package/dist/modules/pricing_backend/screens/shared.d.ts.map +1 -0
  1411. package/dist/modules/pricing_backend/screens/shared.js +3 -0
  1412. package/dist/modules/pricing_backend/screens/shared.js.map +1 -0
  1413. package/dist/modules/product/functions.d.ts.map +1 -1
  1414. package/dist/modules/product/functions.js +679 -50
  1415. package/dist/modules/product/functions.js.map +1 -1
  1416. package/dist/modules/product/index.d.ts +2 -0
  1417. package/dist/modules/product/index.d.ts.map +1 -1
  1418. package/dist/modules/product/index.js +2 -2
  1419. package/dist/modules/product/index.js.map +1 -1
  1420. package/dist/modules/product/models.d.ts +1 -1
  1421. package/dist/modules/product/models.d.ts.map +1 -1
  1422. package/dist/modules/product/models.js +27 -4
  1423. package/dist/modules/product/models.js.map +1 -1
  1424. package/dist/modules/product/relations.d.ts.map +1 -1
  1425. package/dist/modules/product/relations.js +4 -0
  1426. package/dist/modules/product/relations.js.map +1 -1
  1427. package/dist/modules/product/sellable.d.ts +26 -0
  1428. package/dist/modules/product/sellable.d.ts.map +1 -0
  1429. package/dist/modules/product/sellable.js +56 -0
  1430. package/dist/modules/product/sellable.js.map +1 -0
  1431. package/dist/modules/product/types.d.ts +2 -2
  1432. package/dist/modules/product/views.d.ts.map +1 -1
  1433. package/dist/modules/product/views.js +5 -1
  1434. package/dist/modules/product/views.js.map +1 -1
  1435. package/dist/modules/product_activity_backend/index.d.ts.map +1 -1
  1436. package/dist/modules/product_activity_backend/index.js +2 -3
  1437. package/dist/modules/product_activity_backend/index.js.map +1 -1
  1438. package/dist/modules/product_backend/client/media-upload-view.d.mts.map +1 -1
  1439. package/dist/modules/product_backend/client/media-upload-view.mjs +1 -0
  1440. package/dist/modules/product_backend/client/media-upload-view.mjs.map +1 -1
  1441. package/dist/modules/product_backend/client/product.css +964 -0
  1442. package/dist/modules/product_backend/index.d.ts +5 -6
  1443. package/dist/modules/product_backend/index.d.ts.map +1 -1
  1444. package/dist/modules/product_backend/index.js +203 -14
  1445. package/dist/modules/product_backend/index.js.map +1 -1
  1446. package/dist/modules/product_backend/menus.js +2 -2
  1447. package/dist/modules/product_backend/menus.js.map +1 -1
  1448. package/dist/modules/product_backend/relation-control.d.ts +85 -0
  1449. package/dist/modules/product_backend/relation-control.d.ts.map +1 -0
  1450. package/dist/modules/product_backend/relation-control.js +129 -0
  1451. package/dist/modules/product_backend/relation-control.js.map +1 -0
  1452. package/dist/modules/product_backend/routes.d.ts.map +1 -1
  1453. package/dist/modules/product_backend/routes.js +502 -196
  1454. package/dist/modules/product_backend/routes.js.map +1 -1
  1455. package/dist/modules/product_backend/screens/attributes.d.ts +7 -0
  1456. package/dist/modules/product_backend/screens/attributes.d.ts.map +1 -0
  1457. package/dist/modules/product_backend/screens/attributes.js +66 -0
  1458. package/dist/modules/product_backend/screens/attributes.js.map +1 -0
  1459. package/dist/modules/product_backend/screens/create.d.ts +16 -0
  1460. package/dist/modules/product_backend/screens/create.d.ts.map +1 -0
  1461. package/dist/modules/product_backend/screens/create.js +86 -0
  1462. package/dist/modules/product_backend/screens/create.js.map +1 -0
  1463. package/dist/modules/product_backend/screens/detail.d.ts +87 -0
  1464. package/dist/modules/product_backend/screens/detail.d.ts.map +1 -0
  1465. package/dist/modules/product_backend/screens/detail.js +381 -0
  1466. package/dist/modules/product_backend/screens/detail.js.map +1 -0
  1467. package/dist/modules/product_backend/screens/favorite.d.ts +6 -0
  1468. package/dist/modules/product_backend/screens/favorite.d.ts.map +1 -0
  1469. package/dist/modules/product_backend/screens/favorite.js +43 -0
  1470. package/dist/modules/product_backend/screens/favorite.js.map +1 -0
  1471. package/dist/modules/product_backend/screens/index.d.ts +10 -0
  1472. package/dist/modules/product_backend/screens/index.d.ts.map +1 -0
  1473. package/dist/modules/product_backend/screens/index.js +7 -0
  1474. package/dist/modules/product_backend/screens/index.js.map +1 -0
  1475. package/dist/modules/product_backend/screens/list.d.ts +54 -0
  1476. package/dist/modules/product_backend/screens/list.d.ts.map +1 -0
  1477. package/dist/modules/product_backend/screens/list.js +124 -0
  1478. package/dist/modules/product_backend/screens/list.js.map +1 -0
  1479. package/dist/modules/product_backend/screens/variant.d.ts +9 -0
  1480. package/dist/modules/product_backend/screens/variant.d.ts.map +1 -0
  1481. package/dist/modules/product_backend/screens/variant.js +113 -0
  1482. package/dist/modules/product_backend/screens/variant.js.map +1 -0
  1483. package/dist/modules/product_mail_backend/index.d.ts.map +1 -1
  1484. package/dist/modules/product_mail_backend/index.js +2 -3
  1485. package/dist/modules/product_mail_backend/index.js.map +1 -1
  1486. package/dist/modules/product_media/functions.d.ts.map +1 -1
  1487. package/dist/modules/product_media/functions.js +59 -6
  1488. package/dist/modules/product_media/functions.js.map +1 -1
  1489. package/dist/modules/product_media/index.js +0 -1
  1490. package/dist/modules/product_media/index.js.map +1 -1
  1491. package/dist/modules/product_variant_activity_backend/index.d.ts.map +1 -1
  1492. package/dist/modules/product_variant_activity_backend/index.js +2 -3
  1493. package/dist/modules/product_variant_activity_backend/index.js.map +1 -1
  1494. package/dist/modules/product_variant_mail_backend/index.d.ts.map +1 -1
  1495. package/dist/modules/product_variant_mail_backend/index.js +2 -3
  1496. package/dist/modules/product_variant_mail_backend/index.js.map +1 -1
  1497. package/dist/modules/purchase/functions.d.ts.map +1 -1
  1498. package/dist/modules/purchase/functions.js +852 -225
  1499. package/dist/modules/purchase/functions.js.map +1 -1
  1500. package/dist/modules/purchase/index.d.ts.map +1 -1
  1501. package/dist/modules/purchase/index.js +30 -5
  1502. package/dist/modules/purchase/index.js.map +1 -1
  1503. package/dist/modules/purchase/models.d.ts.map +1 -1
  1504. package/dist/modules/purchase/models.js +1 -0
  1505. package/dist/modules/purchase/models.js.map +1 -1
  1506. package/dist/modules/purchase/reports.d.ts +4 -0
  1507. package/dist/modules/purchase/reports.d.ts.map +1 -0
  1508. package/dist/modules/purchase/reports.js +86 -0
  1509. package/dist/modules/purchase/reports.js.map +1 -0
  1510. package/dist/modules/purchase_backend/index.js +513 -112
  1511. package/dist/modules/purchase_backend/index.js.map +1 -1
  1512. package/dist/modules/purchase_backend/screens/index.d.ts +10 -0
  1513. package/dist/modules/purchase_backend/screens/index.d.ts.map +1 -0
  1514. package/dist/modules/purchase_backend/screens/index.js +10 -0
  1515. package/dist/modules/purchase_backend/screens/index.js.map +1 -0
  1516. package/dist/modules/purchase_backend/screens/order-detail.d.ts +31 -0
  1517. package/dist/modules/purchase_backend/screens/order-detail.d.ts.map +1 -0
  1518. package/dist/modules/purchase_backend/screens/order-detail.js +204 -0
  1519. package/dist/modules/purchase_backend/screens/order-detail.js.map +1 -0
  1520. package/dist/modules/purchase_backend/screens/order-list-shared.d.ts +7 -0
  1521. package/dist/modules/purchase_backend/screens/order-list-shared.d.ts.map +1 -0
  1522. package/dist/modules/purchase_backend/screens/order-list-shared.js +58 -0
  1523. package/dist/modules/purchase_backend/screens/order-list-shared.js.map +1 -0
  1524. package/dist/modules/purchase_backend/screens/overview.d.ts +19 -0
  1525. package/dist/modules/purchase_backend/screens/overview.d.ts.map +1 -0
  1526. package/dist/modules/purchase_backend/screens/overview.js +52 -0
  1527. package/dist/modules/purchase_backend/screens/overview.js.map +1 -0
  1528. package/dist/modules/purchase_backend/screens/purchase-orders-list.d.ts +14 -0
  1529. package/dist/modules/purchase_backend/screens/purchase-orders-list.d.ts.map +1 -0
  1530. package/dist/modules/purchase_backend/screens/purchase-orders-list.js +26 -0
  1531. package/dist/modules/purchase_backend/screens/purchase-orders-list.js.map +1 -0
  1532. package/dist/modules/purchase_backend/screens/rfq-create.d.ts +16 -0
  1533. package/dist/modules/purchase_backend/screens/rfq-create.d.ts.map +1 -0
  1534. package/dist/modules/purchase_backend/screens/rfq-create.js +24 -0
  1535. package/dist/modules/purchase_backend/screens/rfq-create.js.map +1 -0
  1536. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts +18 -0
  1537. package/dist/modules/purchase_backend/screens/rfqs-list.d.ts.map +1 -0
  1538. package/dist/modules/purchase_backend/screens/rfqs-list.js +28 -0
  1539. package/dist/modules/purchase_backend/screens/rfqs-list.js.map +1 -0
  1540. package/dist/modules/purchase_backend/screens/shared.d.ts +18 -0
  1541. package/dist/modules/purchase_backend/screens/shared.d.ts.map +1 -0
  1542. package/dist/modules/purchase_backend/screens/shared.js +30 -0
  1543. package/dist/modules/purchase_backend/screens/shared.js.map +1 -0
  1544. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.d.ts +20 -0
  1545. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.d.ts.map +1 -0
  1546. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js +25 -0
  1547. package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js.map +1 -0
  1548. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts +33 -0
  1549. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts.map +1 -0
  1550. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js +73 -0
  1551. package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js.map +1 -0
  1552. package/dist/modules/purchase_staff_channel/channel-routes.d.ts +2 -0
  1553. package/dist/modules/purchase_staff_channel/channel-routes.d.ts.map +1 -0
  1554. package/dist/modules/purchase_staff_channel/channel-routes.js +119 -0
  1555. package/dist/modules/purchase_staff_channel/channel-routes.js.map +1 -0
  1556. package/dist/modules/purchase_staff_channel/index.d.ts +8 -0
  1557. package/dist/modules/purchase_staff_channel/index.d.ts.map +1 -0
  1558. package/dist/modules/purchase_staff_channel/index.js +45 -0
  1559. package/dist/modules/purchase_staff_channel/index.js.map +1 -0
  1560. package/dist/modules/purchase_staff_channel/order-routes.d.ts +2 -0
  1561. package/dist/modules/purchase_staff_channel/order-routes.d.ts.map +1 -0
  1562. package/dist/modules/purchase_staff_channel/order-routes.js +754 -0
  1563. package/dist/modules/purchase_staff_channel/order-routes.js.map +1 -0
  1564. package/dist/modules/purchase_staff_channel/product-routes.d.ts +2 -0
  1565. package/dist/modules/purchase_staff_channel/product-routes.d.ts.map +1 -0
  1566. package/dist/modules/purchase_staff_channel/product-routes.js +183 -0
  1567. package/dist/modules/purchase_staff_channel/product-routes.js.map +1 -0
  1568. package/dist/modules/purchase_staff_channel/vendor-bill-routes.d.ts +2 -0
  1569. package/dist/modules/purchase_staff_channel/vendor-bill-routes.d.ts.map +1 -0
  1570. package/dist/modules/purchase_staff_channel/vendor-bill-routes.js +189 -0
  1571. package/dist/modules/purchase_staff_channel/vendor-bill-routes.js.map +1 -0
  1572. package/dist/modules/quality/functions.d.ts +3 -0
  1573. package/dist/modules/quality/functions.d.ts.map +1 -0
  1574. package/dist/modules/quality/functions.js +381 -0
  1575. package/dist/modules/quality/functions.js.map +1 -0
  1576. package/dist/modules/quality/index.d.ts +5 -0
  1577. package/dist/modules/quality/index.d.ts.map +1 -0
  1578. package/dist/modules/quality/index.js +19 -0
  1579. package/dist/modules/quality/index.js.map +1 -0
  1580. package/dist/modules/quality/models.d.ts +3 -0
  1581. package/dist/modules/quality/models.d.ts.map +1 -0
  1582. package/dist/modules/quality/models.js +91 -0
  1583. package/dist/modules/quality/models.js.map +1 -0
  1584. package/dist/modules/quality_staff_channel/channel-routes.d.ts +2 -0
  1585. package/dist/modules/quality_staff_channel/channel-routes.d.ts.map +1 -0
  1586. package/dist/modules/quality_staff_channel/channel-routes.js +495 -0
  1587. package/dist/modules/quality_staff_channel/channel-routes.js.map +1 -0
  1588. package/dist/modules/quality_staff_channel/index.d.ts +5 -0
  1589. package/dist/modules/quality_staff_channel/index.d.ts.map +1 -0
  1590. package/dist/modules/quality_staff_channel/index.js +30 -0
  1591. package/dist/modules/quality_staff_channel/index.js.map +1 -0
  1592. package/dist/modules/report/functions.d.ts +3 -0
  1593. package/dist/modules/report/functions.d.ts.map +1 -0
  1594. package/dist/modules/report/functions.js +197 -0
  1595. package/dist/modules/report/functions.js.map +1 -0
  1596. package/dist/modules/report/index.d.ts +3 -0
  1597. package/dist/modules/report/index.d.ts.map +1 -0
  1598. package/dist/modules/report/index.js +21 -0
  1599. package/dist/modules/report/index.js.map +1 -0
  1600. package/dist/modules/report/jobs.d.ts +3 -0
  1601. package/dist/modules/report/jobs.d.ts.map +1 -0
  1602. package/dist/modules/report/jobs.js +18 -0
  1603. package/dist/modules/report/jobs.js.map +1 -0
  1604. package/dist/modules/report/models.d.ts +3 -0
  1605. package/dist/modules/report/models.d.ts.map +1 -0
  1606. package/dist/modules/report/models.js +45 -0
  1607. package/dist/modules/report/models.js.map +1 -0
  1608. package/dist/modules/report/routes.d.ts +19 -0
  1609. package/dist/modules/report/routes.d.ts.map +1 -0
  1610. package/dist/modules/report/routes.js +138 -0
  1611. package/dist/modules/report/routes.js.map +1 -0
  1612. package/dist/modules/report_backend/index.d.ts +3 -0
  1613. package/dist/modules/report_backend/index.d.ts.map +1 -0
  1614. package/dist/modules/report_backend/index.js +67 -0
  1615. package/dist/modules/report_backend/index.js.map +1 -0
  1616. package/dist/modules/report_backend/routes.d.ts +10 -0
  1617. package/dist/modules/report_backend/routes.d.ts.map +1 -0
  1618. package/dist/modules/report_backend/routes.js +87 -0
  1619. package/dist/modules/report_backend/routes.js.map +1 -0
  1620. package/dist/modules/report_backend/screens/index.d.ts +13 -0
  1621. package/dist/modules/report_backend/screens/index.d.ts.map +1 -0
  1622. package/dist/modules/report_backend/screens/index.js +91 -0
  1623. package/dist/modules/report_backend/screens/index.js.map +1 -0
  1624. package/dist/modules/sale/functions.d.ts.map +1 -1
  1625. package/dist/modules/sale/functions.js +796 -238
  1626. package/dist/modules/sale/functions.js.map +1 -1
  1627. package/dist/modules/sale/index.d.ts.map +1 -1
  1628. package/dist/modules/sale/index.js +44 -5
  1629. package/dist/modules/sale/index.js.map +1 -1
  1630. package/dist/modules/sale/models.d.ts.map +1 -1
  1631. package/dist/modules/sale/models.js +47 -1
  1632. package/dist/modules/sale/models.js.map +1 -1
  1633. package/dist/modules/sale/relations.d.ts.map +1 -1
  1634. package/dist/modules/sale/relations.js +6 -0
  1635. package/dist/modules/sale/relations.js.map +1 -1
  1636. package/dist/modules/sale/reports.d.ts +4 -0
  1637. package/dist/modules/sale/reports.d.ts.map +1 -0
  1638. package/dist/modules/sale/reports.js +132 -0
  1639. package/dist/modules/sale/reports.js.map +1 -0
  1640. package/dist/modules/sale/scope.d.ts +31 -0
  1641. package/dist/modules/sale/scope.d.ts.map +1 -0
  1642. package/dist/modules/sale/scope.js +34 -0
  1643. package/dist/modules/sale/scope.js.map +1 -0
  1644. package/dist/modules/sale_activity_backend/index.d.ts.map +1 -1
  1645. package/dist/modules/sale_activity_backend/index.js +0 -1
  1646. package/dist/modules/sale_activity_backend/index.js.map +1 -1
  1647. package/dist/modules/sale_backend/index.js +338 -121
  1648. package/dist/modules/sale_backend/index.js.map +1 -1
  1649. package/dist/modules/sale_backend/screens/index.d.ts +9 -0
  1650. package/dist/modules/sale_backend/screens/index.d.ts.map +1 -0
  1651. package/dist/modules/sale_backend/screens/index.js +9 -0
  1652. package/dist/modules/sale_backend/screens/index.js.map +1 -0
  1653. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts +14 -0
  1654. package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts.map +1 -0
  1655. package/dist/modules/sale_backend/screens/invoicing-policies-list.js +48 -0
  1656. package/dist/modules/sale_backend/screens/invoicing-policies-list.js.map +1 -0
  1657. package/dist/modules/sale_backend/screens/invoicing-policy-create.d.ts +14 -0
  1658. package/dist/modules/sale_backend/screens/invoicing-policy-create.d.ts.map +1 -0
  1659. package/dist/modules/sale_backend/screens/invoicing-policy-create.js +38 -0
  1660. package/dist/modules/sale_backend/screens/invoicing-policy-create.js.map +1 -0
  1661. package/dist/modules/sale_backend/screens/order-detail.d.ts +43 -0
  1662. package/dist/modules/sale_backend/screens/order-detail.d.ts.map +1 -0
  1663. package/dist/modules/sale_backend/screens/order-detail.js +226 -0
  1664. package/dist/modules/sale_backend/screens/order-detail.js.map +1 -0
  1665. package/dist/modules/sale_backend/screens/overview.d.ts +31 -0
  1666. package/dist/modules/sale_backend/screens/overview.d.ts.map +1 -0
  1667. package/dist/modules/sale_backend/screens/overview.js +73 -0
  1668. package/dist/modules/sale_backend/screens/overview.js.map +1 -0
  1669. package/dist/modules/sale_backend/screens/quotation-create.d.ts +13 -0
  1670. package/dist/modules/sale_backend/screens/quotation-create.d.ts.map +1 -0
  1671. package/dist/modules/sale_backend/screens/quotation-create.js +19 -0
  1672. package/dist/modules/sale_backend/screens/quotation-create.js.map +1 -0
  1673. package/dist/modules/sale_backend/screens/quotations-list.d.ts +25 -0
  1674. package/dist/modules/sale_backend/screens/quotations-list.d.ts.map +1 -0
  1675. package/dist/modules/sale_backend/screens/quotations-list.js +96 -0
  1676. package/dist/modules/sale_backend/screens/quotations-list.js.map +1 -0
  1677. package/dist/modules/sale_backend/screens/sales-orders-list.d.ts +25 -0
  1678. package/dist/modules/sale_backend/screens/sales-orders-list.d.ts.map +1 -0
  1679. package/dist/modules/sale_backend/screens/sales-orders-list.js +100 -0
  1680. package/dist/modules/sale_backend/screens/sales-orders-list.js.map +1 -0
  1681. package/dist/modules/sale_backend/screens/shared.d.ts +4 -0
  1682. package/dist/modules/sale_backend/screens/shared.d.ts.map +1 -0
  1683. package/dist/modules/sale_backend/screens/shared.js +4 -0
  1684. package/dist/modules/sale_backend/screens/shared.js.map +1 -0
  1685. package/dist/modules/sale_mail_backend/index.d.ts.map +1 -1
  1686. package/dist/modules/sale_mail_backend/index.js +0 -1
  1687. package/dist/modules/sale_mail_backend/index.js.map +1 -1
  1688. package/dist/modules/sale_staff_channel/channel-routes.d.ts +2 -0
  1689. package/dist/modules/sale_staff_channel/channel-routes.d.ts.map +1 -0
  1690. package/dist/modules/sale_staff_channel/channel-routes.js +296 -0
  1691. package/dist/modules/sale_staff_channel/channel-routes.js.map +1 -0
  1692. package/dist/modules/sale_staff_channel/index.d.ts +7 -0
  1693. package/dist/modules/sale_staff_channel/index.d.ts.map +1 -0
  1694. package/dist/modules/sale_staff_channel/index.js +44 -0
  1695. package/dist/modules/sale_staff_channel/index.js.map +1 -0
  1696. package/dist/modules/sale_staff_channel/order-routes.d.ts +2 -0
  1697. package/dist/modules/sale_staff_channel/order-routes.d.ts.map +1 -0
  1698. package/dist/modules/sale_staff_channel/order-routes.js +658 -0
  1699. package/dist/modules/sale_staff_channel/order-routes.js.map +1 -0
  1700. package/dist/modules/sale_staff_channel/product-routes.d.ts +2 -0
  1701. package/dist/modules/sale_staff_channel/product-routes.d.ts.map +1 -0
  1702. package/dist/modules/sale_staff_channel/product-routes.js +183 -0
  1703. package/dist/modules/sale_staff_channel/product-routes.js.map +1 -0
  1704. package/dist/modules/stock/functions.d.ts.map +1 -1
  1705. package/dist/modules/stock/functions.js +1239 -332
  1706. package/dist/modules/stock/functions.js.map +1 -1
  1707. package/dist/modules/stock/index.d.ts +2 -0
  1708. package/dist/modules/stock/index.d.ts.map +1 -1
  1709. package/dist/modules/stock/index.js +29 -6
  1710. package/dist/modules/stock/index.js.map +1 -1
  1711. package/dist/modules/stock/models.d.ts.map +1 -1
  1712. package/dist/modules/stock/models.js +1 -0
  1713. package/dist/modules/stock/models.js.map +1 -1
  1714. package/dist/modules/stock/reports.d.ts +4 -0
  1715. package/dist/modules/stock/reports.d.ts.map +1 -0
  1716. package/dist/modules/stock/reports.js +100 -0
  1717. package/dist/modules/stock/reports.js.map +1 -0
  1718. package/dist/modules/stock/routing.d.ts +1 -1
  1719. package/dist/modules/stock/routing.d.ts.map +1 -1
  1720. package/dist/modules/stock/routing.js +35 -30
  1721. package/dist/modules/stock/routing.js.map +1 -1
  1722. package/dist/modules/stock/scope.d.ts +23 -0
  1723. package/dist/modules/stock/scope.d.ts.map +1 -0
  1724. package/dist/modules/stock/scope.js +26 -0
  1725. package/dist/modules/stock/scope.js.map +1 -0
  1726. package/dist/modules/stock/units.d.ts +14 -0
  1727. package/dist/modules/stock/units.d.ts.map +1 -0
  1728. package/dist/modules/stock/units.js +50 -0
  1729. package/dist/modules/stock/units.js.map +1 -0
  1730. package/dist/modules/stock_activity_backend/index.d.ts.map +1 -1
  1731. package/dist/modules/stock_activity_backend/index.js +0 -1
  1732. package/dist/modules/stock_activity_backend/index.js.map +1 -1
  1733. package/dist/modules/stock_backend/client/editor-view.d.mts.map +1 -1
  1734. package/dist/modules/stock_backend/client/editor-view.mjs +12 -10
  1735. package/dist/modules/stock_backend/client/editor-view.mjs.map +1 -1
  1736. package/dist/modules/stock_backend/index.js +27 -20
  1737. package/dist/modules/stock_backend/index.js.map +1 -1
  1738. package/dist/modules/stock_backend/routes.d.ts.map +1 -1
  1739. package/dist/modules/stock_backend/routes.js +485 -232
  1740. package/dist/modules/stock_backend/routes.js.map +1 -1
  1741. package/dist/modules/stock_backend/screens/forecast.d.ts +28 -0
  1742. package/dist/modules/stock_backend/screens/forecast.d.ts.map +1 -0
  1743. package/dist/modules/stock_backend/screens/forecast.js +108 -0
  1744. package/dist/modules/stock_backend/screens/forecast.js.map +1 -0
  1745. package/dist/modules/stock_backend/screens/index.d.ts +22 -0
  1746. package/dist/modules/stock_backend/screens/index.d.ts.map +1 -0
  1747. package/dist/modules/stock_backend/screens/index.js +22 -0
  1748. package/dist/modules/stock_backend/screens/index.js.map +1 -0
  1749. package/dist/modules/stock_backend/screens/inventory.d.ts +27 -0
  1750. package/dist/modules/stock_backend/screens/inventory.d.ts.map +1 -0
  1751. package/dist/modules/stock_backend/screens/inventory.js +128 -0
  1752. package/dist/modules/stock_backend/screens/inventory.js.map +1 -0
  1753. package/dist/modules/stock_backend/screens/location-create.d.ts +15 -0
  1754. package/dist/modules/stock_backend/screens/location-create.d.ts.map +1 -0
  1755. package/dist/modules/stock_backend/screens/location-create.js +75 -0
  1756. package/dist/modules/stock_backend/screens/location-create.js.map +1 -0
  1757. package/dist/modules/stock_backend/screens/locations-list.d.ts +21 -0
  1758. package/dist/modules/stock_backend/screens/locations-list.d.ts.map +1 -0
  1759. package/dist/modules/stock_backend/screens/locations-list.js +62 -0
  1760. package/dist/modules/stock_backend/screens/locations-list.js.map +1 -0
  1761. package/dist/modules/stock_backend/screens/lot-create.d.ts +14 -0
  1762. package/dist/modules/stock_backend/screens/lot-create.d.ts.map +1 -0
  1763. package/dist/modules/stock_backend/screens/lot-create.js +60 -0
  1764. package/dist/modules/stock_backend/screens/lot-create.js.map +1 -0
  1765. package/dist/modules/stock_backend/screens/lot-detail.d.ts +30 -0
  1766. package/dist/modules/stock_backend/screens/lot-detail.d.ts.map +1 -0
  1767. package/dist/modules/stock_backend/screens/lot-detail.js +84 -0
  1768. package/dist/modules/stock_backend/screens/lot-detail.js.map +1 -0
  1769. package/dist/modules/stock_backend/screens/lots-list.d.ts +25 -0
  1770. package/dist/modules/stock_backend/screens/lots-list.d.ts.map +1 -0
  1771. package/dist/modules/stock_backend/screens/lots-list.js +54 -0
  1772. package/dist/modules/stock_backend/screens/lots-list.js.map +1 -0
  1773. package/dist/modules/stock_backend/screens/picking-type-create.d.ts +15 -0
  1774. package/dist/modules/stock_backend/screens/picking-type-create.d.ts.map +1 -0
  1775. package/dist/modules/stock_backend/screens/picking-type-create.js +89 -0
  1776. package/dist/modules/stock_backend/screens/picking-type-create.js.map +1 -0
  1777. package/dist/modules/stock_backend/screens/picking-types-list.d.ts +22 -0
  1778. package/dist/modules/stock_backend/screens/picking-types-list.d.ts.map +1 -0
  1779. package/dist/modules/stock_backend/screens/picking-types-list.js +80 -0
  1780. package/dist/modules/stock_backend/screens/picking-types-list.js.map +1 -0
  1781. package/dist/modules/stock_backend/screens/replenishment-create.d.ts +17 -0
  1782. package/dist/modules/stock_backend/screens/replenishment-create.d.ts.map +1 -0
  1783. package/dist/modules/stock_backend/screens/replenishment-create.js +74 -0
  1784. package/dist/modules/stock_backend/screens/replenishment-create.js.map +1 -0
  1785. package/dist/modules/stock_backend/screens/replenishment-list.d.ts +29 -0
  1786. package/dist/modules/stock_backend/screens/replenishment-list.d.ts.map +1 -0
  1787. package/dist/modules/stock_backend/screens/replenishment-list.js +84 -0
  1788. package/dist/modules/stock_backend/screens/replenishment-list.js.map +1 -0
  1789. package/dist/modules/stock_backend/screens/shared.d.ts +12 -0
  1790. package/dist/modules/stock_backend/screens/shared.d.ts.map +1 -0
  1791. package/dist/modules/stock_backend/screens/shared.js +29 -0
  1792. package/dist/modules/stock_backend/screens/shared.js.map +1 -0
  1793. package/dist/modules/stock_backend/screens/stock-route-create.d.ts +13 -0
  1794. package/dist/modules/stock_backend/screens/stock-route-create.d.ts.map +1 -0
  1795. package/dist/modules/stock_backend/screens/stock-route-create.js +52 -0
  1796. package/dist/modules/stock_backend/screens/stock-route-create.js.map +1 -0
  1797. package/dist/modules/stock_backend/screens/stock-route-detail.d.ts +30 -0
  1798. package/dist/modules/stock_backend/screens/stock-route-detail.d.ts.map +1 -0
  1799. package/dist/modules/stock_backend/screens/stock-route-detail.js +131 -0
  1800. package/dist/modules/stock_backend/screens/stock-route-detail.js.map +1 -0
  1801. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts +22 -0
  1802. package/dist/modules/stock_backend/screens/stock-routes-list.d.ts.map +1 -0
  1803. package/dist/modules/stock_backend/screens/stock-routes-list.js +51 -0
  1804. package/dist/modules/stock_backend/screens/stock-routes-list.js.map +1 -0
  1805. package/dist/modules/stock_backend/screens/stock.d.ts +7 -0
  1806. package/dist/modules/stock_backend/screens/stock.d.ts.map +1 -0
  1807. package/dist/modules/stock_backend/screens/stock.js +13 -0
  1808. package/dist/modules/stock_backend/screens/stock.js.map +1 -0
  1809. package/dist/modules/stock_backend/screens/transfer-create.d.ts +13 -0
  1810. package/dist/modules/stock_backend/screens/transfer-create.d.ts.map +1 -0
  1811. package/dist/modules/stock_backend/screens/transfer-create.js +38 -0
  1812. package/dist/modules/stock_backend/screens/transfer-create.js.map +1 -0
  1813. package/dist/modules/stock_backend/screens/transfer-detail.d.ts +27 -0
  1814. package/dist/modules/stock_backend/screens/transfer-detail.d.ts.map +1 -0
  1815. package/dist/modules/stock_backend/screens/transfer-detail.js +91 -0
  1816. package/dist/modules/stock_backend/screens/transfer-detail.js.map +1 -0
  1817. package/dist/modules/stock_backend/screens/transfers-list.d.ts +25 -0
  1818. package/dist/modules/stock_backend/screens/transfers-list.d.ts.map +1 -0
  1819. package/dist/modules/stock_backend/screens/transfers-list.js +81 -0
  1820. package/dist/modules/stock_backend/screens/transfers-list.js.map +1 -0
  1821. package/dist/modules/stock_backend/screens/warehouse-create.d.ts +13 -0
  1822. package/dist/modules/stock_backend/screens/warehouse-create.d.ts.map +1 -0
  1823. package/dist/modules/stock_backend/screens/warehouse-create.js +79 -0
  1824. package/dist/modules/stock_backend/screens/warehouse-create.js.map +1 -0
  1825. package/dist/modules/stock_backend/screens/warehouses-list.d.ts +21 -0
  1826. package/dist/modules/stock_backend/screens/warehouses-list.d.ts.map +1 -0
  1827. package/dist/modules/stock_backend/screens/warehouses-list.js +60 -0
  1828. package/dist/modules/stock_backend/screens/warehouses-list.js.map +1 -0
  1829. package/dist/modules/stock_lot_activity_backend/index.d.ts.map +1 -1
  1830. package/dist/modules/stock_lot_activity_backend/index.js +0 -1
  1831. package/dist/modules/stock_lot_activity_backend/index.js.map +1 -1
  1832. package/dist/modules/stock_lot_mail_backend/index.d.ts.map +1 -1
  1833. package/dist/modules/stock_lot_mail_backend/index.js +0 -1
  1834. package/dist/modules/stock_lot_mail_backend/index.js.map +1 -1
  1835. package/dist/modules/stock_mail_backend/index.d.ts.map +1 -1
  1836. package/dist/modules/stock_mail_backend/index.js +0 -1
  1837. package/dist/modules/stock_mail_backend/index.js.map +1 -1
  1838. package/dist/modules/stock_mail_inbound/index.d.ts.map +1 -1
  1839. package/dist/modules/stock_mail_inbound/index.js +0 -2
  1840. package/dist/modules/stock_mail_inbound/index.js.map +1 -1
  1841. package/dist/modules/stock_staff_channel/channel-routes.d.ts +656 -0
  1842. package/dist/modules/stock_staff_channel/channel-routes.d.ts.map +1 -0
  1843. package/dist/modules/stock_staff_channel/channel-routes.js +445 -0
  1844. package/dist/modules/stock_staff_channel/channel-routes.js.map +1 -0
  1845. package/dist/modules/stock_staff_channel/functions.d.ts +3 -0
  1846. package/dist/modules/stock_staff_channel/functions.d.ts.map +1 -0
  1847. package/dist/modules/stock_staff_channel/functions.js +954 -0
  1848. package/dist/modules/stock_staff_channel/functions.js.map +1 -0
  1849. package/dist/modules/stock_staff_channel/index.d.ts +8 -0
  1850. package/dist/modules/stock_staff_channel/index.d.ts.map +1 -0
  1851. package/dist/modules/stock_staff_channel/index.js +37 -0
  1852. package/dist/modules/stock_staff_channel/index.js.map +1 -0
  1853. package/dist/modules/stock_staff_channel/models.d.ts +4 -0
  1854. package/dist/modules/stock_staff_channel/models.d.ts.map +1 -0
  1855. package/dist/modules/stock_staff_channel/models.js +119 -0
  1856. package/dist/modules/stock_staff_channel/models.js.map +1 -0
  1857. package/dist/modules/stock_staff_channel/operation-routes.d.ts +2 -0
  1858. package/dist/modules/stock_staff_channel/operation-routes.d.ts.map +1 -0
  1859. package/dist/modules/stock_staff_channel/operation-routes.js +1269 -0
  1860. package/dist/modules/stock_staff_channel/operation-routes.js.map +1 -0
  1861. package/dist/modules/storage/functions.d.ts.map +1 -1
  1862. package/dist/modules/storage/functions.js +18 -5
  1863. package/dist/modules/storage/functions.js.map +1 -1
  1864. package/dist/modules/storage/index.js +0 -1
  1865. package/dist/modules/storage/index.js.map +1 -1
  1866. package/dist/modules/storage/jobs.d.ts +21 -1
  1867. package/dist/modules/storage/jobs.d.ts.map +1 -1
  1868. package/dist/modules/storage/jobs.js +142 -2
  1869. package/dist/modules/storage/jobs.js.map +1 -1
  1870. package/dist/modules/storage/models.d.ts.map +1 -1
  1871. package/dist/modules/storage/models.js +2 -0
  1872. package/dist/modules/storage/models.js.map +1 -1
  1873. package/dist/modules/storage/policy.d.ts +5 -0
  1874. package/dist/modules/storage/policy.d.ts.map +1 -0
  1875. package/dist/modules/storage/policy.js +13 -0
  1876. package/dist/modules/storage/policy.js.map +1 -0
  1877. package/dist/modules/storage/routes.d.ts +1 -0
  1878. package/dist/modules/storage/routes.d.ts.map +1 -1
  1879. package/dist/modules/storage/routes.js +19 -15
  1880. package/dist/modules/storage/routes.js.map +1 -1
  1881. package/dist/modules/uom/convert.d.ts +1 -1
  1882. package/dist/modules/uom/convert.js +2 -2
  1883. package/dist/modules/uom/convert.js.map +1 -1
  1884. package/dist/modules/uom/functions.d.ts.map +1 -1
  1885. package/dist/modules/uom/functions.js +39 -4
  1886. package/dist/modules/uom/functions.js.map +1 -1
  1887. package/dist/modules/uom/index.d.ts.map +1 -1
  1888. package/dist/modules/uom/index.js +1 -2
  1889. package/dist/modules/uom/index.js.map +1 -1
  1890. package/dist/modules/uom/messages.js +2 -2
  1891. package/dist/modules/uom/messages.js.map +1 -1
  1892. package/dist/modules/uom/models.d.ts +1 -1
  1893. package/dist/modules/uom/models.d.ts.map +1 -1
  1894. package/dist/modules/uom/models.js +1 -1
  1895. package/dist/modules/uom/models.js.map +1 -1
  1896. package/dist/modules/user/authorization.d.ts +80 -0
  1897. package/dist/modules/user/authorization.d.ts.map +1 -0
  1898. package/dist/modules/user/authorization.js +1039 -0
  1899. package/dist/modules/user/authorization.js.map +1 -0
  1900. package/dist/modules/user/functions.d.ts.map +1 -1
  1901. package/dist/modules/user/functions.js +188 -32
  1902. package/dist/modules/user/functions.js.map +1 -1
  1903. package/dist/modules/user/index.d.ts +4 -1
  1904. package/dist/modules/user/index.d.ts.map +1 -1
  1905. package/dist/modules/user/index.js +2 -3
  1906. package/dist/modules/user/index.js.map +1 -1
  1907. package/dist/modules/user/login.d.ts +1 -27
  1908. package/dist/modules/user/login.d.ts.map +1 -1
  1909. package/dist/modules/user/login.js +5 -45
  1910. package/dist/modules/user/login.js.map +1 -1
  1911. package/dist/modules/user/messages.d.ts +6 -0
  1912. package/dist/modules/user/messages.d.ts.map +1 -1
  1913. package/dist/modules/user/messages.js +6 -0
  1914. package/dist/modules/user/messages.js.map +1 -1
  1915. package/dist/modules/user/models.d.ts +1 -1
  1916. package/dist/modules/user/models.d.ts.map +1 -1
  1917. package/dist/modules/user/models.js +73 -9
  1918. package/dist/modules/user/models.js.map +1 -1
  1919. package/dist/modules/user/relations.d.ts.map +1 -1
  1920. package/dist/modules/user/relations.js +6 -0
  1921. package/dist/modules/user/relations.js.map +1 -1
  1922. package/dist/modules/user/roles.d.ts +11 -1
  1923. package/dist/modules/user/roles.d.ts.map +1 -1
  1924. package/dist/modules/user/roles.js +402 -117
  1925. package/dist/modules/user/roles.js.map +1 -1
  1926. package/dist/modules/user/routes.js +1 -1
  1927. package/dist/modules/user/routes.js.map +1 -1
  1928. package/dist/modules/user_backend/index.d.ts +1 -1
  1929. package/dist/modules/user_backend/index.d.ts.map +1 -1
  1930. package/dist/modules/user_backend/index.js +1 -3
  1931. package/dist/modules/user_backend/index.js.map +1 -1
  1932. package/dist/modules/user_backend/messages.d.ts +60 -0
  1933. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  1934. package/dist/modules/user_backend/messages.js +60 -0
  1935. package/dist/modules/user_backend/messages.js.map +1 -1
  1936. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  1937. package/dist/modules/user_backend/routes.js +352 -69
  1938. package/dist/modules/user_backend/routes.js.map +1 -1
  1939. package/dist/modules/user_backend/screens/index.d.ts +11 -0
  1940. package/dist/modules/user_backend/screens/index.d.ts.map +1 -0
  1941. package/dist/modules/user_backend/screens/index.js +8 -0
  1942. package/dist/modules/user_backend/screens/index.js.map +1 -0
  1943. package/dist/modules/user_backend/screens/presets-form.d.ts +16 -0
  1944. package/dist/modules/user_backend/screens/presets-form.d.ts.map +1 -0
  1945. package/dist/modules/user_backend/screens/presets-form.js +37 -0
  1946. package/dist/modules/user_backend/screens/presets-form.js.map +1 -0
  1947. package/dist/modules/user_backend/screens/profile-form.d.ts +14 -0
  1948. package/dist/modules/user_backend/screens/profile-form.d.ts.map +1 -0
  1949. package/dist/modules/user_backend/screens/profile-form.js +37 -0
  1950. package/dist/modules/user_backend/screens/profile-form.js.map +1 -0
  1951. package/dist/modules/user_backend/screens/role-form.d.ts +21 -0
  1952. package/dist/modules/user_backend/screens/role-form.d.ts.map +1 -0
  1953. package/dist/modules/user_backend/screens/role-form.js +93 -0
  1954. package/dist/modules/user_backend/screens/role-form.js.map +1 -0
  1955. package/dist/modules/user_backend/screens/roles-list.d.ts +15 -0
  1956. package/dist/modules/user_backend/screens/roles-list.d.ts.map +1 -0
  1957. package/dist/modules/user_backend/screens/roles-list.js +48 -0
  1958. package/dist/modules/user_backend/screens/roles-list.js.map +1 -0
  1959. package/dist/modules/user_backend/screens/sessions.d.ts +5 -0
  1960. package/dist/modules/user_backend/screens/sessions.d.ts.map +1 -0
  1961. package/dist/modules/user_backend/screens/sessions.js +35 -0
  1962. package/dist/modules/user_backend/screens/sessions.js.map +1 -0
  1963. package/dist/modules/user_backend/screens/types.d.ts +68 -0
  1964. package/dist/modules/user_backend/screens/types.d.ts.map +1 -0
  1965. package/dist/modules/user_backend/screens/types.js +2 -0
  1966. package/dist/modules/user_backend/screens/types.js.map +1 -0
  1967. package/dist/modules/user_backend/screens/user-form.d.ts +55 -0
  1968. package/dist/modules/user_backend/screens/user-form.d.ts.map +1 -0
  1969. package/dist/modules/user_backend/screens/user-form.js +174 -0
  1970. package/dist/modules/user_backend/screens/user-form.js.map +1 -0
  1971. package/dist/modules/user_backend/screens/users-list.d.ts +17 -0
  1972. package/dist/modules/user_backend/screens/users-list.d.ts.map +1 -0
  1973. package/dist/modules/user_backend/screens/users-list.js +56 -0
  1974. package/dist/modules/user_backend/screens/users-list.js.map +1 -0
  1975. package/dist/modules/website/cms.d.ts +18 -1
  1976. package/dist/modules/website/cms.d.ts.map +1 -1
  1977. package/dist/modules/website/cms.js +373 -38
  1978. package/dist/modules/website/cms.js.map +1 -1
  1979. package/dist/modules/website/customer.d.ts.map +1 -1
  1980. package/dist/modules/website/customer.js +249 -1
  1981. package/dist/modules/website/customer.js.map +1 -1
  1982. package/dist/modules/website/index.d.ts.map +1 -1
  1983. package/dist/modules/website/index.js +26 -4
  1984. package/dist/modules/website/index.js.map +1 -1
  1985. package/dist/modules/website/models.d.ts.map +1 -1
  1986. package/dist/modules/website/models.js +101 -0
  1987. package/dist/modules/website/models.js.map +1 -1
  1988. package/dist/modules/website/paths.d.ts +31 -0
  1989. package/dist/modules/website/paths.d.ts.map +1 -0
  1990. package/dist/modules/website/paths.js +48 -0
  1991. package/dist/modules/website/paths.js.map +1 -0
  1992. package/dist/modules/website/publication.d.ts +3 -0
  1993. package/dist/modules/website/publication.d.ts.map +1 -0
  1994. package/dist/modules/website/publication.js +366 -0
  1995. package/dist/modules/website/publication.js.map +1 -0
  1996. package/dist/modules/website/renderable.d.ts +32 -0
  1997. package/dist/modules/website/renderable.d.ts.map +1 -0
  1998. package/dist/modules/website/renderable.js +59 -0
  1999. package/dist/modules/website/renderable.js.map +1 -0
  2000. package/dist/modules/website/sections.d.ts.map +1 -1
  2001. package/dist/modules/website/sections.js +13 -0
  2002. package/dist/modules/website/sections.js.map +1 -1
  2003. package/dist/modules/website_backend/csv.d.ts +23 -0
  2004. package/dist/modules/website_backend/csv.d.ts.map +1 -0
  2005. package/dist/modules/website_backend/csv.js +31 -0
  2006. package/dist/modules/website_backend/csv.js.map +1 -0
  2007. package/dist/modules/website_backend/index.js +260 -2
  2008. package/dist/modules/website_backend/index.js.map +1 -1
  2009. package/dist/modules/website_backend/menus.d.ts.map +1 -1
  2010. package/dist/modules/website_backend/menus.js +28 -6
  2011. package/dist/modules/website_backend/menus.js.map +1 -1
  2012. package/dist/modules/website_backend/routes.d.ts.map +1 -1
  2013. package/dist/modules/website_backend/routes.js +684 -126
  2014. package/dist/modules/website_backend/routes.js.map +1 -1
  2015. package/dist/modules/website_backend/screens/index.d.ts +333 -0
  2016. package/dist/modules/website_backend/screens/index.d.ts.map +1 -0
  2017. package/dist/modules/website_backend/screens/index.js +1332 -0
  2018. package/dist/modules/website_backend/screens/index.js.map +1 -0
  2019. package/dist/modules/website_backend/screens/page-frame.d.ts +14 -0
  2020. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -0
  2021. package/dist/modules/website_backend/screens/page-frame.js +13 -0
  2022. package/dist/modules/website_backend/screens/page-frame.js.map +1 -0
  2023. package/dist/modules/website_form/audit.d.ts +27 -0
  2024. package/dist/modules/website_form/audit.d.ts.map +1 -0
  2025. package/dist/modules/website_form/audit.js +30 -0
  2026. package/dist/modules/website_form/audit.js.map +1 -0
  2027. package/dist/modules/website_form/functions.d.ts.map +1 -1
  2028. package/dist/modules/website_form/functions.js +416 -12
  2029. package/dist/modules/website_form/functions.js.map +1 -1
  2030. package/dist/modules/website_form/index.js +24 -2
  2031. package/dist/modules/website_form/index.js.map +1 -1
  2032. package/dist/modules/website_form/jobs.d.ts +11 -0
  2033. package/dist/modules/website_form/jobs.d.ts.map +1 -0
  2034. package/dist/modules/website_form/jobs.js +80 -0
  2035. package/dist/modules/website_form/jobs.js.map +1 -0
  2036. package/dist/modules/website_form/models.d.ts.map +1 -1
  2037. package/dist/modules/website_form/models.js +89 -0
  2038. package/dist/modules/website_form/models.js.map +1 -1
  2039. package/dist/modules/website_form/purge.d.ts +22 -0
  2040. package/dist/modules/website_form/purge.d.ts.map +1 -0
  2041. package/dist/modules/website_form/purge.js +59 -0
  2042. package/dist/modules/website_form/purge.js.map +1 -0
  2043. package/dist/modules/website_form/retention.d.ts +70 -0
  2044. package/dist/modules/website_form/retention.d.ts.map +1 -0
  2045. package/dist/modules/website_form/retention.js +145 -0
  2046. package/dist/modules/website_form/retention.js.map +1 -0
  2047. package/dist/modules/website_form/routes.d.ts.map +1 -1
  2048. package/dist/modules/website_form/routes.js +37 -3
  2049. package/dist/modules/website_form/routes.js.map +1 -1
  2050. package/dist/modules/website_form_mail/index.d.ts +36 -0
  2051. package/dist/modules/website_form_mail/index.d.ts.map +1 -0
  2052. package/dist/modules/website_form_mail/index.js +137 -0
  2053. package/dist/modules/website_form_mail/index.js.map +1 -0
  2054. package/dist/modules/website_hospitality/channel-routes.d.ts +2 -0
  2055. package/dist/modules/website_hospitality/channel-routes.d.ts.map +1 -0
  2056. package/dist/modules/website_hospitality/channel-routes.js +355 -0
  2057. package/dist/modules/website_hospitality/channel-routes.js.map +1 -0
  2058. package/dist/modules/website_hospitality/functions.d.ts.map +1 -1
  2059. package/dist/modules/website_hospitality/functions.js +27 -2
  2060. package/dist/modules/website_hospitality/functions.js.map +1 -1
  2061. package/dist/modules/website_hospitality/index.js +4 -3
  2062. package/dist/modules/website_hospitality/index.js.map +1 -1
  2063. package/dist/modules/website_hospitality/models.d.ts.map +1 -1
  2064. package/dist/modules/website_hospitality/models.js +2 -0
  2065. package/dist/modules/website_hospitality/models.js.map +1 -1
  2066. package/dist/modules/website_menu/functions.d.ts.map +1 -1
  2067. package/dist/modules/website_menu/functions.js +184 -9
  2068. package/dist/modules/website_menu/functions.js.map +1 -1
  2069. package/dist/modules/website_menu/index.js +6 -1
  2070. package/dist/modules/website_menu/index.js.map +1 -1
  2071. package/dist/modules/website_retail/channel-routes.d.ts +2 -0
  2072. package/dist/modules/website_retail/channel-routes.d.ts.map +1 -0
  2073. package/dist/modules/website_retail/channel-routes.js +305 -0
  2074. package/dist/modules/website_retail/channel-routes.js.map +1 -0
  2075. package/dist/modules/website_retail/functions.d.ts +14 -1
  2076. package/dist/modules/website_retail/functions.d.ts.map +1 -1
  2077. package/dist/modules/website_retail/functions.js +6 -6
  2078. package/dist/modules/website_retail/functions.js.map +1 -1
  2079. package/dist/modules/website_retail/index.js +24 -3
  2080. package/dist/modules/website_retail/index.js.map +1 -1
  2081. package/dist/modules/website_retail/models.d.ts.map +1 -1
  2082. package/dist/modules/website_retail/models.js +30 -0
  2083. package/dist/modules/website_retail/models.js.map +1 -1
  2084. package/dist/modules/website_retail/online.d.ts +3 -0
  2085. package/dist/modules/website_retail/online.d.ts.map +1 -0
  2086. package/dist/modules/website_retail/online.js +710 -0
  2087. package/dist/modules/website_retail/online.js.map +1 -0
  2088. package/dist/modules/website_search/client/search.d.mts +16 -2
  2089. package/dist/modules/website_search/client/search.d.mts.map +1 -1
  2090. package/dist/modules/website_search/client/search.mjs +112 -6
  2091. package/dist/modules/website_search/client/search.mjs.map +1 -1
  2092. package/dist/modules/website_search/functions.d.ts +3 -0
  2093. package/dist/modules/website_search/functions.d.ts.map +1 -0
  2094. package/dist/modules/website_search/functions.js +239 -0
  2095. package/dist/modules/website_search/functions.js.map +1 -0
  2096. package/dist/modules/website_search/index.js +4 -1
  2097. package/dist/modules/website_search/index.js.map +1 -1
  2098. package/dist/modules/website_search/islands.d.ts +6 -0
  2099. package/dist/modules/website_search/islands.d.ts.map +1 -1
  2100. package/dist/modules/website_search/islands.js +8 -2
  2101. package/dist/modules/website_search/islands.js.map +1 -1
  2102. package/dist/modules/website_search/models.d.ts +15 -0
  2103. package/dist/modules/website_search/models.d.ts.map +1 -0
  2104. package/dist/modules/website_search/models.js +58 -0
  2105. package/dist/modules/website_search/models.js.map +1 -0
  2106. package/dist/modules/website_seo/functions.d.ts +3 -0
  2107. package/dist/modules/website_seo/functions.d.ts.map +1 -0
  2108. package/dist/modules/website_seo/functions.js +164 -0
  2109. package/dist/modules/website_seo/functions.js.map +1 -0
  2110. package/dist/modules/website_seo/index.js +15 -5
  2111. package/dist/modules/website_seo/index.js.map +1 -1
  2112. package/dist/modules/website_seo/projection.d.ts +52 -0
  2113. package/dist/modules/website_seo/projection.d.ts.map +1 -0
  2114. package/dist/modules/website_seo/projection.js +129 -0
  2115. package/dist/modules/website_seo/projection.js.map +1 -0
  2116. package/dist/modules/website_seo/routes.d.ts +3 -0
  2117. package/dist/modules/website_seo/routes.d.ts.map +1 -0
  2118. package/dist/modules/website_seo/routes.js +56 -0
  2119. package/dist/modules/website_seo/routes.js.map +1 -0
  2120. package/dist/permission-catalogue.d.ts +5 -0
  2121. package/dist/permission-catalogue.d.ts.map +1 -0
  2122. package/dist/permission-catalogue.js +1505 -0
  2123. package/dist/permission-catalogue.js.map +1 -0
  2124. package/dist/scaffold/index.d.ts +2 -0
  2125. package/dist/scaffold/index.d.ts.map +1 -0
  2126. package/dist/scaffold/index.js +31 -0
  2127. package/dist/scaffold/index.js.map +1 -0
  2128. package/dist/scaffold/templates/README.md.tmpl +17 -0
  2129. package/dist/scaffold/templates/gitignore.tmpl +2 -0
  2130. package/dist/scaffold/templates/ket.workspace.mjs.tmpl +1 -0
  2131. package/dist/scaffold/templates/package.json.tmpl +15 -0
  2132. package/dist/themes/hospitality/templates/website.columns.ktl +4 -0
  2133. package/dist/themes/paper/templates/website.columns.ktl +4 -0
  2134. package/dist/ui/actions.d.ts +4 -0
  2135. package/dist/ui/actions.d.ts.map +1 -1
  2136. package/dist/ui/actions.js +1 -1
  2137. package/dist/ui/actions.js.map +1 -1
  2138. package/dist/ui/activity.d.ts +1 -1
  2139. package/dist/ui/activity.d.ts.map +1 -1
  2140. package/dist/ui/activity.js +3 -5
  2141. package/dist/ui/activity.js.map +1 -1
  2142. package/dist/ui/attachments.js +1 -1
  2143. package/dist/ui/attachments.js.map +1 -1
  2144. package/dist/ui/auth.d.ts +36 -0
  2145. package/dist/ui/auth.d.ts.map +1 -1
  2146. package/dist/ui/auth.js +55 -0
  2147. package/dist/ui/auth.js.map +1 -1
  2148. package/dist/ui/board-page.d.ts +6 -0
  2149. package/dist/ui/board-page.d.ts.map +1 -0
  2150. package/dist/ui/board-page.js +4 -0
  2151. package/dist/ui/board-page.js.map +1 -0
  2152. package/dist/ui/charts.d.ts +83 -0
  2153. package/dist/ui/charts.d.ts.map +1 -0
  2154. package/dist/ui/charts.js +105 -0
  2155. package/dist/ui/charts.js.map +1 -0
  2156. package/dist/ui/chrome.d.ts +37 -2
  2157. package/dist/ui/chrome.d.ts.map +1 -1
  2158. package/dist/ui/chrome.js +39 -5
  2159. package/dist/ui/chrome.js.map +1 -1
  2160. package/dist/ui/client/activity-view.mjs +7 -7
  2161. package/dist/ui/client/activity-view.mjs.map +1 -1
  2162. package/dist/ui/client/activity.css +6 -34
  2163. package/dist/ui/client/calendar-view.d.mts.map +1 -1
  2164. package/dist/ui/client/calendar-view.mjs +7 -6
  2165. package/dist/ui/client/calendar-view.mjs.map +1 -1
  2166. package/dist/ui/client/calendar.css +4 -14
  2167. package/dist/ui/client/chart-view.d.ts +51 -0
  2168. package/dist/ui/client/chart-view.d.ts.map +1 -0
  2169. package/dist/ui/client/chart-view.js +192 -0
  2170. package/dist/ui/client/chart-view.js.map +1 -0
  2171. package/dist/ui/client/flow-app.css +387 -0
  2172. package/dist/ui/client/flow-board-view.d.mts +8 -0
  2173. package/dist/ui/client/flow-board-view.d.mts.map +1 -0
  2174. package/dist/ui/client/flow-board-view.mjs +161 -0
  2175. package/dist/ui/client/flow-board-view.mjs.map +1 -0
  2176. package/dist/ui/client/flow-board.d.mts +3 -0
  2177. package/dist/ui/client/flow-board.d.mts.map +1 -0
  2178. package/dist/ui/client/flow-board.mjs +7 -0
  2179. package/dist/ui/client/flow-board.mjs.map +1 -0
  2180. package/dist/ui/client/flow-map-view.d.mts +2 -0
  2181. package/dist/ui/client/flow-map-view.d.mts.map +1 -0
  2182. package/dist/ui/client/flow-map-view.mjs +235 -0
  2183. package/dist/ui/client/flow-map-view.mjs.map +1 -0
  2184. package/dist/ui/client/flow-map.d.mts +3 -0
  2185. package/dist/ui/client/flow-map.d.mts.map +1 -0
  2186. package/dist/ui/client/flow-map.mjs +7 -0
  2187. package/dist/ui/client/flow-map.mjs.map +1 -0
  2188. package/dist/ui/client/live-doc-blocks.d.ts +19 -0
  2189. package/dist/ui/client/live-doc-blocks.d.ts.map +1 -0
  2190. package/dist/ui/client/live-doc-blocks.js +23 -0
  2191. package/dist/ui/client/live-doc-blocks.js.map +1 -0
  2192. package/dist/ui/client/live-doc-markdown.d.ts +18 -0
  2193. package/dist/ui/client/live-doc-markdown.d.ts.map +1 -0
  2194. package/dist/ui/client/live-doc-markdown.js +175 -0
  2195. package/dist/ui/client/live-doc-markdown.js.map +1 -0
  2196. package/dist/ui/client/live-doc-shell.d.ts +101 -0
  2197. package/dist/ui/client/live-doc-shell.d.ts.map +1 -0
  2198. package/dist/ui/client/live-doc-shell.js +251 -0
  2199. package/dist/ui/client/live-doc-shell.js.map +1 -0
  2200. package/dist/ui/client/live-doc-view.d.ts +33 -0
  2201. package/dist/ui/client/live-doc-view.d.ts.map +1 -0
  2202. package/dist/ui/client/live-doc-view.js +1237 -0
  2203. package/dist/ui/client/live-doc-view.js.map +1 -0
  2204. package/dist/ui/client/live-doc.css +243 -0
  2205. package/dist/ui/client/live-doc.d.mts +12 -0
  2206. package/dist/ui/client/live-doc.d.mts.map +1 -0
  2207. package/dist/ui/client/live-doc.mjs +11 -0
  2208. package/dist/ui/client/live-doc.mjs.map +7 -0
  2209. package/dist/ui/client/mail-bundle.d.mts +9 -0
  2210. package/dist/ui/client/mail-bundle.d.mts.map +1 -0
  2211. package/dist/ui/client/mail-bundle.mjs +50 -0
  2212. package/dist/ui/client/mail-bundle.mjs.map +7 -0
  2213. package/dist/ui/client/mail-entry.d.mts +11 -0
  2214. package/dist/ui/client/mail-entry.d.mts.map +1 -0
  2215. package/dist/ui/client/mail-entry.mjs +9 -0
  2216. package/dist/ui/client/mail-entry.mjs.map +1 -0
  2217. package/dist/ui/client/mail-view.d.mts.map +1 -1
  2218. package/dist/ui/client/mail-view.mjs +5 -3
  2219. package/dist/ui/client/mail-view.mjs.map +1 -1
  2220. package/dist/ui/client/mail.css +3 -3
  2221. package/dist/ui/client/relation-select-view.d.ts +77 -0
  2222. package/dist/ui/client/relation-select-view.d.ts.map +1 -0
  2223. package/dist/ui/client/relation-select-view.js +216 -0
  2224. package/dist/ui/client/relation-select-view.js.map +1 -0
  2225. package/dist/ui/client/table-selection-view.d.ts +4 -0
  2226. package/dist/ui/client/table-selection-view.d.ts.map +1 -0
  2227. package/dist/ui/client/table-selection-view.js +283 -0
  2228. package/dist/ui/client/table-selection-view.js.map +1 -0
  2229. package/dist/ui/dashboard-page.d.ts +6 -0
  2230. package/dist/ui/dashboard-page.d.ts.map +1 -0
  2231. package/dist/ui/dashboard-page.js +4 -0
  2232. package/dist/ui/dashboard-page.js.map +1 -0
  2233. package/dist/ui/data.d.ts +51 -1
  2234. package/dist/ui/data.d.ts.map +1 -1
  2235. package/dist/ui/data.js +87 -1
  2236. package/dist/ui/data.js.map +1 -1
  2237. package/dist/ui/date-picker.d.ts.map +1 -1
  2238. package/dist/ui/date-picker.js +2 -2
  2239. package/dist/ui/date-picker.js.map +1 -1
  2240. package/dist/ui/form-page.d.ts +6 -0
  2241. package/dist/ui/form-page.d.ts.map +1 -0
  2242. package/dist/ui/form-page.js +5 -0
  2243. package/dist/ui/form-page.js.map +1 -0
  2244. package/dist/ui/form.d.ts +4 -1
  2245. package/dist/ui/form.d.ts.map +1 -1
  2246. package/dist/ui/form.js +7 -5
  2247. package/dist/ui/form.js.map +1 -1
  2248. package/dist/ui/format.d.ts +13 -2
  2249. package/dist/ui/format.d.ts.map +1 -1
  2250. package/dist/ui/format.js +28 -7
  2251. package/dist/ui/format.js.map +1 -1
  2252. package/dist/ui/gantt.d.ts +52 -0
  2253. package/dist/ui/gantt.d.ts.map +1 -0
  2254. package/dist/ui/gantt.js +92 -0
  2255. package/dist/ui/gantt.js.map +1 -0
  2256. package/dist/ui/hooks.d.ts.map +1 -1
  2257. package/dist/ui/hooks.js +14 -0
  2258. package/dist/ui/hooks.js.map +1 -1
  2259. package/dist/ui/icons.d.ts.map +1 -1
  2260. package/dist/ui/icons.js +6 -1
  2261. package/dist/ui/icons.js.map +1 -1
  2262. package/dist/ui/index.d.ts +95 -14
  2263. package/dist/ui/index.d.ts.map +1 -1
  2264. package/dist/ui/index.js +78 -13
  2265. package/dist/ui/index.js.map +1 -1
  2266. package/dist/ui/layout.d.ts +43 -38
  2267. package/dist/ui/layout.d.ts.map +1 -1
  2268. package/dist/ui/layout.js +29 -37
  2269. package/dist/ui/layout.js.map +1 -1
  2270. package/dist/ui/list-page.d.ts +19 -0
  2271. package/dist/ui/list-page.d.ts.map +1 -0
  2272. package/dist/ui/list-page.js +21 -0
  2273. package/dist/ui/list-page.js.map +1 -0
  2274. package/dist/ui/media.d.ts.map +1 -1
  2275. package/dist/ui/media.js +1 -1
  2276. package/dist/ui/media.js.map +1 -1
  2277. package/dist/ui/modal.d.ts +26 -1
  2278. package/dist/ui/modal.d.ts.map +1 -1
  2279. package/dist/ui/modal.js +18 -2
  2280. package/dist/ui/modal.js.map +1 -1
  2281. package/dist/ui/nav.d.ts +21 -1
  2282. package/dist/ui/nav.d.ts.map +1 -1
  2283. package/dist/ui/nav.js +43 -8
  2284. package/dist/ui/nav.js.map +1 -1
  2285. package/dist/ui/navigation.d.ts +36 -2
  2286. package/dist/ui/navigation.d.ts.map +1 -1
  2287. package/dist/ui/navigation.js +60 -5
  2288. package/dist/ui/navigation.js.map +1 -1
  2289. package/dist/ui/partner.d.ts +18 -0
  2290. package/dist/ui/partner.d.ts.map +1 -0
  2291. package/dist/ui/partner.js +11 -0
  2292. package/dist/ui/partner.js.map +1 -0
  2293. package/dist/ui/primitives.d.ts +28 -10
  2294. package/dist/ui/primitives.d.ts.map +1 -1
  2295. package/dist/ui/primitives.js +21 -7
  2296. package/dist/ui/primitives.js.map +1 -1
  2297. package/dist/ui/product-media.d.ts +47 -0
  2298. package/dist/ui/product-media.d.ts.map +1 -0
  2299. package/dist/ui/product-media.js +67 -0
  2300. package/dist/ui/product-media.js.map +1 -0
  2301. package/dist/ui/product-variants.d.ts +68 -0
  2302. package/dist/ui/product-variants.d.ts.map +1 -0
  2303. package/dist/ui/product-variants.js +81 -0
  2304. package/dist/ui/product-variants.js.map +1 -0
  2305. package/dist/ui/record-detail.d.ts +70 -0
  2306. package/dist/ui/record-detail.d.ts.map +1 -0
  2307. package/dist/ui/record-detail.js +35 -0
  2308. package/dist/ui/record-detail.js.map +1 -0
  2309. package/dist/ui/record-page.d.ts +16 -0
  2310. package/dist/ui/record-page.d.ts.map +1 -0
  2311. package/dist/ui/record-page.js +13 -0
  2312. package/dist/ui/record-page.js.map +1 -0
  2313. package/dist/ui/record.d.ts +15 -3
  2314. package/dist/ui/record.d.ts.map +1 -1
  2315. package/dist/ui/record.js +6 -5
  2316. package/dist/ui/record.js.map +1 -1
  2317. package/dist/ui/surfaces.d.ts +30 -2
  2318. package/dist/ui/surfaces.d.ts.map +1 -1
  2319. package/dist/ui/surfaces.js +39 -2
  2320. package/dist/ui/surfaces.js.map +1 -1
  2321. package/dist/ui/table.d.ts +25 -2
  2322. package/dist/ui/table.d.ts.map +1 -1
  2323. package/dist/ui/table.js +10 -6
  2324. package/dist/ui/table.js.map +1 -1
  2325. package/dist/ui/timeframe.d.ts +39 -0
  2326. package/dist/ui/timeframe.d.ts.map +1 -0
  2327. package/dist/ui/timeframe.js +36 -0
  2328. package/dist/ui/timeframe.js.map +1 -0
  2329. package/dist/ui/workspace-page.d.ts +16 -0
  2330. package/dist/ui/workspace-page.d.ts.map +1 -0
  2331. package/dist/ui/workspace-page.js +15 -0
  2332. package/dist/ui/workspace-page.js.map +1 -0
  2333. package/package.json +16 -3
  2334. package/dist/modules/account/tt99.d.ts +0 -30
  2335. package/dist/modules/account/tt99.d.ts.map +0 -1
  2336. package/dist/modules/account/tt99.js +0 -1661
  2337. package/dist/modules/account/tt99.js.map +0 -1
  2338. package/dist/modules/account_backend/accounting-overview-screen.d.ts +0 -18
  2339. package/dist/modules/account_backend/accounting-overview-screen.d.ts.map +0 -1
  2340. package/dist/modules/account_backend/accounting-overview-screen.js +0 -104
  2341. package/dist/modules/account_backend/accounting-overview-screen.js.map +0 -1
  2342. package/dist/modules/account_backend/accounts-screen.d.ts +0 -13
  2343. package/dist/modules/account_backend/accounts-screen.d.ts.map +0 -1
  2344. package/dist/modules/account_backend/accounts-screen.js +0 -49
  2345. package/dist/modules/account_backend/accounts-screen.js.map +0 -1
  2346. package/dist/modules/account_backend/customer-invoices-screen.d.ts +0 -14
  2347. package/dist/modules/account_backend/customer-invoices-screen.d.ts.map +0 -1
  2348. package/dist/modules/account_backend/customer-invoices-screen.js +0 -63
  2349. package/dist/modules/account_backend/customer-invoices-screen.js.map +0 -1
  2350. package/dist/modules/account_backend/general-ledger-screen.d.ts +0 -13
  2351. package/dist/modules/account_backend/general-ledger-screen.d.ts.map +0 -1
  2352. package/dist/modules/account_backend/general-ledger-screen.js +0 -56
  2353. package/dist/modules/account_backend/general-ledger-screen.js.map +0 -1
  2354. package/dist/modules/account_backend/journal-entries-screen.d.ts +0 -14
  2355. package/dist/modules/account_backend/journal-entries-screen.d.ts.map +0 -1
  2356. package/dist/modules/account_backend/journal-entries-screen.js +0 -45
  2357. package/dist/modules/account_backend/journal-entries-screen.js.map +0 -1
  2358. package/dist/modules/account_backend/journals-screen.d.ts +0 -14
  2359. package/dist/modules/account_backend/journals-screen.d.ts.map +0 -1
  2360. package/dist/modules/account_backend/journals-screen.js +0 -53
  2361. package/dist/modules/account_backend/journals-screen.js.map +0 -1
  2362. package/dist/modules/account_backend/move-detail-screen.d.ts +0 -10
  2363. package/dist/modules/account_backend/move-detail-screen.d.ts.map +0 -1
  2364. package/dist/modules/account_backend/move-detail-screen.js +0 -100
  2365. package/dist/modules/account_backend/move-detail-screen.js.map +0 -1
  2366. package/dist/modules/account_backend/partner-ledger-screen.d.ts +0 -14
  2367. package/dist/modules/account_backend/partner-ledger-screen.d.ts.map +0 -1
  2368. package/dist/modules/account_backend/partner-ledger-screen.js +0 -69
  2369. package/dist/modules/account_backend/partner-ledger-screen.js.map +0 -1
  2370. package/dist/modules/account_backend/payment-terms-screen.d.ts +0 -14
  2371. package/dist/modules/account_backend/payment-terms-screen.d.ts.map +0 -1
  2372. package/dist/modules/account_backend/payment-terms-screen.js +0 -40
  2373. package/dist/modules/account_backend/payment-terms-screen.js.map +0 -1
  2374. package/dist/modules/account_backend/payments-screen.d.ts +0 -14
  2375. package/dist/modules/account_backend/payments-screen.d.ts.map +0 -1
  2376. package/dist/modules/account_backend/payments-screen.js +0 -54
  2377. package/dist/modules/account_backend/payments-screen.js.map +0 -1
  2378. package/dist/modules/account_backend/screens.d.ts +0 -7
  2379. package/dist/modules/account_backend/screens.d.ts.map +0 -1
  2380. package/dist/modules/account_backend/screens.js +0 -7
  2381. package/dist/modules/account_backend/screens.js.map +0 -1
  2382. package/dist/modules/account_backend/taxes-screen.d.ts +0 -15
  2383. package/dist/modules/account_backend/taxes-screen.d.ts.map +0 -1
  2384. package/dist/modules/account_backend/taxes-screen.js +0 -73
  2385. package/dist/modules/account_backend/taxes-screen.js.map +0 -1
  2386. package/dist/modules/account_backend/trial-balance-screen.d.ts +0 -13
  2387. package/dist/modules/account_backend/trial-balance-screen.d.ts.map +0 -1
  2388. package/dist/modules/account_backend/trial-balance-screen.js +0 -62
  2389. package/dist/modules/account_backend/trial-balance-screen.js.map +0 -1
  2390. package/dist/modules/account_backend/vendor-bills-screen.d.ts +0 -14
  2391. package/dist/modules/account_backend/vendor-bills-screen.d.ts.map +0 -1
  2392. package/dist/modules/account_backend/vendor-bills-screen.js +0 -59
  2393. package/dist/modules/account_backend/vendor-bills-screen.js.map +0 -1
  2394. package/dist/modules/account_partner_backend/screens.d.ts +0 -16
  2395. package/dist/modules/account_partner_backend/screens.d.ts.map +0 -1
  2396. package/dist/modules/account_partner_backend/screens.js +0 -26
  2397. package/dist/modules/account_partner_backend/screens.js.map +0 -1
  2398. package/dist/modules/activity_backend/screens.d.ts +0 -5
  2399. package/dist/modules/activity_backend/screens.d.ts.map +0 -1
  2400. package/dist/modules/activity_backend/screens.js +0 -52
  2401. package/dist/modules/activity_backend/screens.js.map +0 -1
  2402. package/dist/modules/address_backend/screens.d.ts +0 -31
  2403. package/dist/modules/address_backend/screens.d.ts.map +0 -1
  2404. package/dist/modules/address_backend/screens.js +0 -147
  2405. package/dist/modules/address_backend/screens.js.map +0 -1
  2406. package/dist/modules/backend/design/admin.css +0 -4229
  2407. package/dist/modules/backend/design/client/relation-select-view.d.mts +0 -5
  2408. package/dist/modules/backend/design/client/relation-select-view.d.mts.map +0 -1
  2409. package/dist/modules/backend/design/client/relation-select-view.mjs +0 -335
  2410. package/dist/modules/backend/design/client/relation-select-view.mjs.map +0 -1
  2411. package/dist/modules/calendar_backend/screens.d.ts +0 -5
  2412. package/dist/modules/calendar_backend/screens.d.ts.map +0 -1
  2413. package/dist/modules/calendar_backend/screens.js +0 -4
  2414. package/dist/modules/calendar_backend/screens.js.map +0 -1
  2415. package/dist/modules/company_backend/screens.d.ts +0 -62
  2416. package/dist/modules/company_backend/screens.d.ts.map +0 -1
  2417. package/dist/modules/company_backend/screens.js +0 -268
  2418. package/dist/modules/company_backend/screens.js.map +0 -1
  2419. package/dist/modules/crm_backend/list-search.d.ts +0 -21
  2420. package/dist/modules/crm_backend/list-search.d.ts.map +0 -1
  2421. package/dist/modules/crm_backend/list-search.js +0 -220
  2422. package/dist/modules/crm_backend/list-search.js.map +0 -1
  2423. package/dist/modules/crm_backend/screens.d.ts +0 -32
  2424. package/dist/modules/crm_backend/screens.d.ts.map +0 -1
  2425. package/dist/modules/crm_backend/screens.js +0 -405
  2426. package/dist/modules/crm_backend/screens.js.map +0 -1
  2427. package/dist/modules/hospitality_core/screens.d.ts +0 -773
  2428. package/dist/modules/hospitality_core/screens.d.ts.map +0 -1
  2429. package/dist/modules/hospitality_core/screens.js +0 -4152
  2430. package/dist/modules/hospitality_core/screens.js.map +0 -1
  2431. package/dist/modules/hr_backend/screens.d.ts +0 -9
  2432. package/dist/modules/hr_backend/screens.d.ts.map +0 -1
  2433. package/dist/modules/hr_backend/screens.js +0 -144
  2434. package/dist/modules/hr_backend/screens.js.map +0 -1
  2435. package/dist/modules/loyalty_backend/screens.d.ts +0 -33
  2436. package/dist/modules/loyalty_backend/screens.d.ts.map +0 -1
  2437. package/dist/modules/loyalty_backend/screens.js +0 -562
  2438. package/dist/modules/loyalty_backend/screens.js.map +0 -1
  2439. package/dist/modules/mail_backend/screens.d.ts +0 -5
  2440. package/dist/modules/mail_backend/screens.d.ts.map +0 -1
  2441. package/dist/modules/mail_backend/screens.js +0 -11
  2442. package/dist/modules/mail_backend/screens.js.map +0 -1
  2443. package/dist/modules/mail_inbound_backend/screens.d.ts +0 -5
  2444. package/dist/modules/mail_inbound_backend/screens.d.ts.map +0 -1
  2445. package/dist/modules/mail_inbound_backend/screens.js +0 -25
  2446. package/dist/modules/mail_inbound_backend/screens.js.map +0 -1
  2447. package/dist/modules/mail_transport_backend/screens.d.ts +0 -5
  2448. package/dist/modules/mail_transport_backend/screens.d.ts.map +0 -1
  2449. package/dist/modules/mail_transport_backend/screens.js +0 -35
  2450. package/dist/modules/mail_transport_backend/screens.js.map +0 -1
  2451. package/dist/modules/oauth_backend/screens.d.ts +0 -66
  2452. package/dist/modules/oauth_backend/screens.d.ts.map +0 -1
  2453. package/dist/modules/oauth_backend/screens.js +0 -323
  2454. package/dist/modules/oauth_backend/screens.js.map +0 -1
  2455. package/dist/modules/odoo_collaboration_import/functions.d.ts.map +0 -1
  2456. package/dist/modules/odoo_collaboration_import/functions.js +0 -128
  2457. package/dist/modules/odoo_collaboration_import/functions.js.map +0 -1
  2458. package/dist/modules/odoo_collaboration_import/index.d.ts +0 -6
  2459. package/dist/modules/odoo_collaboration_import/index.d.ts.map +0 -1
  2460. package/dist/modules/odoo_collaboration_import/index.js +0 -31
  2461. package/dist/modules/odoo_collaboration_import/index.js.map +0 -1
  2462. package/dist/modules/odoo_collaboration_import/models.d.ts.map +0 -1
  2463. package/dist/modules/odoo_collaboration_import/models.js +0 -76
  2464. package/dist/modules/odoo_collaboration_import/models.js.map +0 -1
  2465. package/dist/modules/odoo_collaboration_import/operations.d.ts +0 -14
  2466. package/dist/modules/odoo_collaboration_import/operations.d.ts.map +0 -1
  2467. package/dist/modules/odoo_collaboration_import/operations.js +0 -1139
  2468. package/dist/modules/odoo_collaboration_import/operations.js.map +0 -1
  2469. package/dist/modules/odoo_collaboration_import/relations.d.ts.map +0 -1
  2470. package/dist/modules/odoo_collaboration_import/relations.js +0 -19
  2471. package/dist/modules/odoo_collaboration_import/relations.js.map +0 -1
  2472. package/dist/modules/odoo_collaboration_import/types.d.ts +0 -58
  2473. package/dist/modules/odoo_collaboration_import/types.d.ts.map +0 -1
  2474. package/dist/modules/odoo_collaboration_import/types.js.map +0 -1
  2475. package/dist/modules/partner_backend/screens.d.ts +0 -53
  2476. package/dist/modules/partner_backend/screens.d.ts.map +0 -1
  2477. package/dist/modules/partner_backend/screens.js +0 -169
  2478. package/dist/modules/partner_backend/screens.js.map +0 -1
  2479. package/dist/modules/pricing_backend/screens.d.ts +0 -13
  2480. package/dist/modules/pricing_backend/screens.d.ts.map +0 -1
  2481. package/dist/modules/pricing_backend/screens.js +0 -182
  2482. package/dist/modules/pricing_backend/screens.js.map +0 -1
  2483. package/dist/modules/product_backend/attributes-screen.d.ts +0 -7
  2484. package/dist/modules/product_backend/attributes-screen.d.ts.map +0 -1
  2485. package/dist/modules/product_backend/attributes-screen.js +0 -76
  2486. package/dist/modules/product_backend/attributes-screen.js.map +0 -1
  2487. package/dist/modules/product_backend/create-screen.d.ts +0 -12
  2488. package/dist/modules/product_backend/create-screen.d.ts.map +0 -1
  2489. package/dist/modules/product_backend/create-screen.js +0 -83
  2490. package/dist/modules/product_backend/create-screen.js.map +0 -1
  2491. package/dist/modules/product_backend/screens.d.ts +0 -68
  2492. package/dist/modules/product_backend/screens.d.ts.map +0 -1
  2493. package/dist/modules/product_backend/screens.js +0 -388
  2494. package/dist/modules/product_backend/screens.js.map +0 -1
  2495. package/dist/modules/purchase_backend/screens.d.ts +0 -29
  2496. package/dist/modules/purchase_backend/screens.d.ts.map +0 -1
  2497. package/dist/modules/purchase_backend/screens.js +0 -324
  2498. package/dist/modules/purchase_backend/screens.js.map +0 -1
  2499. package/dist/modules/sale_backend/invoicing-policies-screen.d.ts +0 -14
  2500. package/dist/modules/sale_backend/invoicing-policies-screen.d.ts.map +0 -1
  2501. package/dist/modules/sale_backend/invoicing-policies-screen.js +0 -36
  2502. package/dist/modules/sale_backend/invoicing-policies-screen.js.map +0 -1
  2503. package/dist/modules/sale_backend/order-detail-screen.d.ts +0 -18
  2504. package/dist/modules/sale_backend/order-detail-screen.d.ts.map +0 -1
  2505. package/dist/modules/sale_backend/order-detail-screen.js +0 -217
  2506. package/dist/modules/sale_backend/order-detail-screen.js.map +0 -1
  2507. package/dist/modules/sale_backend/quotations-screen.d.ts +0 -15
  2508. package/dist/modules/sale_backend/quotations-screen.d.ts.map +0 -1
  2509. package/dist/modules/sale_backend/quotations-screen.js +0 -64
  2510. package/dist/modules/sale_backend/quotations-screen.js.map +0 -1
  2511. package/dist/modules/sale_backend/sales-orders-screen.d.ts +0 -12
  2512. package/dist/modules/sale_backend/sales-orders-screen.d.ts.map +0 -1
  2513. package/dist/modules/sale_backend/sales-orders-screen.js +0 -65
  2514. package/dist/modules/sale_backend/sales-orders-screen.js.map +0 -1
  2515. package/dist/modules/sale_backend/screens.d.ts +0 -23
  2516. package/dist/modules/sale_backend/screens.d.ts.map +0 -1
  2517. package/dist/modules/sale_backend/screens.js +0 -275
  2518. package/dist/modules/sale_backend/screens.js.map +0 -1
  2519. package/dist/modules/stock_backend/forecast-screen.d.ts +0 -28
  2520. package/dist/modules/stock_backend/forecast-screen.d.ts.map +0 -1
  2521. package/dist/modules/stock_backend/forecast-screen.js +0 -108
  2522. package/dist/modules/stock_backend/forecast-screen.js.map +0 -1
  2523. package/dist/modules/stock_backend/inventory-screen.d.ts +0 -27
  2524. package/dist/modules/stock_backend/inventory-screen.d.ts.map +0 -1
  2525. package/dist/modules/stock_backend/inventory-screen.js +0 -141
  2526. package/dist/modules/stock_backend/inventory-screen.js.map +0 -1
  2527. package/dist/modules/stock_backend/locations-screen.d.ts +0 -18
  2528. package/dist/modules/stock_backend/locations-screen.d.ts.map +0 -1
  2529. package/dist/modules/stock_backend/locations-screen.js +0 -92
  2530. package/dist/modules/stock_backend/locations-screen.js.map +0 -1
  2531. package/dist/modules/stock_backend/lot-screen.d.ts +0 -30
  2532. package/dist/modules/stock_backend/lot-screen.d.ts.map +0 -1
  2533. package/dist/modules/stock_backend/lot-screen.js +0 -86
  2534. package/dist/modules/stock_backend/lot-screen.js.map +0 -1
  2535. package/dist/modules/stock_backend/lots-screen.d.ts +0 -21
  2536. package/dist/modules/stock_backend/lots-screen.d.ts.map +0 -1
  2537. package/dist/modules/stock_backend/lots-screen.js +0 -79
  2538. package/dist/modules/stock_backend/lots-screen.js.map +0 -1
  2539. package/dist/modules/stock_backend/picking-types-screen.d.ts +0 -21
  2540. package/dist/modules/stock_backend/picking-types-screen.d.ts.map +0 -1
  2541. package/dist/modules/stock_backend/picking-types-screen.js +0 -110
  2542. package/dist/modules/stock_backend/picking-types-screen.js.map +0 -1
  2543. package/dist/modules/stock_backend/replenishment-screen.d.ts +0 -29
  2544. package/dist/modules/stock_backend/replenishment-screen.d.ts.map +0 -1
  2545. package/dist/modules/stock_backend/replenishment-screen.js +0 -131
  2546. package/dist/modules/stock_backend/replenishment-screen.js.map +0 -1
  2547. package/dist/modules/stock_backend/screens.d.ts +0 -14
  2548. package/dist/modules/stock_backend/screens.d.ts.map +0 -1
  2549. package/dist/modules/stock_backend/screens.js +0 -40
  2550. package/dist/modules/stock_backend/screens.js.map +0 -1
  2551. package/dist/modules/stock_backend/stock-route-screen.d.ts +0 -30
  2552. package/dist/modules/stock_backend/stock-route-screen.d.ts.map +0 -1
  2553. package/dist/modules/stock_backend/stock-route-screen.js +0 -129
  2554. package/dist/modules/stock_backend/stock-route-screen.js.map +0 -1
  2555. package/dist/modules/stock_backend/stock-routes-screen.d.ts +0 -17
  2556. package/dist/modules/stock_backend/stock-routes-screen.d.ts.map +0 -1
  2557. package/dist/modules/stock_backend/stock-routes-screen.js +0 -60
  2558. package/dist/modules/stock_backend/stock-routes-screen.js.map +0 -1
  2559. package/dist/modules/stock_backend/transfer-screen.d.ts +0 -26
  2560. package/dist/modules/stock_backend/transfer-screen.d.ts.map +0 -1
  2561. package/dist/modules/stock_backend/transfer-screen.js +0 -95
  2562. package/dist/modules/stock_backend/transfer-screen.js.map +0 -1
  2563. package/dist/modules/stock_backend/transfers-screen.d.ts +0 -21
  2564. package/dist/modules/stock_backend/transfers-screen.d.ts.map +0 -1
  2565. package/dist/modules/stock_backend/transfers-screen.js +0 -88
  2566. package/dist/modules/stock_backend/transfers-screen.js.map +0 -1
  2567. package/dist/modules/stock_backend/warehouses-screen.d.ts +0 -17
  2568. package/dist/modules/stock_backend/warehouses-screen.d.ts.map +0 -1
  2569. package/dist/modules/stock_backend/warehouses-screen.js +0 -96
  2570. package/dist/modules/stock_backend/warehouses-screen.js.map +0 -1
  2571. package/dist/modules/user_backend/screens.d.ts +0 -70
  2572. package/dist/modules/user_backend/screens.d.ts.map +0 -1
  2573. package/dist/modules/user_backend/screens.js +0 -308
  2574. package/dist/modules/user_backend/screens.js.map +0 -1
  2575. package/dist/modules/website/customer-routes.d.ts +0 -3
  2576. package/dist/modules/website/customer-routes.d.ts.map +0 -1
  2577. package/dist/modules/website/customer-routes.js +0 -322
  2578. package/dist/modules/website/customer-routes.js.map +0 -1
  2579. package/dist/modules/website_backend/screens.d.ts +0 -114
  2580. package/dist/modules/website_backend/screens.d.ts.map +0 -1
  2581. package/dist/modules/website_backend/screens.js +0 -625
  2582. package/dist/modules/website_backend/screens.js.map +0 -1
  2583. package/dist/ui/client/mail.d.mts +0 -11
  2584. package/dist/ui/client/mail.d.mts.map +0 -1
  2585. package/dist/ui/client/mail.mjs +0 -10
  2586. package/dist/ui/client/mail.mjs.map +0 -1
  2587. /package/dist/modules/{odoo_collaboration_import → account_staff_channel}/functions.d.ts +0 -0
  2588. /package/dist/modules/{odoo_collaboration_import → account_staff_channel}/models.d.ts +0 -0
  2589. /package/dist/modules/{odoo_collaboration_import → address_backend/screens}/types.js +0 -0
  2590. /package/dist/modules/{odoo_collaboration_import → manufacturing}/relations.d.ts +0 -0
@@ -0,0 +1,1665 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { asc, bucketEq, compileListFilter, dateBucket, deleteFrom, desc, eq, from, gte, inArray, isNotNull, isNull, isTimezone, lt, not, or, } from '@ketvietlab/ketjs';
4
+ import { ensureThread, followThread, listTimeline, postMessage, unfollowThread } from '../mail/index.js';
5
+ import { DEPENDENCY_RELATIONS, ISSUE_PRIORITIES } from './types.js';
6
+ import { emptyIssueListState, FIELD_FILTER_PREFIX, issueListSearch } from './search.js';
7
+ import { readableProject, readableRow, restrictToVisible, visibleProjects } from './membership.js';
8
+ export const issue = (field, code, params) => ({
9
+ field,
10
+ code,
11
+ ...(params ? { params } : {}),
12
+ });
13
+ export const invalid = (...errors) => ({ ok: false, errors });
14
+ export const now = () => new Date().toISOString();
15
+ /**
16
+ * The company's civil-date timezone, or UTC when it has none.
17
+ *
18
+ * "Overdue" and "grouped by day" are claims about a calendar, and a calendar
19
+ * belongs to a place. For Flow that place is the company: unlike Hospitality it
20
+ * has no notion of a site, and a company that disagreed with itself about what
21
+ * day it is would make the figures beside a list and the list itself say
22
+ * different things — see FLW-DEC-010.
23
+ *
24
+ * The column is Accounting's by name because Accounting needed a civil date
25
+ * first. It is the company's by meaning, and reading it here is what keeps two
26
+ * settings from having to agree.
27
+ */
28
+ export async function businessTimezone(ctx) {
29
+ const companyId = ctx.scope?.company;
30
+ if (!companyId)
31
+ return 'UTC';
32
+ const company = (await ctx.db.select('company.Company', { id: companyId }))[0];
33
+ const timezone = String(company?.accountingTimezone ?? '').trim();
34
+ return isTimezone(timezone) ? timezone : 'UTC';
35
+ }
36
+ /**
37
+ * Today where the company is — which, for most of the day in Vietnam, is not
38
+ * today in UTC. A task due today was being counted late from 07:00 local.
39
+ */
40
+ export async function businessToday(ctx, timezone) {
41
+ const zone = timezone ?? (await businessTimezone(ctx));
42
+ return dateBucket(new Date().toISOString(), 'day', zone) ?? new Date().toISOString().slice(0, 10);
43
+ }
44
+ export const n = (value) => Number(value ?? 0);
45
+ export const normalized = (value) => String(value ?? '')
46
+ .normalize('NFKC')
47
+ .trim()
48
+ .toLowerCase();
49
+ export const actorRequired = (ctx) => ctx.actor || null;
50
+ /**
51
+ * The id of a record a command creates, derived from what the command is
52
+ * deduplicated under.
53
+ *
54
+ * A form that is submitted twice — a double click, a back button, a retry from
55
+ * a phone that lost its connection — sends the same idempotency key both
56
+ * times. If the id is fresh on each attempt, the second attempt is a different
57
+ * record and gets written as one: two issues from one intent. Deriving the id
58
+ * from the key makes the replay byte-identical, so it lands on the record the
59
+ * first attempt already made and updates it instead (FLW-033).
60
+ */
61
+ export const commandRecordId = (namespace, key) => {
62
+ const hex = createHash('sha256').update(`${namespace}\n${key}`).digest('hex');
63
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
64
+ };
65
+ export const commandKey = (value) => {
66
+ const key = String(value ?? '').trim();
67
+ return key.length >= 8 && key.length <= 200 ? key : null;
68
+ };
69
+ /**
70
+ * Live, and readable by this caller.
71
+ *
72
+ * Creating an issue in a project somebody cannot see is writing to a project
73
+ * they cannot see, so the same gate answers both. The caller turns a false here
74
+ * into "not found", which is also the right answer for a project that is real
75
+ * but not theirs.
76
+ */
77
+ const projectExists = async (ctx, id) => {
78
+ const project = await readableProject(ctx, id);
79
+ return Boolean(project && project.active === true);
80
+ };
81
+ const columnOf = async (ctx, id) => (await ctx.db.select('flow.Column', { id, active: true }))[0] ?? null;
82
+ const userExists = async (ctx, id) => !id || Boolean((await ctx.db.select('user.User', { id, active: true }))[0]);
83
+ /**
84
+ * A sprint an issue may still be dropped into.
85
+ *
86
+ * `null` reads as "no sprint" (always allowed). A closed sprint is the one
87
+ * state that refuses new membership — see the design note on the Sprint model.
88
+ */
89
+ async function assignableSprint(ctx, sprintId) {
90
+ if (!sprintId)
91
+ return null;
92
+ const sprint = (await ctx.db.select('flow.Sprint', { id: sprintId }))[0];
93
+ if (!sprint)
94
+ return undefined;
95
+ return sprint.state === 'closed' ? undefined : sprint;
96
+ }
97
+ /**
98
+ * Subscribes a user to an issue's thread, when the platform can address them.
99
+ *
100
+ * Followers are partner-keyed the whole way down — `mail.Notification`'s
101
+ * `recipientPartnerId` is required — while `user.User.partnerId` is optional
102
+ * by design ("an internal operator needs no entry in the address book"). So a
103
+ * user without one cannot be subscribed and cannot be notified. Skipping is
104
+ * the truthful outcome: the alternative is creating address-book rows as a
105
+ * side effect of assigning a task, which is not a decision this module gets
106
+ * to make.
107
+ */
108
+ async function followIssue(ctx, threadId, userId) {
109
+ if (!threadId || !userId)
110
+ return;
111
+ const user = (await ctx.db.select('user.User', { id: userId }))[0];
112
+ if (!user?.partnerId)
113
+ return;
114
+ await followThread(ctx, {
115
+ id: `${String(threadId)}:${String(user.partnerId)}`,
116
+ threadId: String(threadId),
117
+ partnerId: String(user.partnerId),
118
+ });
119
+ }
120
+ /**
121
+ * The partners behind a list of mentioned users.
122
+ *
123
+ * Mentions are partner-keyed the whole way down, the same as followers, so a
124
+ * user without a partner cannot be mentioned any more than they can be
125
+ * notified — see `followIssue` above for why that is the platform's shape
126
+ * rather than something to work around here. They are dropped rather than
127
+ * refused: a comment naming five people should still reach the four the system
128
+ * can address.
129
+ */
130
+ async function mentionPartners(ctx, userIds) {
131
+ const wanted = [...new Set(userIds.filter(Boolean).map(String))];
132
+ if (!wanted.length)
133
+ return [];
134
+ const U = ctx.table('user.User');
135
+ const users = await ctx.db.all(from(U).where(inArray(U.id, wanted)));
136
+ return [
137
+ ...new Set(users
138
+ .map((user) => user.partnerId)
139
+ .filter(Boolean)
140
+ .map(String)),
141
+ ];
142
+ }
143
+ /**
144
+ * An epic an issue may belong to.
145
+ *
146
+ * `undefined` means "named but not found". Every other reference on an issue
147
+ * — column, sprint, parent — is checked for existence and for belonging to
148
+ * the same project; epic was the one that was written straight through, so an
149
+ * issue in project A could be filed under project B's epic and would then
150
+ * appear on B's epic panel and dependency map while still living on A's board.
151
+ */
152
+ async function issueEpic(ctx, epicId) {
153
+ if (!epicId)
154
+ return null;
155
+ return (await ctx.db.select('flow.Epic', { id: epicId }))[0] ?? undefined;
156
+ }
157
+ /**
158
+ * A type an issue may be filed as.
159
+ *
160
+ * Checked for existence and for belonging to the same project, which is what
161
+ * `epicId` was not and had to be taught — a reference written straight through
162
+ * puts a row on a board it does not belong to, and every screen downstream
163
+ * then agrees with it.
164
+ */
165
+ async function issueType(ctx, typeId) {
166
+ if (!typeId)
167
+ return null;
168
+ return (await ctx.db.select('flow.IssueType', { id: typeId }))[0] ?? undefined;
169
+ }
170
+ /** The options a `select` field offers, as codes. */
171
+ const optionCodes = (config) => {
172
+ const options = config?.options;
173
+ return Array.isArray(options) ? options.map((option) => String(option?.code ?? '')) : [];
174
+ };
175
+ /**
176
+ * Whether a value is well-formed for the kind of field holding it.
177
+ *
178
+ * Empty always passes and clears the value: a field a team added last week is
179
+ * blank on every issue that already existed, and refusing to save those until
180
+ * somebody fills it in would make adding a field an act of vandalism.
181
+ */
182
+ export function fieldValueError(field, raw) {
183
+ const value = String(raw ?? '').trim();
184
+ if (!value)
185
+ return null;
186
+ const kind = String(field.kind);
187
+ const bad = (code) => issue(`field:${String(field.code)}`, code);
188
+ if (kind === 'number' && !Number.isFinite(Number(value)))
189
+ return bad('flow.error.fieldNumber');
190
+ if (kind === 'date' && Number.isNaN(Date.parse(value)))
191
+ return bad('flow.error.fieldDate');
192
+ if (kind === 'bool' && value !== 'true' && value !== 'false')
193
+ return bad('flow.error.fieldBool');
194
+ // http/https only, the same rule the editor applies to a link it renders:
195
+ // this one ends up in an href on somebody else's screen too.
196
+ if (kind === 'url' && !/^https?:\/\//i.test(value))
197
+ return bad('flow.error.fieldUrl');
198
+ if (kind === 'select' && !optionCodes(field.config).includes(value))
199
+ return bad('flow.error.fieldOption');
200
+ return null;
201
+ }
202
+ /**
203
+ * The custom fields of one project, by id and by code.
204
+ *
205
+ * Callers name a field either way — a screen posts ids, an agent writing
206
+ * `{ environment: 'production' }` names codes — and both have to land on the
207
+ * same definition.
208
+ */
209
+ async function fieldsOfProject(ctx, projectId) {
210
+ const defs = await ctx.db.select('flow.FieldDef', { projectId, active: true });
211
+ const by = new Map();
212
+ for (const def of defs) {
213
+ by.set(String(def.id), def);
214
+ by.set(String(def.code), def);
215
+ }
216
+ return by;
217
+ }
218
+ /**
219
+ * A parent an issue may point at.
220
+ *
221
+ * Sub-tasks nest inside one project's board, so a parent from another project
222
+ * would put a child on a board its parent is not on. A cycle is worse: the
223
+ * pair becomes each other's ancestor and any walk up the tree runs forever.
224
+ * `blocks` already refuses cycles for the same reason (see createsBlockCycle);
225
+ * parentage had no check at all, and accepted a parent id that did not exist.
226
+ */
227
+ async function parentIssueError(ctx, issueId, parentIssueId, projectId) {
228
+ if (!parentIssueId)
229
+ return null;
230
+ if (String(parentIssueId) === issueId)
231
+ return issue('parentIssueId', 'flow.error.selfParent');
232
+ const parent = (await ctx.db.select('flow.Issue', { id: parentIssueId }))[0];
233
+ if (!parent)
234
+ return issue('parentIssueId', 'flow.error.notFound');
235
+ if (String(parent.projectId) !== projectId)
236
+ return issue('parentIssueId', 'flow.error.parentProjectMismatch');
237
+ const seen = new Set([issueId]);
238
+ let at = parent;
239
+ while (at) {
240
+ const id = String(at.id);
241
+ if (seen.has(id))
242
+ return issue('parentIssueId', 'flow.error.parentCycle');
243
+ seen.add(id);
244
+ at = at.parentIssueId ? (await ctx.db.select('flow.Issue', { id: at.parentIssueId }))[0] : undefined;
245
+ }
246
+ return null;
247
+ }
248
+ /**
249
+ * How far along each issue is, counted from its sub-tasks.
250
+ *
251
+ * "Done" is a sub-task sitting in a column with `terminalState` — the concept
252
+ * models.ts introduced for exactly this kind of question, so that a team whose
253
+ * workflow is five columns wide gets the same answer as one running three, and
254
+ * neither has to be called "Done".
255
+ *
256
+ * Sub-tasks are the checklist. The description can hold one too, and does, but
257
+ * that one is prose: nobody can be given an item in it, nothing can be counted
258
+ * from outside the document, and it is not what this reads.
259
+ *
260
+ * Unlimited on purpose, unlike `dependenciesFor` below. The query is already
261
+ * bounded twice over — by one page of parents, and by sub-tasks being a
262
+ * relation a person types out by hand — and a cap on a *count* is worse than a
263
+ * cap on a list: a truncated list looks truncated, while 3/5 that should read
264
+ * 3/9 just looks wrong.
265
+ */
266
+ async function progressOf(ctx, issueIds) {
267
+ const tally = new Map();
268
+ if (!issueIds.length)
269
+ return tally;
270
+ const I = ctx.table('flow.Issue');
271
+ const children = await ctx.db.all(from(I).where(inArray(I.parentIssueId, issueIds)).where(eq(I.active, true)));
272
+ if (!children.length)
273
+ return tally;
274
+ const C = ctx.table('flow.Column');
275
+ const columnIds = [...new Set(children.map((child) => String(child.columnId)))];
276
+ const columns = await ctx.db.all(from(C).where(inArray(C.id, columnIds)));
277
+ const terminal = new Set(columns.filter((column) => column.terminalState).map((column) => String(column.id)));
278
+ for (const child of children) {
279
+ const key = String(child.parentIssueId);
280
+ const at = tally.get(key) ?? { done: 0, total: 0 };
281
+ at.total += 1;
282
+ if (terminal.has(String(child.columnId)))
283
+ at.done += 1;
284
+ tally.set(key, at);
285
+ }
286
+ return tally;
287
+ }
288
+ export async function serializeIssueList(ctx, rows) {
289
+ const ids = (values) => [...new Set(values.filter(Boolean).map(String))];
290
+ const columnIds = ids(rows.map((row) => row.columnId));
291
+ const epicIds = ids(rows.map((row) => row.epicId));
292
+ const sprintIds = ids(rows.map((row) => row.sprintId));
293
+ const userIds = ids(rows.map((row) => row.assigneeUserId));
294
+ const typeIds = ids(rows.map((row) => row.typeId));
295
+ const issueIds = rows.map((row) => String(row.id));
296
+ // The project too, for the one list that spans them: an issue read outside
297
+ // its own board has to say which board it came from.
298
+ const projectIds = ids(rows.map((row) => row.projectId));
299
+ const [columns, epics, sprints, users, projects, types, progress, values] = await Promise.all([
300
+ columnIds.length
301
+ ? ctx.db.all(from(ctx.table('flow.Column')).where(inArray(ctx.table('flow.Column').id, columnIds)))
302
+ : [],
303
+ epicIds.length
304
+ ? ctx.db.all(from(ctx.table('flow.Epic')).where(inArray(ctx.table('flow.Epic').id, epicIds)))
305
+ : [],
306
+ sprintIds.length
307
+ ? ctx.db.all(from(ctx.table('flow.Sprint')).where(inArray(ctx.table('flow.Sprint').id, sprintIds)))
308
+ : [],
309
+ userIds.length
310
+ ? ctx.db.all(from(ctx.table('user.User')).where(inArray(ctx.table('user.User').id, userIds)))
311
+ : [],
312
+ projectIds.length
313
+ ? ctx.db.all(from(ctx.table('flow.Project')).where(inArray(ctx.table('flow.Project').id, projectIds)))
314
+ : [],
315
+ typeIds.length
316
+ ? ctx.db.all(from(ctx.table('flow.IssueType')).where(inArray(ctx.table('flow.IssueType').id, typeIds)))
317
+ : [],
318
+ progressOf(ctx, issueIds),
319
+ // Custom field values for the whole page in one query, so a list can show
320
+ // a column for them. Keyed by field id rather than code, because a screen
321
+ // holds the definitions and matches on what it was given.
322
+ issueIds.length
323
+ ? ctx.db.all(from(ctx.table('flow.IssueFieldValue')).where(inArray(ctx.table('flow.IssueFieldValue').issueId, issueIds)))
324
+ : [],
325
+ ]);
326
+ const by = (values) => new Map(values.map((row) => [String(row.id), row]));
327
+ const columnBy = by(columns);
328
+ const epicBy = by(epics);
329
+ const sprintBy = by(sprints);
330
+ const userBy = by(users);
331
+ const projectBy = by(projects);
332
+ const typeBy = by(types);
333
+ const fieldsBy = new Map();
334
+ for (const entry of values) {
335
+ const key = String(entry.issueId);
336
+ const held = fieldsBy.get(key) ?? {};
337
+ held[String(entry.fieldId)] = entry.value;
338
+ fieldsBy.set(key, held);
339
+ }
340
+ return rows.map((row) => {
341
+ const counted = progress.get(String(row.id));
342
+ return {
343
+ ...row,
344
+ /**
345
+ * The day a bar starts, which is not the same fact as `startDate`.
346
+ *
347
+ * Nobody sets a start date on most issues, and a chart still has to
348
+ * begin somewhere; the day it was written down is the honest stand-in.
349
+ * Kept separate from the stored value on purpose — a form bound to this
350
+ * would show the fallback as an answer, and saving would then write it
351
+ * back as one.
352
+ */
353
+ startsOn: row.startDate ?? (row.createdAt ? String(row.createdAt).slice(0, 10) : null),
354
+ subtaskTotal: counted?.total ?? 0,
355
+ subtaskDone: counted?.done ?? 0,
356
+ /**
357
+ * Null, not zero, when an issue has no sub-tasks. "Nothing to do" and
358
+ * "nothing done yet" are different facts, and a column of 0% against every
359
+ * issue nobody had broken down would report the second while meaning the
360
+ * first.
361
+ */
362
+ progress: counted ? Math.round((counted.done * 100) / counted.total) : null,
363
+ projectName: row.projectId ? (projectBy.get(String(row.projectId))?.name ?? row.projectId) : null,
364
+ columnName: row.columnId ? (columnBy.get(String(row.columnId))?.name ?? row.columnId) : null,
365
+ /**
366
+ * Whether this issue's column is one the board treats as finished.
367
+ *
368
+ * The name alone cannot answer it — "Done", "Shipped" and "Closed" are
369
+ * all somebody's terminal column and none of them is a keyword — so a
370
+ * screen wanting to mark a late issue would have to re-read the columns
371
+ * it was just handed.
372
+ */
373
+ terminal: row.columnId ? columnBy.get(String(row.columnId))?.terminalState === true : false,
374
+ epicTitle: row.epicId ? (epicBy.get(String(row.epicId))?.title ?? row.epicId) : null,
375
+ sprintName: row.sprintId ? (sprintBy.get(String(row.sprintId))?.name ?? row.sprintId) : null,
376
+ assigneeName: row.assigneeUserId
377
+ ? (userBy.get(String(row.assigneeUserId))?.name ?? row.assigneeUserId)
378
+ : null,
379
+ /** `{ [fieldId]: value }`, for whatever fields this row happens to hold. */
380
+ fieldValues: fieldsBy.get(String(row.id)) ?? {},
381
+ typeName: row.typeId ? (typeBy.get(String(row.typeId))?.name ?? row.typeId) : null,
382
+ typeColor: row.typeId ? (typeBy.get(String(row.typeId))?.color ?? null) : null,
383
+ };
384
+ });
385
+ }
386
+ /**
387
+ * How many issues one custom-field filter may match.
388
+ *
389
+ * The value lives in another table and this query builder has no JOIN, so the
390
+ * rule is answered by collecting ids and handing them to `IN (...)`. That list
391
+ * becomes SQL parameters, and every database has a ceiling on those — SQLite's
392
+ * has historically been 999.
393
+ *
394
+ * Capped rather than left to fail at the driver, and reported rather than
395
+ * trimmed quietly: a truncated *list* looks truncated, while a truncated
396
+ * *filter* looks like an answer. `listIssues` passes `fieldFilterTruncated`
397
+ * back so a screen can say so.
398
+ */
399
+ export const FIELD_FILTER_MATCHES = 900;
400
+ /**
401
+ * Answers every `field:<code>` rule as a set of issue ids, and takes the rules
402
+ * out of the state on the way.
403
+ *
404
+ * The value lives in another table, so the rule cannot compile against a column
405
+ * of `flow.Issue`. Rewriting it in place does not work either — the spec
406
+ * declares a select field's `choices`, and a list of ids is not among them, so
407
+ * validation refuses the rewritten rule. So the rules leave, and what they
408
+ * selected is applied to the query directly.
409
+ *
410
+ * Only the top level is read, which is the only shape the filter UI builds
411
+ * (facets and the custom-filter row are both flat, and flat means AND). A rule
412
+ * nested inside an `or` group is left where it is rather than quietly hoisted
413
+ * out of it: removing one from an `or` widens the group, and answering a
414
+ * narrower question than was asked is the failure that looks like success.
415
+ */
416
+ async function resolveFieldFilters(ctx, state, projectId) {
417
+ const top = (state.filters ?? []);
418
+ const rules = top.filter((node) => node?.kind === 'rule' && String(node.field ?? '').startsWith(FIELD_FILTER_PREFIX));
419
+ if (!rules.length)
420
+ return { state, ids: null, truncated: false };
421
+ const defs = await ctx.db.select('flow.FieldDef', projectId ? { projectId, active: true } : { active: true });
422
+ const byCode = new Map(defs.map((def) => [String(def.code), def]));
423
+ let truncated = false;
424
+ let matched = null;
425
+ for (const rule of rules) {
426
+ const code = String(rule.field).slice(FIELD_FILTER_PREFIX.length);
427
+ const def = byCode.get(code);
428
+ const found = new Set();
429
+ if (def) {
430
+ const V = ctx.table('flow.IssueFieldValue');
431
+ let query = from(V).where(eq(V.fieldId, def.id));
432
+ const operator = String(rule.operator);
433
+ if (operator === 'equals')
434
+ query = query.where(eq(V.value, String(rule.value ?? '')));
435
+ else if (operator === 'anyOf') {
436
+ const values = (Array.isArray(rule.value) ? rule.value : [rule.value]).map(String);
437
+ query = query.where(inArray(V.value, values));
438
+ }
439
+ // `isSet` needs no clause of its own: a row exists only where there is a
440
+ // value, because emptying a field deletes its row rather than storing "".
441
+ const rows = await ctx.db.all(query.limit(FIELD_FILTER_MATCHES + 1));
442
+ if (rows.length > FIELD_FILTER_MATCHES)
443
+ truncated = true;
444
+ for (const row of rows.slice(0, FIELD_FILTER_MATCHES))
445
+ found.add(String(row.issueId));
446
+ }
447
+ // Several rules narrow each other, which is what a flat filter row means.
448
+ matched = matched ? new Set([...matched].filter((id) => found.has(id))) : found;
449
+ }
450
+ return {
451
+ state: { ...state, filters: top.filter((node) => !rules.includes(node)) },
452
+ ids: [...(matched ?? new Set())],
453
+ truncated,
454
+ };
455
+ }
456
+ const listStateOf = (value) => value && typeof value === 'object' ? value : null;
457
+ /**
458
+ * The columns a board treats as finished, and the one it starts from.
459
+ *
460
+ * Read once and shared, because "late" and "not started" both need them and
461
+ * two readings could disagree. A finished issue is never late, however long
462
+ * ago its date was — the work is done, and a red date on it would be asking
463
+ * for something that has already happened.
464
+ */
465
+ const boardEdges = async (ctx) => {
466
+ const C = ctx.table('flow.Column');
467
+ const columns = await ctx.db.all(from(C).where(eq(C.active, true)));
468
+ const firstOf = new Map();
469
+ for (const column of columns) {
470
+ if (column.terminalState)
471
+ continue;
472
+ const key = String(column.projectId);
473
+ const held = firstOf.get(key);
474
+ const at = { id: String(column.id), sequence: n(column.sequence) };
475
+ if (!held || at.sequence < held.sequence)
476
+ firstOf.set(key, at);
477
+ }
478
+ return {
479
+ terminal: columns.filter((column) => column.terminalState).map((column) => String(column.id)),
480
+ first: [...firstOf.values()].map((column) => column.id),
481
+ };
482
+ };
483
+ const issueQuery = async (ctx, args) => {
484
+ const I = ctx.table('flow.Issue');
485
+ // Every issue read — list, group, buckets, options — comes through here, so
486
+ // this is where a caller stops seeing projects they are not on. One gate
487
+ // rather than four, because the fourth is the one somebody forgets.
488
+ const visible = await visibleProjects(ctx);
489
+ const given = listStateOf(args.listState) ?? emptyIssueListState();
490
+ // A caller may still name a timezone — an agent reporting for somewhere else
491
+ // — but no caller has to, and the screens no longer do. The default is the
492
+ // company's own calendar rather than UTC, which was nobody's calendar.
493
+ const timezone = String(args.timezone ?? '').trim() || (await businessTimezone(ctx));
494
+ let query = from(I);
495
+ // The spec has to know the project's own fields, or `parseListState` would
496
+ // have dropped their rules as unknown before they ever reached here.
497
+ const defs = args.projectId
498
+ ? await ctx.db.select('flow.FieldDef', { projectId: args.projectId, active: true })
499
+ : [];
500
+ const { state, ids, truncated } = await resolveFieldFilters(ctx, given, args.projectId);
501
+ const spec = issueListSearch(I, defs);
502
+ const compiled = compileListFilter(spec, state, { timezone });
503
+ if (compiled)
504
+ query = query.where(compiled);
505
+ query = restrictToVisible(query, I.projectId, visible);
506
+ // No match is not "no filter": asking for a value nothing holds has to answer
507
+ // with nothing, which an empty list already does — `query.ts` compiles an
508
+ // empty `IN` to `1 = 0` rather than to no clause at all.
509
+ if (ids)
510
+ query = query.where(inArray(I.id, ids));
511
+ const path = Array.isArray(args.path) ? args.path : [];
512
+ for (let index = 0; index < path.length; index++) {
513
+ const selected = state.groupBy[index];
514
+ const field = spec.groupable?.find((candidate) => candidate.key === selected?.key);
515
+ if (!field)
516
+ continue;
517
+ const value = path[index];
518
+ query = query.where(selected?.interval
519
+ ? bucketEq(field.col, selected.interval, timezone, String(value))
520
+ : eq(field.col, value));
521
+ }
522
+ if (args.projectId)
523
+ query = query.where(eq(I.projectId, args.projectId));
524
+ if (args.columnId)
525
+ query = query.where(eq(I.columnId, args.columnId));
526
+ if (args.epicId)
527
+ query = query.where(eq(I.epicId, args.epicId));
528
+ if (args.sprintId)
529
+ query = query.where(eq(I.sprintId, args.sprintId));
530
+ if (args.assigneeUserId)
531
+ query = query.where(eq(I.assigneeUserId, args.assigneeUserId));
532
+ // "Assigned to me" is resolved here rather than by the caller: a screen has
533
+ // no cheap way to learn who is signed in, and `activity.listMy` already
534
+ // settles the question the same way. A request with no actor matches
535
+ // nothing, which is the safe reading of "mine".
536
+ if (args.mine === true)
537
+ query = query.where(eq(I.assigneeUserId, ctx.actor ?? '\u0000'));
538
+ // A day, and the query narrows to what was already due before it and is not
539
+ // finished. Here rather than at each caller so the list, the counts and the
540
+ // rail cannot drift apart on what "late" means.
541
+ if (args.overdueOn) {
542
+ const { terminal } = await boardEdges(ctx);
543
+ query = query.where(isNotNull(I.dueDate), lt(I.dueDate, String(args.overdueOn)), ...(terminal.length ? [not(inArray(I.columnId, terminal))] : []));
544
+ }
545
+ if (!state.includeArchived && args.includeArchived !== true)
546
+ query = query.where(eq(I.active, true));
547
+ const sorts = state.sort.length ? state.sort : emptyIssueListState().sort;
548
+ const sortable = new Map((spec.sortable ?? []).map((field) => [field.key, field.col]));
549
+ for (const sort of sorts) {
550
+ const col = sortable.get(sort.key);
551
+ if (col)
552
+ query = query.orderBy(sort.dir === 'desc' ? desc(col) : asc(col));
553
+ }
554
+ return { query, state, spec, timezone, truncated };
555
+ };
556
+ export async function listIssues(ctx, args) {
557
+ const { query, truncated } = await issueQuery(ctx, args);
558
+ const offset = Math.max(0, Number.parseInt(String(args.cursor ?? '0'), 10) || 0);
559
+ const limit = Math.max(1, Math.min(200, n(args.limit ?? 50)));
560
+ const [total, page] = await Promise.all([
561
+ ctx.db.count(query),
562
+ ctx.db.all(query.limit(limit).offset(offset)),
563
+ ]);
564
+ return {
565
+ rows: await serializeIssueList(ctx, page),
566
+ total,
567
+ nextCursor: offset + limit < total ? String(offset + limit) : null,
568
+ // Only said when it happened. A filter that quietly stopped short reads as
569
+ // an answer, which is the one thing it must not do.
570
+ ...(truncated ? { fieldFilterTruncated: true } : {}),
571
+ };
572
+ }
573
+ export async function groupIssues(ctx, args) {
574
+ const { query, state, spec, timezone } = await issueQuery(ctx, args);
575
+ const path = Array.isArray(args.path) ? args.path : [];
576
+ const selected = state.groupBy[path.length];
577
+ const field = spec.groupable?.find((candidate) => candidate.key === selected?.key);
578
+ if (!field)
579
+ return [];
580
+ let grouped = query
581
+ .groupBy({ col: field.col, interval: selected?.interval, timezone })
582
+ .orderGroupsBy({ by: 'key', dir: 'asc' });
583
+ if (args.limit != null)
584
+ grouped = grouped.limit(Number(args.limit));
585
+ if (args.offset != null)
586
+ grouped = grouped.offset(Number(args.offset));
587
+ return ctx.db.group(grouped);
588
+ }
589
+ export async function issueBuckets(ctx, args, today) {
590
+ const { query, timezone } = await issueQuery(ctx, args);
591
+ // The same calendar the query was compiled against, so the overdue count and
592
+ // the list it sits beside cannot disagree about where the day ends.
593
+ const day = String(today ?? '').trim() || (await businessToday(ctx, timezone));
594
+ const I = ctx.table('flow.Issue');
595
+ const { terminal, first } = await boardEdges(ctx);
596
+ // `count` rather than `all`: none of these needs the rows.
597
+ const open = terminal.length ? [not(inArray(I.columnId, terminal))] : [];
598
+ const [total, done, overdue, waiting] = await Promise.all([
599
+ ctx.db.count(query),
600
+ terminal.length ? ctx.db.count(query.where(inArray(I.columnId, terminal))) : Promise.resolve(0),
601
+ ctx.db.count(query.where(...open, isNotNull(I.dueDate), lt(I.dueDate, day))),
602
+ first.length
603
+ ? ctx.db.count(query.where(...open, inArray(I.columnId, first), or(isNull(I.dueDate), gte(I.dueDate, day))))
604
+ : Promise.resolve(0),
605
+ ]);
606
+ return {
607
+ total,
608
+ done,
609
+ overdue,
610
+ waiting,
611
+ working: Math.max(0, total - done - overdue - waiting),
612
+ today: day,
613
+ };
614
+ }
615
+ export async function issueDetail(ctx, id) {
616
+ const row = (await ctx.db.select('flow.Issue', { id }))[0];
617
+ if (!row)
618
+ return null;
619
+ const [serialized] = await serializeIssueList(ctx, [row]);
620
+ const [tags, outgoing, incoming, comments, children] = await Promise.all([
621
+ ctx.db.select('flow.IssueTag', { issueId: id }),
622
+ ctx.db.select('flow.IssueDependency', { issueId: id }),
623
+ ctx.db.select('flow.IssueDependency', { dependsOnIssueId: id }),
624
+ listTimeline(ctx, String(row.threadId), { limit: 100 }),
625
+ // Sub-tasks. `parentIssueId` has been modelled, validated for project and
626
+ // for cycles since the start, and until now had no screen at all — the
627
+ // detail page is the only place the relationship reads from either end.
628
+ ctx.db.select('flow.Issue', { parentIssueId: id, active: true }),
629
+ ]);
630
+ const tagIds = tags.map((row) => row.tagId);
631
+ const tagRows = tagIds.length
632
+ ? await ctx.db.all(from(ctx.table('flow.Tag')).where(inArray(ctx.table('flow.Tag').id, tagIds)))
633
+ : [];
634
+ // The far side of each dependency, by id and in one query — the same shape
635
+ // serializeIssueList already uses for column/epic/sprint/assignee. A screen
636
+ // that resolved these itself could only do it by listing the project's
637
+ // issues and filtering, which silently prints a raw id for any dependency
638
+ // outside that page: `issue.options` caps at 100 rows, so a 1000-issue
639
+ // project showed uuids for every dependency older than the newest hundred.
640
+ const relatedIds = [
641
+ ...new Set([...outgoing.map((row) => row.dependsOnIssueId), ...incoming.map((row) => row.issueId)]),
642
+ ].map(String);
643
+ const relatedRows = relatedIds.length
644
+ ? await ctx.db.all(from(ctx.table('flow.Issue')).where(inArray(ctx.table('flow.Issue').id, relatedIds)))
645
+ : [];
646
+ const titleOf = new Map(relatedRows.map((row) => [String(row.id), String(row.title)]));
647
+ // Every field this project defines, each carrying whatever this issue holds
648
+ // for it — the definitions, not just the answers, because a field nobody has
649
+ // filled in still has to appear on the form for anyone to fill it in.
650
+ const [defs, held] = await Promise.all([
651
+ ctx.db.select('flow.FieldDef', { projectId: row.projectId, active: true }),
652
+ ctx.db.select('flow.IssueFieldValue', { issueId: id }),
653
+ ]);
654
+ const answerOf = new Map(held.map((entry) => [String(entry.fieldId), entry.value]));
655
+ const fields = defs
656
+ .sort((a, b) => n(a.sequence) - n(b.sequence) || String(a.id).localeCompare(String(b.id)))
657
+ .map((def) => ({ ...def, value: answerOf.get(String(def.id)) ?? null }));
658
+ const parent = row.parentIssueId
659
+ ? ((await ctx.db.select('flow.Issue', { id: row.parentIssueId }))[0] ?? null)
660
+ : null;
661
+ return {
662
+ ...serialized,
663
+ parentTitle: parent ? String(parent.title) : null,
664
+ fields,
665
+ following: await following(ctx, id),
666
+ children: await serializeIssueList(ctx, children),
667
+ tags: tagRows,
668
+ dependencies: outgoing.map((row) => ({
669
+ ...row,
670
+ dependsOnTitle: titleOf.get(String(row.dependsOnIssueId)) ?? row.dependsOnIssueId,
671
+ })),
672
+ dependents: incoming.map((row) => ({
673
+ ...row,
674
+ issueTitle: titleOf.get(String(row.issueId)) ?? row.issueId,
675
+ })),
676
+ comments,
677
+ };
678
+ }
679
+ /**
680
+ * Blocking dependencies leading into a given set of issues, batched — the map
681
+ * view (flow_backend's dependency atlas, one epic at a time) needs the edges
682
+ * among its own node set, not the per-issue read `issueDetail` already does.
683
+ * No JOIN in this query builder by design, so this is one query against
684
+ * `IssueDependency` alone.
685
+ *
686
+ * Both ends are matched by default: an edge pointing out of the set is not an
687
+ * edge of the set. The map opts into outgoing edges so it can page a large
688
+ * source set in bounded chunks, then filters both ends against the complete
689
+ * epic after aggregation. The id list remains capped because it arrives over
690
+ * HTTP.
691
+ */
692
+ export const DEPENDENCY_BATCH = 200;
693
+ export async function dependenciesFor(ctx, issueIds, includeExternalTargets = false) {
694
+ const asked = [...new Set(issueIds.map(String))].slice(0, DEPENDENCY_BATCH);
695
+ if (!asked.length)
696
+ return [];
697
+ // The ids arrive from the caller, not from a query this function ran, so the
698
+ // membership rule has to be applied to them here. Without it, naming an issue
699
+ // in somebody else's project answered whether it had blockers — a small
700
+ // answer, and still an answer about a project that is supposed to be
701
+ // invisible (FLW-018).
702
+ const I = ctx.table('flow.Issue');
703
+ const visible = await visibleProjects(ctx);
704
+ const readable = await ctx.db.all(restrictToVisible(from(I).select(I.id).where(inArray(I.id, asked)), I.projectId, visible));
705
+ const ids = readable.map((row) => String(row.id));
706
+ if (!ids.length)
707
+ return [];
708
+ const D = ctx.table('flow.IssueDependency');
709
+ const held = new Set(ids);
710
+ const rows = await ctx.db.all(from(D).where(inArray(D.issueId, ids), eq(D.relation, 'blocks')));
711
+ // An external target is an issue outside the set that was asked about, which
712
+ // the map draws an arrow to. It may still be one the caller cannot read, so
713
+ // the far end is filtered the same way the near end was.
714
+ if (!includeExternalTargets)
715
+ return rows.filter((row) => held.has(String(row.dependsOnIssueId)));
716
+ const targets = [...new Set(rows.map((row) => String(row.dependsOnIssueId)))].filter((id) => !held.has(id));
717
+ if (!targets.length)
718
+ return rows;
719
+ const reachable = new Set((await ctx.db.all(restrictToVisible(from(I).select(I.id).where(inArray(I.id, targets)), I.projectId, visible))).map((row) => String(row.id)));
720
+ return rows.filter((row) => held.has(String(row.dependsOnIssueId)) || reachable.has(String(row.dependsOnIssueId)));
721
+ }
722
+ export async function saveIssue(ctx, input) {
723
+ if (!commandKey(input.idempotencyKey))
724
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
725
+ if (!actorRequired(ctx))
726
+ return invalid(issue('actor', 'flow.error.actorRequired'));
727
+ if (!String(input.title ?? '').trim())
728
+ return invalid(issue('title', 'flow.error.required'));
729
+ if (!ISSUE_PRIORITIES.includes(String(input.priority ?? 'normal')))
730
+ return invalid(issue('priority', 'flow.error.invalidPriority'));
731
+ if (!(await projectExists(ctx, input.projectId)))
732
+ return invalid(issue('projectId', 'flow.error.notFound'));
733
+ const column = await columnOf(ctx, input.columnId);
734
+ if (!column || String(column.projectId) !== String(input.projectId))
735
+ return invalid(issue('columnId', 'flow.error.invalidColumn'));
736
+ if (!(await userExists(ctx, input.assigneeUserId)))
737
+ return invalid(issue('assigneeUserId', 'flow.error.notFound'));
738
+ const sprint = await assignableSprint(ctx, input.sprintId);
739
+ if (sprint === undefined)
740
+ return invalid(issue('sprintId', 'flow.error.sprintClosed'));
741
+ if (sprint && String(sprint.projectId) !== String(input.projectId))
742
+ return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
743
+ const epic = await issueEpic(ctx, input.epicId);
744
+ if (epic === undefined)
745
+ return invalid(issue('epicId', 'flow.error.notFound'));
746
+ if (epic && String(epic.projectId) !== String(input.projectId))
747
+ return invalid(issue('epicId', 'flow.error.epicProjectMismatch'));
748
+ const kind = await issueType(ctx, input.typeId);
749
+ if (kind === undefined)
750
+ return invalid(issue('typeId', 'flow.error.notFound'));
751
+ if (kind && String(kind.projectId) !== String(input.projectId))
752
+ return invalid(issue('typeId', 'flow.error.typeProjectMismatch'));
753
+ return ctx.tx(async (tx) => {
754
+ const existing = await readableRow(tx, 'flow.Issue', input.id);
755
+ if (existing && String(existing.projectId) !== String(input.projectId))
756
+ return invalid(issue('projectId', 'flow.error.immutableProject'));
757
+ // moveIssue is the only door into a column, because it is the one that
758
+ // checks `blocks` dependencies before letting an issue reach a terminal
759
+ // state. Save used to keep `existing.columnId` and still answer ok, so a
760
+ // caller asking for a different column was told the move had happened.
761
+ if (existing && String(existing.columnId) !== String(input.columnId))
762
+ return invalid(issue('columnId', 'flow.error.columnNeedsMove'));
763
+ const parentError = await parentIssueError(tx, input.id, input.parentIssueId, String(input.projectId));
764
+ if (parentError)
765
+ return invalid(parentError);
766
+ // Resolved before the issue row is touched: `tx` only rolls back on a
767
+ // thrown exception, not on a plain `return invalid(...)`, so validating
768
+ // tags after the insert/compareAndSet below committed a half-written
769
+ // issue (row present, no tags, caller told `ok: false`) on every bad
770
+ // tagId — found by seeding 1000 issues and finding "failed" ones that
771
+ // existed anyway.
772
+ const tagIds = input.tagIds ? [...new Set(input.tagIds)] : null;
773
+ if (tagIds) {
774
+ const tags = tagIds.length
775
+ ? await tx.db.all(from(tx.table('flow.Tag')).where(inArray(tx.table('flow.Tag').id, tagIds), eq(tx.table('flow.Tag').active, true)))
776
+ : [];
777
+ if (tags.length !== tagIds.length)
778
+ return invalid(issue('tagIds', 'flow.error.notFound'));
779
+ }
780
+ // Custom field values, resolved and checked here for the same reason the
781
+ // tags above are: `tx` rolls back on a thrown exception, not on a returned
782
+ // `invalid`, so anything validated after the write below leaves a
783
+ // half-written issue behind and still reports failure.
784
+ const fieldWrites = [];
785
+ if (input.fields) {
786
+ const defs = await fieldsOfProject(tx, input.projectId);
787
+ for (const [key, raw] of Object.entries(input.fields)) {
788
+ const field = defs.get(String(key));
789
+ // A field this project does not have, rather than one that is merely
790
+ // empty: naming it is a mistake worth reporting, the same as an epic
791
+ // from another board.
792
+ if (!field)
793
+ return invalid(issue(`field:${key}`, 'flow.error.fieldUnknown'));
794
+ const error = fieldValueError(field, raw);
795
+ if (error)
796
+ return invalid(error);
797
+ fieldWrites.push({ field, value: String(raw ?? '').trim() });
798
+ }
799
+ }
800
+ const timestamp = now();
801
+ const nextVersion = n(existing?.version) + 1;
802
+ // A reference the caller did not mention keeps what is stored; an
803
+ // explicit null clears it. `priority` and `estimate` below already read
804
+ // this way, but epic, sprint, parent, assignee and due date did not — so
805
+ // any caller sending a partial record silently cleared the rest. The
806
+ // issue detail screen is exactly that caller: its form carries no sprint
807
+ // and no parent field (both have their own action), so editing a title
808
+ // dropped the issue out of its sprint and orphaned its sub-task link.
809
+ const kept = (given, stored) => given === undefined ? (stored ?? null) : given || null;
810
+ const values = {
811
+ projectId: input.projectId,
812
+ columnId: existing ? existing.columnId : input.columnId,
813
+ typeId: input.typeId === undefined ? (existing?.typeId ?? null) : kind ? kind.id : null,
814
+ epicId: input.epicId === undefined ? (existing?.epicId ?? null) : epic ? epic.id : null,
815
+ sprintId: input.sprintId === undefined ? (existing?.sprintId ?? null) : sprint ? sprint.id : null,
816
+ parentIssueId: kept(input.parentIssueId, existing?.parentIssueId),
817
+ title: input.title.trim(),
818
+ assigneeUserId: kept(input.assigneeUserId, existing?.assigneeUserId),
819
+ priority: input.priority ?? existing?.priority ?? 'normal',
820
+ startDate: kept(input.startDate, existing?.startDate),
821
+ dueDate: kept(input.dueDate, existing?.dueDate),
822
+ estimate: input.estimate == null ? (existing?.estimate ?? null) : String(input.estimate),
823
+ active: true,
824
+ version: nextVersion,
825
+ updatedAt: timestamp,
826
+ };
827
+ let threadId;
828
+ if (existing) {
829
+ const expected = input.expectedVersion ?? n(existing.version);
830
+ const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: expected }, values);
831
+ if (!('dryRun' in changed) && !changed.matched)
832
+ return invalid(issue('version', 'flow.error.conflict', { current: existing.version }));
833
+ threadId = String(existing.threadId);
834
+ }
835
+ else {
836
+ const thread = await ensureIssueThread(tx, input.id, input.title.trim(), timestamp);
837
+ threadId = String(thread.id);
838
+ await tx.db.insert('flow.Issue', {
839
+ id: input.id,
840
+ ...values,
841
+ threadId: thread.id,
842
+ createdByUserId: tx.actor ?? null,
843
+ createdAt: timestamp,
844
+ });
845
+ }
846
+ if (tagIds) {
847
+ const IT = tx.table('flow.IssueTag');
848
+ await tx.db.del(deleteFrom(IT).where(eq(IT.issueId, input.id)));
849
+ for (const tagId of tagIds)
850
+ await tx.db.insertIfAbsent('flow.IssueTag', { id: `${input.id}:${tagId}`, issueId: input.id, tagId });
851
+ }
852
+ // One row per issue and field, so a value is replaced rather than
853
+ // accumulated. Emptying one deletes the row instead of storing "": a field
854
+ // nobody has answered and a field answered with nothing read the same on
855
+ // screen, and only one of them should cost a row.
856
+ for (const { field, value } of fieldWrites) {
857
+ const id = `${input.id}:${String(field.id)}`;
858
+ if (!value) {
859
+ const V = tx.table('flow.IssueFieldValue');
860
+ await tx.db.del(deleteFrom(V).where(eq(V.id, id)));
861
+ continue;
862
+ }
863
+ // insertIfAbsent then update, rather than branching on whether the row
864
+ // exists: `db.update` answers with a result object either way, so there
865
+ // is nothing truthy to branch on, and the pair is correct in both cases.
866
+ await tx.db.insertIfAbsent('flow.IssueFieldValue', {
867
+ id,
868
+ issueId: input.id,
869
+ fieldId: field.id,
870
+ value,
871
+ });
872
+ await tx.db.update('flow.IssueFieldValue', { id }, { value });
873
+ }
874
+ // Whoever opened it, and whoever it lands on, are subscribed to its
875
+ // thread. Until this existed the thread had no followers at all, so
876
+ // `postMessage` addressed nobody and every comment notified nobody — the
877
+ // discussion feature was wired end to end and silently inert.
878
+ if (!existing)
879
+ await followIssue(tx, threadId, tx.actor);
880
+ const assignee = values.assigneeUserId;
881
+ if (assignee)
882
+ await followIssue(tx, threadId, assignee);
883
+ // Only what actually moved: a system entry on every title edit is noise,
884
+ // and the timeline is the one place that has to stay readable.
885
+ const handedOver = assignee && String(assignee) !== String(existing?.assigneeUserId ?? '')
886
+ ? [
887
+ {
888
+ field: 'assigneeUserId',
889
+ ...(existing?.assigneeUserId ? { oldValue: String(existing.assigneeUserId) } : {}),
890
+ newValue: String(assignee),
891
+ },
892
+ ]
893
+ : [];
894
+ const rescheduled = existing
895
+ ? [
896
+ ...moved('dueDate', existing.dueDate, values.dueDate),
897
+ ...moved('priority', existing.priority, values.priority),
898
+ ]
899
+ : [];
900
+ if (handedOver.length || rescheduled.length)
901
+ await postMessage(tx, {
902
+ id: `${input.id}:assigned:${nextVersion}`,
903
+ threadId,
904
+ authorUserId: tx.actor ?? undefined,
905
+ kind: 'system',
906
+ // A message key, resolved by whoever renders the timeline — the same
907
+ // arrangement crm_backend's `entryBody` already reads. Handing an issue
908
+ // over keeps its own key, because that is the entry people look for.
909
+ body: rescheduled.length && !handedOver.length ? 'flow.timeline.changed' : 'flow.timeline.assigned',
910
+ tracking: [...handedOver, ...rescheduled],
911
+ });
912
+ return { ok: true, id: input.id, version: nextVersion };
913
+ });
914
+ }
915
+ /**
916
+ * One system entry per command, carrying every tracked field that moved.
917
+ *
918
+ * The timeline used to record exactly one thing — who an issue was handed to —
919
+ * so "who put this in Done, and when" had no answer anywhere in the system. The
920
+ * fields tracked are the ones a person asks about afterwards: the column, the
921
+ * deadline, the priority and the sprint. Title and description are deliberately
922
+ * out: an entry per keystroke is what makes a timeline unreadable, and both
923
+ * already have their own history in the Live Doc.
924
+ *
925
+ * One message rather than one per field, because a single edit that moved three
926
+ * of them is one thing that happened.
927
+ */
928
+ async function trackIssueChange(tx, input) {
929
+ if (!input.changes.length || !input.threadId)
930
+ return;
931
+ await postMessage(tx, {
932
+ id: `${input.issueId}:changed:${input.version}`,
933
+ threadId: String(input.threadId),
934
+ authorUserId: tx.actor ?? undefined,
935
+ kind: 'system',
936
+ body: input.body,
937
+ tracking: input.changes,
938
+ });
939
+ }
940
+ /** A change worth an entry, or nothing when the value did not actually move. */
941
+ const moved = (field, before, after) => {
942
+ const from = before == null || before === '' ? '' : String(before);
943
+ const to = after == null || after === '' ? '' : String(after);
944
+ if (from === to)
945
+ return [];
946
+ return [{ field, ...(from ? { oldValue: from } : {}), ...(to ? { newValue: to } : {}) }];
947
+ };
948
+ async function ensureIssueThread(ctx, issueId, title, createdAt) {
949
+ return ensureThread(ctx, {
950
+ id: `thread:flow.Issue:${issueId}`,
951
+ resModel: 'flow.Issue',
952
+ resId: issueId,
953
+ displayName: title,
954
+ createdAt,
955
+ });
956
+ }
957
+ async function planTransfer(ctx, held, projectId, columnId) {
958
+ const columns = await ctx.db.select('flow.Column', { projectId, active: true });
959
+ if (!columns.length)
960
+ return issue('projectId', 'flow.error.projectHasNoColumns');
961
+ const named = columnId ? columns.find((row) => String(row.id) === String(columnId)) : undefined;
962
+ if (columnId && !named)
963
+ return issue('columnId', 'flow.error.notFound');
964
+ // No column named: the first one work arrives in, by the order the board
965
+ // shows. Landing in a terminal column would report the issue as finished
966
+ // the moment it moved, which is the one answer a move must not invent.
967
+ const landing = named ??
968
+ [...columns]
969
+ .filter((row) => row.terminalState !== true)
970
+ .sort((a, b) => n(a.sequence) - n(b.sequence) || String(a.id).localeCompare(String(b.id)))[0] ??
971
+ columns[0];
972
+ let typeId = null;
973
+ if (held.typeId) {
974
+ const from = (await ctx.db.select('flow.IssueType', { id: held.typeId }))[0];
975
+ const to = from
976
+ ? (await ctx.db.select('flow.IssueType', { projectId, code: from.code, active: true }))[0]
977
+ : undefined;
978
+ typeId = to ? String(to.id) : null;
979
+ }
980
+ return {
981
+ columnId: String(landing.id),
982
+ typeId,
983
+ epicCleared: held.epicId != null,
984
+ sprintCleared: held.sprintId != null,
985
+ };
986
+ }
987
+ /** Carry the custom field values whose code exists on the other side. */
988
+ async function carryFields(ctx, fromIssueId, toIssueId, projectId) {
989
+ const values = await ctx.db.select('flow.IssueFieldValue', { issueId: fromIssueId });
990
+ if (!values.length)
991
+ return { carried: 0, dropped: 0 };
992
+ const defs = await ctx.db.select('flow.FieldDef', { projectId, active: true });
993
+ const byCode = new Map(defs.map((def) => [String(def.code), def]));
994
+ let carried = 0;
995
+ for (const value of values) {
996
+ const from = (await ctx.db.select('flow.FieldDef', { id: value.fieldId }))[0];
997
+ const to = from ? byCode.get(String(from.code)) : undefined;
998
+ if (!to)
999
+ continue;
1000
+ await ctx.db.insertIfAbsent('flow.IssueFieldValue', {
1001
+ id: `${toIssueId}:${String(to.id)}`,
1002
+ issueId: toIssueId,
1003
+ fieldId: to.id,
1004
+ value: value.value ?? null,
1005
+ });
1006
+ carried += 1;
1007
+ }
1008
+ return { carried, dropped: values.length - carried };
1009
+ }
1010
+ /**
1011
+ * Move an issue into another project.
1012
+ *
1013
+ * Both ends go through the membership gate: moving work into a project you
1014
+ * cannot see is writing to a project you cannot see, and moving it out of one
1015
+ * is reading it. Either way the answer is the same "not found" every other
1016
+ * Flow path gives (FLW-DEC-012).
1017
+ *
1018
+ * An issue with children refuses rather than leaving them behind pointing at a
1019
+ * parent in another project. That is the same shape of orphan the purge job
1020
+ * takes care to avoid, and silently splitting a tree is worse than saying no.
1021
+ */
1022
+ export const BULK_ACTIONS = ['move', 'assign', 'archive', 'restore'];
1023
+ /** How many issues one request may touch. */
1024
+ const BULK_LIMIT = 200;
1025
+ /**
1026
+ * One action over many issues, applied one at a time and reported per issue.
1027
+ *
1028
+ * **This is not protected against concurrent edits, and cannot be.** Every
1029
+ * single-issue command takes an `expectedVersion` because the caller read the
1030
+ * record and is saying which version they meant. A person who ticked forty
1031
+ * rows on a list has read no versions and could not supply them, so this reads
1032
+ * each issue's current version and acts on it. Filling in a version on the
1033
+ * caller's behalf would be pretending to a guarantee that is not there — the
1034
+ * point of saying so here is that the guarantee is genuinely absent, not that
1035
+ * it is hidden.
1036
+ *
1037
+ * What replaces it is the report. Nothing is rolled back for a neighbour's
1038
+ * failure: an issue the caller cannot see, one already in the state asked for,
1039
+ * one that lost a race — each is named with its reason, and the rest still
1040
+ * happen. A bulk action that failed atomically would leave somebody with forty
1041
+ * rows and no idea which one was the problem.
1042
+ */
1043
+ export async function bulkIssues(ctx, input) {
1044
+ if (!actorRequired(ctx))
1045
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1046
+ if (!commandKey(input.idempotencyKey))
1047
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1048
+ if (!BULK_ACTIONS.includes(input.action))
1049
+ return invalid(issue('action', 'flow.error.invalidAction'));
1050
+ const ids = [...new Set(input.ids.map(String).filter(Boolean))];
1051
+ if (!ids.length)
1052
+ return invalid(issue('ids', 'flow.error.required'));
1053
+ if (ids.length > BULK_LIMIT)
1054
+ return invalid(issue('ids', 'flow.error.tooMany', { limit: BULK_LIMIT }));
1055
+ if ((input.action === 'move' || input.action === 'assign') && !input.value)
1056
+ return invalid(issue('value', 'flow.error.required'));
1057
+ const outcome = { applied: 0, refused: [] };
1058
+ for (const id of ids) {
1059
+ // Read through the gate, one at a time. An issue in a project this caller
1060
+ // is not on is not found, and is refused for that reason rather than
1061
+ // being silently skipped — a count that does not add up is worse than a
1062
+ // refusal that says why.
1063
+ const held = await readableRow(ctx, 'flow.Issue', id);
1064
+ if (!held) {
1065
+ outcome.refused.push({ id, code: 'flow.error.notFound' });
1066
+ continue;
1067
+ }
1068
+ // A key per issue, derived from the one the request carries, so a retry
1069
+ // of the whole batch replays each item rather than being refused as a
1070
+ // duplicate of the first.
1071
+ const key = commandRecordId(`flow.issue.bulk:${input.action}:${id}`, input.idempotencyKey);
1072
+ const version = n(held.version);
1073
+ const result = input.action === 'move'
1074
+ ? await moveIssue(ctx, {
1075
+ id,
1076
+ columnId: String(input.value),
1077
+ expectedVersion: version,
1078
+ idempotencyKey: key,
1079
+ })
1080
+ : input.action === 'archive'
1081
+ ? await archiveIssue(ctx, { id, expectedVersion: version, idempotencyKey: key })
1082
+ : input.action === 'restore'
1083
+ ? await restoreIssue(ctx, { id, expectedVersion: version, idempotencyKey: key })
1084
+ : await saveIssue(ctx, {
1085
+ id,
1086
+ projectId: String(held.projectId),
1087
+ columnId: String(held.columnId),
1088
+ title: String(held.title ?? ''),
1089
+ assigneeUserId: input.value ? String(input.value) : null,
1090
+ expectedVersion: version,
1091
+ idempotencyKey: key,
1092
+ });
1093
+ if (result.ok)
1094
+ outcome.applied += 1;
1095
+ else
1096
+ outcome.refused.push({
1097
+ id,
1098
+ code: String(result.errors?.[0]?.code ?? 'flow.error.invalid'),
1099
+ });
1100
+ }
1101
+ return { ok: true, ...outcome };
1102
+ }
1103
+ export async function transferIssue(ctx, input) {
1104
+ if (!actorRequired(ctx))
1105
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1106
+ if (!commandKey(input.idempotencyKey))
1107
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1108
+ return ctx.tx(async (tx) => {
1109
+ const held = await readableRow(tx, 'flow.Issue', input.id);
1110
+ if (!held)
1111
+ return invalid(issue('id', 'flow.error.notFound'));
1112
+ if (String(held.projectId) === String(input.projectId))
1113
+ return invalid(issue('projectId', 'flow.error.sameProject'));
1114
+ if (n(held.version) !== input.expectedVersion)
1115
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
1116
+ const destination = await readableProject(tx, input.projectId);
1117
+ if (!destination || destination.active !== true)
1118
+ return invalid(issue('projectId', 'flow.error.notFound'));
1119
+ const children = await tx.db.select('flow.Issue', { parentIssueId: input.id, active: true });
1120
+ if (children.length)
1121
+ return invalid(issue('id', 'flow.error.issueHasChildren'));
1122
+ const plan = await planTransfer(tx, held, String(input.projectId), input.columnId);
1123
+ if ('code' in plan)
1124
+ return invalid(plan);
1125
+ // The values move rather than being copied, so they are read before the
1126
+ // old ones go and written against the destination's own definitions.
1127
+ const carried = await carryFields(tx, input.id, input.id, String(input.projectId));
1128
+ const V = tx.table('flow.IssueFieldValue');
1129
+ const defs = await tx.db.select('flow.FieldDef', { projectId: held.projectId });
1130
+ if (defs.length)
1131
+ await tx.db.del(deleteFrom(V).where(eq(V.issueId, input.id), inArray(V.fieldId, defs.map((def) => String(def.id)))));
1132
+ const version = n(held.version) + 1;
1133
+ await tx.db.update('flow.Issue', { id: input.id }, {
1134
+ projectId: input.projectId,
1135
+ columnId: plan.columnId,
1136
+ typeId: plan.typeId,
1137
+ // Neither means anything on the other side, and keeping either would
1138
+ // put an issue in a sprint its new project does not run.
1139
+ epicId: null,
1140
+ sprintId: null,
1141
+ parentIssueId: null,
1142
+ version,
1143
+ updatedAt: now(),
1144
+ });
1145
+ return {
1146
+ ok: true,
1147
+ id: input.id,
1148
+ version,
1149
+ columnId: plan.columnId,
1150
+ fieldsCarried: carried.carried,
1151
+ fieldsDropped: carried.dropped,
1152
+ typeCleared: Boolean(held.typeId) && plan.typeId === null,
1153
+ epicCleared: plan.epicCleared,
1154
+ sprintCleared: plan.sprintCleared,
1155
+ };
1156
+ });
1157
+ }
1158
+ /**
1159
+ * Put a copy of an issue into another project, leaving the original alone.
1160
+ *
1161
+ * The same mapping `transferIssue` uses, because the crossing is the same
1162
+ * crossing — a type or a field that has no counterpart on the other side has
1163
+ * none whether the issue is moving or being duplicated.
1164
+ *
1165
+ * What a copy deliberately does not bring is the history: the comments, the
1166
+ * followers and the document are the record of a conversation that happened
1167
+ * about *that* issue, and duplicating them would put words in people's mouths
1168
+ * on a record they never saw. The copy starts with a title and the fields, and
1169
+ * whoever asked for it can say the rest themselves (FLW-020).
1170
+ */
1171
+ export async function copyIssue(ctx, input) {
1172
+ if (!actorRequired(ctx))
1173
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1174
+ if (!commandKey(input.idempotencyKey))
1175
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1176
+ const held = await readableRow(ctx, 'flow.Issue', input.id);
1177
+ if (!held)
1178
+ return invalid(issue('id', 'flow.error.notFound'));
1179
+ const destination = await readableProject(ctx, input.projectId);
1180
+ if (!destination || destination.active !== true)
1181
+ return invalid(issue('projectId', 'flow.error.notFound'));
1182
+ const plan = await planTransfer(ctx, held, String(input.projectId), input.columnId);
1183
+ if ('code' in plan)
1184
+ return invalid(plan);
1185
+ // Derived from the key, so a double click makes one copy rather than two —
1186
+ // the same reason the create form derives its id (FLW-033).
1187
+ const id = commandRecordId(`flow.issue.copy:${input.id}:${String(input.projectId)}`, input.idempotencyKey);
1188
+ const tags = await ctx.db.select('flow.IssueTag', { issueId: input.id });
1189
+ const made = await saveIssue(ctx, {
1190
+ id,
1191
+ projectId: String(input.projectId),
1192
+ columnId: plan.columnId,
1193
+ typeId: plan.typeId,
1194
+ title: String(input.title ?? held.title ?? ''),
1195
+ assigneeUserId: held.assigneeUserId ? String(held.assigneeUserId) : null,
1196
+ priority: String(held.priority ?? '2'),
1197
+ startDate: held.startDate ? String(held.startDate) : null,
1198
+ dueDate: held.dueDate ? String(held.dueDate) : null,
1199
+ estimate: held.estimate ?? undefined,
1200
+ // A tag is the company's, so it means the same thing in both projects.
1201
+ tagIds: tags.map((row) => String(row.tagId)),
1202
+ idempotencyKey: input.idempotencyKey,
1203
+ });
1204
+ if (!made.ok)
1205
+ return made;
1206
+ const carried = await carryFields(ctx, input.id, id, String(input.projectId));
1207
+ return {
1208
+ ok: true,
1209
+ id,
1210
+ columnId: plan.columnId,
1211
+ fieldsCarried: carried.carried,
1212
+ fieldsDropped: carried.dropped,
1213
+ typeCleared: Boolean(held.typeId) && plan.typeId === null,
1214
+ };
1215
+ }
1216
+ export async function moveIssue(ctx, input) {
1217
+ if (!actorRequired(ctx))
1218
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1219
+ if (!commandKey(input.idempotencyKey))
1220
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1221
+ return ctx.tx(async (tx) => {
1222
+ const held = await readableRow(tx, 'flow.Issue', input.id);
1223
+ if (!held)
1224
+ return invalid(issue('id', 'flow.error.notFound'));
1225
+ const column = await columnOf(tx, input.columnId);
1226
+ if (!column || String(column.projectId) !== String(held.projectId))
1227
+ return invalid(issue('columnId', 'flow.error.invalidColumn'));
1228
+ if (column.terminalState === true) {
1229
+ const blockers = (await tx.db.select('flow.IssueDependency', { issueId: input.id, relation: 'blocks' })).map((row) => String(row.dependsOnIssueId));
1230
+ if (blockers.length) {
1231
+ const blockingIssues = await tx.db.all(from(tx.table('flow.Issue')).where(inArray(tx.table('flow.Issue').id, blockers)));
1232
+ const columnIds = [...new Set(blockingIssues.map((row) => String(row.columnId)))];
1233
+ const blockingColumns = columnIds.length
1234
+ ? await tx.db.all(from(tx.table('flow.Column')).where(inArray(tx.table('flow.Column').id, columnIds)))
1235
+ : [];
1236
+ const terminal = new Set(blockingColumns.filter((row) => row.terminalState === true).map((row) => String(row.id)));
1237
+ const open = blockingIssues.filter((row) => !terminal.has(String(row.columnId)));
1238
+ if (open.length)
1239
+ return invalid(issue('columnId', 'flow.error.blocked'));
1240
+ }
1241
+ }
1242
+ const timestamp = now();
1243
+ const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: input.expectedVersion }, { columnId: input.columnId, version: n(held.version) + 1, updatedAt: timestamp });
1244
+ if (!('dryRun' in changed) && !changed.matched)
1245
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
1246
+ await trackIssueChange(tx, {
1247
+ issueId: input.id,
1248
+ threadId: held.threadId,
1249
+ version: n(held.version) + 1,
1250
+ body: 'flow.timeline.moved',
1251
+ changes: moved('columnId', held.columnId, input.columnId),
1252
+ });
1253
+ return { ok: true, id: input.id, version: n(held.version) + 1 };
1254
+ });
1255
+ }
1256
+ export async function assignSprint(ctx, input) {
1257
+ if (!actorRequired(ctx))
1258
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1259
+ if (!commandKey(input.idempotencyKey))
1260
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1261
+ return ctx.tx(async (tx) => {
1262
+ const held = await readableRow(tx, 'flow.Issue', input.id);
1263
+ if (!held)
1264
+ return invalid(issue('id', 'flow.error.notFound'));
1265
+ const sprint = await assignableSprint(tx, input.sprintId);
1266
+ if (sprint === undefined)
1267
+ return invalid(issue('sprintId', 'flow.error.sprintClosed'));
1268
+ if (sprint && String(sprint.projectId) !== String(held.projectId))
1269
+ return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
1270
+ const timestamp = now();
1271
+ 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 });
1272
+ if (!('dryRun' in changed) && !changed.matched)
1273
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
1274
+ await trackIssueChange(tx, {
1275
+ issueId: input.id,
1276
+ threadId: held.threadId,
1277
+ version: n(held.version) + 1,
1278
+ body: 'flow.timeline.sprint',
1279
+ changes: moved('sprintId', held.sprintId, sprint ? sprint.id : null),
1280
+ });
1281
+ return { ok: true, id: input.id, version: n(held.version) + 1 };
1282
+ });
1283
+ }
1284
+ /**
1285
+ * Only `blocks` is checked for cycles.
1286
+ *
1287
+ * `related` carries no ordering — an issue "related to" another can point back
1288
+ * without contradiction — so a cycle there is not a bug. A `blocks` cycle would
1289
+ * make every issue in the loop permanently unblockable, which is worth refusing
1290
+ * up front rather than discovering at move time.
1291
+ */
1292
+ async function createsBlockCycle(ctx, issueId, dependsOnIssueId) {
1293
+ const seen = new Set([issueId]);
1294
+ let frontier = [dependsOnIssueId];
1295
+ while (frontier.length) {
1296
+ if (frontier.includes(issueId))
1297
+ return true;
1298
+ const next = [];
1299
+ for (const id of frontier) {
1300
+ if (seen.has(id))
1301
+ continue;
1302
+ seen.add(id);
1303
+ const edges = await ctx.db.select('flow.IssueDependency', { issueId: id, relation: 'blocks' });
1304
+ next.push(...edges.map((row) => String(row.dependsOnIssueId)));
1305
+ }
1306
+ frontier = next;
1307
+ }
1308
+ return false;
1309
+ }
1310
+ export async function addDependency(ctx, input) {
1311
+ if (!actorRequired(ctx))
1312
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1313
+ if (!commandKey(input.idempotencyKey))
1314
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1315
+ if (!DEPENDENCY_RELATIONS.includes(input.relation))
1316
+ return invalid(issue('relation', 'flow.error.invalidRelation'));
1317
+ if (input.issueId === input.dependsOnIssueId)
1318
+ return invalid(issue('dependsOnIssueId', 'flow.error.selfDependency'));
1319
+ return ctx.tx(async (tx) => {
1320
+ const [held, target] = await Promise.all([
1321
+ readableRow(tx, 'flow.Issue', input.issueId).then((row) => (row ? [row] : [])),
1322
+ readableRow(tx, 'flow.Issue', input.dependsOnIssueId).then((row) => (row ? [row] : [])),
1323
+ ]);
1324
+ if (!held[0] || !target[0])
1325
+ return invalid(issue('id', 'flow.error.notFound'));
1326
+ if (input.relation === 'blocks' && (await createsBlockCycle(tx, input.issueId, input.dependsOnIssueId)))
1327
+ return invalid(issue('dependsOnIssueId', 'flow.error.cycle'));
1328
+ const inserted = await tx.db.insertIfAbsent('flow.IssueDependency', {
1329
+ id: input.id,
1330
+ issueId: input.issueId,
1331
+ dependsOnIssueId: input.dependsOnIssueId,
1332
+ relation: input.relation,
1333
+ });
1334
+ if (!('dryRun' in inserted) && !inserted.inserted)
1335
+ return invalid(issue('dependsOnIssueId', 'flow.error.duplicateDependency'));
1336
+ return { ok: true, id: input.id };
1337
+ });
1338
+ }
1339
+ export async function addComment(ctx, input) {
1340
+ if (!actorRequired(ctx))
1341
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1342
+ if (!commandKey(input.idempotencyKey))
1343
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1344
+ if (!input.body.trim())
1345
+ return invalid(issue('body', 'flow.error.required'));
1346
+ const held = await readableRow(ctx, 'flow.Issue', input.issueId);
1347
+ if (!held)
1348
+ return invalid(issue('issueId', 'flow.error.notFound'));
1349
+ // Before the message, so the author is subscribed to the replies to it.
1350
+ // `postMessage` excludes the author from its own recipients, so this does
1351
+ // not notify them about their own comment.
1352
+ await followIssue(ctx, held.threadId, ctx.actor);
1353
+ // Naming somebody subscribes them, so the answer to what they were asked
1354
+ // reaches them too. Being mentioned once is how most people end up following
1355
+ // an issue at all, which is also why `stopFollowing` exists below.
1356
+ for (const userId of input.mentionUserIds ?? [])
1357
+ await followIssue(ctx, held.threadId, userId);
1358
+ const result = await postMessage(ctx, {
1359
+ id: input.id,
1360
+ threadId: String(held.threadId),
1361
+ authorUserId: ctx.actor ?? undefined,
1362
+ kind: input.kind ?? 'comment',
1363
+ body: input.body.trim(),
1364
+ mentionPartnerIds: await mentionPartners(ctx, input.mentionUserIds ?? []),
1365
+ });
1366
+ return { ok: true, id: String(result.message.id) };
1367
+ }
1368
+ /**
1369
+ * Leaves an issue's thread.
1370
+ *
1371
+ * The only way out of a subscription this module hands out freely: being
1372
+ * assigned an issue, commenting on one, or being mentioned in one all
1373
+ * subscribe you, and every comment afterwards reaches you. Without this the
1374
+ * follower set only ever grows, and a single mention in a busy spec is a
1375
+ * standing appointment nobody agreed to.
1376
+ *
1377
+ * Answers ok when there was nothing to remove, because "I do not want these"
1378
+ * is satisfied either way.
1379
+ */
1380
+ /**
1381
+ * Take an issue off the board without pretending it was finished.
1382
+ *
1383
+ * `Issue.active` has been in the model and in four indexes since Flow was
1384
+ * written, `issue.list` has taken `includeArchived`, and nothing has ever
1385
+ * written `false` — so the only way to clear a cancelled task was to drop it in
1386
+ * the done column, which made every progress figure lie about it.
1387
+ *
1388
+ * Under compare-and-set, unlike `page.archive`: an issue carries a version
1389
+ * because two people work the same one, and archiving from a stale screen is
1390
+ * exactly the kind of mistake that guard exists for.
1391
+ *
1392
+ * What archiving is *not*: it is not completion and it is not deletion.
1393
+ * Dependencies stay, so an archived blocker still blocks — silently unblocking
1394
+ * work is the worst way to clear a blocker (FLW-DEC-011). Sub-tasks keep their
1395
+ * parent, so restoring a parent restores the branch as it was.
1396
+ */
1397
+ export async function archiveIssue(ctx, input) {
1398
+ return setIssueActive(ctx, input, false);
1399
+ }
1400
+ /**
1401
+ * Put it back, exactly where it was.
1402
+ *
1403
+ * Unlike `page.restore` this needs no reparenting rule: a sub-task of an
1404
+ * archived parent is still listed on every board and list of its own, so it
1405
+ * cannot come back invisible the way a page under an archived page would.
1406
+ */
1407
+ export async function restoreIssue(ctx, input) {
1408
+ return setIssueActive(ctx, input, true);
1409
+ }
1410
+ async function setIssueActive(ctx, input, active) {
1411
+ if (!actorRequired(ctx))
1412
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1413
+ if (!commandKey(input.idempotencyKey))
1414
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1415
+ return ctx.tx(async (tx) => {
1416
+ const held = await readableRow(tx, 'flow.Issue', input.id);
1417
+ if (!held)
1418
+ return invalid(issue('id', 'flow.error.notFound'));
1419
+ // Already where the caller wants it: say so rather than burning a version.
1420
+ if (Boolean(held.active) === active)
1421
+ return { ok: true, id: input.id, version: n(held.version) };
1422
+ if (n(held.version) !== input.expectedVersion)
1423
+ return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
1424
+ const version = n(held.version) + 1;
1425
+ await tx.db.update('flow.Issue', { id: input.id }, { active, version, updatedAt: now() });
1426
+ return { ok: true, id: input.id, version };
1427
+ });
1428
+ }
1429
+ /**
1430
+ * Follow an issue on purpose, rather than by being assigned it, commenting on
1431
+ * it or being named in it.
1432
+ *
1433
+ * Those three are how everybody who follows an issue got there, and `unfollow`
1434
+ * was the only door in the other direction. Somebody who wanted to watch
1435
+ * another person's work had to comment on it — which is noise in the timeline —
1436
+ * or ask to be mentioned.
1437
+ */
1438
+ export async function startFollowing(ctx, input) {
1439
+ if (!actorRequired(ctx))
1440
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1441
+ if (!commandKey(input.idempotencyKey))
1442
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1443
+ const held = await readableRow(ctx, 'flow.Issue', input.issueId);
1444
+ if (!held)
1445
+ return invalid(issue('issueId', 'flow.error.notFound'));
1446
+ await followIssue(ctx, held.threadId, ctx.actor);
1447
+ return { ok: true, id: input.issueId };
1448
+ }
1449
+ export async function stopFollowing(ctx, input) {
1450
+ if (!actorRequired(ctx))
1451
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1452
+ if (!commandKey(input.idempotencyKey))
1453
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1454
+ const held = await readableRow(ctx, 'flow.Issue', input.issueId);
1455
+ if (!held)
1456
+ return invalid(issue('issueId', 'flow.error.notFound'));
1457
+ const user = (await ctx.db.select('user.User', { id: ctx.actor }))[0];
1458
+ if (!user?.partnerId)
1459
+ return { ok: true, removed: 0 };
1460
+ const removed = await unfollowThread(ctx, String(held.threadId), String(user.partnerId));
1461
+ return { ok: true, removed };
1462
+ }
1463
+ /**
1464
+ * Whether the reader follows this issue, so a screen can offer the right verb.
1465
+ */
1466
+ export async function following(ctx, issueId) {
1467
+ const held = await readableRow(ctx, 'flow.Issue', issueId);
1468
+ if (!held || !ctx.actor)
1469
+ return false;
1470
+ const user = (await ctx.db.select('user.User', { id: ctx.actor }))[0];
1471
+ if (!user?.partnerId)
1472
+ return false;
1473
+ const rows = await ctx.db.select('mail.Follower', {
1474
+ threadId: held.threadId,
1475
+ partnerId: user.partnerId,
1476
+ });
1477
+ return rows.length > 0;
1478
+ }
1479
+ /**
1480
+ * Contend on one row per project, so an invariant that spans rows has
1481
+ * something a database can serialize — see `flow.ProjectGuard`.
1482
+ *
1483
+ * The row is made on first use rather than with the project: a project that
1484
+ * never starts a sprint never needs one, and creating it here means projects
1485
+ * that predate this code get one the first time it matters.
1486
+ */
1487
+ async function serializeProject(ctx, projectId) {
1488
+ const id = `guard:${projectId}`;
1489
+ await ctx.db.insertIfAbsent('flow.ProjectGuard', { id, projectId, updatedAt: now() });
1490
+ await ctx.db.update('flow.ProjectGuard', { id }, { updatedAt: now() });
1491
+ }
1492
+ export async function startSprint(ctx, input) {
1493
+ if (!actorRequired(ctx))
1494
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1495
+ if (!commandKey(input.idempotencyKey))
1496
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1497
+ return ctx.tx(async (tx) => {
1498
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
1499
+ if (!held)
1500
+ return invalid(issue('id', 'flow.error.notFound'));
1501
+ if (held.state !== 'planned')
1502
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
1503
+ // Take the project's guard row before reading, so a second caller doing
1504
+ // the same thing waits here rather than racing past the check below. The
1505
+ // read after it is a new statement and so takes a fresh snapshot, which is
1506
+ // what lets it see a sprint the other transaction has just started.
1507
+ await serializeProject(tx, String(held.projectId));
1508
+ // A project runs at most one active sprint at a time, which is what makes
1509
+ // "the current sprint" a well-defined thing for the board to show.
1510
+ const active = await tx.db.select('flow.Sprint', { projectId: held.projectId, state: 'active' });
1511
+ if (active.length)
1512
+ return invalid(issue('id', 'flow.error.sprintAlreadyActive'));
1513
+ await tx.db.update('flow.Sprint', { id: input.id }, { state: 'active' });
1514
+ return { ok: true, id: input.id };
1515
+ });
1516
+ }
1517
+ /**
1518
+ * What a sprint is carrying, and how much of it is finished — see FLW-021.
1519
+ *
1520
+ * `estimate` has been stored, shown on the form and shown in the summary since
1521
+ * the module was written, and added up nowhere: a sprint had no total and there
1522
+ * was no velocity to read. Counted per sprint in two grouped passes rather than
1523
+ * one query per sprint.
1524
+ */
1525
+ export async function sprintTotals(ctx, projectId) {
1526
+ const tally = new Map();
1527
+ const terminal = new Set((await ctx.db.select('flow.Column', { projectId, terminalState: true, active: true })).map((row) => String(row.id)));
1528
+ // One read of the project's live issues that carry a sprint. Estimates are
1529
+ // decimals, which no `count` adds up, so the sum happens here — over the
1530
+ // sprint members only, not over the project.
1531
+ const I = ctx.table('flow.Issue');
1532
+ const rows = await ctx.db.all(from(I).where(eq(I.projectId, projectId), eq(I.active, true), isNotNull(I.sprintId)));
1533
+ for (const row of rows) {
1534
+ const key = String(row.sprintId);
1535
+ const at = tally.get(key) ?? { total: 0, done: 0, unfinished: 0, estimate: 0, estimateDone: 0 };
1536
+ const finished = terminal.has(String(row.columnId));
1537
+ at.total += 1;
1538
+ at.estimate += n(row.estimate);
1539
+ if (finished) {
1540
+ at.done += 1;
1541
+ at.estimateDone += n(row.estimate);
1542
+ }
1543
+ else
1544
+ at.unfinished += 1;
1545
+ tally.set(key, at);
1546
+ }
1547
+ return tally;
1548
+ }
1549
+ /** The same reading for epics, which have the same missing total. */
1550
+ export async function epicTotals(ctx, projectId) {
1551
+ const tally = new Map();
1552
+ const terminal = new Set((await ctx.db.select('flow.Column', { projectId, terminalState: true, active: true })).map((row) => String(row.id)));
1553
+ const I = ctx.table('flow.Issue');
1554
+ const rows = await ctx.db.all(from(I).where(eq(I.projectId, projectId), eq(I.active, true), isNotNull(I.epicId)));
1555
+ for (const row of rows) {
1556
+ const key = String(row.epicId);
1557
+ const at = tally.get(key) ?? { total: 0, done: 0, estimate: 0, estimateDone: 0 };
1558
+ at.total += 1;
1559
+ at.estimate += n(row.estimate);
1560
+ if (terminal.has(String(row.columnId))) {
1561
+ at.done += 1;
1562
+ at.estimateDone += n(row.estimate);
1563
+ }
1564
+ tally.set(key, at);
1565
+ }
1566
+ return tally;
1567
+ }
1568
+ /**
1569
+ * Close a sprint, and say what happens to the work that did not finish.
1570
+ *
1571
+ * Closing used to change one column and stop. The issues stayed in a sprint
1572
+ * nobody would look at again, and moving them was one screen each — the step
1573
+ * every sprint process has, done by hand.
1574
+ *
1575
+ * `carryTo` names where the unfinished work goes: another sprint of the same
1576
+ * project that is still open, or `null` to take it out of the sprint entirely.
1577
+ * Omitting it leaves the work where it is, which is what closing has always
1578
+ * done, so no existing caller changes behaviour.
1579
+ *
1580
+ * The carry is not compare-and-set. A sprint close is a deliberate act on the
1581
+ * whole set, and failing it because one issue was edited a second ago would be
1582
+ * the wrong answer; the version still moves, so anyone with that issue open
1583
+ * gets the conflict on their own next save.
1584
+ */
1585
+ /**
1586
+ * Remove a sprint that was never started.
1587
+ *
1588
+ * Only `planned`. A sprint that has run is a record of what a team did in a
1589
+ * fortnight, and deleting one would take that away from every figure that
1590
+ * reports on it — `closeSprint` is how a sprint ends. This is for the other
1591
+ * case: one made by mistake, or planned and then abandoned before it began.
1592
+ *
1593
+ * Issues planned into it are let go rather than deleted with it. They go back
1594
+ * to the backlog, which is where they were before somebody put them in a
1595
+ * sprint that never happened; taking the work away with the plan would be a
1596
+ * surprise nobody asked for (FLW-016).
1597
+ */
1598
+ export async function deleteSprint(ctx, input) {
1599
+ if (!actorRequired(ctx))
1600
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1601
+ if (!commandKey(input.idempotencyKey))
1602
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1603
+ return ctx.tx(async (tx) => {
1604
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
1605
+ if (!held)
1606
+ return invalid(issue('id', 'flow.error.notFound'));
1607
+ if (held.state !== 'planned')
1608
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
1609
+ const planned = await tx.db.select('flow.Issue', { sprintId: input.id });
1610
+ for (const row of planned)
1611
+ await tx.db.update('flow.Issue', { id: row.id }, { sprintId: null, updatedAt: now() });
1612
+ const S = tx.table('flow.Sprint');
1613
+ await tx.db.del(deleteFrom(S).where(eq(S.id, input.id)));
1614
+ return { ok: true, id: input.id, released: planned.length };
1615
+ });
1616
+ }
1617
+ export async function closeSprint(ctx, input) {
1618
+ if (!actorRequired(ctx))
1619
+ return invalid(issue('actor', 'flow.error.actorRequired'));
1620
+ if (!commandKey(input.idempotencyKey))
1621
+ return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
1622
+ return ctx.tx(async (tx) => {
1623
+ const held = await readableRow(tx, 'flow.Sprint', input.id);
1624
+ if (!held)
1625
+ return invalid(issue('id', 'flow.error.notFound'));
1626
+ if (held.state !== 'active')
1627
+ return invalid(issue('id', 'flow.error.invalidSprintState'));
1628
+ let carried = 0;
1629
+ if (input.carryTo !== undefined) {
1630
+ const target = input.carryTo ? await readableRow(tx, 'flow.Sprint', input.carryTo) : null;
1631
+ if (input.carryTo) {
1632
+ if (!target || String(target.projectId) !== String(held.projectId))
1633
+ return invalid(issue('carryTo', 'flow.error.sprintProjectMismatch'));
1634
+ if (target.state === 'closed')
1635
+ return invalid(issue('carryTo', 'flow.error.sprintClosed'));
1636
+ if (String(target.id) === String(held.id))
1637
+ return invalid(issue('carryTo', 'flow.error.invalidSprintState'));
1638
+ }
1639
+ const terminal = new Set((await tx.db.select('flow.Column', {
1640
+ projectId: held.projectId,
1641
+ terminalState: true,
1642
+ active: true,
1643
+ })).map((row) => String(row.id)));
1644
+ const members = await tx.db.select('flow.Issue', { sprintId: input.id, active: true });
1645
+ const timestamp = now();
1646
+ for (const row of members) {
1647
+ if (terminal.has(String(row.columnId)))
1648
+ continue;
1649
+ await tx.db.update('flow.Issue', { id: row.id }, { sprintId: target ? target.id : null, version: n(row.version) + 1, updatedAt: timestamp });
1650
+ await trackIssueChange(tx, {
1651
+ issueId: String(row.id),
1652
+ threadId: row.threadId,
1653
+ version: n(row.version) + 1,
1654
+ body: 'flow.timeline.sprint',
1655
+ changes: moved('sprintId', row.sprintId, target ? target.id : null),
1656
+ });
1657
+ carried += 1;
1658
+ }
1659
+ }
1660
+ await tx.db.update('flow.Sprint', { id: input.id }, { state: 'closed' });
1661
+ return { ok: true, id: input.id, carried };
1662
+ });
1663
+ }
1664
+ export const createFlowId = () => randomUUID();
1665
+ //# sourceMappingURL=operations.js.map