@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-email-broadcast",
3
- "version": "1.1.0",
4
- "description": "std-email-broadcast — send an email blast to a segment of contacts using a chosen template. Lists broadcasts in `browsing`; opens detail in `viewing_single` with Send / Cancel actions. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-email-broadcast — send an email blast to a segment of contacts using a chosen template. Lists broadcasts; detail offers Send / Cancel. Listens for SET_STATUS so std-lifecycle can drive transitions. Exposes Communication knobs (sendsPerHour, gdprConsentRequired, unsubscribe link, …).",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "EmailBroadcastOrbital",
@@ -162,6 +162,62 @@
162
162
  "type": "string"
163
163
  }
164
164
  ]
165
+ },
166
+ {
167
+ "event": "EmailBroadcastUpdated",
168
+ "payloadSchema": [
169
+ {
170
+ "name": "row.id",
171
+ "type": "string",
172
+ "required": true
173
+ },
174
+ {
175
+ "name": "row.name",
176
+ "type": "string",
177
+ "required": true
178
+ },
179
+ {
180
+ "name": "row.subject",
181
+ "type": "string"
182
+ },
183
+ {
184
+ "name": "row.segmentId",
185
+ "type": "string"
186
+ },
187
+ {
188
+ "name": "row.templateId",
189
+ "type": "string"
190
+ },
191
+ {
192
+ "name": "row.status",
193
+ "type": "string"
194
+ },
195
+ {
196
+ "name": "row.scheduledAt",
197
+ "type": "string"
198
+ },
199
+ {
200
+ "name": "row.recipientCount",
201
+ "type": "number"
202
+ },
203
+ {
204
+ "name": "row.sentCount",
205
+ "type": "number"
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "event": "EmailBroadcastUpdateFailed",
211
+ "payloadSchema": [
212
+ {
213
+ "name": "error",
214
+ "type": "string"
215
+ },
216
+ {
217
+ "name": "code",
218
+ "type": "string"
219
+ }
220
+ ]
165
221
  }
166
222
  ],
167
223
  "stateMachine": {
@@ -235,6 +291,46 @@
235
291
  }
236
292
  ]
237
293
  },
294
+ {
295
+ "key": "SET_STATUS",
296
+ "name": "Set Status",
297
+ "payloadSchema": [
298
+ {
299
+ "name": "entityId",
300
+ "type": "string",
301
+ "required": true
302
+ },
303
+ {
304
+ "name": "newStatus",
305
+ "type": "string",
306
+ "required": true
307
+ }
308
+ ]
309
+ },
310
+ {
311
+ "key": "EmailBroadcastUpdated",
312
+ "name": "EmailBroadcast updated",
313
+ "payloadSchema": [
314
+ {
315
+ "name": "row",
316
+ "type": "EmailBroadcast"
317
+ }
318
+ ]
319
+ },
320
+ {
321
+ "key": "EmailBroadcastUpdateFailed",
322
+ "name": "EmailBroadcast update failed",
323
+ "payloadSchema": [
324
+ {
325
+ "name": "error",
326
+ "type": "string"
327
+ },
328
+ {
329
+ "name": "code",
330
+ "type": "string"
331
+ }
332
+ ]
333
+ },
238
334
  {
239
335
  "key": "CLOSE_VIEW",
240
336
  "name": "Close View"
@@ -262,8 +358,8 @@
262
358
  "EmailBroadcast",
263
359
  {
264
360
  "emit": {
265
- "failure": "EmailBroadcastLoadFailed",
266
- "success": "EmailBroadcastLoaded"
361
+ "success": "EmailBroadcastLoaded",
362
+ "failure": "EmailBroadcastLoadFailed"
267
363
  }
268
364
  }
269
365
  ],
@@ -271,22 +367,22 @@
271
367
  "render-ui",
272
368
  "main",
273
369
  {
274
- "direction": "vertical",
275
- "align": "center",
276
- "type": "stack",
277
370
  "className": "py-12",
278
- "gap": "md",
371
+ "type": "stack",
279
372
  "children": [
280
373
  {
281
374
  "type": "spinner"
282
375
  },
283
376
  {
284
- "variant": "caption",
285
- "type": "typography",
286
377
  "color": "muted",
287
- "content": "Loading broadcasts…"
378
+ "content": "Loading broadcasts…",
379
+ "variant": "caption",
380
+ "type": "typography"
288
381
  }
289
- ]
382
+ ],
383
+ "direction": "vertical",
384
+ "gap": "md",
385
+ "align": "center"
290
386
  }
