@almadar/std 15.15.0 → 15.15.1

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 (273) hide show
  1. package/behaviors/registry/app/atoms/std-ap-bill.orb +423 -171
  2. package/behaviors/registry/app/atoms/std-applicant.orb +207 -165
  3. package/behaviors/registry/app/atoms/std-application.orb +300 -188
  4. package/behaviors/registry/app/atoms/std-approval-request.orb +370 -215
  5. package/behaviors/registry/app/atoms/std-campaign-goal.orb +382 -167
  6. package/behaviors/registry/app/atoms/std-change-order.orb +458 -194
  7. package/behaviors/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  8. package/behaviors/registry/app/atoms/std-checkin.orb +215 -151
  9. package/behaviors/registry/app/atoms/std-checkout-terminal.orb +322 -133
  10. package/behaviors/registry/app/atoms/std-class-roster.orb +343 -170
  11. package/behaviors/registry/app/atoms/std-class-session.orb +321 -190
  12. package/behaviors/registry/app/atoms/std-court-deadline.orb +353 -182
  13. package/behaviors/registry/app/atoms/std-customer-account.orb +376 -157
  14. package/behaviors/registry/app/atoms/std-donation-receipt.orb +214 -143
  15. package/behaviors/registry/app/atoms/std-donor.orb +191 -156
  16. package/behaviors/registry/app/atoms/std-drip-sequence.orb +409 -170
  17. package/behaviors/registry/app/atoms/std-driver.orb +440 -202
  18. package/behaviors/registry/app/atoms/std-dunning.orb +431 -167
  19. package/behaviors/registry/app/atoms/std-email-broadcast.orb +386 -143
  20. package/behaviors/registry/app/atoms/std-event.orb +309 -178
  21. package/behaviors/registry/app/atoms/std-form-builder.orb +353 -220
  22. package/behaviors/registry/app/atoms/std-health-score.orb +218 -183
  23. package/behaviors/registry/app/atoms/std-help-article.orb +425 -162
  24. package/behaviors/registry/app/atoms/std-help-category.orb +409 -166
  25. package/behaviors/registry/app/atoms/std-interview-slot.orb +311 -138
  26. package/behaviors/registry/app/atoms/std-invoice.orb +349 -211
  27. package/behaviors/registry/app/atoms/std-kitchen-display.orb +308 -184
  28. package/behaviors/registry/app/atoms/std-lease.orb +411 -178
  29. package/behaviors/registry/app/atoms/std-ledger-entry.orb +266 -195
  30. package/behaviors/registry/app/atoms/std-maintenance-request.orb +396 -177
  31. package/behaviors/registry/app/atoms/std-matter.orb +415 -189
  32. package/behaviors/registry/app/atoms/std-membership.orb +387 -167
  33. package/behaviors/registry/app/atoms/std-menu.orb +232 -175
  34. package/behaviors/registry/app/atoms/std-modifier-group.orb +224 -167
  35. package/behaviors/registry/app/atoms/std-nps-survey.orb +390 -138
  36. package/behaviors/registry/app/atoms/std-offer-letter.orb +242 -133
  37. package/behaviors/registry/app/atoms/std-payout-ledger.orb +428 -176
  38. package/behaviors/registry/app/atoms/std-question-bank.orb +211 -145
  39. package/behaviors/registry/app/atoms/std-receipt.orb +248 -177
  40. package/behaviors/registry/app/atoms/std-recurring-charge.orb +421 -149
  41. package/behaviors/registry/app/atoms/std-renewal-risk.orb +382 -153
  42. package/behaviors/registry/app/atoms/std-rent-charge.orb +476 -176
  43. package/behaviors/registry/app/atoms/std-reorder-rule.orb +246 -176
  44. package/behaviors/registry/app/atoms/std-response-collector.orb +213 -150
  45. package/behaviors/registry/app/atoms/std-rfi.orb +365 -210
  46. package/behaviors/registry/app/atoms/std-route-optimize.orb +195 -146
  47. package/behaviors/registry/app/atoms/std-segment.orb +173 -139
  48. package/behaviors/registry/app/atoms/std-stock-level.orb +205 -135
  49. package/behaviors/registry/app/atoms/std-submittal.orb +323 -166
  50. package/behaviors/registry/app/atoms/std-table-map.orb +187 -63
  51. package/behaviors/registry/app/atoms/std-technician-dispatch.orb +290 -202
  52. package/behaviors/registry/app/atoms/std-telematics-event.orb +156 -128
  53. package/behaviors/registry/app/atoms/std-template-editor.orb +255 -189
  54. package/behaviors/registry/app/atoms/std-tenant.orb +375 -147
  55. package/behaviors/registry/app/atoms/std-ticket-tier.orb +463 -150
  56. package/behaviors/registry/app/atoms/std-time-entry.orb +259 -150
  57. package/behaviors/registry/app/atoms/std-timesheet.orb +292 -183
  58. package/behaviors/registry/app/atoms/std-trial.orb +401 -183
  59. package/behaviors/registry/app/atoms/std-vehicle.orb +447 -205
  60. package/behaviors/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  61. package/behaviors/registry/app/atoms/std-waitlist.orb +308 -177
  62. package/behaviors/registry/app/atoms/std-warehouse.orb +211 -141
  63. package/behaviors/registry/app/atoms/std-work-order.orb +374 -219
  64. package/behaviors/registry/app/organisms/std-subscription-billing.orb +282 -195
  65. package/behaviors/registry/core/atoms/std-approval-gate.orb +703 -0
  66. package/behaviors/registry/core/atoms/std-audit-capture.orb +150 -64
  67. package/behaviors/registry/core/atoms/std-data-erasure.orb +546 -0
  68. package/behaviors/registry/core/atoms/std-lifecycle.orb +343 -0
  69. package/behaviors/registry/core/atoms/std-notify-on-event.orb +132 -46
  70. package/behaviors/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  71. package/behaviors/registry/marketing/atoms/std-marketing-article.orb +96 -0
  72. package/behaviors/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  73. package/behaviors/registry/marketing/atoms/std-marketing-community.orb +134 -0
  74. package/behaviors/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  75. package/behaviors/registry/marketing/atoms/std-marketing-features.orb +193 -0
  76. package/behaviors/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  77. package/behaviors/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  78. package/behaviors/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  79. package/behaviors/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  80. package/behaviors/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  81. package/behaviors/registry/marketing/atoms/std-marketing-split.orb +135 -0
  82. package/behaviors/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  83. package/behaviors/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  84. package/behaviors/registry/marketing/atoms/std-marketing-team.orb +192 -0
  85. package/behaviors/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  86. package/behaviors/registry/marketing/molecules/std-about-page.orb +440 -0
  87. package/behaviors/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  88. package/behaviors/registry/marketing/molecules/std-landing-page.orb +521 -0
  89. package/behaviors/registry/marketing/molecules/std-pricing-page.orb +406 -0
  90. package/behaviors/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  91. package/dist/behaviors/behaviors-registry.json +2913 -156
  92. package/dist/behaviors/registry/app/atoms/std-ap-bill.orb +423 -171
  93. package/dist/behaviors/registry/app/atoms/std-applicant.orb +207 -165
  94. package/dist/behaviors/registry/app/atoms/std-application.orb +300 -188
  95. package/dist/behaviors/registry/app/atoms/std-approval-request.orb +370 -215
  96. package/dist/behaviors/registry/app/atoms/std-campaign-goal.orb +382 -167
  97. package/dist/behaviors/registry/app/atoms/std-change-order.orb +458 -194
  98. package/dist/behaviors/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  99. package/dist/behaviors/registry/app/atoms/std-checkin.orb +215 -151
  100. package/dist/behaviors/registry/app/atoms/std-checkout-terminal.orb +322 -133
  101. package/dist/behaviors/registry/app/atoms/std-class-roster.orb +343 -170
  102. package/dist/behaviors/registry/app/atoms/std-class-session.orb +321 -190
  103. package/dist/behaviors/registry/app/atoms/std-court-deadline.orb +353 -182
  104. package/dist/behaviors/registry/app/atoms/std-customer-account.orb +376 -157
  105. package/dist/behaviors/registry/app/atoms/std-donation-receipt.orb +214 -143
  106. package/dist/behaviors/registry/app/atoms/std-donor.orb +191 -156
  107. package/dist/behaviors/registry/app/atoms/std-drip-sequence.orb +409 -170
  108. package/dist/behaviors/registry/app/atoms/std-driver.orb +440 -202
  109. package/dist/behaviors/registry/app/atoms/std-dunning.orb +431 -167
  110. package/dist/behaviors/registry/app/atoms/std-email-broadcast.orb +386 -143
  111. package/dist/behaviors/registry/app/atoms/std-event.orb +309 -178
  112. package/dist/behaviors/registry/app/atoms/std-form-builder.orb +353 -220
  113. package/dist/behaviors/registry/app/atoms/std-health-score.orb +218 -183
  114. package/dist/behaviors/registry/app/atoms/std-help-article.orb +425 -162
  115. package/dist/behaviors/registry/app/atoms/std-help-category.orb +409 -166
  116. package/dist/behaviors/registry/app/atoms/std-interview-slot.orb +311 -138
  117. package/dist/behaviors/registry/app/atoms/std-invoice.orb +349 -211
  118. package/dist/behaviors/registry/app/atoms/std-kitchen-display.orb +308 -184
  119. package/dist/behaviors/registry/app/atoms/std-lease.orb +411 -178
  120. package/dist/behaviors/registry/app/atoms/std-ledger-entry.orb +266 -195
  121. package/dist/behaviors/registry/app/atoms/std-maintenance-request.orb +396 -177
  122. package/dist/behaviors/registry/app/atoms/std-matter.orb +415 -189
  123. package/dist/behaviors/registry/app/atoms/std-membership.orb +387 -167
  124. package/dist/behaviors/registry/app/atoms/std-menu.orb +232 -175
  125. package/dist/behaviors/registry/app/atoms/std-modifier-group.orb +224 -167
  126. package/dist/behaviors/registry/app/atoms/std-nps-survey.orb +390 -138
  127. package/dist/behaviors/registry/app/atoms/std-offer-letter.orb +242 -133
  128. package/dist/behaviors/registry/app/atoms/std-payout-ledger.orb +428 -176
  129. package/dist/behaviors/registry/app/atoms/std-question-bank.orb +211 -145
  130. package/dist/behaviors/registry/app/atoms/std-receipt.orb +248 -177
  131. package/dist/behaviors/registry/app/atoms/std-recurring-charge.orb +421 -149
  132. package/dist/behaviors/registry/app/atoms/std-renewal-risk.orb +382 -153
  133. package/dist/behaviors/registry/app/atoms/std-rent-charge.orb +476 -176
  134. package/dist/behaviors/registry/app/atoms/std-reorder-rule.orb +246 -176
  135. package/dist/behaviors/registry/app/atoms/std-response-collector.orb +213 -150
  136. package/dist/behaviors/registry/app/atoms/std-rfi.orb +365 -210
  137. package/dist/behaviors/registry/app/atoms/std-route-optimize.orb +195 -146
  138. package/dist/behaviors/registry/app/atoms/std-segment.orb +173 -139
  139. package/dist/behaviors/registry/app/atoms/std-stock-level.orb +205 -135
  140. package/dist/behaviors/registry/app/atoms/std-submittal.orb +323 -166
  141. package/dist/behaviors/registry/app/atoms/std-table-map.orb +187 -63
  142. package/dist/behaviors/registry/app/atoms/std-technician-dispatch.orb +290 -202
  143. package/dist/behaviors/registry/app/atoms/std-telematics-event.orb +156 -128
  144. package/dist/behaviors/registry/app/atoms/std-template-editor.orb +255 -189
  145. package/dist/behaviors/registry/app/atoms/std-tenant.orb +375 -147
  146. package/dist/behaviors/registry/app/atoms/std-ticket-tier.orb +463 -150
  147. package/dist/behaviors/registry/app/atoms/std-time-entry.orb +259 -150
  148. package/dist/behaviors/registry/app/atoms/std-timesheet.orb +292 -183
  149. package/dist/behaviors/registry/app/atoms/std-trial.orb +401 -183
  150. package/dist/behaviors/registry/app/atoms/std-vehicle.orb +447 -205
  151. package/dist/behaviors/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  152. package/dist/behaviors/registry/app/atoms/std-waitlist.orb +308 -177
  153. package/dist/behaviors/registry/app/atoms/std-warehouse.orb +211 -141
  154. package/dist/behaviors/registry/app/atoms/std-work-order.orb +374 -219
  155. package/dist/behaviors/registry/app/organisms/std-subscription-billing.orb +282 -195
  156. package/dist/behaviors/registry/core/atoms/std-approval-gate.orb +703 -0
  157. package/dist/behaviors/registry/core/atoms/std-audit-capture.orb +150 -64
  158. package/dist/behaviors/registry/core/atoms/std-data-erasure.orb +546 -0
  159. package/dist/behaviors/registry/core/atoms/std-lifecycle.orb +343 -0
  160. package/dist/behaviors/registry/core/atoms/std-notify-on-event.orb +132 -46
  161. package/dist/behaviors/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  162. package/dist/behaviors/registry/marketing/atoms/std-marketing-article.orb +96 -0
  163. package/dist/behaviors/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  164. package/dist/behaviors/registry/marketing/atoms/std-marketing-community.orb +134 -0
  165. package/dist/behaviors/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  166. package/dist/behaviors/registry/marketing/atoms/std-marketing-features.orb +193 -0
  167. package/dist/behaviors/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  168. package/dist/behaviors/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  169. package/dist/behaviors/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  170. package/dist/behaviors/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  171. package/dist/behaviors/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  172. package/dist/behaviors/registry/marketing/atoms/std-marketing-split.orb +135 -0
  173. package/dist/behaviors/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  174. package/dist/behaviors/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  175. package/dist/behaviors/registry/marketing/atoms/std-marketing-team.orb +192 -0
  176. package/dist/behaviors/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  177. package/dist/behaviors/registry/marketing/molecules/std-about-page.orb +440 -0
  178. package/dist/behaviors/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  179. package/dist/behaviors/registry/marketing/molecules/std-landing-page.orb +521 -0
  180. package/dist/behaviors/registry/marketing/molecules/std-pricing-page.orb +406 -0
  181. package/dist/behaviors/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  182. package/dist/behaviors-registry.json +2913 -156
  183. package/dist/registry/app/atoms/std-ap-bill.orb +423 -171
  184. package/dist/registry/app/atoms/std-applicant.orb +207 -165
  185. package/dist/registry/app/atoms/std-application.orb +300 -188
  186. package/dist/registry/app/atoms/std-approval-request.orb +370 -215
  187. package/dist/registry/app/atoms/std-campaign-goal.orb +382 -167
  188. package/dist/registry/app/atoms/std-change-order.orb +458 -194
  189. package/dist/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  190. package/dist/registry/app/atoms/std-checkin.orb +215 -151
  191. package/dist/registry/app/atoms/std-checkout-terminal.orb +322 -133
  192. package/dist/registry/app/atoms/std-class-roster.orb +343 -170
  193. package/dist/registry/app/atoms/std-class-session.orb +321 -190
  194. package/dist/registry/app/atoms/std-court-deadline.orb +353 -182
  195. package/dist/registry/app/atoms/std-customer-account.orb +376 -157
  196. package/dist/registry/app/atoms/std-donation-receipt.orb +214 -143
  197. package/dist/registry/app/atoms/std-donor.orb +191 -156
  198. package/dist/registry/app/atoms/std-drip-sequence.orb +409 -170
  199. package/dist/registry/app/atoms/std-driver.orb +440 -202
  200. package/dist/registry/app/atoms/std-dunning.orb +431 -167
  201. package/dist/registry/app/atoms/std-email-broadcast.orb +386 -143
  202. package/dist/registry/app/atoms/std-event.orb +309 -178
  203. package/dist/registry/app/atoms/std-form-builder.orb +353 -220
  204. package/dist/registry/app/atoms/std-health-score.orb +218 -183
  205. package/dist/registry/app/atoms/std-help-article.orb +425 -162
  206. package/dist/registry/app/atoms/std-help-category.orb +409 -166
  207. package/dist/registry/app/atoms/std-interview-slot.orb +311 -138
  208. package/dist/registry/app/atoms/std-invoice.orb +349 -211
  209. package/dist/registry/app/atoms/std-kitchen-display.orb +308 -184
  210. package/dist/registry/app/atoms/std-lease.orb +411 -178
  211. package/dist/registry/app/atoms/std-ledger-entry.orb +266 -195
  212. package/dist/registry/app/atoms/std-maintenance-request.orb +396 -177
  213. package/dist/registry/app/atoms/std-matter.orb +415 -189
  214. package/dist/registry/app/atoms/std-membership.orb +387 -167
  215. package/dist/registry/app/atoms/std-menu.orb +232 -175
  216. package/dist/registry/app/atoms/std-modifier-group.orb +224 -167
  217. package/dist/registry/app/atoms/std-nps-survey.orb +390 -138
  218. package/dist/registry/app/atoms/std-offer-letter.orb +242 -133
  219. package/dist/registry/app/atoms/std-payout-ledger.orb +428 -176
  220. package/dist/registry/app/atoms/std-question-bank.orb +211 -145
  221. package/dist/registry/app/atoms/std-receipt.orb +248 -177
  222. package/dist/registry/app/atoms/std-recurring-charge.orb +421 -149
  223. package/dist/registry/app/atoms/std-renewal-risk.orb +382 -153
  224. package/dist/registry/app/atoms/std-rent-charge.orb +476 -176
  225. package/dist/registry/app/atoms/std-reorder-rule.orb +246 -176
  226. package/dist/registry/app/atoms/std-response-collector.orb +213 -150
  227. package/dist/registry/app/atoms/std-rfi.orb +365 -210
  228. package/dist/registry/app/atoms/std-route-optimize.orb +195 -146
  229. package/dist/registry/app/atoms/std-segment.orb +173 -139
  230. package/dist/registry/app/atoms/std-stock-level.orb +205 -135
  231. package/dist/registry/app/atoms/std-submittal.orb +323 -166
  232. package/dist/registry/app/atoms/std-table-map.orb +187 -63
  233. package/dist/registry/app/atoms/std-technician-dispatch.orb +290 -202
  234. package/dist/registry/app/atoms/std-telematics-event.orb +156 -128
  235. package/dist/registry/app/atoms/std-template-editor.orb +255 -189
  236. package/dist/registry/app/atoms/std-tenant.orb +375 -147
  237. package/dist/registry/app/atoms/std-ticket-tier.orb +463 -150
  238. package/dist/registry/app/atoms/std-time-entry.orb +259 -150
  239. package/dist/registry/app/atoms/std-timesheet.orb +292 -183
  240. package/dist/registry/app/atoms/std-trial.orb +401 -183
  241. package/dist/registry/app/atoms/std-vehicle.orb +447 -205
  242. package/dist/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  243. package/dist/registry/app/atoms/std-waitlist.orb +308 -177
  244. package/dist/registry/app/atoms/std-warehouse.orb +211 -141
  245. package/dist/registry/app/atoms/std-work-order.orb +374 -219
  246. package/dist/registry/app/organisms/std-subscription-billing.orb +282 -195
  247. package/dist/registry/core/atoms/std-approval-gate.orb +703 -0
  248. package/dist/registry/core/atoms/std-audit-capture.orb +150 -64
  249. package/dist/registry/core/atoms/std-data-erasure.orb +546 -0
  250. package/dist/registry/core/atoms/std-lifecycle.orb +343 -0
  251. package/dist/registry/core/atoms/std-notify-on-event.orb +132 -46
  252. package/dist/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  253. package/dist/registry/marketing/atoms/std-marketing-article.orb +96 -0
  254. package/dist/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  255. package/dist/registry/marketing/atoms/std-marketing-community.orb +134 -0
  256. package/dist/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  257. package/dist/registry/marketing/atoms/std-marketing-features.orb +193 -0
  258. package/dist/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  259. package/dist/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  260. package/dist/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  261. package/dist/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  262. package/dist/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  263. package/dist/registry/marketing/atoms/std-marketing-split.orb +135 -0
  264. package/dist/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  265. package/dist/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  266. package/dist/registry/marketing/atoms/std-marketing-team.orb +192 -0
  267. package/dist/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  268. package/dist/registry/marketing/molecules/std-about-page.orb +440 -0
  269. package/dist/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  270. package/dist/registry/marketing/molecules/std-landing-page.orb +521 -0
  271. package/dist/registry/marketing/molecules/std-pricing-page.orb +406 -0
  272. package/dist/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  273. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "std-nps-survey",
