@ketvietlab/ketsuite 0.1.3 → 0.1.6

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 (359) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/deployment.d.ts.map +1 -1
  3. package/dist/deployment.js +3 -0
  4. package/dist/deployment.js.map +1 -1
  5. package/dist/index.d.ts +8 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/modules/account_staff_channel/channel-routes.d.ts.map +1 -1
  10. package/dist/modules/account_staff_channel/channel-routes.js +1 -12
  11. package/dist/modules/account_staff_channel/channel-routes.js.map +1 -1
  12. package/dist/modules/attendance/channel-routes.d.ts.map +1 -1
  13. package/dist/modules/attendance/channel-routes.js +1 -12
  14. package/dist/modules/attendance/channel-routes.js.map +1 -1
  15. package/dist/modules/backend/design/HANDOFF.md +2 -2
  16. package/dist/modules/backend/design/auth.css +12 -0
  17. package/dist/modules/backend/design/client/table-selection.d.mts +3 -3
  18. package/dist/modules/backend/design/client/table-selection.d.mts.map +1 -1
  19. package/dist/modules/backend/design/client/table-selection.mjs +1 -1
  20. package/dist/modules/backend/design/client/table-selection.mjs.map +4 -4
  21. package/dist/modules/backend/design/content.css +43 -0
  22. package/dist/modules/backend/design/design-system.css +1 -1
  23. package/dist/modules/backend/design/forms.css +84 -1
  24. package/dist/modules/backend/design/lists.css +26 -18
  25. package/dist/modules/backend/design/record.css +5 -2
  26. package/dist/modules/backend/design/responsive.css +5 -6
  27. package/dist/modules/backend/design/user-workflow.css +257 -0
  28. package/dist/modules/backend/forms.d.ts +38 -1
  29. package/dist/modules/backend/forms.d.ts.map +1 -1
  30. package/dist/modules/backend/forms.js +29 -0
  31. package/dist/modules/backend/forms.js.map +1 -1
  32. package/dist/modules/backend/index.d.ts +3 -2
  33. package/dist/modules/backend/index.d.ts.map +1 -1
  34. package/dist/modules/backend/index.js +3 -2
  35. package/dist/modules/backend/index.js.map +1 -1
  36. package/dist/modules/backend/messages.d.ts.map +1 -1
  37. package/dist/modules/backend/messages.js +42 -2
  38. package/dist/modules/backend/messages.js.map +1 -1
  39. package/dist/modules/channel_api/core.d.ts +30 -0
  40. package/dist/modules/channel_api/core.d.ts.map +1 -1
  41. package/dist/modules/channel_api/core.js +28 -0
  42. package/dist/modules/channel_api/core.js.map +1 -1
  43. package/dist/modules/crm/functions.d.ts +5 -0
  44. package/dist/modules/crm/functions.d.ts.map +1 -1
  45. package/dist/modules/crm/functions.js +105 -10
  46. package/dist/modules/crm/functions.js.map +1 -1
  47. package/dist/modules/crm/jobs.d.ts.map +1 -1
  48. package/dist/modules/crm/jobs.js +1 -0
  49. package/dist/modules/crm/jobs.js.map +1 -1
  50. package/dist/modules/crm/operations.d.ts.map +1 -1
  51. package/dist/modules/crm/operations.js +2 -1
  52. package/dist/modules/crm/operations.js.map +1 -1
  53. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  54. package/dist/modules/crm_backend/index.js +5 -2
  55. package/dist/modules/crm_backend/index.js.map +1 -1
  56. package/dist/modules/crm_backend/messages.d.ts +116 -0
  57. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  58. package/dist/modules/crm_backend/messages.js +122 -6
  59. package/dist/modules/crm_backend/messages.js.map +1 -1
  60. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  61. package/dist/modules/crm_backend/routes.js +434 -174
  62. package/dist/modules/crm_backend/routes.js.map +1 -1
  63. package/dist/modules/crm_backend/screens/case-create.d.ts +7 -0
  64. package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -1
  65. package/dist/modules/crm_backend/screens/case-create.js +13 -4
  66. package/dist/modules/crm_backend/screens/case-create.js.map +1 -1
  67. package/dist/modules/crm_backend/screens/case-detail.d.ts +6 -0
  68. package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -1
  69. package/dist/modules/crm_backend/screens/case-detail.js +73 -23
  70. package/dist/modules/crm_backend/screens/case-detail.js.map +1 -1
  71. package/dist/modules/crm_backend/screens/configuration.d.ts +21 -3
  72. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  73. package/dist/modules/crm_backend/screens/configuration.js +260 -55
  74. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  75. package/dist/modules/crm_backend/screens/index.d.ts +3 -3
  76. package/dist/modules/crm_backend/screens/index.d.ts.map +1 -1
  77. package/dist/modules/crm_backend/screens/index.js +2 -2
  78. package/dist/modules/crm_backend/screens/index.js.map +1 -1
  79. package/dist/modules/crm_staff_channel/channel-routes.d.ts.map +1 -1
  80. package/dist/modules/crm_staff_channel/channel-routes.js +1 -12
  81. package/dist/modules/crm_staff_channel/channel-routes.js.map +1 -1
  82. package/dist/modules/flow/membership.d.ts.map +1 -1
  83. package/dist/modules/flow/membership.js +7 -1
  84. package/dist/modules/flow/membership.js.map +1 -1
  85. package/dist/modules/flow/operations.d.ts +10 -4
  86. package/dist/modules/flow/operations.d.ts.map +1 -1
  87. package/dist/modules/flow/operations.js +10 -4
  88. package/dist/modules/flow/operations.js.map +1 -1
  89. package/dist/modules/flow_staff_channel/channel-routes.d.ts.map +1 -1
  90. package/dist/modules/flow_staff_channel/channel-routes.js +1 -20
  91. package/dist/modules/flow_staff_channel/channel-routes.js.map +1 -1
  92. package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
  93. package/dist/modules/hospitality_core/messages.js +44 -0
  94. package/dist/modules/hospitality_core/messages.js.map +1 -1
  95. package/dist/modules/hospitality_core/night-audit.d.ts.map +1 -1
  96. package/dist/modules/hospitality_core/night-audit.js +7 -0
  97. package/dist/modules/hospitality_core/night-audit.js.map +1 -1
  98. package/dist/modules/hospitality_core/operations.d.ts.map +1 -1
  99. package/dist/modules/hospitality_core/operations.js +150 -40
  100. package/dist/modules/hospitality_core/operations.js.map +1 -1
  101. package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
  102. package/dist/modules/hospitality_core/routes.js +24 -2
  103. package/dist/modules/hospitality_core/routes.js.map +1 -1
  104. package/dist/modules/hospitality_core/screens/check-out-prep.d.ts +46 -0
  105. package/dist/modules/hospitality_core/screens/check-out-prep.d.ts.map +1 -0
  106. package/dist/modules/hospitality_core/screens/check-out-prep.js +133 -0
  107. package/dist/modules/hospitality_core/screens/check-out-prep.js.map +1 -0
  108. package/dist/modules/hospitality_core/screens/folio-detail.d.ts.map +1 -1
  109. package/dist/modules/hospitality_core/screens/folio-detail.js +2 -4
  110. package/dist/modules/hospitality_core/screens/folio-detail.js.map +1 -1
  111. package/dist/modules/hospitality_core/screens/index.d.ts +2 -0
  112. package/dist/modules/hospitality_core/screens/index.d.ts.map +1 -1
  113. package/dist/modules/hospitality_core/screens/index.js +1 -0
  114. package/dist/modules/hospitality_core/screens/index.js.map +1 -1
  115. package/dist/modules/hospitality_core/screens/reservation-detail.d.ts.map +1 -1
  116. package/dist/modules/hospitality_core/screens/reservation-detail.js +8 -1
  117. package/dist/modules/hospitality_core/screens/reservation-detail.js.map +1 -1
  118. package/dist/modules/hospitality_core/screens/shared.d.ts +12 -0
  119. package/dist/modules/hospitality_core/screens/shared.d.ts.map +1 -1
  120. package/dist/modules/hospitality_core/screens/shared.js +25 -4
  121. package/dist/modules/hospitality_core/screens/shared.js.map +1 -1
  122. package/dist/modules/hospitality_core/services.d.ts +48 -0
  123. package/dist/modules/hospitality_core/services.d.ts.map +1 -1
  124. package/dist/modules/hospitality_core/services.js +70 -0
  125. package/dist/modules/hospitality_core/services.js.map +1 -1
  126. package/dist/modules/hospitality_staff_channel/channel-routes.d.ts.map +1 -1
  127. package/dist/modules/hospitality_staff_channel/channel-routes.js +1 -12
  128. package/dist/modules/hospitality_staff_channel/channel-routes.js.map +1 -1
  129. package/dist/modules/inventory_staff_channel/channel-routes.d.ts.map +1 -1
  130. package/dist/modules/inventory_staff_channel/channel-routes.js +1 -12
  131. package/dist/modules/inventory_staff_channel/channel-routes.js.map +1 -1
  132. package/dist/modules/loyalty/admin-functions.d.ts +2 -0
  133. package/dist/modules/loyalty/admin-functions.d.ts.map +1 -1
  134. package/dist/modules/loyalty/admin-functions.js +96 -20
  135. package/dist/modules/loyalty/admin-functions.js.map +1 -1
  136. package/dist/modules/loyalty/engine.d.ts +4 -1
  137. package/dist/modules/loyalty/engine.d.ts.map +1 -1
  138. package/dist/modules/loyalty/engine.js +125 -18
  139. package/dist/modules/loyalty/engine.js.map +1 -1
  140. package/dist/modules/loyalty/index.d.ts.map +1 -1
  141. package/dist/modules/loyalty/index.js +4 -3
  142. package/dist/modules/loyalty/index.js.map +1 -1
  143. package/dist/modules/loyalty/jobs.d.ts.map +1 -1
  144. package/dist/modules/loyalty/jobs.js +0 -1
  145. package/dist/modules/loyalty/jobs.js.map +1 -1
  146. package/dist/modules/loyalty/membership-functions.d.ts +5 -0
  147. package/dist/modules/loyalty/membership-functions.d.ts.map +1 -1
  148. package/dist/modules/loyalty/membership-functions.js +37 -23
  149. package/dist/modules/loyalty/membership-functions.js.map +1 -1
  150. package/dist/modules/loyalty/messages.d.ts +14 -0
  151. package/dist/modules/loyalty/messages.d.ts.map +1 -1
  152. package/dist/modules/loyalty/messages.js +14 -0
  153. package/dist/modules/loyalty/messages.js.map +1 -1
  154. package/dist/modules/loyalty/models.d.ts.map +1 -1
  155. package/dist/modules/loyalty/models.js +17 -0
  156. package/dist/modules/loyalty/models.js.map +1 -1
  157. package/dist/modules/loyalty/order-functions.d.ts.map +1 -1
  158. package/dist/modules/loyalty/order-functions.js +70 -17
  159. package/dist/modules/loyalty/order-functions.js.map +1 -1
  160. package/dist/modules/loyalty/program-design.d.ts +11 -0
  161. package/dist/modules/loyalty/program-design.d.ts.map +1 -0
  162. package/dist/modules/loyalty/program-design.js +356 -0
  163. package/dist/modules/loyalty/program-design.js.map +1 -0
  164. package/dist/modules/loyalty/stats.d.ts +0 -13
  165. package/dist/modules/loyalty/stats.d.ts.map +1 -1
  166. package/dist/modules/loyalty/stats.js +11 -6
  167. package/dist/modules/loyalty/stats.js.map +1 -1
  168. package/dist/modules/loyalty/stored-value.d.ts.map +1 -1
  169. package/dist/modules/loyalty/stored-value.js +7 -2
  170. package/dist/modules/loyalty/stored-value.js.map +1 -1
  171. package/dist/modules/loyalty/types.d.ts +1 -1
  172. package/dist/modules/loyalty/types.d.ts.map +1 -1
  173. package/dist/modules/loyalty_backend/design-messages.d.ts +221 -0
  174. package/dist/modules/loyalty_backend/design-messages.d.ts.map +1 -0
  175. package/dist/modules/loyalty_backend/design-messages.js +221 -0
  176. package/dist/modules/loyalty_backend/design-messages.js.map +1 -0
  177. package/dist/modules/loyalty_backend/index.js +224 -412
  178. package/dist/modules/loyalty_backend/index.js.map +1 -1
  179. package/dist/modules/loyalty_backend/messages.d.ts +642 -214
  180. package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
  181. package/dist/modules/loyalty_backend/messages.js +19 -13
  182. package/dist/modules/loyalty_backend/messages.js.map +1 -1
  183. package/dist/modules/loyalty_backend/program-workspace.d.ts +4 -0
  184. package/dist/modules/loyalty_backend/program-workspace.d.ts.map +1 -0
  185. package/dist/modules/loyalty_backend/program-workspace.js +600 -0
  186. package/dist/modules/loyalty_backend/program-workspace.js.map +1 -0
  187. package/dist/modules/loyalty_backend/screens/index.d.ts +12 -36
  188. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
  189. package/dist/modules/loyalty_backend/screens/index.js +148 -292
  190. package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
  191. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
  192. package/dist/modules/loyalty_backend/screens/page-frame.js +2 -2
  193. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
  194. package/dist/modules/loyalty_pos/functions.d.ts.map +1 -1
  195. package/dist/modules/loyalty_pos/functions.js +1 -0
  196. package/dist/modules/loyalty_pos/functions.js.map +1 -1
  197. package/dist/modules/loyalty_pos/index.js +1 -1
  198. package/dist/modules/loyalty_pos/index.js.map +1 -1
  199. package/dist/modules/loyalty_sale/functions.d.ts +1 -0
  200. package/dist/modules/loyalty_sale/functions.d.ts.map +1 -1
  201. package/dist/modules/loyalty_sale/functions.js +1 -0
  202. package/dist/modules/loyalty_sale/functions.js.map +1 -1
  203. package/dist/modules/partner_backend/client/partner.css +3 -1
  204. package/dist/modules/partner_backend/index.d.ts.map +1 -1
  205. package/dist/modules/partner_backend/index.js +4 -0
  206. package/dist/modules/partner_backend/index.js.map +1 -1
  207. package/dist/modules/partner_backend/routes.d.ts.map +1 -1
  208. package/dist/modules/partner_backend/routes.js +6 -1
  209. package/dist/modules/partner_backend/routes.js.map +1 -1
  210. package/dist/modules/partner_backend/screens/form.d.ts +1 -0
  211. package/dist/modules/partner_backend/screens/form.d.ts.map +1 -1
  212. package/dist/modules/partner_backend/screens/form.js +1 -0
  213. package/dist/modules/partner_backend/screens/form.js.map +1 -1
  214. package/dist/modules/purchase_staff_channel/order-routes.d.ts.map +1 -1
  215. package/dist/modules/purchase_staff_channel/order-routes.js +1 -12
  216. package/dist/modules/purchase_staff_channel/order-routes.js.map +1 -1
  217. package/dist/modules/quality_staff_channel/channel-routes.d.ts.map +1 -1
  218. package/dist/modules/quality_staff_channel/channel-routes.js +1 -12
  219. package/dist/modules/quality_staff_channel/channel-routes.js.map +1 -1
  220. package/dist/modules/sale/functions.d.ts.map +1 -1
  221. package/dist/modules/sale/functions.js +27 -17
  222. package/dist/modules/sale/functions.js.map +1 -1
  223. package/dist/modules/sale_staff_channel/channel-routes.d.ts.map +1 -1
  224. package/dist/modules/sale_staff_channel/channel-routes.js +1 -12
  225. package/dist/modules/sale_staff_channel/channel-routes.js.map +1 -1
  226. package/dist/modules/sale_staff_channel/order-routes.d.ts.map +1 -1
  227. package/dist/modules/sale_staff_channel/order-routes.js +1 -12
  228. package/dist/modules/sale_staff_channel/order-routes.js.map +1 -1
  229. package/dist/modules/stock_staff_channel/operation-routes.d.ts.map +1 -1
  230. package/dist/modules/stock_staff_channel/operation-routes.js +1 -12
  231. package/dist/modules/stock_staff_channel/operation-routes.js.map +1 -1
  232. package/dist/modules/user/authorization.d.ts +64 -1
  233. package/dist/modules/user/authorization.d.ts.map +1 -1
  234. package/dist/modules/user/authorization.js +445 -53
  235. package/dist/modules/user/authorization.js.map +1 -1
  236. package/dist/modules/user/functions.d.ts.map +1 -1
  237. package/dist/modules/user/functions.js +45 -23
  238. package/dist/modules/user/functions.js.map +1 -1
  239. package/dist/modules/user/index.d.ts +2 -1
  240. package/dist/modules/user/index.d.ts.map +1 -1
  241. package/dist/modules/user/index.js +1 -1
  242. package/dist/modules/user/index.js.map +1 -1
  243. package/dist/modules/user/models.d.ts.map +1 -1
  244. package/dist/modules/user/models.js +5 -0
  245. package/dist/modules/user/models.js.map +1 -1
  246. package/dist/modules/user/roles.d.ts.map +1 -1
  247. package/dist/modules/user/roles.js +2 -1
  248. package/dist/modules/user/roles.js.map +1 -1
  249. package/dist/modules/user_backend/access-routes.d.ts +31 -0
  250. package/dist/modules/user_backend/access-routes.d.ts.map +1 -0
  251. package/dist/modules/user_backend/access-routes.js +447 -0
  252. package/dist/modules/user_backend/access-routes.js.map +1 -0
  253. package/dist/modules/user_backend/index.d.ts +1 -0
  254. package/dist/modules/user_backend/index.d.ts.map +1 -1
  255. package/dist/modules/user_backend/index.js +1 -0
  256. package/dist/modules/user_backend/index.js.map +1 -1
  257. package/dist/modules/user_backend/messages.d.ts +4 -0
  258. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  259. package/dist/modules/user_backend/messages.js +4 -0
  260. package/dist/modules/user_backend/messages.js.map +1 -1
  261. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  262. package/dist/modules/user_backend/routes.js +38 -3
  263. package/dist/modules/user_backend/routes.js.map +1 -1
  264. package/dist/modules/user_backend/screens/user-form.d.ts +1 -0
  265. package/dist/modules/user_backend/screens/user-form.d.ts.map +1 -1
  266. package/dist/modules/user_backend/screens/user-form.js +28 -0
  267. package/dist/modules/user_backend/screens/user-form.js.map +1 -1
  268. package/dist/modules/website/cms.d.ts.map +1 -1
  269. package/dist/modules/website/cms.js +283 -6
  270. package/dist/modules/website/cms.js.map +1 -1
  271. package/dist/modules/website/index.d.ts.map +1 -1
  272. package/dist/modules/website/index.js +12 -0
  273. package/dist/modules/website/index.js.map +1 -1
  274. package/dist/modules/website/media-usage.d.ts +38 -0
  275. package/dist/modules/website/media-usage.d.ts.map +1 -0
  276. package/dist/modules/website/media-usage.js +87 -0
  277. package/dist/modules/website/media-usage.js.map +1 -0
  278. package/dist/modules/website/paths.js +1 -1
  279. package/dist/modules/website/paths.js.map +1 -1
  280. package/dist/modules/website/sections.d.ts.map +1 -1
  281. package/dist/modules/website/sections.js +12 -1
  282. package/dist/modules/website/sections.js.map +1 -1
  283. package/dist/modules/website_backend/index.js +138 -0
  284. package/dist/modules/website_backend/index.js.map +1 -1
  285. package/dist/modules/website_backend/menus.d.ts.map +1 -1
  286. package/dist/modules/website_backend/menus.js +11 -0
  287. package/dist/modules/website_backend/menus.js.map +1 -1
  288. package/dist/modules/website_backend/routes.d.ts.map +1 -1
  289. package/dist/modules/website_backend/routes.js +414 -31
  290. package/dist/modules/website_backend/routes.js.map +1 -1
  291. package/dist/modules/website_backend/screens/index.d.ts +98 -6
  292. package/dist/modules/website_backend/screens/index.d.ts.map +1 -1
  293. package/dist/modules/website_backend/screens/index.js +600 -154
  294. package/dist/modules/website_backend/screens/index.js.map +1 -1
  295. package/dist/modules/website_backend/screens/page-frame.d.ts +3 -1
  296. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  297. package/dist/modules/website_backend/screens/page-frame.js +1 -1
  298. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  299. package/dist/modules/website_menu/functions.d.ts.map +1 -1
  300. package/dist/modules/website_menu/functions.js +51 -0
  301. package/dist/modules/website_menu/functions.js.map +1 -1
  302. package/dist/modules/website_menu/index.js +2 -0
  303. package/dist/modules/website_menu/index.js.map +1 -1
  304. package/dist/modules/website_search/functions.d.ts.map +1 -1
  305. package/dist/modules/website_search/functions.js +10 -120
  306. package/dist/modules/website_search/functions.js.map +1 -1
  307. package/dist/modules/website_search/index.js +2 -0
  308. package/dist/modules/website_search/index.js.map +1 -1
  309. package/dist/modules/website_search/jobs.d.ts +3 -0
  310. package/dist/modules/website_search/jobs.d.ts.map +1 -0
  311. package/dist/modules/website_search/jobs.js +101 -0
  312. package/dist/modules/website_search/jobs.js.map +1 -0
  313. package/dist/modules/website_search/rebuild.d.ts +33 -0
  314. package/dist/modules/website_search/rebuild.d.ts.map +1 -0
  315. package/dist/modules/website_search/rebuild.js +125 -0
  316. package/dist/modules/website_search/rebuild.js.map +1 -0
  317. package/dist/permission-catalogue.d.ts.map +1 -1
  318. package/dist/permission-catalogue.js +21 -1
  319. package/dist/permission-catalogue.js.map +1 -1
  320. package/dist/scaffold/index.js +1 -1
  321. package/dist/ui/chrome.d.ts +8 -0
  322. package/dist/ui/chrome.d.ts.map +1 -1
  323. package/dist/ui/chrome.js +9 -1
  324. package/dist/ui/chrome.js.map +1 -1
  325. package/dist/ui/client/table-selection-view.d.ts.map +1 -1
  326. package/dist/ui/client/table-selection-view.js +161 -5
  327. package/dist/ui/client/table-selection-view.js.map +1 -1
  328. package/dist/ui/client/user-workflow.d.ts +2 -0
  329. package/dist/ui/client/user-workflow.d.ts.map +1 -0
  330. package/dist/ui/client/user-workflow.js +141 -0
  331. package/dist/ui/client/user-workflow.js.map +1 -0
  332. package/dist/ui/form.d.ts +9 -0
  333. package/dist/ui/form.d.ts.map +1 -1
  334. package/dist/ui/form.js +29 -15
  335. package/dist/ui/form.js.map +1 -1
  336. package/dist/ui/icons.d.ts.map +1 -1
  337. package/dist/ui/icons.js +2 -0
  338. package/dist/ui/icons.js.map +1 -1
  339. package/dist/ui/index.d.ts +7 -3
  340. package/dist/ui/index.d.ts.map +1 -1
  341. package/dist/ui/index.js +6 -3
  342. package/dist/ui/index.js.map +1 -1
  343. package/dist/ui/layout.d.ts.map +1 -1
  344. package/dist/ui/layout.js +14 -4
  345. package/dist/ui/layout.js.map +1 -1
  346. package/dist/ui/nav.d.ts.map +1 -1
  347. package/dist/ui/nav.js +2 -1
  348. package/dist/ui/nav.js.map +1 -1
  349. package/dist/ui/state.d.ts +20 -1
  350. package/dist/ui/state.d.ts.map +1 -1
  351. package/dist/ui/state.js +17 -0
  352. package/dist/ui/state.js.map +1 -1
  353. package/dist/ui/table.js +1 -1
  354. package/dist/ui/table.js.map +1 -1
  355. package/dist/ui/user-workflow.d.ts +72 -0
  356. package/dist/ui/user-workflow.d.ts.map +1 -0
  357. package/dist/ui/user-workflow.js +144 -0
  358. package/dist/ui/user-workflow.js.map +1 -0
  359. package/package.json +8 -4
