@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-work-order",
3
- "version": "1.1.0",
4
- "description": "std-work-order — field-service work order lifecycle (created → assigned → en-route → on-site → completed). Lists work orders in `browsing`; opens detail in `viewing_single` with Assign / Travel / Arrive / Complete / Cancel actions. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-work-order — field-service work order lifecycle (created → assigned → en-route → on-site → completed). Lists work orders in `browsing`; opens detail in `viewing_single` with Assign / Travel / Arrive / Complete / Cancel actions. Listens for SET_STATUS so sibling std-lifecycle can drive automated transitions (e.g. en-route → completed on SLA breach). Exposes Service/Operations-pattern knobs (serviceAreaRadius, dispatchStrategy, SLA hours, …).",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "WorkOrderOrbital",
@@ -553,6 +553,22 @@
553
553
  }
554
554
  ]
555
555
  },
556
+ {
557
+ "key": "SET_STATUS",
558
+ "name": "Set Status",
559
+ "payloadSchema": [
560
+ {
561
+ "name": "entityId",
562
+ "type": "string",
563
+ "required": true
564
+ },
565
+ {
566
+ "name": "newStatus",
567
+ "type": "string",
568
+ "required": true
569
+ }
570
+ ]
571
+ },
556
572
  {
557
573
  "key": "CLOSE_VIEW",
558
574
  "name": "Close View"
@@ -652,22 +668,22 @@
652
668
  "render-ui",
653
669
  "main",
654
670
  {
655
- "direction": "vertical",
656
- "type": "stack",
657
- "className": "py-12",
671
+ "align": "center",
658
672
  "children": [
659
673
  {
660
674
  "type": "spinner"
661
675
  },
662
676
  {
663
- "content": "Loading work orders…",
664
677
  "variant": "caption",
665
- "color": "muted",
666
- "type": "typography"
678
+ "content": "Loading work orders…",
679
+ "type": "typography",
680
+ "color": "muted"
667
681
  }
668
682
  ],
669
- "gap": "md",
670
- "align": "center"
683
+ "type": "stack",
684
+ "className": "py-12",
685
+ "direction": "vertical",
686
+ "gap": "md"
671
687
  }
672
688
  ]
673
689
  ]
@@ -681,69 +697,69 @@
681
697
  "render-ui",
682
698
  "main",
683
699
  {
700
+ "gap": "md",
701
+ "direction": "vertical",
684
702
  "type": "stack",
685
703
  "children": [
686
704
  {
687
- "type": "stack",
688
- "align": "center",
705
+ "direction": "horizontal",
689
706
  "children": [
690
707
  {
691
- "name": "clipboard-list",
692
- "type": "icon"
708
+ "type": "icon",
709
+ "name": "clipboard-list"
693
710
  },
694
711
  {
695
- "content": "@config.title",
696
712
  "variant": "h3",
713
+ "content": "@config.title",
697
714
  "type": "typography"
698
715
  }
699
716
  ],
700
- "direction": "horizontal",
717
+ "align": "center",
718
+ "type": "stack",
701
719
  "gap": "sm"
702
720
  },
703
721
  {
722
+ "type": "simple-grid",
704
723
  "cols": 4.0,
705
724
  "children": [
706
725
  {
707
726
  "type": "stat-display",
708
727
  "label": "Total orders",
709
- "icon": "clipboard-list",
710
- "value": "@payload.data.length"
728
+ "value": "@payload.data.length",
729
+ "icon": "clipboard-list"
711
730
  },
712
731
  {
713
732
  "type": "stat-display",
733
+ "label": "Urgent open",
714
734
  "icon": "alert-triangle",
715
- "value": "9",
716
- "label": "Urgent open"
735
+ "value": "9"
717
736
  },
718
737
  {
719
- "value": "14",
720
738
  "icon": "navigation",
739
+ "type": "stat-display",
721
740
  "label": "En route",
722
- "type": "stat-display"
741
+ "value": "14"
723
742
  },
724
743
  {
725
744
  "label": "Completed today",
745
+ "icon": "check-circle",
726
746
  "value": "47",
727
- "type": "stat-display",
728
- "icon": "check-circle"
747
+ "type": "stat-display"
729
748
  }
730
- ],
731
- "type": "simple-grid"
749
+ ]
732
750
  },
733
751
  {
734
752
  "type": "divider"
735
753
  },
736
754
  {
755
+ "itemActions": "@config.itemActions",
756
+ "type": "data-grid",
737
757
  "gap": "sm",
738
- "entity": "@payload.data",
739
758
  "fields": "@config.fields",
740
759
  "cols": 1.0,
741
- "itemActions": "@config.itemActions",
742
- "type": "data-grid"
760
+ "entity": "@payload.data"
743
761
  }
744
- ],
745
- "direction": "vertical",
746
- "gap": "md"
762
+ ]
747
763
  }
