@almadar/std 14.26.0 → 14.27.0

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 (151) hide show
  1. package/behaviors/registry/app/atoms/std-applicant.orb +496 -42
  2. package/behaviors/registry/app/atoms/std-approval-request.orb +433 -593
  3. package/behaviors/registry/app/atoms/std-campaign-goal.orb +438 -228
  4. package/behaviors/registry/app/atoms/std-change-order.orb +565 -307
  5. package/behaviors/registry/app/atoms/std-chart-of-accounts.orb +434 -97
  6. package/behaviors/registry/app/atoms/std-checkin.orb +434 -270
  7. package/behaviors/registry/app/atoms/std-class-roster.orb +495 -61
  8. package/behaviors/registry/app/atoms/std-class-session.orb +485 -104
  9. package/behaviors/registry/app/atoms/std-court-deadline.orb +519 -88
  10. package/behaviors/registry/app/atoms/std-customer-account.orb +577 -97
  11. package/behaviors/registry/app/atoms/std-donation-receipt.orb +498 -55
  12. package/behaviors/registry/app/atoms/std-donor.orb +445 -135
  13. package/behaviors/registry/app/atoms/std-drip-sequence.orb +445 -62
  14. package/behaviors/registry/app/atoms/std-driver.orb +465 -480
  15. package/behaviors/registry/app/atoms/std-dunning.orb +450 -512
  16. package/behaviors/registry/app/atoms/std-email-broadcast.orb +517 -64
  17. package/behaviors/registry/app/atoms/std-event.orb +465 -667
  18. package/behaviors/registry/app/atoms/std-health-score.orb +368 -371
  19. package/behaviors/registry/app/atoms/std-help-article.orb +373 -506
  20. package/behaviors/registry/app/atoms/std-help-category.orb +344 -359
  21. package/behaviors/registry/app/atoms/std-interview-slot.orb +490 -48
  22. package/behaviors/registry/app/atoms/std-invoice.orb +494 -291
  23. package/behaviors/registry/app/atoms/std-kitchen-display.orb +588 -96
  24. package/behaviors/registry/app/atoms/std-lease.orb +506 -190
  25. package/behaviors/registry/app/atoms/std-ledger-entry.orb +483 -154
  26. package/behaviors/registry/app/atoms/std-maintenance-request.orb +642 -192
  27. package/behaviors/registry/app/atoms/std-matter.orb +486 -318
  28. package/behaviors/registry/app/atoms/std-membership.orb +512 -102
  29. package/behaviors/registry/app/atoms/std-menu.orb +775 -183
  30. package/behaviors/registry/app/atoms/std-modifier-group.orb +522 -104
  31. package/behaviors/registry/app/atoms/std-nps-survey.orb +319 -327
  32. package/behaviors/registry/app/atoms/std-offer-letter.orb +497 -47
  33. package/behaviors/registry/app/atoms/std-payout-ledger.orb +378 -362
  34. package/behaviors/registry/app/atoms/std-question-bank.orb +379 -346
  35. package/behaviors/registry/app/atoms/std-receipt.orb +553 -44
  36. package/behaviors/registry/app/atoms/std-recurring-charge.orb +419 -832
  37. package/behaviors/registry/app/atoms/std-renewal-risk.orb +370 -421
  38. package/behaviors/registry/app/atoms/std-rent-charge.orb +657 -55
  39. package/behaviors/registry/app/atoms/std-reorder-rule.orb +510 -59
  40. package/behaviors/registry/app/atoms/std-response-collector.orb +451 -144
  41. package/behaviors/registry/app/atoms/std-rfi.orb +502 -461
  42. package/behaviors/registry/app/atoms/std-route-optimize.orb +448 -158
  43. package/behaviors/registry/app/atoms/std-segment.orb +360 -98
  44. package/behaviors/registry/app/atoms/std-stock-level.orb +486 -103
  45. package/behaviors/registry/app/atoms/std-submittal.orb +538 -526
  46. package/behaviors/registry/app/atoms/std-table-map.orb +88 -51
  47. package/behaviors/registry/app/atoms/std-technician-dispatch.orb +653 -71
  48. package/behaviors/registry/app/atoms/std-telematics-event.orb +310 -215
  49. package/behaviors/registry/app/atoms/std-template-editor.orb +513 -90
  50. package/behaviors/registry/app/atoms/std-tenant.orb +525 -66
  51. package/behaviors/registry/app/atoms/std-ticket-tier.orb +472 -460
  52. package/behaviors/registry/app/atoms/std-time-entry.orb +354 -317
  53. package/behaviors/registry/app/atoms/std-timesheet.orb +551 -284
  54. package/behaviors/registry/app/atoms/std-trial.orb +410 -317
  55. package/behaviors/registry/app/atoms/std-vehicle.orb +398 -563
  56. package/behaviors/registry/app/atoms/std-waitlist.orb +372 -283
  57. package/behaviors/registry/app/atoms/std-warehouse.orb +273 -214
  58. package/behaviors/registry/app/atoms/std-work-order.orb +628 -240
  59. package/behaviors/registry/app/molecules/std-applicant-form.orb +89 -83
  60. package/behaviors/registry/app/molecules/std-application.orb +178 -263
  61. package/behaviors/registry/app/molecules/std-broadcast-builder.orb +67 -176
  62. package/behaviors/registry/app/molecules/std-cart.orb +78 -72
  63. package/behaviors/registry/app/molecules/std-form-builder.orb +437 -176
  64. package/behaviors/registry/app/molecules/std-ledger-entry-form.orb +608 -89
  65. package/behaviors/registry/app/molecules/std-stock-adjustment.orb +501 -102
  66. package/behaviors/registry/app/molecules/std-vendor-onboarding.orb +383 -469
  67. package/behaviors/registry/core/atoms/std-billable-hour.orb +495 -91
  68. package/behaviors/registry/core/atoms/std-branching-logic.orb +271 -600
  69. package/behaviors/registry/core/atoms/std-file-store.orb +534 -164
  70. package/behaviors/registry/core/atoms/std-gallery.orb +118 -101
  71. package/behaviors/registry/core/atoms/std-image-upload-multi.orb +87 -57
  72. package/behaviors/registry/core/atoms/std-page-tree.orb +342 -484
  73. package/behaviors/registry/core/atoms/std-rich-editor.orb +288 -416
  74. package/behaviors/registry/core/atoms/std-version-history.orb +454 -430
  75. package/behaviors/registry/core/molecules/std-wizard-form.orb +222 -147
  76. package/dist/behaviors/registry/app/atoms/std-applicant.orb +496 -42
  77. package/dist/behaviors/registry/app/atoms/std-approval-request.orb +433 -593
  78. package/dist/behaviors/registry/app/atoms/std-campaign-goal.orb +438 -228
  79. package/dist/behaviors/registry/app/atoms/std-change-order.orb +565 -307
  80. package/dist/behaviors/registry/app/atoms/std-chart-of-accounts.orb +434 -97
  81. package/dist/behaviors/registry/app/atoms/std-checkin.orb +434 -270
  82. package/dist/behaviors/registry/app/atoms/std-class-roster.orb +495 -61
  83. package/dist/behaviors/registry/app/atoms/std-class-session.orb +485 -104
  84. package/dist/behaviors/registry/app/atoms/std-court-deadline.orb +519 -88
  85. package/dist/behaviors/registry/app/atoms/std-customer-account.orb +577 -97
  86. package/dist/behaviors/registry/app/atoms/std-donation-receipt.orb +498 -55
  87. package/dist/behaviors/registry/app/atoms/std-donor.orb +445 -135
  88. package/dist/behaviors/registry/app/atoms/std-drip-sequence.orb +445 -62
  89. package/dist/behaviors/registry/app/atoms/std-driver.orb +465 -480
  90. package/dist/behaviors/registry/app/atoms/std-dunning.orb +450 -512
  91. package/dist/behaviors/registry/app/atoms/std-email-broadcast.orb +517 -64
  92. package/dist/behaviors/registry/app/atoms/std-event.orb +465 -667
  93. package/dist/behaviors/registry/app/atoms/std-health-score.orb +368 -371
  94. package/dist/behaviors/registry/app/atoms/std-help-article.orb +373 -506
  95. package/dist/behaviors/registry/app/atoms/std-help-category.orb +344 -359
  96. package/dist/behaviors/registry/app/atoms/std-interview-slot.orb +490 -48
  97. package/dist/behaviors/registry/app/atoms/std-invoice.orb +494 -291
  98. package/dist/behaviors/registry/app/atoms/std-kitchen-display.orb +588 -96
  99. package/dist/behaviors/registry/app/atoms/std-lease.orb +506 -190
  100. package/dist/behaviors/registry/app/atoms/std-ledger-entry.orb +483 -154
  101. package/dist/behaviors/registry/app/atoms/std-maintenance-request.orb +642 -192
  102. package/dist/behaviors/registry/app/atoms/std-matter.orb +486 -318
  103. package/dist/behaviors/registry/app/atoms/std-membership.orb +512 -102
  104. package/dist/behaviors/registry/app/atoms/std-menu.orb +775 -183
  105. package/dist/behaviors/registry/app/atoms/std-modifier-group.orb +522 -104
  106. package/dist/behaviors/registry/app/atoms/std-nps-survey.orb +319 -327
  107. package/dist/behaviors/registry/app/atoms/std-offer-letter.orb +497 -47
  108. package/dist/behaviors/registry/app/atoms/std-payout-ledger.orb +378 -362
  109. package/dist/behaviors/registry/app/atoms/std-question-bank.orb +379 -346
  110. package/dist/behaviors/registry/app/atoms/std-receipt.orb +553 -44
  111. package/dist/behaviors/registry/app/atoms/std-recurring-charge.orb +419 -832
  112. package/dist/behaviors/registry/app/atoms/std-renewal-risk.orb +370 -421
  113. package/dist/behaviors/registry/app/atoms/std-rent-charge.orb +657 -55
  114. package/dist/behaviors/registry/app/atoms/std-reorder-rule.orb +510 -59
  115. package/dist/behaviors/registry/app/atoms/std-response-collector.orb +451 -144
  116. package/dist/behaviors/registry/app/atoms/std-rfi.orb +502 -461
  117. package/dist/behaviors/registry/app/atoms/std-route-optimize.orb +448 -158
  118. package/dist/behaviors/registry/app/atoms/std-segment.orb +360 -98
  119. package/dist/behaviors/registry/app/atoms/std-stock-level.orb +486 -103
  120. package/dist/behaviors/registry/app/atoms/std-submittal.orb +538 -526
  121. package/dist/behaviors/registry/app/atoms/std-table-map.orb +88 -51
  122. package/dist/behaviors/registry/app/atoms/std-technician-dispatch.orb +653 -71
  123. package/dist/behaviors/registry/app/atoms/std-telematics-event.orb +310 -215
  124. package/dist/behaviors/registry/app/atoms/std-template-editor.orb +513 -90
  125. package/dist/behaviors/registry/app/atoms/std-tenant.orb +525 -66
  126. package/dist/behaviors/registry/app/atoms/std-ticket-tier.orb +472 -460
  127. package/dist/behaviors/registry/app/atoms/std-time-entry.orb +354 -317
  128. package/dist/behaviors/registry/app/atoms/std-timesheet.orb +551 -284
  129. package/dist/behaviors/registry/app/atoms/std-trial.orb +410 -317
  130. package/dist/behaviors/registry/app/atoms/std-vehicle.orb +398 -563
  131. package/dist/behaviors/registry/app/atoms/std-waitlist.orb +372 -283
  132. package/dist/behaviors/registry/app/atoms/std-warehouse.orb +273 -214
  133. package/dist/behaviors/registry/app/atoms/std-work-order.orb +628 -240
  134. package/dist/behaviors/registry/app/molecules/std-applicant-form.orb +89 -83
  135. package/dist/behaviors/registry/app/molecules/std-application.orb +178 -263
  136. package/dist/behaviors/registry/app/molecules/std-broadcast-builder.orb +67 -176
  137. package/dist/behaviors/registry/app/molecules/std-cart.orb +78 -72
  138. package/dist/behaviors/registry/app/molecules/std-form-builder.orb +437 -176
  139. package/dist/behaviors/registry/app/molecules/std-ledger-entry-form.orb +608 -89
  140. package/dist/behaviors/registry/app/molecules/std-stock-adjustment.orb +501 -102
  141. package/dist/behaviors/registry/app/molecules/std-vendor-onboarding.orb +383 -469
  142. package/dist/behaviors/registry/core/atoms/std-billable-hour.orb +495 -91
  143. package/dist/behaviors/registry/core/atoms/std-branching-logic.orb +271 -600
  144. package/dist/behaviors/registry/core/atoms/std-file-store.orb +534 -164
  145. package/dist/behaviors/registry/core/atoms/std-gallery.orb +118 -101
  146. package/dist/behaviors/registry/core/atoms/std-image-upload-multi.orb +87 -57
  147. package/dist/behaviors/registry/core/atoms/std-page-tree.orb +342 -484
  148. package/dist/behaviors/registry/core/atoms/std-rich-editor.orb +288 -416
  149. package/dist/behaviors/registry/core/atoms/std-version-history.orb +454 -430
  150. package/dist/behaviors/registry/core/molecules/std-wizard-form.orb +222 -147
  151. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "std-dunning",