291
387
  ]
292
388
  ]
@@ -300,69 +396,69 @@
300
396
  "render-ui",
301
397
  "main",
302
398
  {
399
+ "gap": "md",
400
+ "type": "stack",
303
401
  "direction": "vertical",
304
402
  "children": [
305
403
  {
404
+ "type": "stack",
306
405
  "children": [
307
406
  {
308
407
  "type": "icon",
309
408
  "name": "mail"
310
409
  },
311
410
  {
411
+ "content": "@config.title",
312
412
  "variant": "h3",
313
- "type": "typography",
314
- "content": "@config.title"
413
+ "type": "typography"
315
414
  }
316
415
  ],
317
416
  "direction": "horizontal",
318
- "type": "stack",
319
- "gap": "sm",
320
- "align": "center"
417
+ "align": "center",
418
+ "gap": "sm"
321
419
  },
322
420
  {
323
- "cols": 4.0,
324
- "type": "simple-grid",
325
421
  "children": [
326
422
  {
327
- "value": "@payload.data.length",
328
423
  "type": "stat-display",
329
424
  "icon": "mail",
425
+ "value": "@payload.data.length",
330
426
  "label": "Total broadcasts"
331
427
  },
332
428
  {
333
- "icon": "send",
334
429
  "value": "23",
335
430
  "type": "stat-display",
431
+ "icon": "send",
336
432
  "label": "Sent this month"
337
433
  },
338
434
  {
339
435
  "icon": "eye",
436
+ "value": "41%",
340
437
  "type": "stat-display",
341
- "label": "Open rate",
342
- "value": "41%"
438
+ "label": "Open rate"
343
439
  },
344
440
  {
345
- "icon": "mouse-pointer",
346
441
  "label": "Click rate",
442
+ "icon": "mouse-pointer",
347
443
  "value": "12%",
348
444
  "type": "stat-display"
349
445
  }
350
- ]
446
+ ],
447
+ "type": "simple-grid",
448
+ "cols": 4.0
351
449
  },
352
450
  {
353
451
  "type": "divider"
354
452
  },
355
453
  {
356
454
  "fields": "@config.fields",
357
- "type": "data-grid",
358
455
  "cols": 1.0,
456
+ "gap": "sm",
457
+ "type": "data-grid",
359
458
  "entity": "@payload.data",
360
- "itemActions": "@config.itemActions",
361
- "gap": "sm"
459
+ "itemActions": "@config.itemActions"
362
460
  }
363
- ],
364
- "type": "stack",
365
- "gap": "md"
461
+ ]
366
462
  }
367
463
  ]
368
464
  ]
@@ -376,8 +472,8 @@
376
472
  "render-ui",
377
473
  "main",
378
474
  {
379
- "variant": "error",
380
475
  "type": "alert",
476
+ "variant": "error",
381
477
  "message": "@payload.error"
382
478
  }
383
479
  ]
@@ -437,157 +533,157 @@
437
533
  "render-ui",
438
534
  "main",