748
764
  ]
749
765
  ]
@@ -757,8 +773,8 @@
757
773
  "render-ui",
758
774
  "main",
759
775
  {
760
- "type": "alert",
761
776
  "variant": "error",
777
+ "type": "alert",
762
778
  "message": "@payload.error"
763
779
  }
764
780
  ]
@@ -828,41 +844,39 @@
828
844
  "render-ui",
829
845
  "main",
830
846
  {
831
- "gap": "md",
832
- "type": "stack",
833
847
  "children": [
834
848
  {
835
849
  "type": "stack",
836
- "direction": "horizontal",
837
- "gap": "sm",
838
850
  "align": "center",
839
851
  "children": [
840
852
  {
841
- "action": "CLOSE_VIEW",
853
+ "label": "Back",
842
854
  "variant": "ghost",
843
855
  "type": "button",
844
- "label": "Back"
856
+ "action": "CLOSE_VIEW"
845
857
  },
846
858
  {
847
- "name": "clipboard-list",
848
- "type": "icon"
859
+ "type": "icon",
860
+ "name": "clipboard-list"
849
861
  },
850
862
  {
851
- "type": "typography",
852
863
  "content": "@entity.customerName",
853
- "variant": "h3"
864
+ "variant": "h3",
865
+ "type": "typography"
854
866
  },
855
867
  {
856
- "variant": "primary",
868
+ "label": "@entity.priority",
857
869
  "type": "badge",
858
- "label": "@entity.priority"
870
+ "variant": "primary"
859
871
  },
860
872
  {
861
- "variant": "default",
862
873
  "label": "@entity.status",
863
- "type": "badge"
874
+ "type": "badge",
875
+ "variant": "default"
864
876
  }
865
- ]
877
+ ],
878
+ "direction": "horizontal",
879
+ "gap": "sm"
866
880
  },
867
881
  {
868
882
  "type": "divider"
@@ -873,75 +887,75 @@
873
887
  "gap": "sm",
874
888
  "children": [
875
889
  {
876
- "type": "stack",
877
- "gap": "md",
878
- "direction": "horizontal",
879
890
  "children": [
880
891
  {
881
- "content": "Service",
882
892
  "variant": "caption",
893
+ "content": "Service",
883
894
  "color": "muted",
884
895
  "type": "typography"
885
896
  },
886
897
  {
898
+ "type": "typography",
887
899
  "variant": "body",
888
- "content": "@entity.serviceType",
889
- "type": "typography"
900
+ "content": "@entity.serviceType"
890
901
  }
891
- ]
902
+ ],
903
+ "direction": "horizontal",
904
+ "type": "stack",
905
+ "gap": "md"
892
906
  },
893
907
  {
894
908
  "type": "stack",
895
- "direction": "horizontal",
896
- "gap": "md",
897
909
  "children": [
898
910
  {
899
- "content": "Address",
911
+ "color": "muted",
900
912
  "variant": "caption",
901
913
  "type": "typography",
902
- "color": "muted"
914
+ "content": "Address"
903
915
  },
904
916
  {
905
917
  "type": "typography",
906
- "variant": "body",
907
- "content": "@entity.address"
918
+ "content": "@entity.address",
919
+ "variant": "body"
908
920
  }
909
- ]
921
+ ],
922
+ "gap": "md",
923
+ "direction": "horizontal"
910
924
  },
911
925
  {
912
- "direction": "horizontal",
926
+ "type": "stack",
913
927
  "children": [
914
928
  {
915
929
  "color": "muted",
916
- "variant": "caption",
917
930
  "type": "typography",
918
- "content": "Assigned to"
931
+ "content": "Assigned to",
932
+ "variant": "caption"
919
933
  },
920
934
  {
921
- "variant": "body",
922
935
  "content": "@entity.assignedTo",
923
- "type": "typography"
936
+ "type": "typography",
937
+ "variant": "body"
924
938
  }
925
939
  ],
926
- "type": "stack",
940
+ "direction": "horizontal",
927
941
  "gap": "md"
928
942
  },
929
943
  {
944
+ "direction": "horizontal",
930
945
  "children": [
931
946
  {
947
+ "content": "Notes",
932
948
  "type": "typography",
933
- "variant": "caption",
934
949
  "color": "muted",
935
- "content": "Notes"
950
+ "variant": "caption"
936
951
  },
937
952
  {
938
- "variant": "body",
939
953
  "type": "typography",
954
+ "variant": "body",
940
955
  "content": "@entity.notes"
941
956
  }
942
957
  ],
943
958
  "gap": "md",
944
- "direction": "horizontal",
945
959
  "type": "stack"
946
960
  }
947
961
  ]