@@ -376,6 +376,28 @@
376
376
  overflow: hidden;
377
377
  }
378
378
 
379
+ /*
380
+ * A dialog that asked to be large is a workbench, not a form.
381
+ *
382
+ * Two things were wrong with it. `data-size` had no say at all, because
383
+ * `[data-presentation="dialog"] [data-ui="modal-sheet"]` matches with one
384
+ * more attribute than `[data-ui="modal-sheet"][data-size="large"]`, so every
385
+ * screen that asked for both got the width of a form. And the sheet was
386
+ * sized to its content, so a workbench with tabs was a different dialog on
387
+ * each tab — growing, shrinking and shifting under the cursor on every
388
+ * switch, which is the one thing a row of tabs exists to promise it will not
389
+ * do.
390
+ *
391
+ * It takes a fixed frame now. The height is the tall one a workbench wants
392
+ * until the screen cannot give it, and then it is the screen less a margin,
393
+ * so the dialog never runs off the top and bottom. The body scrolls inside
394
+ * it, which the sheet's own grid rows were already written for.
395
+ */
396
+ [data-ui="modal-layer"][data-presentation="dialog"] [data-ui="modal-sheet"][data-size="large"] {
397
+ inline-size: min(1200px, 100%);
398
+ block-size: min(1000px, calc(100dvh - 100px));
399
+ }
400
+
379
401
  /* URL-addressable modal workspace. The backdrop is a real close link and
380
402
  the sheet owns its scroll, so the document never grows horizontally. */