3
- "version": "1.1.0",
4
- "description": "std-nps-survey — NPS survey primitive tracking per-customer Net Promoter Score responses with category, comment, and follow-up status. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-nps-survey — NPS survey primitive tracking per-customer Net Promoter Score responses, category, comment, follow-up. Listens for SET_STATUS so std-lifecycle can mark stale rows expired. Exposes Communication knobs (sendsPerHour, gdprConsentRequired, …).",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "NpsSurveyOrbital",
@@ -185,6 +185,71 @@
185
185
  "type": "string"
186
186
  }
187
187
  ]
188
+ },
189
+ {
190
+ "event": "NpsSurveyUpdated",
191
+ "payloadSchema": [
192
+ {
193
+ "name": "row.id",
194
+ "type": "string",
195
+ "required": true
196
+ },
197
+ {
198
+ "name": "row.customerId",
199
+ "type": "string",
200
+ "required": true
201
+ },
202
+ {
203
+ "name": "row.customerName",
204
+ "type": "string"
205
+ },
206
+ {
207
+ "name": "row.score",
208
+ "type": "number"
209
+ },
210
+ {
211
+ "name": "row.category",
212
+ "type": "string"
213
+ },
214
+ {
215
+ "name": "row.comment",
216
+ "type": "string"
217
+ },
218
+ {
219
+ "name": "row.surveyedAt",
220
+ "type": "string",
221
+ "required": true
222
+ },
223
+ {
224
+ "name": "row.channel",
225
+ "type": "string"
226
+ },
227
+ {
228
+ "name": "row.status",
229
+ "type": "string"
230
+ },
231
+ {
232
+ "name": "row.followedUp",
233
+ "type": "boolean"
234
+ },
235
+ {
236
+ "name": "row.pendingId",
237
+ "type": "string"
238
+ }
239
+ ]
240
+ },
241
+ {
242
+ "event": "NpsSurveyUpdateFailed",
243
+ "payloadSchema": [
244
+ {
245
+ "name": "error",
246
+ "type": "string"
247
+ },
248
+ {
249
+ "name": "code",
250
+ "type": "string"
251
+ }
252
+ ]
188
253
  }