@@ -950,20 +964,18 @@
950
964
  "type": "divider"
951
965
  },
952
966
  {
953
- "cols": 3.0,
954
- "type": "simple-grid",
955
967
  "children": [
956
968
  {
957
- "value": "@entity.etaMinutes",
958
969
  "icon": "clock",
970
+ "label": "ETA (min)",
959
971
  "type": "stat-display",
960
- "label": "ETA (min)"
972
+ "value": "@entity.etaMinutes"
961
973
  },
962
974
  {
963
- "type": "stat-display",
964
- "value": "@entity.scheduledAt",
965
975
  "icon": "calendar",
966
- "label": "Scheduled"
976
+ "value": "@entity.scheduledAt",
977
+ "label": "Scheduled",
978
+ "type": "stat-display"
967
979
  },
968
980
  {
969
981
  "type": "stat-display",
@@ -971,72 +983,76 @@
971
983
  "value": "@entity.createdAt",
972
984
  "icon": "calendar-plus"
973
985
  }
974
- ]
986
+ ],
987
+ "cols": 3.0,
988
+ "type": "simple-grid"
975
989
  },
976
990
  {
977
- "gap": "sm",
978
991
  "direction": "horizontal",
979
- "type": "stack",
992
+ "gap": "sm",
980
993
  "align": "center",
981
994
  "children": [
982
995
  {
983
- "type": "button",
984
996
  "action": "ASSIGN",
985
- "label": "Assign",
986
997
  "actionPayload": {
987
- "id": "@entity.id",
988
998
  "assignedTo": "@entity.assignedTo",
989
- "row": "@entity"
999
+ "row": "@entity",
1000
+ "id": "@entity.id"
990
1001
  },
991
- "variant": "primary"
1002
+ "type": "button",
1003
+ "variant": "primary",
1004
+ "label": "Assign"
992
1005
  },
993
1006
  {
994
- "type": "button",
1007
+ "variant": "secondary",
995
1008
  "label": "Start Travel",
1009
+ "type": "button",
996
1010
  "action": "START_TRAVEL",
997
- "variant": "secondary",
998
1011
  "actionPayload": {
1012
+ "row": "@entity",
999
1013
  "etaMinutes": 0.0,
1000
- "id": "@entity.id",
1001
- "row": "@entity"
1014
+ "id": "@entity.id"
1002
1015
  }
1003
1016
  },
1004
1017
  {
1018
+ "type": "button",
1005
1019
  "label": "Arrive",
1006
- "variant": "secondary",
1007
1020
  "actionPayload": {
1008
- "row": "@entity",
1009
- "id": "@entity.id"
1021
+ "id": "@entity.id",
1022
+ "row": "@entity"
1010
1023
  },
1011
- "type": "button",
1024
+ "variant": "secondary",
1012
1025
  "action": "ARRIVE"
1013
1026
  },
1014
1027
  {
1015
1028
  "type": "button",
1016
1029
  "variant": "primary",
1017
1030
  "actionPayload": {
1018
- "row": "@entity",
1019
1031
  "notes": "@entity.notes",
1020
- "id": "@entity.id"
1032
+ "id": "@entity.id",
1033
+ "row": "@entity"
1021
1034
  },
1022
- "label": "Complete",
1023
- "action": "COMPLETE"
1035
+ "action": "COMPLETE",
1036
+ "label": "Complete"
1024
1037
  },
1025
1038
  {
1039
+ "type": "button",
1040
+ "action": "CANCEL",
1041
+ "variant": "danger",
1042
+ "label": "Cancel",
1026
1043
  "actionPayload": {
1027
1044
  "row": "@entity",
1028
1045
  "id": "@entity.id",
1029
1046
  "notes": "@entity.notes"
1030
- },
1031
- "variant": "danger",
1032
- "type": "button",
1033
- "action": "CANCEL",
1034
- "label": "Cancel"
1047
+ }
1035
1048
  }
1036
- ]
1049
+ ],
1050
+ "type": "stack"
1037
1051
  }