381
403
  [data-ui="modal-layer"] {
@@ -896,6 +918,31 @@
896
918
  column-gap: var(--admin-gap);
897
919
  }
898
920
 
921
+ [data-ui="form-grid"][data-layout="record"] > [data-ui="form-field"]:not([data-kind="checkbox"]) {
922
+ grid-template-columns: minmax(7rem, 9rem) minmax(0, 1fr);
923
+ align-items: center;
924
+ column-gap: var(--admin-gap);
925
+ }
926
+
927
+ [data-ui="form-grid"][data-layout="record"]
928
+ > [data-ui="form-field"]:not([data-kind="checkbox"])
929
+ > [data-ui="form-label"] {
930
+ grid-column: 1;
931
+ align-self: center;
932
+ }
933
+
934
+ [data-ui="form-grid"][data-layout="record"]
935
+ > [data-ui="form-field"]:not([data-kind="checkbox"])
936
+ > :is(
937
+ [data-ui="form-control"],
938
+ [data-ui="form-options"],
939
+ [data-ui="form-help"],
940
+ [data-ui="form-error"],
941
+ ket-island
942
+ ) {
943
+ grid-column: 2;
944
+ }
945
+
899
946
  [data-ui="record-form"][data-layout="default"]
900
947
  > [data-ui="form-grid"]