189
254
  ],
190
255
  "stateMachine": {
@@ -262,6 +327,46 @@
262
327
  }
263
328
  ]
264
329
  },
330
+ {
331
+ "key": "SET_STATUS",
332
+ "name": "Set Status",
333
+ "payloadSchema": [
334
+ {
335
+ "name": "entityId",
336
+ "type": "string",
337
+ "required": true
338
+ },
339
+ {
340
+ "name": "newStatus",
341
+ "type": "string",
342
+ "required": true
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ "key": "NpsSurveyUpdated",
348
+ "name": "NpsSurvey updated",
349
+ "payloadSchema": [
350
+ {
351
+ "name": "row",
352
+ "type": "NpsSurvey"
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "key": "NpsSurveyUpdateFailed",
358
+ "name": "NpsSurvey update failed",
359
+ "payloadSchema": [
360
+ {
361
+ "name": "error",
362
+ "type": "string"
363
+ },
364
+ {
365
+ "name": "code",
366
+ "type": "string"
367
+ }
368
+ ]
369
+ },
265
370
  {
266
371
  "key": "CLOSE_VIEW",
267
372
  "name": "Close View"
@@ -287,22 +392,22 @@
287
392
  "render-ui",
288
393
  "main",
289
394
  {
290
- "direction": "vertical",
291
395
  "children": [
292
396
  {
293
397
  "type": "spinner"
294
398
  },
295
399
  {
296
- "type": "typography",
297
400
  "variant": "caption",
298
401
  "color": "muted",
402
+ "type": "typography",
299
403
  "content": "Loading NPS surveys…"
300
404
  }
301
405
  ],
302
- "align": "center",
303
406
  "gap": "md",
304
- "type": "stack",
305
- "className": "py-12"
407
+ "direction": "vertical",
408
+ "align": "center",
409
+ "className": "py-12",
410
+ "type": "stack"
306
411
  }
307
412
  ]
308
413
  ]
@@ -316,69 +421,69 @@
316
421
  "render-ui",
317
422
  "main",
318
423
  {
424
+ "type": "stack",
319
425
  "gap": "md",
320
426
  "direction": "vertical",
321
427
  "children": [
322
428
  {
323
- "direction": "horizontal",
324
- "gap": "sm",
325
- "type": "stack",
326
429
  "align": "center",
430
+ "gap": "sm",
327
431
  "children": [
328
432
  {
329
- "name": "message-square",
330
- "type": "icon"
433
+ "type": "icon",
434
+ "name": "message-square"
331
435
  },
332
436
  {
333
- "content": "@config.title",
334
437
  "type": "typography",
438
+ "content": "@config.title",
335
439
  "variant": "h3"
336
440
  }
337
- ]
441
+ ],
442
+ "type": "stack",
443
+ "direction": "horizontal"
338
444
  },
339
445
  {
340
446
  "type": "simple-grid",
341
- "cols": 4.0,
342
447
  "children": [
343
448
  {
344
- "icon": "message-square",
345
449
  "value": "@payload.data.length",
346
- "label": "Total surveys",
347
- "type": "stat-display"
450
+ "type": "stat-display",
451
+ "icon": "message-square",
452
+ "label": "Total surveys"
348
453
  },
349
454
  {
350
- "icon": "thumbs-up",
351
- "label": "Promoters",
455
+ "type": "stat-display",
352
456
  "value": "412",
353
- "type": "stat-display"
457
+ "icon": "thumbs-up",
458
+ "label": "Promoters"
354
459
  },
355
460
  {
356
- "value": "84",
357
- "icon": "thumbs-down",
461
+ "type": "stat-display",
358
462
  "label": "Detractors",
359
- "type": "stat-display"
463
+ "icon": "thumbs-down",
464
+ "value": "84"
360
465
  },
361
466
  {
362
- "type": "stat-display",
363
467
  "value": "47",
468
+ "label": "Avg NPS",
364
469
  "icon": "trending-up",
365
- "label": "Avg NPS"
470
+ "type": "stat-display"
366
471
  }
367
- ]
472
+ ],
473
+ "cols": 4.0
368
474
  },
369
475
  {
370
476
  "type": "divider"
371
477
  },
372
478
  {
373
- "gap": "sm",
374
- "itemActions": "@config.itemActions",
375
479
  "type": "data-grid",
376
- "cols": 1.0,
480
+ "itemActions": "@config.itemActions",
377
481
  "fields": "@config.fields",
378
- "entity": "@payload.data"
482
+ "cols": 1.0,
483
+ "entity": "@payload.data",
484
+ "gap": "sm"
379
485
  }
380
- ],
381
- "type": "stack"
486
+ ]
382
487
  }