3
3
  "version": "1.0.0",
4
- "description": "std-dunning — failed-payment escalation ladder for subscriptions. Owns a DunningCase entity and a single trait that loads open cases, renders them in a data-grid alongside a per-case dunning-banner, and advances severity (soft -> urgent -> final -> suspend) or marks resolved.",
4
+ "description": "std-dunning — failed-payment escalation ladder for subscriptions. Lists open dunning cases in `browsing`; opens detail in `viewing_single` with Escalate / Resolve / Suspend actions.",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "DunningCaseOrbital",
@@ -85,7 +85,7 @@
85
85
  "linkedEntity": "DunningCase",
86
86
  "emits": [
87
87
  {
88
- "event": "ESCALATE",
88
+ "event": "OPEN_CASE",
89
89
  "payloadSchema": [
90
90
  {
91
91
  "name": "id",
@@ -146,63 +146,25 @@
146
146
  ]
147
147
  },
148
148
  {
149
- "event": "RESOLVE",
149
+ "event": "CLOSE_VIEW"
150
+ },
151
+ {
152
+ "event": "ESCALATE",
150
153
  "payloadSchema": [
151
154
  {
152
155
  "name": "id",
153
156
  "type": "string",
154
157
  "required": true
155
- },
156
- {
157
- "name": "row.id",
158
- "type": "string",
159
- "required": true
160
- },
161
- {
162
- "name": "row.subscriptionId",
163
- "type": "string",
164
- "required": true
165
- },
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "event": "RESOLVE",
163
+ "payloadSchema": [
166
164
  {
167
- "name": "row.customerId",
165
+ "name": "id",
168
166
  "type": "string",
169
167
  "required": true
170
- },
171
- {
172
- "name": "row.severity",
173
- "type": "string"
174
- },
175
- {
176
- "name": "row.attemptNumber",
177
- "type": "number"
178
- },
179
- {
180
- "name": "row.attemptsTotal",
181
- "type": "number"
182
- },
183
- {
184
- "name": "row.failedAt",
185
- "type": "string"
186
- },
187
- {
188
- "name": "row.nextRetryAt",
189
- "type": "string"
190
- },
191
- {
192
- "name": "row.amountDue",
193
- "type": "number"
194
- },
195
- {
196
- "name": "row.currency",
197
- "type": "string"
198
- },
199
- {
200
- "name": "row.resolvedAt",
201
- "type": "string"
202
- },
203
- {
204
- "name": "row.status",
205
- "type": "string"
206
168
  }
207
169
  ]
208
170
  },
@@ -213,57 +175,6 @@
213
175
  "name": "id",
214
176
  "type": "string",
215
177
  "required": true
216
- },
217
- {
218
- "name": "row.id",
219
- "type": "string",
220
- "required": true
221
- },
222
- {
223
- "name": "row.subscriptionId",
224
- "type": "string",
225
- "required": true
226
- },
227
- {
228
- "name": "row.customerId",
229
- "type": "string",
230
- "required": true
231
- },
232
- {
233
- "name": "row.severity",
234
- "type": "string"
235
- },
236
- {
237
- "name": "row.attemptNumber",
238
- "type": "number"
239
- },
240
- {
241
- "name": "row.attemptsTotal",
242
- "type": "number"
243
- },
244
- {
245
- "name": "row.failedAt",
246
- "type": "string"
247
- },
248
- {
249
- "name": "row.nextRetryAt",
250
- "type": "string"
251
- },
252
- {
253
- "name": "row.amountDue",
254
- "type": "number"
255
- },
256
- {
257
- "name": "row.currency",
258
- "type": "string"
259
- },
260
- {
261
- "name": "row.resolvedAt",
262
- "type": "string"
263
- },
264
- {
265
- "name": "row.status",
266
- "type": "string"
267
178
  }
268
179
  ]
269
180
  },