901
948
  > [data-ui="form-field"]:not([data-kind="checkbox"])
@@ -998,6 +1045,22 @@
998
1045
  grid-template-columns: minmax(0, 1fr);
999
1046
  align-items: stretch;
1000
1047
  }
1048
+ [data-ui="form-grid"][data-layout="record"] > [data-ui="form-field"]:not([data-kind="checkbox"]) {
1049
+ grid-template-columns: minmax(0, 1fr);
1050
+ align-items: stretch;
1051
+ }
1052
+ [data-ui="form-grid"][data-layout="record"]
1053
+ > [data-ui="form-field"]:not([data-kind="checkbox"])
1054
+ > :is(
1055
+ [data-ui="form-label"],
1056
+ [data-ui="form-control"],
1057
+ [data-ui="form-options"],
1058
+ [data-ui="form-help"],
1059
+ [data-ui="form-error"],
1060
+ ket-island
1061
+ ) {
1062
+ grid-column: 1;
1063
+ }
1001
1064
  [data-ui="record-form"][data-layout="default"]
1002
1065
  > [data-ui="form-grid"]
1003
1066
  > [data-ui="form-field"]:not([data-kind="checkbox"])
@@ -1063,13 +1126,18 @@
1063
1126
  [data-ui="relation-dialog-actions"] [data-ui="action"] {
1064
1127
  flex: 0 0 auto;
1065
1128
  }
