@ketvietlab/ketsuite 0.1.5 → 0.1.7

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 (221) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/modules/backend/design/HANDOFF.md +2 -2
  7. package/dist/modules/backend/design/auth.css +12 -0
  8. package/dist/modules/backend/design/client/table-selection.d.mts +3 -3
  9. package/dist/modules/backend/design/client/table-selection.d.mts.map +1 -1
  10. package/dist/modules/backend/design/client/table-selection.mjs +1 -1
  11. package/dist/modules/backend/design/client/table-selection.mjs.map +4 -4
  12. package/dist/modules/backend/design/design-system.css +1 -1
  13. package/dist/modules/backend/design/forms.css +62 -1
  14. package/dist/modules/backend/design/lists.css +26 -18
  15. package/dist/modules/backend/design/record.css +20 -4
  16. package/dist/modules/backend/design/responsive.css +5 -1
  17. package/dist/modules/backend/design/user-workflow.css +257 -0
  18. package/dist/modules/backend/index.d.ts.map +1 -1
  19. package/dist/modules/backend/index.js +1 -0
  20. package/dist/modules/backend/index.js.map +1 -1
  21. package/dist/modules/backend/messages.d.ts.map +1 -1
  22. package/dist/modules/backend/messages.js +2 -0
  23. package/dist/modules/backend/messages.js.map +1 -1
  24. package/dist/modules/crm/functions.d.ts +5 -0
  25. package/dist/modules/crm/functions.d.ts.map +1 -1
  26. package/dist/modules/crm/functions.js +105 -10
  27. package/dist/modules/crm/functions.js.map +1 -1
  28. package/dist/modules/crm/jobs.d.ts.map +1 -1
  29. package/dist/modules/crm/jobs.js +1 -0
  30. package/dist/modules/crm/jobs.js.map +1 -1
  31. package/dist/modules/crm/operations.d.ts.map +1 -1
  32. package/dist/modules/crm/operations.js +2 -1
  33. package/dist/modules/crm/operations.js.map +1 -1
  34. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  35. package/dist/modules/crm_backend/index.js +5 -2
  36. package/dist/modules/crm_backend/index.js.map +1 -1
  37. package/dist/modules/crm_backend/messages.d.ts +116 -0
  38. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  39. package/dist/modules/crm_backend/messages.js +122 -6
  40. package/dist/modules/crm_backend/messages.js.map +1 -1
  41. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  42. package/dist/modules/crm_backend/routes.js +434 -174
  43. package/dist/modules/crm_backend/routes.js.map +1 -1
  44. package/dist/modules/crm_backend/screens/case-create.d.ts +7 -0
  45. package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -1
  46. package/dist/modules/crm_backend/screens/case-create.js +13 -4
  47. package/dist/modules/crm_backend/screens/case-create.js.map +1 -1
  48. package/dist/modules/crm_backend/screens/case-detail.d.ts +6 -0
  49. package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -1
  50. package/dist/modules/crm_backend/screens/case-detail.js +73 -23
  51. package/dist/modules/crm_backend/screens/case-detail.js.map +1 -1
  52. package/dist/modules/crm_backend/screens/configuration.d.ts +21 -3
  53. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  54. package/dist/modules/crm_backend/screens/configuration.js +260 -55
  55. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  56. package/dist/modules/crm_backend/screens/index.d.ts +3 -3
  57. package/dist/modules/crm_backend/screens/index.d.ts.map +1 -1
  58. package/dist/modules/crm_backend/screens/index.js +2 -2
  59. package/dist/modules/crm_backend/screens/index.js.map +1 -1
  60. package/dist/modules/loyalty/admin-functions.d.ts +2 -0
  61. package/dist/modules/loyalty/admin-functions.d.ts.map +1 -1
  62. package/dist/modules/loyalty/admin-functions.js +96 -20
  63. package/dist/modules/loyalty/admin-functions.js.map +1 -1
  64. package/dist/modules/loyalty/engine.d.ts +4 -1
  65. package/dist/modules/loyalty/engine.d.ts.map +1 -1
  66. package/dist/modules/loyalty/engine.js +125 -18
  67. package/dist/modules/loyalty/engine.js.map +1 -1
  68. package/dist/modules/loyalty/index.d.ts.map +1 -1
  69. package/dist/modules/loyalty/index.js +4 -3
  70. package/dist/modules/loyalty/index.js.map +1 -1
  71. package/dist/modules/loyalty/jobs.d.ts.map +1 -1
  72. package/dist/modules/loyalty/jobs.js +0 -1
  73. package/dist/modules/loyalty/jobs.js.map +1 -1
  74. package/dist/modules/loyalty/membership-functions.d.ts +5 -0
  75. package/dist/modules/loyalty/membership-functions.d.ts.map +1 -1
  76. package/dist/modules/loyalty/membership-functions.js +37 -23
  77. package/dist/modules/loyalty/membership-functions.js.map +1 -1
  78. package/dist/modules/loyalty/messages.d.ts +14 -0
  79. package/dist/modules/loyalty/messages.d.ts.map +1 -1
  80. package/dist/modules/loyalty/messages.js +14 -0
  81. package/dist/modules/loyalty/messages.js.map +1 -1
  82. package/dist/modules/loyalty/models.d.ts.map +1 -1
  83. package/dist/modules/loyalty/models.js +17 -0
  84. package/dist/modules/loyalty/models.js.map +1 -1
  85. package/dist/modules/loyalty/order-functions.d.ts.map +1 -1
  86. package/dist/modules/loyalty/order-functions.js +70 -17
  87. package/dist/modules/loyalty/order-functions.js.map +1 -1
  88. package/dist/modules/loyalty/program-design.d.ts +11 -0
  89. package/dist/modules/loyalty/program-design.d.ts.map +1 -0
  90. package/dist/modules/loyalty/program-design.js +356 -0
  91. package/dist/modules/loyalty/program-design.js.map +1 -0
  92. package/dist/modules/loyalty/stats.d.ts +0 -13
  93. package/dist/modules/loyalty/stats.d.ts.map +1 -1
  94. package/dist/modules/loyalty/stats.js +11 -6
  95. package/dist/modules/loyalty/stats.js.map +1 -1
  96. package/dist/modules/loyalty/stored-value.d.ts.map +1 -1
  97. package/dist/modules/loyalty/stored-value.js +7 -2
  98. package/dist/modules/loyalty/stored-value.js.map +1 -1
  99. package/dist/modules/loyalty/types.d.ts +1 -1
  100. package/dist/modules/loyalty/types.d.ts.map +1 -1
  101. package/dist/modules/loyalty_backend/design-messages.d.ts +221 -0
  102. package/dist/modules/loyalty_backend/design-messages.d.ts.map +1 -0
  103. package/dist/modules/loyalty_backend/design-messages.js +221 -0
  104. package/dist/modules/loyalty_backend/design-messages.js.map +1 -0
  105. package/dist/modules/loyalty_backend/index.js +224 -412
  106. package/dist/modules/loyalty_backend/index.js.map +1 -1
  107. package/dist/modules/loyalty_backend/messages.d.ts +642 -214
  108. package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
  109. package/dist/modules/loyalty_backend/messages.js +19 -13
  110. package/dist/modules/loyalty_backend/messages.js.map +1 -1
  111. package/dist/modules/loyalty_backend/program-workspace.d.ts +4 -0
  112. package/dist/modules/loyalty_backend/program-workspace.d.ts.map +1 -0
  113. package/dist/modules/loyalty_backend/program-workspace.js +600 -0
  114. package/dist/modules/loyalty_backend/program-workspace.js.map +1 -0
  115. package/dist/modules/loyalty_backend/screens/index.d.ts +12 -36
  116. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
  117. package/dist/modules/loyalty_backend/screens/index.js +148 -292
  118. package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
  119. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
  120. package/dist/modules/loyalty_backend/screens/page-frame.js +2 -2
  121. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
  122. package/dist/modules/loyalty_pos/functions.d.ts.map +1 -1
  123. package/dist/modules/loyalty_pos/functions.js +1 -0
  124. package/dist/modules/loyalty_pos/functions.js.map +1 -1
  125. package/dist/modules/loyalty_pos/index.js +1 -1
  126. package/dist/modules/loyalty_pos/index.js.map +1 -1
  127. package/dist/modules/loyalty_sale/functions.d.ts +1 -0
  128. package/dist/modules/loyalty_sale/functions.d.ts.map +1 -1
  129. package/dist/modules/loyalty_sale/functions.js +1 -0
  130. package/dist/modules/loyalty_sale/functions.js.map +1 -1
  131. package/dist/modules/partner_backend/client/partner.css +3 -1
  132. package/dist/modules/partner_backend/index.d.ts.map +1 -1
  133. package/dist/modules/partner_backend/index.js +4 -0
  134. package/dist/modules/partner_backend/index.js.map +1 -1
  135. package/dist/modules/partner_backend/routes.d.ts.map +1 -1
  136. package/dist/modules/partner_backend/routes.js +6 -1
  137. package/dist/modules/partner_backend/routes.js.map +1 -1
  138. package/dist/modules/partner_backend/screens/form.d.ts +1 -0
  139. package/dist/modules/partner_backend/screens/form.d.ts.map +1 -1
  140. package/dist/modules/partner_backend/screens/form.js +1 -0
  141. package/dist/modules/partner_backend/screens/form.js.map +1 -1
  142. package/dist/modules/user/authorization.d.ts +64 -1
  143. package/dist/modules/user/authorization.d.ts.map +1 -1
  144. package/dist/modules/user/authorization.js +445 -53
  145. package/dist/modules/user/authorization.js.map +1 -1
  146. package/dist/modules/user/functions.d.ts.map +1 -1
  147. package/dist/modules/user/functions.js +45 -23
  148. package/dist/modules/user/functions.js.map +1 -1
  149. package/dist/modules/user/index.d.ts +2 -1
  150. package/dist/modules/user/index.d.ts.map +1 -1
  151. package/dist/modules/user/index.js +1 -1
  152. package/dist/modules/user/index.js.map +1 -1
  153. package/dist/modules/user/models.d.ts.map +1 -1
  154. package/dist/modules/user/models.js +5 -0
  155. package/dist/modules/user/models.js.map +1 -1
  156. package/dist/modules/user/roles.d.ts.map +1 -1
  157. package/dist/modules/user/roles.js +2 -1
  158. package/dist/modules/user/roles.js.map +1 -1
  159. package/dist/modules/user_backend/access-routes.d.ts +31 -0
  160. package/dist/modules/user_backend/access-routes.d.ts.map +1 -0
  161. package/dist/modules/user_backend/access-routes.js +447 -0
  162. package/dist/modules/user_backend/access-routes.js.map +1 -0
  163. package/dist/modules/user_backend/index.d.ts +1 -0
  164. package/dist/modules/user_backend/index.d.ts.map +1 -1
  165. package/dist/modules/user_backend/index.js +1 -0
  166. package/dist/modules/user_backend/index.js.map +1 -1
  167. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  168. package/dist/modules/user_backend/routes.js +10 -2
  169. package/dist/modules/user_backend/routes.js.map +1 -1
  170. package/dist/modules/website/cms.d.ts.map +1 -1
  171. package/dist/modules/website/cms.js +34 -7
  172. package/dist/modules/website/cms.js.map +1 -1
  173. package/dist/modules/website_backend/index.js +144 -0
  174. package/dist/modules/website_backend/index.js.map +1 -1
  175. package/dist/modules/website_backend/screens/index.d.ts +11 -0
  176. package/dist/modules/website_backend/screens/index.d.ts.map +1 -1
  177. package/dist/modules/website_backend/screens/index.js +335 -112
  178. package/dist/modules/website_backend/screens/index.js.map +1 -1
  179. package/dist/modules/website_backend/screens/page-frame.d.ts +2 -1
  180. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  181. package/dist/modules/website_backend/screens/page-frame.js +1 -1
  182. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  183. package/dist/permission-catalogue.d.ts.map +1 -1
  184. package/dist/permission-catalogue.js +7 -0
  185. package/dist/permission-catalogue.js.map +1 -1
  186. package/dist/scaffold/index.js +1 -1
  187. package/dist/ui/client/table-selection-view.d.ts.map +1 -1
  188. package/dist/ui/client/table-selection-view.js +95 -1
  189. package/dist/ui/client/table-selection-view.js.map +1 -1
  190. package/dist/ui/client/user-workflow.d.ts +2 -0
  191. package/dist/ui/client/user-workflow.d.ts.map +1 -0
  192. package/dist/ui/client/user-workflow.js +141 -0
  193. package/dist/ui/client/user-workflow.js.map +1 -0
  194. package/dist/ui/form-page.d.ts +14 -4
  195. package/dist/ui/form-page.d.ts.map +1 -1
  196. package/dist/ui/form-page.js +11 -3
  197. package/dist/ui/form-page.js.map +1 -1
  198. package/dist/ui/form.d.ts +7 -0
  199. package/dist/ui/form.d.ts.map +1 -1
  200. package/dist/ui/form.js +28 -15
  201. package/dist/ui/form.js.map +1 -1
  202. package/dist/ui/icons.d.ts.map +1 -1
  203. package/dist/ui/icons.js +2 -0
  204. package/dist/ui/icons.js.map +1 -1
  205. package/dist/ui/index.d.ts +5 -1
  206. package/dist/ui/index.d.ts.map +1 -1
  207. package/dist/ui/index.js +4 -1
  208. package/dist/ui/index.js.map +1 -1
  209. package/dist/ui/layout.d.ts.map +1 -1
  210. package/dist/ui/layout.js +14 -4
  211. package/dist/ui/layout.js.map +1 -1
  212. package/dist/ui/nav.d.ts.map +1 -1
  213. package/dist/ui/nav.js +2 -1
  214. package/dist/ui/nav.js.map +1 -1
  215. package/dist/ui/table.js +1 -1
  216. package/dist/ui/table.js.map +1 -1
  217. package/dist/ui/user-workflow.d.ts +72 -0
  218. package/dist/ui/user-workflow.d.ts.map +1 -0
  219. package/dist/ui/user-workflow.js +144 -0
  220. package/dist/ui/user-workflow.js.map +1 -0
  221. package/package.json +8 -4