383
488
  ]
384
489
  ]
@@ -458,111 +563,112 @@
458
563
  "render-ui",
459
564
  "main",
460
565
  {
461
- "direction": "vertical",
566
+ "type": "stack",
567
+ "gap": "md",
462
568
  "children": [
463
569
  {
464
- "direction": "horizontal",
465
- "gap": "sm",
466
570
  "type": "stack",
467
- "align": "center",
571
+ "gap": "sm",
468
572
  "children": [
469
573
  {
470
- "variant": "ghost",
471
574
  "type": "button",
472
- "action": "CLOSE_VIEW",
473
- "label": "Back"
575
+ "variant": "ghost",
576
+ "label": "Back",
577
+ "action": "CLOSE_VIEW"
474
578
  },
475
579
  {
476
580
  "name": "message-square",
477
581
  "type": "icon"
478
582
  },
479
583
  {
480
- "type": "typography",
584
+ "content": "@entity.customerName",
481
585
  "variant": "h3",
482
- "content": "@entity.customerName"
586
+ "type": "typography"
483
587
  },
484
588
  {
485
- "variant": "primary",
589
+ "type": "badge",
486
590
  "label": "@entity.category",
487
- "type": "badge"
591
+ "variant": "primary"
488
592
  },
489
593
  {
490
594
  "label": "@entity.status",
491
- "type": "badge",
492
- "variant": "default"
595
+ "variant": "default",
596
+ "type": "badge"
493
597
  }
494
- ]
598
+ ],
599
+ "align": "center",
600
+ "direction": "horizontal"
495
601
  },
496
602
  {
497
603
  "type": "divider"
498
604
  },
499
605
  {
500
606
  "type": "stack",
501
- "gap": "sm",
502
607
  "children": [
503
608
  {
609
+ "gap": "md",
504
610
  "type": "stack",
611
+ "direction": "horizontal",
505
612
  "children": [
506
613
  {
507
614
  "type": "typography",
508
- "color": "muted",
509
615
  "content": "Customer ID",
510
- "variant": "caption"
616
+ "variant": "caption",
617
+ "color": "muted"
511
618
  },
512
619
  {
513
- "variant": "body",
620
+ "content": "@entity.customerId",
514
621
  "type": "typography",
515
- "content": "@entity.customerId"
622
+ "variant": "body"
516
623
  }
517
- ],
518
- "direction": "horizontal",
519
- "gap": "md"
624
+ ]
520
625
  },
521
626
  {
627
+ "gap": "md",
628
+ "type": "stack",
629
+ "direction": "horizontal",
522
630
  "children": [
523
631
  {
524
- "content": "Comment",
525
- "color": "muted",
526
632
  "type": "typography",
633
+ "color": "muted",
634
+ "content": "Comment",
527
635
  "variant": "caption"
528
636
  },
529
637
  {
530
638
  "type": "typography",
531
- "content": "@entity.comment",
532
- "variant": "body"
639
+ "variant": "body",
640
+ "content": "@entity.comment"
533
641
  }
534
- ],
535
- "type": "stack",
536
- "direction": "horizontal",
537
- "gap": "md"
642
+ ]
538
643
  }
539
644
  ],