439
535
  {
536
+ "type": "stack",
537
+ "gap": "md",
538
+ "direction": "vertical",
440
539
  "children": [
441
540
  {
541
+ "type": "stack",
442
542
  "direction": "horizontal",
543
+ "gap": "sm",
544
+ "align": "center",
443
545
  "children": [
444
546
  {
445
- "label": "Back",
547
+ "action": "CLOSE_VIEW",
446
548
  "type": "button",
447
- "variant": "ghost",
448
- "action": "CLOSE_VIEW"
549
+ "label": "Back",
550
+ "variant": "ghost"
449
551
  },
450
552
  {
451
- "name": "mail",
452
- "type": "icon"
553
+ "type": "icon",
554
+ "name": "mail"
453
555
  },
454
556
  {
455
- "type": "typography",
456
557
  "content": "@entity.name",
558
+ "type": "typography",
457
559
  "variant": "h3"
458
560
  },
459
561
  {
460
- "variant": "primary",
562
+ "type": "badge",
461
563
  "label": "@entity.status",
462
- "type": "badge"
564
+ "variant": "primary"
463
565
  }
464
- ],
465
- "align": "center",
466
- "type": "stack",
467
- "gap": "sm"
566
+ ]
468
567
  },
469
568
  {
470
569
  "type": "divider"
471
570
  },
472
571
  {
473
572
  "gap": "sm",
573
+ "type": "stack",
574
+ "direction": "vertical",
474
575
  "children": [
475
576
  {
476
- "type": "stack",
577
+ "direction": "horizontal",
477
578
  "children": [
478
579
  {
479
580
  "type": "typography",
480
- "variant": "caption",
481
581
  "color": "muted",
582
+ "variant": "caption",
482
583
  "content": "Subject"
483
584
  },
484
585
  {
485
- "variant": "body",
486
586
  "type": "typography",
487
- "content": "@entity.subject"
587
+ "content": "@entity.subject",
588
+ "variant": "body"
488
589
  }
489
590
  ],
490
591
  "gap": "md",
491
- "direction": "horizontal"
592
+ "type": "stack"
492
593
  },
493
594
  {
595
+ "type": "stack",
596
+ "direction": "horizontal",
597
+ "gap": "md",
494
598
  "children": [
495
599
  {
600
+ "type": "typography",
496
601
  "content": "Segment",
497
- "variant": "caption",
498
602
  "color": "muted",
499
- "type": "typography"
603
+ "variant": "caption"
500
604
  },
501
605
  {
502
606
  "type": "typography",
503
607
  "variant": "body",
504
608
  "content": "@entity.segmentId"
505
609
  }
506
- ],
507
- "direction": "horizontal",
508
- "gap": "md",
509
- "type": "stack"
610
+ ]
510
611
  },
511
612
  {
613
+ "gap": "md",
512
614
  "direction": "horizontal",
513
615
  "children": [
514
616
  {
617
+ "type": "typography",
515
618
  "variant": "caption",
516
619
  "content": "Template",
517
- "color": "muted",
518
- "type": "typography"
620
+ "color": "muted"
519
621
  },
520
622
  {
521
623
  "type": "typography",
522
- "variant": "body",
523
- "content": "@entity.templateId"
624
+ "content": "@entity.templateId",
625
+ "variant": "body"
524
626
  }
525
627
  ],
526
- "type": "stack",
527
- "gap": "md"
628
+ "type": "stack"
528
629
  }
529
- ],
530
- "direction": "vertical",
531
- "type": "stack"
630
+ ]
532
631
  },
533
632
  {
534
633
  "type": "divider"
535
634
  },
536
635
  {
537
- "type": "simple-grid",
538
636
  "children": [
539
637
  {
540
- "value": "@entity.recipientCount",
541
638
  "type": "stat-display",
639
+ "icon": "users",
542
640
  "label": "Recipients",
543
- "icon": "users"
641
+ "value": "@entity.recipientCount"
544
642
  },
545
643
  {
546
644
  "value": "@entity.sentCount",
547
- "icon": "send",
548
645
  "type": "stat-display",
549
- "label": "Sent"
646
+ "label": "Sent",
647
+ "icon": "send"
550
648
  },
551
649
  {
552
- "type": "stat-display",
553
650
  "icon": "calendar",
554
651
  "label": "Scheduled",
555
- "value": "@entity.scheduledAt"
652
+ "value": "@entity.scheduledAt",
653
+ "type": "stat-display"
556
654
  }
557
655
  ],
558
- "cols": 3.0
656
+ "cols": 3.0,
657
+ "type": "simple-grid"
559
658
  },
560
659
  {
561
- "type": "stack",
660
+ "gap": "sm",
562
661
  "children": [
563
662
  {
564
663
  "type": "button",
664
+ "label": "Send Now",
665
+ "variant": "primary",
666
+ "action": "SEND",
565
667
  "actionPayload": {
566
668
  "broadcastId": "@entity.id",
567
669
  "id": "@entity.id"
568
- },
569
- "variant": "primary",
570
- "label": "Send Now",
571
- "action": "SEND"
670
+ }
572
671
  },
573
672
  {
574
673
  "action": "CANCEL_BROADCAST",
575
674
  "type": "button",
675
+ "variant": "danger",
676
+ "label": "Cancel",
576
677
  "actionPayload": {
577
678
  "id": "@entity.id"
578
- },
579
- "label": "Cancel",
580
- "variant": "danger"
679
+ }
581
680
  }
582
681
  ],
583
- "align": "center",
584
- "gap": "sm",
585
- "direction": "horizontal"
682
+ "direction": "horizontal",
683
+ "type": "stack",
684
+ "align": "center"
586
685
  }