1038
1052
  ],
1039
- "direction": "vertical"
1053
+ "gap": "md",
1054
+ "direction": "vertical",
1055
+ "type": "stack"
1040
1056
  }
1041
1057
  ]
1042
1058
  ]
@@ -1065,20 +1081,71 @@
1065
1081
  "render-ui",
1066
1082
  "main",
1067
1083
  {
1068
- "align": "center",
1069
1084
  "direction": "vertical",
1085
+ "className": "py-12",
1070
1086
  "gap": "md",
1087
+ "children": [
1088
+ {
1089
+ "type": "spinner"
1090
+ },
1091
+ {
1092
+ "type": "typography",
1093
+ "variant": "caption",
1094
+ "content": "Cancelling order…",
1095
+ "color": "muted"
1096
+ }
1097
+ ],
1098
+ "type": "stack",
1099
+ "align": "center"
1100
+ }
1101
+ ]
1102
+ ]
1103
+ },
1104
+ {
1105
+ "from": "browsing",
1106
+ "to": "loading",
1107
+ "event": "SET_STATUS",
1108
+ "effects": [
1109
+ [
1110
+ "set",
1111
+ "@entity.id",
1112
+ "@payload.entityId"
1113
+ ],
1114
+ [
1115
+ "set",
1116
+ "@entity.status",
1117
+ "@payload.newStatus"
1118
+ ],
1119
+ [
1120
+ "persist",
1121
+ "update",
1122
+ "WorkOrder",
1123
+ "@entity",
1124
+ {
1125
+ "emit": {
1126
+ "failure": "WorkOrderLoadFailed",
1127
+ "success": "WorkOrderLoaded"
1128
+ }
1129
+ }
1130
+ ],
1131
+ [
1132
+ "render-ui",
1133
+ "main",
1134
+ {
1071
1135
  "type": "stack",
1136
+ "direction": "vertical",
1137
+ "gap": "md",
1138
+ "align": "center",
1072
1139
  "className": "py-12",
1073
1140
  "children": [
1074
1141
  {
1075
1142
  "type": "spinner"
1076
1143
  },
1077
1144
  {
1145
+ "variant": "caption",
1078
1146
  "type": "typography",
1079
1147
  "color": "muted",
1080
- "variant": "caption",
1081
- "content": "Cancelling order…"
1148
+ "content": "Updating order status…"
1082
1149
  }
1083
1150
  ]
1084
1151
  }
@@ -1104,22 +1171,22 @@
1104
1171
  "render-ui",
1105
1172
  "main",
1106
1173
  {
1174
+ "direction": "vertical",
1175
+ "type": "stack",
1107
1176
  "align": "center",
1108
1177
  "className": "py-12",
1178
+ "gap": "md",
1109
1179
  "children": [
1110
1180
  {
1111
1181
  "type": "spinner"
1112
1182
  },
1113
1183
  {
1114
1184
  "type": "typography",
1115
- "variant": "caption",
1116
1185
  "content": "Loading work orders…",
1186
+ "variant": "caption",
1117
1187
  "color": "muted"
1118
1188
  }
1119
- ],
1120
- "type": "stack",
1121
- "direction": "vertical",
1122
- "gap": "md"
1189
+ ]
1123
1190
  }
1124
1191
  ]
1125
1192
  ]