645
+ "gap": "sm",
540
646
  "direction": "vertical"
541
647
  },
542
648
  {
543
649
  "type": "divider"
544
650
  },
545
651
  {
546
- "type": "simple-grid",
547
652
  "cols": 3.0,
653
+ "type": "simple-grid",
548
654
  "children": [
549
655
  {
550
656
  "label": "Score",
551
657
  "type": "stat-display",
552
- "value": "@entity.score",
553
- "icon": "star"
658
+ "icon": "star",
659
+ "value": "@entity.score"
554
660
  },
555
661
  {
556
- "type": "stat-display",
557
662
  "icon": "calendar",
558
663
  "value": "@entity.surveyedAt",
664
+ "type": "stat-display",
559
665
  "label": "Surveyed"
560
666
  },
561
667
  {
668
+ "label": "Channel",
562
669
  "value": "@entity.channel",
563
- "icon": "send",
564
670
  "type": "stat-display",
565
- "label": "Channel"
671
+ "icon": "send"
566
672
  }
567
673
  ]
568
674
  },
@@ -570,22 +676,21 @@
570
676
  "direction": "horizontal",
571
677
  "children": [
572
678
  {
679
+ "label": "Mark Followed Up",
680
+ "action": "MARK_FOLLOWED_UP",
681
+ "variant": "primary",
682
+ "type": "button",
573
683
  "actionPayload": {
574
684
  "id": "@entity.id"
575
- },
576
- "type": "button",
577
- "variant": "primary",
578
- "label": "Mark Followed Up",
579
- "action": "MARK_FOLLOWED_UP"
685
+ }
580
686
  }