@@ -288,131 +199,6 @@
288
199
  "type": "string"
289
200
  }
290
201
  ]
291
- },
292
- {
293
- "event": "DunningCaseUpdated",
294
- "payloadSchema": [
295
- {
296
- "name": "row.id",
297
- "type": "string",
298
- "required": true
299
- },
300
- {
301
- "name": "row.subscriptionId",
302
- "type": "string",
303
- "required": true
304
- },
305
- {
306
- "name": "row.customerId",
307
- "type": "string",
308
- "required": true
309
- },
310
- {
311
- "name": "row.severity",
312
- "type": "string"
313
- },
314
- {
315
- "name": "row.attemptNumber",
316
- "type": "number"
317
- },
318
- {
319
- "name": "row.attemptsTotal",
320
- "type": "number"
321
- },
322
- {
323
- "name": "row.failedAt",
324
- "type": "string"
325
- },
326
- {
327
- "name": "row.nextRetryAt",
328
- "type": "string"
329
- },
330
- {
331
- "name": "row.amountDue",
332
- "type": "number"
333
- },
334
- {
335
- "name": "row.currency",
336
- "type": "string"
337
- },
338
- {
339
- "name": "row.resolvedAt",
340
- "type": "string"
341
- },
342
- {
343
- "name": "row.status",
344
- "type": "string"
345
- }
346
- ]
347
- },
348
- {
349
- "event": "DunningCaseUpdateFailed",
350
- "payloadSchema": [
351
- {
352
- "name": "error",
353
- "type": "string"
354
- },
355
- {
356
- "name": "code",
357
- "type": "string"
358
- }
359
- ]
360
- },
361
- {
362
- "event": "ServiceSuspended",
363
- "payloadSchema": [
364
- {
365
- "name": "row.id",
366
- "type": "string",
367
- "required": true
368
- },
369
- {
370
- "name": "row.subscriptionId",
371
- "type": "string",
372
- "required": true
373
- },
374
- {
375
- "name": "row.customerId",
376
- "type": "string",
377
- "required": true
378
- },
379
- {
380
- "name": "row.severity",
381
- "type": "string"
382
- },
383
- {
384
- "name": "row.attemptNumber",
385
- "type": "number"
386
- },
387
- {
388
- "name": "row.attemptsTotal",
389
- "type": "number"
390
- },
391
- {
392
- "name": "row.failedAt",
393
- "type": "string"
394
- },
395
- {
396
- "name": "row.nextRetryAt",
397
- "type": "string"
398
- },
399
- {
400
- "name": "row.amountDue",
401
- "type": "number"
402
- },
403
- {
404
- "name": "row.currency",
405
- "type": "string"
406
- },
407
- {
408
- "name": "row.resolvedAt",
409
- "type": "string"
410
- },
411
- {
412
- "name": "row.status",
413
- "type": "string"
414
- }
415
- ]
416
202
  }