@@ -26,7 +26,11 @@
26
26
  suppress only its duplicate heading. */
27
27
  [data-ui="form-page"]:has(
28
28
  > [data-ui="form-page-layout"] > [data-ui="form-page-body"] > [data-ui="record-workspace"]
29
- ) > [data-ui="form-page-header"] {
29
+ ) > [data-ui="form-page-header"],
30
+ [data-ui="record-page"]:has(
31
+ > [data-ui="record-page-layout"] > [data-ui="record-page-body"] > [data-ui="record-workspace"]
32
+ )
33
+ > [data-ui="record-page-header"] {
30
34
  display: none;
31
35
  }
32
36
  [data-ui="form-page"]:has(
@@ -37,7 +41,16 @@
37
41
  > [data-ui="form-page-layout"] > [data-ui="form-page-body"] > [data-ui="record-workspace"]
38
42
  )
39
43
  > [data-ui="form-page-layout"]
40
- > [data-ui="form-page-body"] {
44
+ > [data-ui="form-page-body"],
45
+ [data-ui="record-page"]:has(
46
+ > [data-ui="record-page-layout"] > [data-ui="record-page-body"] > [data-ui="record-workspace"]
47
+ )
48
+ > [data-ui="record-page-layout"],
49
+ [data-ui="record-page"]:has(
50
+ > [data-ui="record-page-layout"] > [data-ui="record-page-body"] > [data-ui="record-workspace"]
51
+ )
52
+ > [data-ui="record-page-layout"]
53
+ > [data-ui="record-page-body"] {
41
54
  display: contents;
42
55
  }
43
56
 
@@ -279,7 +292,7 @@
279
292
  border-inline-start: 1px solid var(--admin-divider-subtle);
280
293
  background: var(--admin-rail-bg);
281
294
  }