581
687
  ],
582
- "gap": "sm",
583
688
  "type": "stack",
584
- "align": "center"
689
+ "align": "center",
690
+ "gap": "sm"
585
691
  }
586
692
  ],
587
- "gap": "md",
588
- "type": "stack"
693
+ "direction": "vertical"
589
694
  }
590
695
  ]
591
696
  ]
@@ -605,8 +710,8 @@
605
710
  "NpsSurvey",
606
711
  {
607
712
  "emit": {
608
- "success": "NpsSurveyLoaded",
609
- "failure": "NpsSurveyLoadFailed"
713
+ "failure": "NpsSurveyLoadFailed",
714
+ "success": "NpsSurveyLoaded"
610
715
  }
611
716
  }
612
717
  ],
@@ -614,22 +719,106 @@
614
719
  "render-ui",
615
720
  "main",
616
721
  {
617
- "align": "center",
722
+ "direction": "vertical",
723
+ "children": [
724
+ {
725
+ "type": "spinner"
726
+ },
727
+ {
728
+ "variant": "caption",
729
+ "color": "muted",
730
+ "type": "typography",
731
+ "content": "Marking survey followed up…"
732
+ }
733
+ ],
618
734
  "gap": "md",
619
735
  "type": "stack",
620
736
  "className": "py-12",
737
+ "align": "center"
738
+ }
739
+ ]
740
+ ]
741
+ },
742
+ {
743
+ "from": "browsing",
744
+ "to": "loading",
745
+ "event": "SET_STATUS",
746
+ "effects": [
747
+ [
748
+ "set",
749
+ "@entity.id",
750
+ "@payload.entityId"
751
+ ],
752
+ [
753
+ "set",
754
+ "@entity.status",
755
+ "@payload.newStatus"
756
+ ],
757
+ [
758
+ "persist",
759
+ "update",
760
+ "NpsSurvey",
761
+ "@entity",
762
+ {
763
+ "emit": {
764
+ "success": "NpsSurveyUpdated",
765
+ "failure": "NpsSurveyUpdateFailed"
766
+ }
767
+ }
768
+ ],
769
+ [
770
+ "render-ui",
771
+ "main",
772
+ {
621
773
  "children": [
622
774
  {
623
775
  "type": "spinner"
624
776
  },
625
777
  {
626
- "variant": "caption",
627
- "content": "Marking survey followed up…",
628
778
  "type": "typography",
629
- "color": "muted"
779
+ "color": "muted",
780
+ "variant": "caption",
781
+ "content": "Updating survey status…"
630
782
  }
631
783
  ],
632
- "direction": "vertical"
784
+ "direction": "vertical",
785
+ "gap": "md",
786
+ "className": "py-12",
787
+ "type": "stack",
788
+ "align": "center"
789
+ }
790
+ ]
791
+ ]
792
+ },
793
+ {
794
+ "from": "browsing",
795
+ "to": "loading",
796
+ "event": "NpsSurveyUpdated",
797
+ "effects": [
798
+ [
799
+ "fetch",
800
+ "NpsSurvey",
801
+ {
802
+ "emit": {
803
+ "failure": "NpsSurveyLoadFailed",
804
+ "success": "NpsSurveyLoaded"
805
+ }
806
+ }
807
+ ]
808
+ ]
809
+ },
810
+ {
811
+ "from": "browsing",
812
+ "to": "browsing",
813
+ "event": "NpsSurveyUpdateFailed",
814
+ "effects": [
815
+ [
816
+ "render-ui",
817
+ "main",
818
+ {
819
+ "message": "@payload.error",
820
+ "variant": "error",
821
+ "type": "alert"
633
822
  }
634
823
  ]
635
824
  ]
@@ -653,22 +842,22 @@
653
842
  "render-ui",
654
843
  "main",
655
844
  {
845
+ "align": "center",
656
846
  "children": [
657
847
  {
658
848
  "type": "spinner"
659
849
  },
660
850
  {
661
- "type": "typography",
662
- "color": "muted",
663
851
  "variant": "caption",
664
- "content": "Loading NPS surveys…"
852
+ "type": "typography",
853
+ "content": "Loading NPS surveys…",
854
+ "color": "muted"
665
855
  }
666
856
  ],
667
- "align": "center",
857
+ "className": "py-12",
668
858
  "direction": "vertical",
669
859
  "type": "stack",
670
- "gap": "md",
671
- "className": "py-12"
860
+ "gap": "md"
672
861
  }
673
862
  ]