417
203
  ],
418
204
  "stateMachine": {
@@ -425,7 +211,7 @@
425
211
  "name": "browsing"
426
212
  },
427
213
  {
428
- "name": "escalating"
214
+ "name": "viewing_single"
429
215
  },
430
216
  {
431
217
  "name": "error"
@@ -461,8 +247,8 @@
461
247
  ]
462
248
  },
463
249
  {
464
- "key": "ESCALATE",
465
- "name": "Escalate",
250
+ "key": "OPEN_CASE",
251
+ "name": "Open Case",
466
252
  "payloadSchema": [
467
253
  {
468
254
  "name": "id",
@@ -476,66 +262,39 @@
476
262
  ]
477
263
  },
478
264
  {
479
- "key": "RESOLVE",
480
- "name": "Resolve",
265
+ "key": "SUSPEND",
266
+ "name": "Suspend",
481
267
  "payloadSchema": [
482
268
  {
483
269
  "name": "id",
484
270
  "type": "string",
485
271
  "required": true
486
- },
487
- {
488
- "name": "row",
489
- "type": "DunningCase"
490
272
  }
491
273
  ]
492
274
  },
493
275
  {
494
- "key": "SUSPEND",
495
- "name": "Suspend",
276
+ "key": "CLOSE_VIEW",
277
+ "name": "Close View"
278
+ },
279
+ {
280
+ "key": "ESCALATE",
281
+ "name": "Escalate",
496
282
  "payloadSchema": [
497
283
  {
498
284
  "name": "id",
499
285
  "type": "string",
500
286
  "required": true
501
- },
502
- {
503
- "name": "row",
504
- "type": "DunningCase"
505
287
  }
506
288
  ]
507
289
  },
508
290
  {
509
- "key": "DunningCaseUpdated",
510
- "name": "DunningCase updated",
291
+ "key": "RESOLVE",
292
+ "name": "Resolve",
511
293
  "payloadSchema": [
512
294
  {
513
- "name": "row",
514
- "type": "DunningCase"
515
- }
516
- ]
517
- },
518
- {
519
- "key": "ServiceSuspended",
520
- "name": "Service suspended",
521
- "payloadSchema": [
522
- {
523
- "name": "row",
524
- "type": "DunningCase"
525
- }
526
- ]
527
- },
528
- {
529
- "key": "DunningCaseUpdateFailed",
530
- "name": "DunningCase update failed",
531
- "payloadSchema": [
532
- {
533
- "name": "error",
534
- "type": "string"
535
- },
536
- {
537
- "name": "code",
538
- "type": "string"
295
+ "name": "id",
296
+ "type": "string",
297
+ "required": true
539
298
  }
540
299
  ]
541
300
  }
@@ -551,8 +310,8 @@
551
310
  "DunningCase",
552
311
  {
553
312
  "emit": {
554
- "failure": "DunningCaseLoadFailed",
555
- "success": "DunningCaseLoaded"
313
+ "success": "DunningCaseLoaded",
314
+ "failure": "DunningCaseLoadFailed"
556
315
  }
557
316
  }
558
317
  ],