1129
+ [data-ui="modal-layer"],
1066
1130
  [data-ui="modal-layer"][data-presentation="dialog"] {
1067
1131
  padding: 0;
1068
1132
  }
1069
- [data-ui="modal-layer"][data-presentation="dialog"] [data-ui="modal-sheet"] {
1133
+ /* Include every size: the large desktop dialog must not override mobile height. */
1134
+ [data-ui="modal-layer"] [data-ui="modal-sheet"],
1135
+ [data-ui="modal-layer"] [data-ui="modal-sheet"][data-size],
1136
+ [data-ui="modal-layer"][data-presentation="dialog"] [data-ui="modal-sheet"][data-size] {
1070
1137
  inline-size: 100%;
1071
1138
  block-size: 100dvh;
1072
1139
  max-block-size: 100dvh;
1140
+ box-shadow: none;
1073
1141
  border: 0;
1074
1142
  border-radius: 0;
1075
1143
  }
@@ -1132,3 +1200,18 @@
1132
1200
  }
1133
1201
  }
1134
1202
  }
1203
+
1204
+ @layer ket.app {
1205
+ /* A disclosure groups fields; it is not a label/control pair. */
1206
+ [data-ui="record-form"][data-layout="default"]
1207
+ > [data-ui="form-grid"]
1208
+ > [data-ui="form-field"][data-kind="group"] {
1209
+ display: block;
1210
+ grid-column: 1 / -1;
1211
+ min-inline-size: 0;
1212
+ }
1213
+ [data-ui="form-field"][data-kind="group"] > [data-ui="disclosure"] {
1214
+ inline-size: 100%;
1215
+ min-inline-size: 0;
1216
+ }
1217
+ }
@@ -760,17 +760,11 @@
760
760
  backdrop-filter: blur(10px);
761
761
  }
762
762
 