674
863
  ]
@@ -688,8 +877,8 @@
688
877
  "NpsSurvey",
689
878
  {
690
879
  "emit": {
691
- "failure": "NpsSurveyLoadFailed",
692
- "success": "NpsSurveyLoaded"
880
+ "success": "NpsSurveyLoaded",
881
+ "failure": "NpsSurveyLoadFailed"
693
882
  }
694
883
  }
695
884
  ],
@@ -697,22 +886,22 @@
697
886
  "render-ui",
698
887
  "main",
699
888
  {
700
- "type": "stack",
889
+ "direction": "vertical",
701
890
  "align": "center",
891
+ "className": "py-12",
892
+ "type": "stack",
702
893
  "children": [
703
894
  {
704
895
  "type": "spinner"
705
896
  },
706
897
  {
898
+ "content": "Marking survey followed up…",
707
899
  "variant": "caption",
708
- "color": "muted",
709
900
  "type": "typography",
710
- "content": "Marking survey followed up…"
901
+ "color": "muted"
711
902
  }
712
903
  ],
713
- "direction": "vertical",
714
- "gap": "md",
715
- "className": "py-12"
904
+ "gap": "md"
716
905
  }
717
906
  ]
718
907
  ]
@@ -727,8 +916,8 @@
727
916
  "NpsSurvey",
728
917
  {
729
918
  "emit": {
730
- "success": "NpsSurveyLoaded",
731
- "failure": "NpsSurveyLoadFailed"
919
+ "failure": "NpsSurveyLoadFailed",
920
+ "success": "NpsSurveyLoaded"
732
921
  }
733
922
  }
734
923
  ],
@@ -745,19 +934,40 @@
745
934
  ]
746
935
  },