587
- ],
588
- "type": "stack",
589
- "direction": "vertical",
590
- "gap": "md"
686
+ ]
591
687
  }
592
688
  ]
593
689
  ]
@@ -607,8 +703,8 @@
607
703
  "EmailBroadcast",
608
704
  {
609
705
  "emit": {
610
- "failure": "EmailBroadcastLoadFailed",
611
- "success": "EmailBroadcastLoaded"
706
+ "success": "EmailBroadcastLoaded",
707
+ "failure": "EmailBroadcastLoadFailed"
612
708
  }
613
709
  }
614
710
  ],
@@ -616,26 +712,110 @@
616
712
  "render-ui",
617
713
  "main",
618
714
  {
715
+ "gap": "md",
619
716
  "align": "center",
620
717
  "className": "py-12",
718
+ "type": "stack",
621
719
  "children": [
622
720
  {
623
721
  "type": "spinner"
624
722
  },
625
723
  {
626
- "type": "typography",
627
- "content": "Cancelling broadcast…",
628
724
  "variant": "caption",
629
- "color": "muted"
725
+ "type": "typography",
726
+ "color": "muted",
727
+ "content": "Cancelling broadcast…"
630
728
  }
631
729
  ],
632
- "type": "stack",
730
+ "direction": "vertical"
731
+ }
732
+ ]
733
+ ]
734
+ },
735
+ {
736
+ "from": "browsing",
737
+ "to": "loading",
738
+ "event": "SET_STATUS",
739
+ "effects": [
740
+ [
741
+ "set",
742
+ "@entity.id",
743
+ "@payload.entityId"
744
+ ],
745
+ [
746
+ "set",
747
+ "@entity.status",
748
+ "@payload.newStatus"
749
+ ],
750
+ [
751
+ "persist",
752
+ "update",
753
+ "EmailBroadcast",
754
+ "@entity",
755
+ {
756
+ "emit": {
757
+ "failure": "EmailBroadcastUpdateFailed",
758
+ "success": "EmailBroadcastUpdated"
759
+ }
760
+ }
761
+ ],
762
+ [
763
+ "render-ui",
764
+ "main",
765
+ {
633
766
  "gap": "md",
767
+ "align": "center",
768
+ "className": "py-12",
769
+ "type": "stack",
770
+ "children": [
771
+ {
772
+ "type": "spinner"
773
+ },
774
+ {
775
+ "type": "typography",
776
+ "color": "muted",
777
+ "content": "Updating broadcast status…",
778
+ "variant": "caption"
779
+ }
780
+ ],
634
781
  "direction": "vertical"
635
782
  }
636
783
  ]
637
784
  ]
638
785
  },
786
+ {
787
+ "from": "browsing",
788
+ "to": "loading",
789
+ "event": "EmailBroadcastUpdated",
790
+ "effects": [
791
+ [
792
+ "fetch",
793
+ "EmailBroadcast",
794
+ {
795
+ "emit": {
796
+ "success": "EmailBroadcastLoaded",
797
+ "failure": "EmailBroadcastLoadFailed"
798
+ }
799
+ }
800
+ ]
801
+ ]
802
+ },
803
+ {
804
+ "from": "browsing",
805
+ "to": "browsing",
806
+ "event": "EmailBroadcastUpdateFailed",
807
+ "effects": [
808
+ [
809
+ "render-ui",
810
+ "main",
811
+ {
812
+ "type": "alert",
813
+ "message": "@payload.error",
814
+ "variant": "error"
815
+ }
816
+ ]
817
+ ]
818
+ },
639
819
  {
640
820
  "from": "viewing_single",
641
821
  "to": "loading",
@@ -655,22 +835,22 @@
655
835
  "render-ui",
656
836
  "main",
657
837
  {
658
- "gap": "md",
659
- "align": "center",
838
+ "type": "stack",
660
839
  "className": "py-12",
840
+ "gap": "md",
661
841
  "direction": "vertical",
662
- "type": "stack",
663
842
  "children": [
664
843
  {
665
844
  "type": "spinner"
666
845
  },
667
846
  {
668
- "color": "muted",
669
- "variant": "caption",
670
847
  "type": "typography",
671
- "content": "Loading broadcasts…"
848
+ "variant": "caption",
849
+ "content": "Loading broadcasts…",
850
+ "color": "muted"
672
851
  }
673
- ]
852
+ ],
853
+ "align": "center"
674
854
  }