@@ -1139,8 +1206,8 @@
1139
1206
  "WorkOrder",
1140
1207
  {
1141
1208
  "emit": {
1142
- "success": "WorkOrderLoaded",
1143
- "failure": "WorkOrderLoadFailed"
1209
+ "failure": "WorkOrderLoadFailed",
1210
+ "success": "WorkOrderLoaded"
1144
1211
  }
1145
1212
  }
1146
1213
  ],
@@ -1148,9 +1215,10 @@
1148
1215
  "render-ui",
1149
1216
  "main",
1150
1217
  {
1151
- "type": "stack",
1152
1218
  "direction": "vertical",
1153
1219
  "gap": "md",
1220
+ "type": "stack",
1221
+ "className": "py-12",
1154
1222
  "align": "center",
1155
1223
  "children": [
1156
1224
  {
@@ -1158,12 +1226,11 @@
1158
1226
  },
1159
1227
  {
1160
1228
  "type": "typography",
1161
- "content": "Assigning order…",
1162
1229
  "variant": "caption",
1163
- "color": "muted"
1230
+ "color": "muted",
1231
+ "content": "Assigning order…"
1164
1232
  }
1165
- ],
1166
- "className": "py-12"
1233
+ ]
1167
1234
  }
1168
1235
  ]
1169
1236
  ]
@@ -1193,21 +1260,21 @@
1193
1260
  "main",
1194
1261
  {
1195
1262
  "type": "stack",
1196
- "className": "py-12",
1197
- "gap": "md",
1198
1263
  "direction": "vertical",
1199
1264
  "children": [
1200
1265
  {
1201
1266
  "type": "spinner"
1202
1267
  },
1203
1268
  {
1204
- "variant": "caption",
1205
1269
  "color": "muted",
1270
+ "variant": "caption",
1206
1271
  "content": "Starting travel…",
1207
1272
  "type": "typography"
1208
1273
  }
1209
1274
  ],
1210
- "align": "center"
1275
+ "align": "center",
1276
+ "gap": "md",
1277
+ "className": "py-12"
1211
1278
  }
1212
1279
  ]
1213
1280
  ]
@@ -1236,22 +1303,22 @@
1236
1303
  "render-ui",
1237
1304
  "main",
1238
1305
  {
1239
- "direction": "vertical",
1240
- "type": "stack",
1241
- "align": "center",
1242
1306
  "className": "py-12",
1243
1307
  "children": [
1244
1308
  {
1245
1309
  "type": "spinner"
1246
1310
  },
1247
1311
  {
1248
- "color": "muted",
1249
- "variant": "caption",
1312
+ "type": "typography",
1250
1313
  "content": "Arriving on site…",
1251
- "type": "typography"
1314
+ "color": "muted",
1315
+ "variant": "caption"
1252
1316
  }
1253
1317
  ],
1254
- "gap": "md"
1318
+ "direction": "vertical",
1319
+ "type": "stack",
1320
+ "gap": "md",
1321
+ "align": "center"
1255
1322
  }
1256
1323
  ]
1257
1324
  ]
@@ -1280,22 +1347,22 @@
1280
1347
  "render-ui",
1281
1348
  "main",