@@ -560,22 +319,22 @@
560
319
  "render-ui",
561
320
  "main",
562
321
  {
563
- "type": "stack",
564
- "direction": "vertical",
565
- "className": "py-12",
566
322
  "children": [
567
323
  {
568
324
  "type": "spinner"
569
325
  },
570
326
  {
571
327
  "color": "muted",
328
+ "content": "Loading dunning cases…",
572
329
  "type": "typography",
573
- "variant": "caption",
574
- "content": "Loading dunning cases…"
330
+ "variant": "caption"
575
331
  }
576
332
  ],
333
+ "type": "stack",
334
+ "direction": "vertical",
335
+ "align": "center",
577
336
  "gap": "md",
578
- "align": "center"
337
+ "className": "py-12"
579
338
  }
580
339
  ]
581
340
  ]
@@ -591,11 +350,9 @@
591
350
  {
592
351
  "direction": "vertical",
593
352
  "type": "stack",
594
- "gap": "md",
595
353
  "children": [
596
354
  {
597
- "type": "stack",
598
- "gap": "sm",
355
+ "direction": "horizontal",
599
356
  "children": [
600
357
  {
601
358
  "type": "icon",
@@ -603,199 +360,101 @@
603
360
  },
604
361
  {
605
362
  "content": "@config.title",
606
- "type": "typography",
607
- "variant": "h3"
363
+ "variant": "h3",
364
+ "type": "typography"
608
365
  }
609
366
  ],
610
- "direction": "horizontal"
611
- },
612
- {
613
- "type": "divider"
614
- },
615
- {
616
- "type": "split-section",
617
- "imagePosition": "right",
618
- "background": "alt",
619
- "title": "Collections health",
620
- "bullets": [
621
- "Severity ladders from soft to final",
622
- "Auto-suspend at the last attempt",
623
- "Resolve when payment recovers"
624
- ],
625
- "description": "Track recovery against open cases and route the right escalation to each customer."
367
+ "gap": "sm",
368
+ "type": "stack",
369
+ "align": "center"
626
370
  },
627
371
  {
628
- "type": "stats-grid",
629
- "stats": [
372
+ "type": "simple-grid",
373
+ "cols": 4.0,
374
+ "children": [
630
375
  {
631
- "value": "42",
376
+ "type": "stat-display",
377
+ "value": "@payload.data.length",
378
+ "icon": "alert-triangle",
632
379
  "label": "Open cases"
633
380
  },
634
381
  {
382
+ "label": "Recovered",
383
+ "type": "stat-display",
635
384
  "value": "18",
636
- "label": "Recovered"
385
+ "icon": "check-circle"
637
386
  },
638
387
  {
388
+ "label": "Suspended",
639
389
  "value": "3",
640
- "label": "Suspended"
390
+ "icon": "ban",
391
+ "type": "stat-display"
641
392
  },
642
393
  {
394
+ "type": "stat-display",
395
+ "icon": "trending-up",
643
396
  "value": "62%",
644
397
  "label": "Recovery rate"
645
398
  }
646
- ],
647
- "columns": 4.0
399
+ ]
648
400
  },
649
401
  {
650
- "direction": "horizontal",
651
- "gap": "md",
652
- "type": "stack",
653
- "children": [
654
- {
655
- "description": "Final notice. Suspension in 2 days.",
656
- "image": {
657
- "alt": "Acme",
658
- "src": "https://picsum.photos/seed/dun-acme/600/400"
659
- },
660
- "type": "showcase-card",
661
- "title": "Acme Corp",
662
- "badge": "Final",
663
- "accentColor": "danger"
664
- },
665
- {
666
- "type": "showcase-card",
667
- "description": "Urgent — second retry failed.",
668
- "image": {
669
- "alt": "Globex",
670
- "src": "https://picsum.photos/seed/dun-globex/600/400"
671
- },
672
- "badge": "Urgent",
673
- "accentColor": "warning",
674
- "title": "Globex Ltd"
675
- }
676
- ]
402
+ "type": "divider"
677
403
  },
678
404
  {
679
- "type": "swipeable-row",
680
- "threshold": 80.0,
681
- "rightActions": [
405
+ "itemActions": [
406
+ {
407
+ "variant": "primary",
408
+ "label": "Open",
409
+ "event": "OPEN_CASE",
410
+ "icon": "arrow-right"
411
+ },
682
412
  {
413
+ "label": "Suspend",
683
414
  "event": "SUSPEND",
684
415
  "variant": "danger",
685
- "label": "Suspend"
686
- }
687
- ],
688
- "leftActions": [
689
- {
690
- "label": "Resolve",
691
- "event": "RESOLVE",
692
- "variant": "primary"
416
+ "icon": "ban"
693
417
  }
694
418
  ],
695
- "children": {
696
- "children": [
697
- {
698
- "type": "icon",
699
- "name": "alert-triangle"
700
- },
701
- {
702
- "content": "Swipe a case row for quick actions",
703
- "variant": "body",
704
- "type": "typography"
705
- }
706
- ],
707
- "align": "center",
708
- "direction": "horizontal",
709
- "gap": "md",
710
- "type": "stack"
711
- }
712
- },
713
- {
419
+ "type": "data-grid",
714
420
  "gap": "sm",
715
421
  "fields": [
716
422
  {
717
- "label": "Subscription",
423
+ "variant": "caption",
718
424
  "name": "subscriptionId",
719
- "variant": "caption"
425
+ "label": "Subscription"
720
426
  },
721
427
  {
722
- "label": "Customer",
723
428
  "variant": "caption",
724
- "name": "customerId"
429
+ "name": "customerId",
430
+ "label": "Customer"
725
431
  },
726
432
  {
727
433
  "variant": "badge",
728
- "name": "severity",
729
- "label": "Severity"
434
+ "label": "Severity",
435
+ "name": "severity"
730
436
  },
731
437
  {
438
+ "name": "attemptNumber",
732
439
  "label": "Attempt",
733
- "variant": "caption",
734
- "name": "attemptNumber"
440
+ "variant": "caption"
735
441
  },
736
442
  {
737
- "variant": "caption",
738
443
  "name": "amountDue",
444
+ "variant": "caption",
739
445
  "label": "Amount Due"
740
446
  },
741
447
  {
742
- "name": "status",
743
448
  "label": "Status",
744
- "variant": "badge"
745
- }
746
- ],
747
- "cols": 1.0,
748
- "type": "data-grid",
749
- "itemActions": [
750
- {
751
- "event": "ESCALATE",
752
- "variant": "primary",
753
- "label": "Escalate",
754
- "icon": "arrow-up"
755
- },
756
- {
757
- "icon": "check",
758
- "variant": "secondary",
759
- "label": "Resolve",
760
- "event": "RESOLVE"
761
- },
762
- {
763
- "label": "Suspend",
764
- "icon": "ban",
765
- "variant": "danger",
766
- "event": "SUSPEND"
767
- }
768
- ],
769
- "entity": "@payload.data"
770
- },
771
- {
772
- "width": "md",
773
- "position": "right",
774
- "children": [
775
- {
776
- "type": "stack",
777
- "direction": "vertical",
778
- "children": [
779
- {
780
- "type": "typography",
781
- "variant": "caption",
782
- "color": "muted",
783
- "content": "Selected case"
784
- },
785
- {
786
- "variant": "body",
787
- "type": "typography",
788
- "content": "Use the grid actions to escalate, resolve, or suspend."
789
- }
790
- ],
791
- "gap": "sm"
449
+ "variant": "badge",
450
+ "name": "status"
792
451
  }
793
452
  ],
794
- "isOpen": false,
795
- "title": "Case detail",
796
- "type": "drawer"
453
+ "entity": "@payload.data",
454
+ "cols": 1.0
797
455
  }
798
- ]
456
+ ],
457
+ "gap": "md"
799
458
  }