747
936
  "config": {
937
+ "frequencyCapPerWeek": {
938
+ "type": "number",
939
+ "default": 2.0,
940
+ "label": "Frequency cap (per week)",
941
+ "description": "Max surveys a recipient can receive in a 7-day window.",
942
+ "tier": "customization"
943
+ },
944
+ "sendsPerHour": {
945
+ "type": "number",
946
+ "default": 500.0,
947
+ "label": "Sends per hour",
948
+ "description": "Cap on survey dispatch volume per hour. v1.2 declarative.",
949
+ "tier": "customization"
950
+ },
951
+ "suppressionListEnabled": {
952
+ "type": "boolean",
953
+ "default": true,
954
+ "label": "Honor suppression list",
955
+ "description": "Skip recipients on the global suppression / bounce list.",
956
+ "tier": "customization"
957
+ },
748
958
  "itemActions": {
749
959
  "type": "[ItemAction]",
750
960
  "default": [
751
961
  {
752
962
  "label": "Open",
753
- "event": "OPEN_SURVEY",
754
963
  "icon": "arrow-right",
964
+ "event": "OPEN_SURVEY",
755
965
  "variant": "primary"
756
966
  },
757
967
  {
758
968
  "label": "Mark Followed Up",
759
- "event": "MARK_FOLLOWED_UP",
760
- "variant": "danger"
969
+ "variant": "danger",
970
+ "event": "MARK_FOLLOWED_UP"
761
971
  }
762
972
  ],
763
973
  "label": "Row actions",
@@ -766,20 +976,20 @@
766
976
  "items": {
767
977
  "type": "object",
768
978
  "properties": {
769
- "variant": {
770
- "name": "variant",
979
+ "label": {
980
+ "name": "label",
771
981
  "type": "string",
772
- "required": false
982
+ "required": true
773
983
  },
774
984
  "icon": {
775
985
  "name": "icon",
776
986
  "type": "string",
777
987
  "required": false
778
988
  },
779
- "label": {
780
- "name": "label",
989
+ "variant": {
990
+ "name": "variant",
781
991
  "type": "string",
782
- "required": true
992
+ "required": false
783
993
  },
784
994
  "event": {
785
995
  "name": "event",
@@ -793,34 +1003,34 @@
793
1003
  "type": "[FieldSpec]",
794
1004
  "default": [
795
1005
  {
1006
+ "variant": "caption",
796
1007
  "name": "customerName",
797
- "label": "Customer",
798
- "variant": "caption"
1008
+ "label": "Customer"
799
1009
  },
800
1010
  {
1011
+ "name": "score",
801
1012
  "variant": "caption",
802
- "label": "Score",
803
- "name": "score"
1013
+ "label": "Score"
804
1014
  },
805
1015
  {
806
- "label": "Category",
1016
+ "variant": "badge",
807
1017
  "name": "category",
808
- "variant": "badge"
1018
+ "label": "Category"
809
1019
  },
810
1020
  {
1021
+ "name": "surveyedAt",
811
1022
  "label": "Surveyed",
812
- "variant": "caption",
813
- "name": "surveyedAt"
1023
+ "variant": "caption"
814
1024
  },
815
1025
  {
816
- "label": "Channel",
817
1026
  "variant": "caption",
1027
+ "label": "Channel",
818
1028
  "name": "channel"
819
1029
  },
820
1030
  {
821
- "variant": "badge",
1031
+ "name": "status",
822
1032
  "label": "Status",
823
- "name": "status"
1033
+ "variant": "badge"
824
1034
  }
825
1035
  ],
826
1036
  "label": "Columns to show",
@@ -829,20 +1039,10 @@
829
1039
  "items": {
830
1040
  "type": "object",
831
1041
  "properties": {
832
- "format": {
833
- "name": "format",
834
- "type": "string",
835
- "required": false
836
- },
837
- "variant": {
838
- "name": "variant",
839
- "type": "string",
840
- "required": false
841
- },
842
- "key": {
843
- "name": "key",
1042
+ "name": {
1043
+ "name": "name",
844
1044
  "type": "string",
845
- "required": false
1045
+ "required": true
846
1046
  },
847
1047
  "header": {
848
1048
  "name": "header",
@@ -854,25 +1054,77 @@
854
1054
  "type": "string",
855
1055
  "required": false
856
1056
  },
857
- "name": {
858
- "name": "name",
1057
+ "variant": {
1058
+ "name": "variant",
859
1059
  "type": "string",
860
- "required": true
1060
+ "required": false
861
1061
  },
862
1062
  "icon": {
863
1063
  "name": "icon",
864
1064
  "type": "string",
865
1065
  "required": false
1066
+ },
1067
+ "format": {
1068
+ "name": "format",
1069
+ "type": "string",
1070
+ "required": false
1071
+ },
1072
+ "key": {
1073
+ "name": "key",
1074
+ "type": "string",
1075
+ "required": false
866
1076
  }
867
1077
  }
868
1078
  }
869
1079
  },
1080
+ "gdprConsentRequired": {
1081
+ "type": "boolean",
1082
+ "default": true,
1083
+ "label": "GDPR consent required",
1084
+ "description": "Require survey consent before delivery to EU/UK recipients.",
1085
+ "tier": "customization"
1086
+ },
1087
+ "trackOpens": {
1088
+ "type": "boolean",
1089
+ "default": true,
1090
+ "label": "Track opens",
1091
+ "description": "Embed a tracking pixel on each survey email.",
1092
+ "tier": "advanced"
1093
+ },
1094
+ "trackClicks": {
1095
+ "type": "boolean",
1096
+ "default": true,
1097
+ "label": "Track clicks",
1098
+ "description": "Wrap survey links for click attribution.",
1099
+ "tier": "advanced"
1100
+ },
1101
+ "includeUnsubscribeLink": {
1102
+ "type": "boolean",
1103
+ "default": true,
1104
+ "label": "Include unsubscribe link",
1105
+ "description": "Append a CAN-SPAM/GDPR-compliant unsubscribe link to every survey.",
1106
+ "tier": "essential"
1107
+ },
1108
+ "physicalAddressFooter": {
1109
+ "type": "string",
1110
+ "default": "",
1111
+ "label": "Physical address footer",
1112
+ "description": "CAN-SPAM-required postal address appended to every survey.",
1113
+ "tier": "essential"
1114
+ },
870
1115
  "title": {
871
1116
  "type": "string",
872
1117
  "default": "NPS Surveys",
873
1118
  "label": "Section title",
874
1119
  "description": "Heading shown above the NPS response tracker",
875
1120
  "tier": "customization"
1121
+ },
1122
+ "respectQuietHours": {
1123
+ "type": "boolean",
1124
+ "default": true,
1125
+ "label": "Respect quiet hours",
1126
+ "description": "Defer survey delivery during recipient-local quiet hours.",
1127
+ "tier": "customization"
876
1128
  }
877
1129
  },
878
1130
  "scope": "collection"
@@ -891,4 +1143,4 @@
891
1143
  ]
892
1144
  }
893
1145
  ]
894
- }
1146
+ }