1282
1349
  {
1283
- "direction": "vertical",
1284
- "type": "stack",
1285
1350
  "align": "center",
1286
1351
  "className": "py-12",
1352
+ "direction": "vertical",
1287
1353
  "gap": "md",
1288
1354
  "children": [
1289
1355
  {
1290
1356
  "type": "spinner"
1291
1357
  },
1292
1358
  {
1293
- "variant": "caption",
1294
- "type": "typography",
1295
1359
  "color": "muted",
1296
- "content": "Completing order…"
1360
+ "variant": "caption",
1361
+ "content": "Completing order…",
1362
+ "type": "typography"
1297
1363
  }
1298
- ]
1364
+ ],
1365
+ "type": "stack"
1299
1366
  }
1300
1367
  ]
1301
1368
  ]
@@ -1315,8 +1382,8 @@
1315
1382
  "WorkOrder",
1316
1383
  {
1317
1384
  "emit": {
1318
- "failure": "WorkOrderLoadFailed",
1319
- "success": "WorkOrderLoaded"
1385
+ "success": "WorkOrderLoaded",
1386
+ "failure": "WorkOrderLoadFailed"
1320
1387
  }
1321
1388
  }
1322
1389
  ],
@@ -1324,22 +1391,22 @@
1324
1391
  "render-ui",
1325
1392
  "main",
1326
1393
  {
1327
- "gap": "md",
1394
+ "direction": "vertical",
1328
1395
  "align": "center",
1329
- "className": "py-12",
1330
1396
  "children": [
1331
1397
  {
1332
1398
  "type": "spinner"
1333
1399
  },
1334
1400
  {
1335
1401
  "type": "typography",
1336
- "variant": "caption",
1402
+ "content": "Cancelling order…",
1337
1403
  "color": "muted",
1338
- "content": "Cancelling order…"
1404
+ "variant": "caption"
1339
1405
  }
1340
1406
  ],
1341
- "direction": "vertical",
1342
- "type": "stack"
1407
+ "className": "py-12",
1408
+ "type": "stack",
1409
+ "gap": "md"
1343
1410
  }
1344
1411
  ]
1345
1412
  ]
@@ -1363,8 +1430,8 @@
1363
1430
  "render-ui",
1364
1431
  "main",
1365
1432
  {
1366
- "size": "sm",
1367
- "type": "spinner"
1433
+ "type": "spinner",
1434
+ "size": "sm"
1368
1435
  }
1369
1436
  ]
1370
1437
  ]
@@ -1372,51 +1439,6 @@
1372
1439
  ]
1373
1440
  },