800
459
  ]
801
460
  ]
@@ -809,51 +468,42 @@
809
468
  "render-ui",
810
469
  "main",
811
470
  {
812
- "message": "@payload.error",
813
471
  "type": "alert",
814
- "variant": "error"
472
+ "variant": "error",
473
+ "message": "@payload.error"
815
474
  }
816
475
  ]
817
476
  ]
818
477
  },
819
478
  {
820
479
  "from": "browsing",
821
- "to": "escalating",
822
- "event": "ESCALATE",
480
+ "to": "viewing_single",
481
+ "event": "OPEN_CASE",
823
482
  "effects": [
824
483
  [
825
484
  "set",
826
485
  "@entity.id",
827
- "@payload.id"
486
+ "@payload.row.id"
487
+ ],
488
+ [
489
+ "set",
490
+ "@entity.subscriptionId",
491
+ "@payload.row.subscriptionId"
492
+ ],
493
+ [
494
+ "set",
495
+ "@entity.customerId",
496
+ "@payload.row.customerId"
828
497
  ],
829
498
  [
830
499
  "set",
831
500
  "@entity.severity",
832
- [
833
- "cond",
834
- [
835
- "=",
836
- "@payload.row.severity",
837
- "soft"
838
- ],
839
- "urgent",
840
- [
841
- "=",
842
- "@payload.row.severity",
843
- "urgent"
844
- ],
845
- "final",
846
- "final"
847
- ]
501
+ "@payload.row.severity"
848
502
  ],
849
503
  [
850
504
  "set",
851
505
  "@entity.attemptNumber",
852
- [
853
- "+",
854
- "@payload.row.attemptNumber",
855
- 1.0
856
- ]
506
+ "@payload.row.attemptNumber"
857
507
  ],
858
508
  [
859
509
  "set",
@@ -881,34 +531,215 @@
881
531
  "@payload.row.currency"
882
532
  ],
883
533
  [
884
- "render-ui",
885
- "main",
886
- {
887
- "type": "alert",
888
- "message": "Attempt @entity.attemptNumber of @entity.attemptsTotal — amount @entity.amountDue @entity.currency. Next retry @entity.nextRetryAt.",
889
- "variant": "warning",
890
- "title": "Payment failed",
891
- "dismissible": false
892
- }
534
+ "set",
535
+ "@entity.resolvedAt",
536
+ "@payload.row.resolvedAt"
893
537
  ],
894
538
  [
895
- "persist",
896
- "update",
897
- "DunningCase",
898
- "@entity",
539
+ "set",
540
+ "@entity.status",
541
+ "@payload.row.status"
542
+ ],
543
+ [
544
+ "render-ui",
545
+ "main",
899
546
  {
900
- "emit": {
901
- "success": "DunningCaseUpdated",
902
- "failure": "DunningCaseUpdateFailed"
903
- }
547
+ "children": [
548
+ {
549
+ "type": "stack",
550
+ "align": "center",
551
+ "children": [
552
+ {
553
+ "type": "button",
554
+ "label": "Back",
555
+ "action": "CLOSE_VIEW",
556
+ "variant": "ghost"
557
+ },
558
+ {
559
+ "type": "icon",
560
+ "name": "alert-triangle"
561
+ },
562
+ {
563
+ "content": "@entity.subscriptionId",
564
+ "variant": "h3",
565
+ "type": "typography"
566
+ },
567
+ {
568
+ "label": "@entity.severity",
569
+ "type": "badge",
570
+ "variant": "primary"
571
+ },
572
+ {
573
+ "label": "@entity.status",
574
+ "type": "badge",
575
+ "variant": "default"
576
+ }
577
+ ],
578
+ "direction": "horizontal",
579
+ "gap": "sm"
580
+ },
581
+ {
582
+ "type": "divider"
583
+ },
584
+ {
585
+ "type": "stack",
586
+ "direction": "vertical",
587
+ "children": [
588
+ {
589
+ "gap": "md",
590
+ "direction": "horizontal",
591
+ "children": [
592
+ {
593
+ "content": "Customer",
594
+ "variant": "caption",
595
+ "type": "typography",
596
+ "color": "muted"
597
+ },
598
+ {
599
+ "content": "@entity.customerId",
600
+ "variant": "body",
601
+ "type": "typography"
602
+ }
603
+ ],
604
+ "type": "stack"
605
+ },
606
+ {
607
+ "children": [
608
+ {
609
+ "variant": "caption",
610
+ "color": "muted",
611
+ "type": "typography",
612
+ "content": "Currency"
613
+ },
614
+ {
615
+ "type": "typography",
616
+ "variant": "body",
617
+ "content": "@entity.currency"
618
+ }
619
+ ],
620
+ "type": "stack",
621
+ "direction": "horizontal",
622
+ "gap": "md"
623
+ },
624
+ {
625
+ "children": [
626
+ {
627
+ "variant": "caption",
628
+ "color": "muted",
629
+ "type": "typography",
630
+ "content": "Failed at"
631
+ },
632
+ {
633
+ "type": "typography",
634
+ "content": "@entity.failedAt",
635
+ "variant": "body"
636
+ }
637
+ ],
638
+ "direction": "horizontal",
639
+ "gap": "md",
640
+ "type": "stack"
641
+ },
642
+ {
643
+ "children": [
644
+ {
645
+ "variant": "caption",
646
+ "content": "Next retry",
647
+ "type": "typography",
648
+ "color": "muted"
649
+ },
650
+ {
651
+ "variant": "body",
652
+ "content": "@entity.nextRetryAt",
653
+ "type": "typography"
654
+ }
655
+ ],
656
+ "direction": "horizontal",
657
+ "type": "stack",
658
+ "gap": "md"
659
+ }
660
+ ],
661
+ "gap": "sm"
662
+ },
663
+ {
664
+ "type": "divider"
665
+ },
666
+ {
667
+ "cols": 4.0,
668
+ "type": "simple-grid",
669
+ "children": [
670
+ {
671
+ "value": "@entity.amountDue",
672
+ "label": "Amount due",
673
+ "icon": "dollar-sign",
674
+ "type": "stat-display"
675
+ },
676
+ {
677
+ "type": "stat-display",
678
+ "label": "Attempt",
679
+ "icon": "repeat",
680
+ "value": "@entity.attemptNumber"
681
+ },
682
+ {
683
+ "type": "stat-display",
684
+ "label": "Total attempts",
685
+ "icon": "list",
686
+ "value": "@entity.attemptsTotal"
687
+ },
688
+ {
689
+ "label": "Resolved at",
690
+ "type": "stat-display",
691
+ "value": "@entity.resolvedAt",
692
+ "icon": "check-circle"
693
+ }
694
+ ]
695
+ },
696
+ {
697
+ "gap": "sm",
698
+ "direction": "horizontal",
699
+ "align": "center",
700
+ "type": "stack",
701
+ "children": [
702
+ {
703
+ "action": "ESCALATE",
704
+ "variant": "primary",
705
+ "label": "Escalate",
706
+ "type": "button",
707
+ "actionPayload": {
708
+ "id": "@entity.id"
709
+ }
710
+ },
711
+ {
712
+ "type": "button",
713
+ "label": "Resolve",
714
+ "action": "RESOLVE",
715
+ "actionPayload": {
716
+ "id": "@entity.id"
717
+ },
718
+ "variant": "secondary"
719
+ },
720
+ {
721
+ "label": "Suspend",
722
+ "variant": "danger",
723
+ "action": "SUSPEND",
724
+ "actionPayload": {
725
+ "id": "@entity.id"
726
+ },
727
+ "type": "button"
728
+ }
729
+ ]
730
+ }
731
+ ],
732
+ "gap": "md",
733
+ "direction": "vertical",
734
+ "type": "stack"
904
735
  }
905
736
  ]
906
737
  ]
907
738
  },