675
855
  ]
676
856
  ]
@@ -690,8 +870,8 @@
690
870
  "EmailBroadcast",
691
871
  {
692
872
  "emit": {
693
- "success": "EmailBroadcastLoaded",
694
- "failure": "EmailBroadcastLoadFailed"
873
+ "failure": "EmailBroadcastLoadFailed",
874
+ "success": "EmailBroadcastLoaded"
695
875
  }
696
876
  }
697
877
  ],
@@ -699,21 +879,21 @@
699
879
  "render-ui",
700
880
  "main",
701
881
  {
882
+ "type": "stack",
883
+ "gap": "md",
884
+ "align": "center",
702
885
  "className": "py-12",
703
886
  "children": [
704
887
  {
705
888
  "type": "spinner"
706
889
  },
707
890
  {
891
+ "type": "typography",
708
892
  "content": "Sending broadcast…",
709
- "variant": "caption",
710
893
  "color": "muted",
711
- "type": "typography"
894
+ "variant": "caption"
712
895
  }
713
896
  ],
714
- "align": "center",
715
- "gap": "md",
716
- "type": "stack",
717
897
  "direction": "vertical"
718
898
  }
719
899
  ]
@@ -743,10 +923,10 @@
743
923
  "render-ui",
744
924
  "main",
745
925
  {
926
+ "align": "center",
746
927
  "type": "stack",
747
- "direction": "vertical",
748
928
  "gap": "md",
749
- "align": "center",
929
+ "direction": "vertical",
750
930
  "className": "py-12",
751
931
  "children": [
752
932
  {
@@ -755,8 +935,8 @@
755
935
  {
756
936
  "type": "typography",
757
937
  "content": "Cancelling broadcast…",
758
- "variant": "caption",
759
- "color": "muted"
938
+ "color": "muted",
939
+ "variant": "caption"
760
940
  }
761
941
  ]
762
942
  }
@@ -782,8 +962,8 @@
782
962
  "render-ui",
783
963
  "main",
784
964
  {
785
- "type": "spinner",
786
- "size": "sm"
965
+ "size": "sm",
966
+ "type": "spinner"
787
967
  }
788
968
  ]
789
969
  ]
@@ -807,23 +987,23 @@
807
987
  "name": "name"
808
988
  },
809
989
  {
990
+ "name": "subject",
810
991
  "label": "Subject",
811
- "variant": "caption",
812
- "name": "subject"
992
+ "variant": "caption"
813
993
  },
814
994
  {
815
995
  "name": "status",
816
- "label": "Status",
817
- "variant": "badge"
996
+ "variant": "badge",
997
+ "label": "Status"
818
998
  },
819
999
  {
820
1000
  "variant": "caption",
821
- "name": "recipientCount",
822
- "label": "Recipients"
1001
+ "label": "Recipients",
1002
+ "name": "recipientCount"
823
1003
  },
824
1004
  {
825
- "name": "sentCount",
826
1005
  "variant": "caption",
1006
+ "name": "sentCount",
827
1007
  "label": "Sent"
828
1008
  },