1374
1441
  "config": {
1375
- "itemActions": {
1376
- "type": "[ItemAction]",
1377
- "default": [
1378
- {
1379
- "event": "OPEN_ORDER",
1380
- "icon": "arrow-right",
1381
- "label": "Open",
1382
- "variant": "primary"
1383
- },
1384
- {
1385
- "variant": "danger",
1386
- "label": "Cancel",
1387
- "event": "CANCEL",
1388
- "icon": "x"
1389
- }
1390
- ],
1391
- "label": "Row actions",
1392
- "description": "Buttons users can click on each work order row",
1393
- "tier": "customization",
1394
- "items": {
1395
- "type": "object",
1396
- "properties": {
1397
- "event": {
1398
- "name": "event",
1399
- "type": "string",
1400
- "required": true
1401
- },
1402
- "variant": {
1403
- "name": "variant",
1404
- "type": "string",
1405
- "required": false
1406
- },
1407
- "icon": {
1408
- "name": "icon",
1409
- "type": "string",
1410
- "required": false
1411
- },
1412
- "label": {
1413
- "name": "label",
1414
- "type": "string",
1415
- "required": true
1416
- }
1417
- }
1418
- }
1419
- },
1420
1442
  "fields": {
1421
1443
  "type": "[FieldSpec]",
1422
1444
  "default": [
@@ -1426,33 +1448,33 @@
1426
1448
  "name": "customerName"
1427
1449
  },
1428
1450
  {
1429
- "variant": "caption",
1451
+ "name": "serviceType",
1430
1452
  "label": "Service",
1431
- "name": "serviceType"
1453
+ "variant": "caption"
1432
1454
  },
1433
1455
  {
1434
1456
  "variant": "caption",
1435
- "label": "Address",
1436
- "name": "address"
1457
+ "name": "address",
1458
+ "label": "Address"
1437
1459
  },
1438
1460
  {
1461
+ "label": "Priority",
1439
1462
  "name": "priority",
1440
- "variant": "badge",
1441
- "label": "Priority"
1463
+ "variant": "badge"
1442
1464
  },
1443
1465
  {
1444
1466
  "label": "Status",
1445
- "name": "status",
1446
- "variant": "badge"
1467
+ "variant": "badge",
1468
+ "name": "status"
1447
1469
  },
1448
1470
  {
1449
1471
  "name": "assignedTo",
1450
- "variant": "caption",
1451
- "label": "Assigned"
1472
+ "label": "Assigned",
1473
+ "variant": "caption"
1452
1474
  },
1453
1475
  {
1454
- "variant": "caption",
1455
1476
  "label": "ETA (min)",
1477
+ "variant": "caption",
1456
1478
  "name": "etaMinutes"
1457
1479
  }
1458
1480
  ],
@@ -1462,8 +1484,13 @@
1462
1484
  "items": {
1463
1485
  "type": "object",
1464
1486
  "properties": {
1465
- "key": {
1466
- "name": "key",
1487
+ "variant": {
1488
+ "name": "variant",
1489
+ "type": "string",
1490
+ "required": false
1491
+ },
1492
+ "format": {
1493
+ "name": "format",
1467
1494
  "type": "string",
1468
1495
  "required": false
1469
1496
  },
@@ -1472,23 +1499,91 @@
1472
1499
  "type": "string",
1473
1500
  "required": false
1474
1501
  },
1502
+ "name": {
1503
+ "name": "name",
1504
+ "type": "string",
1505
+ "required": true
1506
+ },
1507
+ "icon": {
1508
+ "name": "icon",
1509
+ "type": "string",
1510
+ "required": false
1511
+ },
1475
1512
  "header": {
1476
1513
  "name": "header",
1477
1514
  "type": "string",
1478
1515
  "required": false
1479
1516
  },
1480
- "variant": {
1481
- "name": "variant",
1517
+ "key": {
1518
+ "name": "key",
1482
1519
  "type": "string",
1483
1520
  "required": false
1484
- },
1485
- "name": {
1486
- "name": "name",
1521
+ }
1522
+ }
1523
+ }
1524
+ },
1525
+ "title": {
1526
+ "type": "string",
1527
+ "default": "Work Orders",
1528
+ "label": "Section title",
1529
+ "description": "Heading shown above the field service work orders",
1530
+ "tier": "customization"
1531
+ },
1532
+ "serviceAreaRadius": {
1533
+ "type": "number",
1534
+ "default": 50.0,
1535
+ "label": "Service area radius (mi)",
1536
+ "description": "Maximum distance from the service hub for dispatch eligibility.",
1537
+ "tier": "customization"
1538
+ },
1539
+ "dispatchStrategy": {
1540
+ "type": "string",
1541
+ "default": "nearest",
1542
+ "label": "Dispatch strategy",
1543
+ "description": "How techs are assigned: nearest = closest available, round-robin = even distribution, manual = dispatcher picks.",
1544
+ "tier": "customization",
1545
+ "values": [
1546
+ "nearest",
1547
+ "round-robin",
1548
+ "manual"
1549
+ ]
1550
+ },
1551
+ "escalationThresholdHours": {
1552
+ "type": "number",
1553
+ "default": 48.0,
1554
+ "label": "Escalation threshold (hours)",
1555
+ "description": "Hours after which an open order auto-escalates to escalationRoles. Compose std-lifecycle for wiring.",
1556
+ "tier": "customization"
1557
+ },
1558
+ "itemActions": {
1559
+ "type": "[ItemAction]",
1560
+ "default": [
1561
+ {
1562
+ "variant": "primary",
1563
+ "event": "OPEN_ORDER",
1564
+ "icon": "arrow-right",
1565
+ "label": "Open"
1566
+ },
1567
+ {
1568
+ "variant": "danger",
1569
+ "event": "CANCEL",
1570
+ "label": "Cancel",
1571
+ "icon": "x"
1572
+ }
1573
+ ],
1574
+ "label": "Row actions",
1575
+ "description": "Buttons users can click on each work order row",
1576
+ "tier": "customization",
1577
+ "items": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "label": {
1581
+ "name": "label",
1487
1582
  "type": "string",
1488
1583
  "required": true
1489
1584
  },
1490
- "format": {
1491
- "name": "format",
1585
+ "variant": {
1586
+ "name": "variant",
1492
1587
  "type": "string",
1493
1588
  "required": false
1494
1589
  },
@@ -1496,15 +1591,75 @@
1496
1591
  "name": "icon",
1497
1592
  "type": "string",
1498
1593
  "required": false
1594
+ },
1595
+ "event": {
1596
+ "name": "event",
1597
+ "type": "string",
1598
+ "required": true
1499
1599
  }
1500
1600
  }
1501
1601
  }