282
- [data-ui="main"]:has(> [data-ui="topbar"] > *) [data-ui="record-aside"] {
295
+ [data-ui="main"]:has(> [data-ket-slot="backend.topbar"] > [data-ui="topbar"] > *) [data-ui="record-aside"] {
283
296
  max-block-size: calc(100dvh - var(--admin-topbar-height) - 2 * var(--admin-gap));
284
297
  }
285
298
  [data-ui="record-aside"] :is([data-ui="chatter"], [data-ui="activity-record"]) {
@@ -447,7 +460,7 @@
447
460
  [data-ui="record-aside"] {
448
461
  position: static;
449
462
  max-block-size: none;
450
- padding: 0;
463
+ padding: var(--admin-gap-md);
451
464
  overflow: visible;
452
465
  border-inline-start: 0;
453
466
  background: transparent;
@@ -519,6 +532,9 @@
519
532
  [data-ui="record-body"] {
520
533
  padding: var(--admin-gap);
521
534
  }
535
+ [data-ui="record-aside"] {
536
+ padding: var(--admin-gap);
537
+ }
522
538
  [data-ui="record-field-grid"] {
523
539
  grid-template-columns: minmax(0, 1fr);
524
540
  }
@@ -220,7 +220,11 @@
220
220
  flex: 1 0 100%;
221
221
  }
222
222
 
223
- [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
+ )
224
228
  > [data-ui="content"] {
225
229
  padding: 0 var(--admin-gap) var(--admin-gap-lg);
226
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 +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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"}
@@ -34,6 +34,7 @@ export default defineModule({
34
34
  'controls.css',
35
35
  'record.css',
36
36
  'forms.css',
37
+ 'user-workflow.css',
37
38
  'content.css',
38
39
  'charts.css',
39
40
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmO5D,CAAA"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/backend/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqO5D,CAAA"}
@@ -39,6 +39,7 @@ export const messages = {
39
39
  'nav.pages': 'Trang',
40
40
  brand: 'KetSuite',
41
41
  switchCompany: 'Chuyển công ty',
42
+ 'theme.toggle': 'Đổi giao diện sáng/tối',
42
43
  'context.rootBranch': 'Chi nhánh gốc',
43
44
  'table.columns': 'Chọn cột',
44
45
  'table.id': 'Mã',
@@ -137,6 +138,7 @@ export const messages = {
137
138
  'nav.pages': 'Pages',
138
139
  brand: 'KetSuite',
139
140
  switchCompany: 'Switch company',
141
+ 'theme.toggle': 'Toggle light/dark theme',
140
142
  'context.rootBranch': 'Root branch',
141
143
  'table.columns': 'Columns',
142
144
  'table.id': 'Id',
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/backend/messages.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import type { FnSpec } from '@ketvietlab/ketjs';
2
+ /** Shape rules shared by the long CRM create form and its backend route. */
3
+ export declare const caseFormSchema: (requirements?: {
4
+ partner?: boolean;
5
+ need?: boolean;
6
+ }) => import("@ketvietlab/ketjs").FormSchema<import("@ketvietlab/ketjs").FormValues>;
2
7
  export declare const caseWriteEffects: readonly ["read:crm.Case", "read:crm.AccessGrant", "read:crm.Stage", "read:crm.Team", "read:crm.TeamMember", "read:crm.SalesDetail", "read:crm.CaseTag", "read:crm.Tag", "read:crm.TimelineEntry", "read:crm.Message", "read:crm.ActivityLink", "read:crm.CalendarLink", "read:user.User", "read:partner.Partner", "read:activity.Activity", "read:calendar.Event", "read:storage.Attachment", "read:crm.Team", "write:crm.Team", "read:crm.Stage", "write:crm.Stage", "read:activity.Type", "write:activity.Type", "write:crm.Case", "write:crm.SalesDetail", "write:crm.CaseTag", "write:crm.TimelineEntry", "read:mail.Thread", "write:mail.Thread", "enqueue:crm.score"];
3
8
  export declare const functions: Record<string, FnSpec>;
4
9
  export declare const createCaseId: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/crm/functions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAO,MAAM,EAAO,MAAM,mBAAmB,CAAA;AAkEzD,eAAO,MAAM,gBAAgB,8oBAUnB,CAAA;AAuKV,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6pC5C,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,MAAsB,CAAA"}
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/crm/functions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAO,MAAM,EAAO,MAAM,mBAAmB,CAAA;AAmEzD,4EAA4E;AAC5E,eAAO,MAAM,cAAc,kBAAkB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,mFAc9E,CAAA;AAEJ,eAAO,MAAM,gBAAgB,8oBAUnB,CAAA;AAiLV,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuvC5C,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,MAAsB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { asc, defineFn, deleteFrom, eq, from, inArray, isNull } from '@ketvietlab/ketjs';
2
+ import { asc, defineFn, defineFormSchema, deleteFrom, eq, from, inArray, isNull } from '@ketvietlab/ketjs';
3
3
  import { activeStage, actorRequired, addCaseMessage, addTimeline, applyCasePlan, assignCase, cancelCaseActivity, canEditCase, caseDetail, closedAtFor, duplicateCases, commandKey, completeCaseActivity, ensureCrmDefaults, firstStage, gamificationProfile, invalid, issue, groupCases, listCases, moveCase, n, normalized, now, refreshCaseScore, pipelineSummary, reassignCase, saveCase, scheduleCaseActivity, serializeCaseList, stageKinds, visibleCases, } from './operations.js';
4
4
  import { ASSIGNMENT_MODES, CASE_KINDS, TERMINAL_STATES } from './types.js';
5
5
  const caseReadEffects = [
@@ -29,6 +29,21 @@ const defaultEffects = [
29
29
  'read:activity.Type',
30
30
  'write:activity.Type',
31
31
  ];
32
+ /** Shape rules shared by the long CRM create form and its backend route. */
33
+ export const caseFormSchema = (requirements = {}) => defineFormSchema({
34
+ fields: {
35
+ name: { type: 'text', required: true, trim: true },
36
+ kind: { type: 'text', required: true, oneOf: ['lead', 'opportunity'] },
37
+ partnerId: { type: 'text', required: requirements.partner === true, trim: true },
38
+ description: { type: 'text', required: requirements.need === true, trim: true },
39
+ utmSource: { type: 'text', trim: true },
40
+ priority: { type: 'text', oneOf: ['0', '1', '2', '3'] },
41
+ expectedRevenue: { type: 'decimal', min: 0 },
42
+ probability: { type: 'decimal', min: 0, max: 100 },
43
+ expectedClosing: { type: 'date' },
44
+ },
45
+ unknown: 'drop',
46
+ });
32
47
  export const caseWriteEffects = [
33
48
  ...caseReadEffects,
34
49
  ...defaultEffects,
@@ -129,6 +144,7 @@ async function moveToTerminal(ctx, input) {
129
144
  caseId: input.id,
130
145
  eventType: event,
131
146
  body: `crm.timeline.${event}`,
147
+ metadata: input.closeReason ? { reason: input.closeReason } : undefined,
132
148
  customerVisible: false,
133
149
  occurredAt: timestamp,
134
150
  });
@@ -137,10 +153,10 @@ async function moveToTerminal(ctx, input) {
137
153
  return { ok: true, id: input.id, version: n(held.version) + 1, terminalState: input.terminal };
138
154
  });
139
155
  }
140
- const saveConfiguration = (model, prepare) => defineFn({
156
+ const saveConfiguration = (model, prepare, validate, additionalEffects = []) => defineFn({
141
157
  input: { values: 'json', idempotencyKey: 'text' },
142
158
  output: { ok: 'bool', id: 'id?', version: 'int?', errors: 'json?' },
143
- effects: [`read:${model}`, `write:${model}`],
159
+ effects: [`read:${model}`, `write:${model}`, ...additionalEffects],
144
160
  idempotent: true,
145
161
  agent: true,
146
162
  handler: async (ctx, args) => {
@@ -154,6 +170,9 @@ const saveConfiguration = (model, prepare) => defineFn({
154
170
  if (!id)
155
171
  return invalid(issue('id', 'crm.error.required'));
156
172
  const existing = (await ctx.db.select(model, { id }))[0];
173
+ const validation = await validate?.(ctx, values, existing);
174
+ if (validation)
175
+ return validation;
157
176
  const expectedVersion = values.expectedVersion == null ? undefined : n(values.expectedVersion);
158
177
  if (existing && expectedVersion != null && n(existing.version) !== expectedVersion)
159
178
  return invalid(issue('version', 'crm.error.stageConflict', { current: n(existing.version) }));
@@ -499,7 +518,14 @@ export const functions = {
499
518
  handler: (ctx, args) => reassignCase(ctx, args),
500
519
  }),
501
520
  'case.convertLead': defineFn({
502
- input: { id: 'id', expectedVersion: 'int', stageId: 'id?', idempotencyKey: 'text' },
521
+ input: {
522
+ id: 'id',
523
+ expectedVersion: 'int',
524
+ stageId: 'id?',
525
+ expectedRevenue: 'decimal?',
526
+ expectedClosing: 'date?',
527
+ idempotencyKey: 'text',
528
+ },
503
529
  output: { ok: 'bool', id: 'id?', version: 'int?', errors: 'json?' },
504
530
  effects: [
505
531
  'read:crm.Case',
@@ -545,8 +571,25 @@ export const functions = {
545
571
  if (!('dryRun' in changed) && !changed.matched)
546
572
  return invalid(issue('version', 'crm.error.stageConflict', { current: held.version }));
547
573
  const detail = (await tx.db.select('crm.SalesDetail', { caseId: args.id }))[0];
574
+ const salesValues = {
575
+ sourceLeadId: args.id,
576
+ ...(args.expectedRevenue === undefined ? {} : { expectedRevenue: String(args.expectedRevenue) }),
577
+ ...(args.expectedClosing === undefined ? {} : { expectedClosing: args.expectedClosing }),
578
+ };
548
579
  if (detail)
549
- await tx.db.update('crm.SalesDetail', { id: detail.id }, { sourceLeadId: args.id });
580
+ await tx.db.update('crm.SalesDetail', { id: detail.id }, salesValues);
581
+ else
582
+ await tx.db.insert('crm.SalesDetail', {
583
+ id: `sales:${String(args.id)}`,
584
+ caseId: args.id,
585
+ expectedRevenue: String(args.expectedRevenue ?? '0'),
586
+ recurringRevenue: '0',
587
+ probability: '0',
588
+ expectedClosing: args.expectedClosing ?? null,
589
+ forecastCategory: 'pipeline',
590
+ lostReason: null,
591
+ ...salesValues,
592
+ });
550
593
  await addTimeline(tx, {
551
594
  id: `timeline:${String(args.id)}:convert:${String(args.idempotencyKey)}`,
552
595
  caseId: String(args.id),
@@ -673,7 +716,7 @@ export const functions = {
673
716
  },
674
717
  }),
675
718
  'case.markWon': defineFn({
676
- input: { id: 'id', expectedVersion: 'int', idempotencyKey: 'text' },
719
+ input: { id: 'id', expectedVersion: 'int', closeReason: 'text?', idempotencyKey: 'text' },
677
720
  output: { ok: 'bool', id: 'id?', version: 'int?', terminalState: 'text?', errors: 'json?' },
678
721
  effects: [
679
722
  'read:crm.Case',
@@ -693,10 +736,17 @@ export const functions = {
693
736
  expectedVersion: Number(args.expectedVersion),
694
737
  idempotencyKey: String(args.idempotencyKey),
695
738
  terminal: 'won',
739
+ closeReason: args.closeReason ? String(args.closeReason) : undefined,
696
740
  }),
697
741
  }),
698
742
  'case.markLost': defineFn({
699
- input: { id: 'id', expectedVersion: 'int', lostReason: 'text', idempotencyKey: 'text' },
743
+ input: {
744
+ id: 'id',
745
+ expectedVersion: 'int',
746
+ lostReason: 'text',
747
+ closeReason: 'text?',
748
+ idempotencyKey: 'text',
749
+ },
700
750
  output: { ok: 'bool', id: 'id?', version: 'int?', terminalState: 'text?', errors: 'json?' },
701
751
  effects: [
702
752
  'read:crm.Case',
@@ -717,6 +767,7 @@ export const functions = {
717
767
  id: String(args.id),
718
768
  expectedVersion: Number(args.expectedVersion),
719
769
  lostReason: String(args.lostReason),
770
+ closeReason: args.closeReason ? String(args.closeReason) : undefined,
720
771
  idempotencyKey: String(args.idempotencyKey),
721
772
  terminal: 'lost',
722
773
  }),
@@ -761,6 +812,7 @@ export const functions = {
761
812
  effects: [
762
813
  'read:crm.Case',
763
814
  'write:crm.Case',
815
+ 'read:crm.SalesDetail',
764
816
  'read:crm.ScoreRule',
765
817
  'read:crm.ScoreHistory',
766
818
  'write:crm.ScoreHistory',
@@ -1257,7 +1309,15 @@ export const functions = {
1257
1309
  teamId: args.teamId ?? existing?.teamId ?? null,
1258
1310
  fold: args.fold ?? existing?.fold ?? false,
1259
1311
  active: args.active ?? existing?.active ?? true,
1260
- })),
1312
+ }), async (ctx, args) => {
1313
+ if (!String(args.name ?? '').trim() || !String(args.code ?? '').trim())
1314
+ return invalid(issue('name', 'crm.error.required'));
1315
+ if (!Array.isArray(args.allowedKinds) || args.allowedKinds.length === 0)
1316
+ return invalid(issue('allowedKinds', 'crm.error.required'));
1317
+ if (args.teamId && !(await ctx.db.select('crm.Team', { id: args.teamId, active: true }))[0])
1318
+ return invalid(issue('teamId', 'crm.error.notFound'));
1319
+ return null;
1320
+ }, ['read:crm.Team']),
1261
1321
  'assignmentRule.save': saveConfiguration('crm.AssignmentRule', (args, existing) => ({
1262
1322
  name: String(args.name ?? '').trim(),
1263
1323
  priority: n(args.priority ?? existing?.priority ?? 10),
@@ -1269,7 +1329,25 @@ export const functions = {
1269
1329
  utmSource: args.utmSource ?? existing?.utmSource ?? null,
1270
1330
  minimumScore: args.minimumScore ?? existing?.minimumScore ?? null,
1271
1331
  active: args.active ?? existing?.active ?? true,
1272
- })),
1332
+ }), async (ctx, args) => {
1333
+ if (!String(args.name ?? '').trim() || !Array.isArray(args.allowedKinds) || !args.allowedKinds.length)
1334
+ return invalid(issue('name', 'crm.error.required'));
1335
+ const team = args.teamId
1336
+ ? (await ctx.db.select('crm.Team', { id: args.teamId, active: true }))[0]
1337
+ : null;
1338
+ if (!team)
1339
+ return invalid(issue('teamId', 'crm.error.notFound'));
1340
+ if (args.assigneeUserId) {
1341
+ const member = (await ctx.db.select('crm.TeamMember', {
1342
+ teamId: args.teamId,
1343
+ userId: args.assigneeUserId,
1344
+ active: true,
1345
+ }))[0];
1346
+ if (!member && team.leaderUserId !== args.assigneeUserId)
1347
+ return invalid(issue('assigneeUserId', 'crm.error.notTeamMember'));
1348
+ }
1349
+ return null;
1350
+ }, ['read:crm.Team', 'read:crm.TeamMember']),
1273
1351
  'scoreRule.save': saveConfiguration('crm.ScoreRule', (args, existing) => ({
1274
1352
  name: String(args.name ?? '').trim(),
1275
1353
  field: String(args.field ?? '').trim(),
@@ -1278,7 +1356,24 @@ export const functions = {
1278
1356
  points: String(args.points ?? '0'),
1279
1357
  active: args.active ?? existing?.active ?? true,
1280
1358
  sequence: n(args.sequence ?? existing?.sequence ?? 10),
1281
- })),
1359
+ }), (_ctx, args) => {
1360
+ const field = String(args.field ?? '');
1361
+ const operator = String(args.operator ?? '');
1362
+ const allowed = field === 'expectedRevenue'
1363
+ ? ['gte', 'eq']
1364
+ : field === 'email' || field === 'utmSource'
1365
+ ? ['eq', 'contains', 'present']
1366
+ : [];
1367
+ if (!String(args.name ?? '').trim())
1368
+ return invalid(issue('name', 'crm.error.required'));
1369
+ if (!allowed.includes(operator))
1370
+ return invalid(issue('operator', 'crm.error.invalidKind'));
1371
+ if (operator !== 'present' && !String(args.value ?? '').trim())
1372
+ return invalid(issue('value', 'crm.error.required'));
1373
+ if (field === 'expectedRevenue' && !Number.isFinite(Number(args.value)))
1374
+ return invalid(issue('value', 'crm.error.invalidKind'));
1375
+ return null;
1376
+ }),
1282
1377
  'enrichment.preview': defineFn({
1283
1378
  input: { caseId: 'id' },
1284
1379
  output: { ok: 'bool', code: 'text', errors: 'json?' },