763
- /* The bar is furniture for whatever is in it: a list's chrome, the context
764
- switcher, whatever a module hangs on `topbar.end`. A framed screen names
765
- itself in its own heading, so on one of those the bar can end up holding
766
- nothing — and an empty bar is forty-four pixels and a rule drawn across the
767
- page saying nothing. It stays in the DOM because it is a navigation slot; it
768
- just stops taking up room. `:empty` will not do: the renderer leaves hydration
769
- comments inside. */
770
- [data-ui="topbar"]:not(:has(> *)) {
771
- min-block-size: 0;
772
- padding: 0;
773
- border-block-end: 0;
763
+ /* The neutral slot survives every route so fragment reconciliation has a
764
+ stable target; display: contents lets the optional semantic header keep its
765
+ existing position in the main layout. */
766
+ [data-ket-slot="backend.topbar"] {
767
+ display: contents;
774
768
  }
775
769
 
776
770
  body > [data-ui="shell"] [data-ui="topbar"] {
@@ -821,21 +815,29 @@
821
815
  /* A list runs to both edges of the pane and starts directly under the bar:
822
816
  the border, the radius and the drop shadow were drawing a card around
823
817
  something that is not a card. */
824
- [data-ui="content"]:has([data-ui="table-scroll"]):not(:has([data-ui="record-workspace"])) {
818
+ [data-ui="content"]:has([data-ui="table-scroll"]):not(:has([data-ui="record-workspace"])):not(
819
+ :has(> [data-ui="form-page"])
820
+ ) {
825
821
  padding: 0;
826
822
  }
827
823
 
828
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
824
+ [data-ui="main"]:has(
825
+ > [data-ket-slot="backend.topbar"] > [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"]
826
+ )
829
827
  > [data-ui="content"] {
830
828
  padding: 0 var(--admin-gap-lg) var(--admin-gap-lg);
831
829
  }
832
830
 
833
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
831
+ [data-ui="main"]:has(
832
+ > [data-ket-slot="backend.topbar"] > [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"]
833
+ )
834
834
  [data-ui="table-scroll"][data-gutter="compact"] {
835
835
  margin: 0;
836
836
  }
837
837
 
838
- [data-ui="content"]:has([data-ui="table-scroll"]):not(:has([data-ui="record-workspace"]))
838
+ [data-ui="content"]:has([data-ui="table-scroll"]):not(:has([data-ui="record-workspace"])):not(
839
+ :has(> [data-ui="form-page"])
840
+ )
839
841
  [data-ui="table-scroll"]:not([data-gutter="compact"]) {
840
842
  border-radius: 0;
841
843
  border-block-start: 0;
@@ -911,19 +913,25 @@
911
913
  white-space: nowrap;
912
914
  }
913
915
 
914
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
916
+ [data-ui="main"]:has(
917
+ > [data-ket-slot="backend.topbar"] > [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"]
918
+ )
915
919
  [data-ui="table"]
916
920
  th {
917
921
  block-size: var(--table-header-height);
918
922
  background: var(--admin-table-header);
919
923
  }
920
924
 
921
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
925
+ [data-ui="main"]:has(
926
+ > [data-ket-slot="backend.topbar"] > [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"]
927
+ )
922
928
  [data-ui="row"] {
923
929
  block-size: var(--table-row-height);
924
930
  }
925
931
 
926
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
932
+ [data-ui="main"]:has(
933
+ > [data-ket-slot="backend.topbar"] > [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"]
934
+ )
927
935
  [data-ui="row"]
928
936
  td {
929
937
  padding-block: var(--admin-gap-sm);
@@ -279,7 +279,7 @@
279
279
  border-inline-start: 1px solid var(--admin-divider-subtle);
280
280
  background: var(--admin-rail-bg);
281
281
  }
282
- [data-ui="main"]:has(> [data-ui="topbar"] > *) [data-ui="record-aside"] {
282
+ [data-ui="main"]:has(> [data-ket-slot="backend.topbar"] > [data-ui="topbar"] > *) [data-ui="record-aside"] {
283
283
  max-block-size: calc(100dvh - var(--admin-topbar-height) - 2 * var(--admin-gap));
284
284
  }
285
285
  [data-ui="record-aside"] :is([data-ui="chatter"], [data-ui="activity-record"]) {
@@ -447,7 +447,7 @@
447
447
  [data-ui="record-aside"] {
448
448
  position: static;
449
449
  max-block-size: none;
450
- padding: 0;
450
+ padding: var(--admin-gap-md);
451
451
  overflow: visible;
452
452
  border-inline-start: 0;
453
453
  background: transparent;
@@ -519,6 +519,9 @@
519
519
  [data-ui="record-body"] {
520
520
  padding: var(--admin-gap);
521
521
  }
522
+ [data-ui="record-aside"] {
523
+ padding: var(--admin-gap);
524
+ }
522
525
  [data-ui="record-field-grid"] {
523
526
  grid-template-columns: minmax(0, 1fr);
524
527
  }
@@ -167,11 +167,6 @@
167
167
  padding-inline: var(--admin-gap-sm);
168
168
  }
169
169
 
170
- [data-ui="sidebar-search"],
171
- [data-ui="sidebar-nav"] {
172
- display: none;
173
- }
174
-
175
170
  [data-ui="sidebar-foot"] {
176
171
  flex: 0 0 auto;
177
172
  flex-direction: row;
@@ -225,7 +220,11 @@
225
220
  flex: 1 0 100%;
226
221
  }
227
222
 
228
- [data-ui="main"]:has(> [data-ui="topbar"] [data-ui="list-chrome"][data-layout="catalogue"])
223
+ [data-ui="main"]:has(
224
+ > [data-ket-slot="backend.topbar"]
225
+ > [data-ui="topbar"]
226
+ [data-ui="list-chrome"][data-layout="catalogue"]
227
+ )
229
228
  > [data-ui="content"] {
230
229
  padding: 0 var(--admin-gap) var(--admin-gap-lg);
231
230
  }
@@ -0,0 +1,257 @@
1
+ .user-workflow {
2
+ width: 100%;
3
+ max-width: 68.75rem;
4
+ color: var(--kv-text-main);
5
+ }
6
+ .user-workflow section {
7
+ margin-bottom: 24px;
8
+ }
9
+ .user-workflow h2 {
10
+ font-size: 18px;
11
+ margin: 0 0 18px;
12
+ }
13
+ .user-workflow p {
14
+ color: var(--kv-text-secondary);
15
+ }
16
+ .user-steps {
17
+ list-style: none;
18
+ display: grid;
19
+ grid-template-columns: repeat(4, minmax(0, 1fr));
20
+ gap: 12px;
21
+ padding: 0;
22
+ margin: 0 0 28px;
23
+ }
24
+ .user-steps li {
25
+ display: flex;
26
+ gap: 12px;
27
+ align-items: center;
28
+ padding: 16px;
29
+ border: 1px solid var(--kv-panel-border);
30
+ border-radius: var(--kv-radius-md);
31
+ }
32
+ .user-steps li > span {
33
+ display: grid;
34
+ place-items: center;
35
+ border: 1px solid var(--kv-panel-border);
36
+ border-radius: 50%;
37
+ width: 32px;
38
+ height: 32px;
39
+ flex: 0 0 32px;
40
+ }
41
+ .user-steps strong,
42
+ .user-steps small {
43
+ display: block;
44
+ }
45
+ .user-steps small {
46
+ font-size: 11px;
47
+ color: var(--kv-text-muted);
48
+ }
49
+ .user-steps .current {
50
+ background: var(--kv-accent-subtle);
51
+ border-color: var(--kv-accent);
52
+ }
53
+ .user-steps .current > span {
54
+ background: var(--kv-accent);
55
+ color: white;
56
+ }
57
+ .user-role-search input {
58
+ width: 100%;
59
+ box-sizing: border-box;
60
+ border: 1px solid var(--kv-panel-border);
61
+ background: var(--kv-panel-bg);
62
+ color: inherit;
63
+ border-radius: var(--kv-radius-md);
64
+ padding: 10px 12px;
65
+ font: inherit;
66
+ }
67
+ .user-email-status {
68
+ max-inline-size: calc(50% - var(--admin-gap-lg) / 2 - 9rem - var(--admin-gap));
69
+ margin-inline-start: calc(9rem + var(--admin-gap));
70
+ min-height: 24px;
71
+ font-size: 13px;
72
+ }
73
+ .user-role-search {
74
+ display: block;
75
+ margin-bottom: 16px;
76
+ }
77
+ .user-role-search input {
78
+ display: block;
79
+ margin-top: 8px;
80
+ }
81
+ .user-role-grid {
82
+ display: grid;
83
+ grid-template-columns: repeat(2, minmax(0, 1fr));
84
+ gap: 12px;
85
+ }
86
+ .user-role-option {
87
+ display: flex;
88
+ gap: 12px;
89
+ padding: 16px;
90
+ border: 1px solid var(--kv-panel-border);
91
+ border-radius: var(--kv-radius-md);
92
+ cursor: pointer;
93
+ }
94
+ .user-role-option:has(:checked) {
95
+ background: var(--kv-accent-subtle);
96
+ border-color: var(--kv-accent);
97
+ }
98
+ .user-role-option:has(:disabled) {
99
+ opacity: 0.6;
100
+ cursor: default;
101
+ }
102
+ .user-role-option strong,
103
+ .user-role-option small {
104
+ display: block;
105
+ }
106
+ .user-role-option small {
107
+ color: var(--kv-text-muted);
108
+ margin-top: 6px;
109
+ }
110
+ .user-check {
111
+ display: flex;
112
+ gap: 10px;
113
+ }
114
+ .user-summary-row {
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: space-between;
118
+ gap: 18px;
119
+ padding: 16px 8px;
120
+ border: 0;
121
+ border-bottom: 1px solid var(--kv-panel-border);
122
+ width: 100%;
123
+ box-sizing: border-box;
124
+ background: transparent;
125
+ color: inherit;
126
+ font: inherit;
127
+ text-align: left;
128
+ text-decoration: none;
129
+ }
130
+ .user-summary-row > span:first-child {
131
+ color: var(--kv-text-secondary);
132
+ }
133
+ .user-summary-row strong {
134
+ font-weight: 500;
135
+ overflow-wrap: anywhere;
136
+ }
137
+ .user-summary-row svg {
138
+ width: 18px;
139
+ height: 18px;
140
+ }
141
+ .user-summary-row:is(button, a) {
142
+ cursor: pointer;
143
+ }
144
+ .user-summary-row:is(button, a):hover {
145
+ background: var(--kv-panel-bg-subtle);
146
+ }
147
+ .user-action-bar {
148
+ position: sticky;
149
+ bottom: 0;
150
+ background: var(--kv-panel-bg);
151
+ display: flex;
152
+ justify-content: space-between;
153
+ gap: 16px;
154
+ padding: 20px 0;
155
+ border-top: 1px solid var(--kv-panel-border);
156
+ box-shadow: none;
157
+ }
158
+ .user-action-bar > div {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 12px;
162
+ }
163
+ .user-action-bar button,
164
+ .user-action-bar a {
165
+ padding: 9px 16px;
166
+ border: 1px solid var(--kv-panel-border);
167
+ border-radius: var(--kv-radius-md);
168
+ background: var(--kv-panel-bg);
169
+ color: inherit;
170
+ font: inherit;
171
+ cursor: pointer;
172
+ text-decoration: none;
173
+ }
174
+ .user-action-bar .primary {
175
+ background: var(--kv-accent);
176
+ color: white;
177
+ border-color: var(--kv-accent);
178
+ }
179
+ .user-action-bar button:disabled {
180
+ opacity: 0.5;
181
+ cursor: not-allowed;
182
+ }
183
+ .user-notice {
184
+ padding: 16px;
185
+ background: var(--kv-panel-bg-subtle);
186
+ border: 1px solid var(--kv-panel-border);
187
+ margin-bottom: 20px;
188
+ }
189
+ .user-notice.error {
190
+ color: var(--kv-danger);
191
+ }
192
+ .user-workflow [hidden] {
193
+ display: none !important;
194
+ }
195
+ .user-workflow :focus-visible {
196
+ outline: 2px solid var(--kv-accent);
197
+ outline-offset: 2px;
198
+ }
199
+ @media (max-width: 800px) {
200
+ .user-steps {
201
+ grid-template-columns: repeat(2, minmax(0, 1fr));
202
+ }
203
+ .user-role-grid {
204
+ grid-template-columns: 1fr;
205
+ }
206
+ .user-email-status {
207
+ max-inline-size: none;
208
+ margin-inline-start: 0;
209
+ }
210
+ .user-action-bar {
211
+ flex-wrap: wrap;
212
+ }
213
+ .user-summary-row {
214
+ gap: 12px;
215
+ }
216
+ .user-steps li {
217
+ padding: 10px;
218
+ }
219
+ }
220
+ .user-access-scope {
221
+ border: 1px solid var(--kv-panel-border);
222
+ border-radius: var(--kv-radius-md);
223
+ padding: 20px;
224
+ margin: 20px 0;
225
+ }
226
+ .user-access-scope > header {
227
+ display: flex;
228
+ justify-content: space-between;
229
+ gap: 16px;
230
+ align-items: center;
231
+ }
232
+ .user-access-scope h2 {
233
+ margin: 0;
234
+ font-size: 18px;
235
+ }
236
+ .user-access-context {
237
+ display: flex;
238
+ gap: 16px;
239
+ align-items: center;
240
+ flex-wrap: wrap;
241
+ padding: 16px 0;
242
+ border-bottom: 1px solid var(--kv-panel-border);
243
+ }
244
+ .user-access-context label {
245
+ display: flex;
246
+ gap: 8px;
247
+ align-items: center;
248
+ }
249
+ .user-access-context small {
250
+ flex-basis: 100%;
251
+ color: var(--kv-text-muted);
252
+ }
253
+ .user-access-context select {
254
+ padding: 8px;
255
+ border: 1px solid var(--kv-panel-border);
256
+ border-radius: var(--kv-radius-md);
257
+ }
@@ -1,7 +1,44 @@
1
- import type { Route } from '@ketvietlab/ketjs';
1
+ import type { Route, Translator } from '@ketvietlab/ketjs';
2
+ import type { FormSchema, FormValues } from '@ketvietlab/ketjs-view';
2
3
  type Req = Parameters<Route>[1];
3
4
  export declare const readForm: (req: Req) => Promise<Record<string, string>>;
4
5
  export declare const seeOther: (path: string) => import("@ketvietlab/ketjs").RouteResult;
5
6
  export declare const errorsOf: (result: unknown) => string[];
7
+ /**
8
+ * What a route holds after a submit it turned down.
9
+ *
10
+ * Three things have to agree, and until now every route that tried wrote all
11
+ * three out by hand: the dialog stays open, what was typed comes back, and each
12
+ * complaint lands on the control that caused it. The usual `errors.length` test
13
+ * gets the first one wrong the moment every complaint is a field mark, because
14
+ * then there is no form-level sentence to count.
15
+ *
16
+ * The words come from `backend.validation.*`. A schema names a message key for
17
+ * each code it can raise, so the sentences belong to whoever ships the codes,
18
+ * not to each module that adopts a schema.
19
+ */
20
+ export type FormRefusal = {
21
+ /**
22
+ * Check a submit against its shape rules. Returns the normalized values when
23
+ * they pass and null when they do not, keeping the marks for the render.
24
+ *
25
+ * Not every submit is an edit. A row's own archive or restore control posts
26
+ * its identity and nothing else, so it has no form to satisfy — do not put it
27
+ * through here, or it is refused for fields it never carried.
28
+ *
29
+ * Refusals accumulate, so a screen holding more than one form does not lose
30
+ * the first one's marks to the second one passing.
31
+ */
32
+ check<TValues extends FormValues>(schema: FormSchema<TValues>, form: Readonly<FormValues>): TValues | null;
33
+ /** Record a refusal the shape rules did not raise — a command that said no. */
34
+ add(sentences: readonly string[]): void;
35
+ /** Whether this submit was turned down, by a form-level sentence or a field mark. */
36
+ refused(): boolean;
37
+ /** The complaint about one control, as a sentence, or null when it is fine. */
38
+ error(field: string): string | null;
39
+ /** The complaints that concern the whole form rather than one of its controls. */
40
+ sentences(): string[];
41
+ };
42
+ export declare const formRefusal: (t: Translator) => FormRefusal;
6
43
  export {};
7
44
  //# sourceMappingURL=forms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/forms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,KAAK,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/B,eAAO,MAAM,QAAQ,QAAe,GAAG,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAavE,CAAA;AAED,eAAO,MAAM,QAAQ,SAAU,MAAM,4CAA+D,CAAA;AAEpG,eAAO,MAAM,QAAQ,WAAY,OAAO,KAAG,MAAM,EAGhD,CAAA"}
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/forms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAErF,KAAK,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/B,eAAO,MAAM,QAAQ,QAAe,GAAG,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAavE,CAAA;AAED,eAAO,MAAM,QAAQ,SAAU,MAAM,4CAA+D,CAAA;AAEpG,eAAO,MAAM,QAAQ,WAAY,OAAO,KAAG,MAAM,EAGhD,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,SAAS,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,IAAI,CAAA;IAC1G,+EAA+E;IAC/E,GAAG,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IACvC,qFAAqF;IACrF,OAAO,IAAI,OAAO,CAAA;IAClB,+EAA+E;IAC/E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,kFAAkF;IAClF,SAAS,IAAI,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,WAAW,MAAO,UAAU,KAAG,WA0B3C,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { text, withHeaders } from '@ketvietlab/ketjs';
2
+ import { validateForm } from '@ketvietlab/ketjs-view';
2
3
  export const readForm = async (req) => {
3
4
  const chunks = [];
4
5
  for await (const chunk of req)
@@ -22,4 +23,32 @@ export const errorsOf = (result) => {
22
23
  const errors = result?.errors ?? [];
23
24
  return errors.map((error) => `${error.field ? `${error.field}: ` : ''}${error.message ?? 'invalid value'}`);
24
25
  };
26
+ export const formRefusal = (t) => {
27
+ let issues = [];
28
+ let said = [];
29
+ // An unknown key would render as itself, which is worse on screen than the
30
+ // code: at least the code is something to search for.
31
+ const say = (issue) => {
32
+ const key = `backend.${issue.messageKey}`;
33
+ return t.resolves(key) ? t(key, issue.params) : issue.code;
34
+ };
35
+ return {
36
+ check(schema, form) {
37
+ const checked = validateForm(schema, form);
38
+ if (checked.valid)
39
+ return checked.values;
40
+ issues = checked.issues;
41
+ return null;
42
+ },
43
+ add(sentences) {
44
+ said = [...said, ...sentences];
45
+ },
46
+ refused: () => issues.length > 0 || said.length > 0,
47
+ error: (field) => {
48
+ const held = issues.find((issue) => issue.field === field);
49
+ return held ? say(held) : null;
50
+ },
51
+ sentences: () => [...issues.filter((issue) => issue.field === null).map(say), ...said],
52
+ };
53
+ };
25
54
  //# sourceMappingURL=forms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKrD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAQ,EAAmC,EAAE;IAC1E,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAA;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IACnB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;IACtD,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;IACzF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAA;QACzD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAEpG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAY,EAAE;IACpD,MAAM,MAAM,GAAI,MAA0E,EAAE,MAAM,IAAI,EAAE,CAAA;IACxG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAA;AAC7G,CAAC,CAAA"}
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/forms.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,8 @@ export { adminPage, choices, frameOf, inLocale, localeQuery, localized, optional
17
17
  export type { AnyRow, FrameOptions, Req, ScreenOptions } from './screen.ts';
18
18
  export { relationControl, relationLabels } from './relation-select.ts';
19
19
  export type { RelationEditorField, RelationManager, RelationOption, RelationSelectConfig, RelationSelectLabels, } from './relation-select.ts';
20
- export { readForm, seeOther } from './forms.ts';
20
+ export { formRefusal, readForm, seeOther } from './forms.ts';
21
+ export type { FormRefusal } from './forms.ts';
21
22
  /**
22
23
  * The kit, re-exported.
23
24
  *
@@ -26,6 +27,6 @@ export { readForm, seeOther } from './forms.ts';
26
27
  * working and so `import backend, { badge } from '@ketvietlab/ketsuite/backend'` still reads
27
28
  * naturally on a backend screen.
28
29
  */
29
- export { backendPage, shell, formatDateTime, formatMoney, Framed, ListScreen, RecordScreen, WorkspaceScreen, listChrome, timeframeFilter, topbarSearch, emptyState, errorState, dataTable, visibleColumns, badge, avatar, thumbnail, person, initials, icon, hasIcon, definitionList, progressBar, gantt, chart, barChart, delta, changeOf, axisCeiling, code, qrCode, inline, button, linkButton, iconButton, actionGroup, tag, countBadge, notice, loadingState, loginScreen, stack, columns, section, surface, cardGrid, contentCard, metric, docTree, kanbanCard, kanbanGrid, deadline, recordList, recordWorkspace, recordToggle, readonlyField, readonlyTextarea, recordFieldGrid, recordRail, recordHeaderActions, breadcrumbs, pageContext, tabs, mediaPanel, attachmentPanel, modalForm, modalSheet, recordForm, formCluster, recordActions, datePicker, scheduleBoard, HOOKS, OWNERS, mailContractCases, activityContractCases, calendarContractCases, } from '../../ui/index.ts';
30
+ export { backendPage, shell, formatDateTime, formatMoney, Framed, ListScreen, RecordScreen, WorkspaceScreen, listChrome, timeframeFilter, topbarSearch, emptyState, liveRegion, errorState, dataTable, visibleColumns, badge, avatar, thumbnail, person, initials, icon, hasIcon, definitionList, progressBar, gantt, chart, barChart, delta, changeOf, axisCeiling, code, qrCode, inline, button, linkButton, iconButton, actionGroup, tag, countBadge, notice, loadingState, loginScreen, stack, columns, section, surface, cardGrid, contentCard, metric, docTree, kanbanCard, kanbanGrid, deadline, recordList, recordWorkspace, recordToggle, readonlyField, readonlyTextarea, recordFieldGrid, recordRail, recordHeaderActions, breadcrumbs, pageContext, tabs, mediaPanel, attachmentPanel, modalForm, modalSheet, recordForm, formCluster, recordActions, datePicker, scheduleBoard, HOOKS, OWNERS, mailContractCases, activityContractCases, calendarContractCases, } from '../../ui/index.ts';
30
31
  export type { Cell, ChartBar, ChartKey, Column, DataTable, TableGroup, Tone, Frame, Extras, Facet, ListChrome, Pager, ViewKind, SearchMenu, SearchMenuItem, TailMenu, Indicator, Viewer, ActionVariant, ActionSize, ButtonSpec, LinkButtonSpec, NoticeTone, Breadcrumb, Tab, MediaItem, MediaLabels, RecordFormOptions, MediaPanelProps, FormField, FormOption, DatePickerField, DatePickerOptions, ScheduleDay, ScheduleEvent, ScheduleRow, ScheduleTone, RecordSummaryItem, RecordWorkspaceSlots, RecordRailFact, RecordRailSwitch, RecordRailActivity, } from '../../ui/index.ts';
31
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/index.ts"],"names":[],"mappings":"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"}