1502
1602
  },
1503
- "title": {
1504
- "type": "string",
1505
- "default": "Work Orders",
1506
- "label": "Section title",
1507
- "description": "Heading shown above the field service work orders",
1603
+ "skillsRequired": {
1604
+ "type": "[string]",
1605
+ "default": [],
1606
+ "label": "Required skills",
1607
+ "description": "Capability tags a tech must have to be assigned (e.g. 'plumbing', 'electrical', 'hvac').",
1608
+ "tier": "customization",
1609
+ "items": {
1610
+ "type": "string"
1611
+ }
1612
+ },
1613
+ "responseTimeMinutes": {
1614
+ "type": "number",
1615
+ "default": 60.0,
1616
+ "label": "Response time SLA (min)",
1617
+ "description": "Target time from order created to first response (assigned + acknowledged). Drives SLA dashboards and escalation.",
1618
+ "tier": "essential"
1619
+ },
1620
+ "customerVisibleStatuses": {
1621
+ "type": "[string]",
1622
+ "default": [
1623
+ "assigned",
1624
+ "en-route",
1625
+ "completed"
1626
+ ],
1627
+ "label": "Customer-visible statuses",
1628
+ "description": "Subset of statuses the customer can see in their tracking view. Internal-only statuses are filtered.",
1629
+ "tier": "customization",
1630
+ "items": {
1631
+ "type": "string"
1632
+ }
1633
+ },
1634
+ "requirePhotoOnComplete": {
1635
+ "type": "boolean",
1636
+ "default": false,
1637
+ "label": "Require photo on complete",
1638
+ "description": "Block COMPLETE action unless a completion photo is attached.",
1639
+ "tier": "customization"
1640
+ },
1641
+ "serviceZones": {
1642
+ "type": "[string]",
1643
+ "default": [],
1644
+ "label": "Service zones",
1645
+ "description": "Named geographic zones for dispatch grouping. Empty = no zone restriction.",
1646
+ "tier": "customization",
1647
+ "items": {
1648
+ "type": "string"
1649
+ }
1650
+ },
1651
+ "resolutionSLAHours": {
1652
+ "type": "number",
1653
+ "default": 24.0,
1654
+ "label": "Resolution SLA (hours)",
1655
+ "description": "Target time from order created to completed. Compose sibling std-lifecycle to auto-escalate at threshold.",
1656
+ "tier": "essential"
1657
+ },
1658
+ "requireSignatureOnComplete": {
1659
+ "type": "boolean",
1660
+ "default": false,
1661
+ "label": "Require customer signature on complete",
1662
+ "description": "Block COMPLETE action unless customer signature is captured (compose std-signature-capture).",
1508
1663
  "tier": "customization"
1509
1664
  }
1510
1665
  },
@@ -1524,4 +1679,4 @@
1524
1679
  ]
1525
1680
  }
1526
1681
  ]
1527
- }
1682
+ }