908
739
  {
909
740
  "from": "browsing",
910
- "to": "escalating",
911
- "event": "RESOLVE",
741
+ "to": "loading",
742
+ "event": "SUSPEND",
912
743
  "effects": [
913
744
  [
914
745
  "set",
@@ -916,28 +747,82 @@
916
747
  "@payload.id"
917
748
  ],
918
749
  [
919
- "set",
920
- "@entity.status",
921
- "resolved"
750
+ "fetch",
751
+ "DunningCase",
752
+ {
753
+ "emit": {
754
+ "failure": "DunningCaseLoadFailed",
755
+ "success": "DunningCaseLoaded"
756
+ }
757
+ }
922
758
  ],
923
759
  [
924
- "persist",
925
- "update",
760
+ "render-ui",
761
+ "main",
762
+ {
763
+ "align": "center",
764
+ "direction": "vertical",
765
+ "className": "py-12",
766
+ "children": [
767
+ {
768
+ "type": "spinner"
769
+ },
770
+ {
771
+ "variant": "caption",
772
+ "type": "typography",
773
+ "color": "muted",
774
+ "content": "Suspending service…"
775
+ }
776
+ ],
777
+ "type": "stack",
778
+ "gap": "md"
779
+ }
780
+ ]
781
+ ]
782
+ },
783
+ {
784
+ "from": "viewing_single",
785
+ "to": "loading",
786
+ "event": "CLOSE_VIEW",
787
+ "effects": [
788
+ [
789
+ "fetch",
926
790
  "DunningCase",
927
- "@entity",
928
791
  {
929
792
  "emit": {
930
- "failure": "DunningCaseUpdateFailed",
931
- "success": "DunningCaseUpdated"
793
+ "failure": "DunningCaseLoadFailed",
794
+ "success": "DunningCaseLoaded"
932
795
  }
933
796
  }
797
+ ],
798
+ [
799
+ "render-ui",
800
+ "main",
801
+ {
802
+ "align": "center",
803
+ "direction": "vertical",
804
+ "type": "stack",
805
+ "children": [
806
+ {
807
+ "type": "spinner"
808
+ },
809
+ {
810
+ "content": "Loading dunning cases…",
811
+ "color": "muted",
812
+ "variant": "caption",
813
+ "type": "typography"
814
+ }
815
+ ],
816
+ "className": "py-12",
817
+ "gap": "md"
818
+ }
934
819
  ]
935
820
  ]
936
821
  },