829
1009
  {
@@ -838,23 +1018,18 @@
838
1018
  "items": {
839
1019
  "type": "object",
840
1020
  "properties": {
841
- "variant": {
842
- "name": "variant",
1021
+ "icon": {
1022
+ "name": "icon",
843
1023
  "type": "string",
844
1024
  "required": false
845
1025
  },
846
- "key": {
847
- "name": "key",
1026
+ "label": {
1027
+ "name": "label",
848
1028
  "type": "string",
849
1029
  "required": false
850
1030
  },
851
- "name": {
852
- "name": "name",
853
- "type": "string",
854
- "required": true
855
- },
856
- "label": {
857
- "name": "label",
1031
+ "key": {
1032
+ "name": "key",
858
1033
  "type": "string",
859
1034
  "required": false
860
1035
  },
@@ -863,13 +1038,18 @@
863
1038
  "type": "string",
864
1039
  "required": false
865
1040
  },
866
- "icon": {
867
- "name": "icon",
1041
+ "header": {
1042
+ "name": "header",
868
1043
  "type": "string",
869
1044
  "required": false
870
1045
  },
871
- "header": {
872
- "name": "header",
1046
+ "name": {
1047
+ "name": "name",
1048
+ "type": "string",
1049
+ "required": true
1050
+ },
1051
+ "variant": {
1052
+ "name": "variant",
873
1053
  "type": "string",
874
1054
  "required": false
875
1055
  }
@@ -880,14 +1060,14 @@
880
1060
  "type": "[ItemAction]",
881
1061
  "default": [
882
1062
  {
1063
+ "variant": "primary",
883
1064
  "event": "OPEN_BROADCAST",
884
1065
  "icon": "arrow-right",
885
- "label": "Open",
886
- "variant": "primary"
1066
+ "label": "Open"
887
1067
  },
888
1068
  {
889
- "label": "Cancel",
890
1069
  "event": "CANCEL_BROADCAST",
1070
+ "label": "Cancel",
891
1071
  "variant": "danger"
892
1072
  }
893
1073
  ],
@@ -897,13 +1077,13 @@
897
1077
  "items": {
898
1078
  "type": "object",
899
1079
  "properties": {
900
- "variant": {
901
- "name": "variant",
1080
+ "icon": {
1081
+ "name": "icon",
902
1082
  "type": "string",
903
1083
  "required": false
904
1084
  },
905
- "icon": {
906
- "name": "icon",
1085
+ "variant": {
1086
+ "name": "variant",
907
1087
  "type": "string",
908
1088
  "required": false
909
1089
  },
@@ -919,6 +1099,69 @@
919
1099
  }
920
1100
  }
921
1101
  }
1102
+ },
1103
+ "sendsPerHour": {
1104
+ "type": "number",
1105
+ "default": 1000.0,
1106
+ "label": "Sends per hour",
1107
+ "description": "Cap on outbound messages per hour for throttling. v1.2 declarative; wire via ESP rate limiter.",
1108
+ "tier": "customization"
1109
+ },
1110
+ "suppressionListEnabled": {
1111
+ "type": "boolean",
1112
+ "default": true,
1113
+ "label": "Honor suppression list",
1114
+ "description": "Skip recipients on the global suppression / bounce list.",
1115
+ "tier": "customization"
1116
+ },
1117
+ "trackClicks": {
1118
+ "type": "boolean",
1119
+ "default": true,
1120
+ "label": "Track clicks",
1121
+ "description": "Wrap outbound links for click attribution.",
1122
+ "tier": "advanced"
1123
+ },
1124
+ "gdprConsentRequired": {
1125
+ "type": "boolean",
1126
+ "default": true,
1127
+ "label": "GDPR consent required",
1128
+ "description": "Require explicit marketing consent before delivery to EU/UK recipients.",
1129
+ "tier": "customization"
1130
+ },
1131
+ "includeUnsubscribeLink": {
1132
+ "type": "boolean",
1133
+ "default": true,
1134
+ "label": "Include unsubscribe link",
1135
+ "description": "Append a CAN-SPAM/GDPR-compliant unsubscribe link to every message.",
1136
+ "tier": "essential"
1137
+ },
1138
+ "physicalAddressFooter": {
1139
+ "type": "string",
1140
+ "default": "",
1141
+ "label": "Physical address footer",
1142
+ "description": "CAN-SPAM-required postal address appended to every broadcast.",
1143
+ "tier": "essential"
1144
+ },
1145
+ "respectQuietHours": {
1146
+ "type": "boolean",
1147
+ "default": true,
1148
+ "label": "Respect quiet hours",
1149
+ "description": "Suppress delivery during recipient-local quiet hours when known. v1.2 declarative.",
1150
+ "tier": "customization"
1151
+ },
1152
+ "frequencyCapPerWeek": {
1153
+ "type": "number",
1154
+ "default": 5.0,
1155
+ "label": "Frequency cap (per week)",
1156
+ "description": "Max messages a recipient can receive across all broadcasts in a 7-day window. v1.2 declarative.",
1157
+ "tier": "customization"
1158
+ },
1159
+ "trackOpens": {
1160
+ "type": "boolean",
1161
+ "default": true,
1162
+ "label": "Track opens",
1163
+ "description": "Embed a tracking pixel to record open events.",
1164
+ "tier": "advanced"
922
1165
  }
923
1166
  },
924
1167
  "scope": "collection"
@@ -937,4 +1180,4 @@
937
1180
  ]
938
1181
  }
939
1182
  ]
940
- }
1183
+ }