937
822
  {
938
- "from": "browsing",
939
- "to": "escalating",
940
- "event": "SUSPEND",
823
+ "from": "viewing_single",
824
+ "to": "loading",
825
+ "event": "ESCALATE",
941
826
  "effects": [
942
827
  [
943
828
  "set",
@@ -945,29 +830,49 @@
945
830
  "@payload.id"
946
831
  ],
947
832
  [
948
- "set",
949
- "@entity.status",
950
- "suspended"
951
- ],
952
- [
953
- "persist",
954
- "update",
833
+ "fetch",
955
834
  "DunningCase",
956
- "@entity",
957
835
  {
958
836
  "emit": {
959
- "success": "ServiceSuspended",
960
- "failure": "DunningCaseUpdateFailed"
837
+ "failure": "DunningCaseLoadFailed",
838
+ "success": "DunningCaseLoaded"
961
839
  }
962
840
  }
841
+ ],
842
+ [
843
+ "render-ui",
844
+ "main",
845
+ {
846
+ "type": "stack",
847
+ "direction": "vertical",
848
+ "align": "center",
849
+ "className": "py-12",
850
+ "children": [
851
+ {
852
+ "type": "spinner"
853
+ },
854
+ {
855
+ "type": "typography",
856
+ "variant": "caption",
857
+ "color": "muted",
858
+ "content": "Escalating case…"
859
+ }
860
+ ],
861
+ "gap": "md"
862
+ }
963
863
  ]
964
864
  ]
965
865
  },
966
866
  {
967
- "from": "escalating",
867
+ "from": "viewing_single",
968
868
  "to": "loading",
969
- "event": "DunningCaseUpdated",
869
+ "event": "RESOLVE",
970
870
  "effects": [
871
+ [
872
+ "set",
873
+ "@entity.id",
874
+ "@payload.id"
875
+ ],
971
876
  [
972
877
  "fetch",
973
878
  "DunningCase",
@@ -977,38 +882,71 @@
977
882
  "failure": "DunningCaseLoadFailed"
978
883
  }
979
884
  }
885
+ ],
886
+ [
887
+ "render-ui",
888
+ "main",
889
+ {
890
+ "children": [
891
+ {
892
+ "type": "spinner"
893
+ },
894
+ {
895
+ "variant": "caption",
896
+ "content": "Resolving case…",
897
+ "color": "muted",
898
+ "type": "typography"
899
+ }
900
+ ],
901
+ "direction": "vertical",
902
+ "gap": "md",
903
+ "align": "center",
904
+ "className": "py-12",
905
+ "type": "stack"
906
+ }
980
907
  ]
981
908
  ]
982
909
  },
983
910
  {
984
- "from": "escalating",
911
+ "from": "viewing_single",
985
912
  "to": "loading",
986
- "event": "ServiceSuspended",
913
+ "event": "SUSPEND",
987
914
  "effects": [
915
+ [
916
+ "set",
917
+ "@entity.id",
918
+ "@payload.id"
919
+ ],
988
920
  [
989
921
  "fetch",
990
922
  "DunningCase",
991
923
  {
992
924
  "emit": {
993
- "success": "DunningCaseLoaded",
994
- "failure": "DunningCaseLoadFailed"
925
+ "failure": "DunningCaseLoadFailed",
926
+ "success": "DunningCaseLoaded"
995
927
  }
996
928
  }
997
- ]
998
- ]
999
- },
1000
- {
1001
- "from": "escalating",
1002
- "to": "browsing",
1003
- "event": "DunningCaseUpdateFailed",
1004
- "effects": [
929
+ ],
1005
930
  [
1006
931
  "render-ui",
1007
932
  "main",
1008
933
  {
1009
- "variant": "error",
1010
- "type": "alert",
1011
- "message": "@payload.error"
934
+ "children": [
935
+ {
936
+ "type": "spinner"
937
+ },
938
+ {
939
+ "type": "typography",
940
+ "color": "muted",
941
+ "content": "Suspending service…",
942
+ "variant": "caption"
943
+ }
944
+ ],
945
+ "type": "stack",
946
+ "className": "py-12",
947
+ "gap": "md",
948
+ "direction": "vertical",
949
+ "align": "center"
1012
950
  }
1013
951
  ]
1014
952
  ]
@@ -1023,8 +961,8 @@
1023
961
  "DunningCase",
1024
962
  {
1025
963
  "emit": {
1026
- "success": "DunningCaseLoaded",
1027
- "failure": "DunningCaseLoadFailed"
964
+ "failure": "DunningCaseLoadFailed",
965
+ "success": "DunningCaseLoaded"
1028
966
  }
1029
967
  }
1030
968
  ],
@@ -1032,8 +970,8 @@
1032
970
  "render-ui",
1033
971
  "main",
1034
972
  {
1035
- "size": "sm",
1036
- "type": "spinner"
973
+ "type": "spinner",
974
+ "size": "sm"
1037
975
  }
1038
976
  ]
1039
977
  ]