@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-rfi",
3
- "version": "1.1.0",
4
- "description": "std-rfi — Request For Information primitive for construction projects. Lists RFIs in `browsing`; opens detail in `viewing_single` with Submit / Answer / Close actions. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-rfi — RFI pipeline for construction projects. Listens for SET_STATUS so std-lifecycle can auto-close stale RFIs. Exposes Service/Operations knobs (responseTimeMinutes, resolutionSLAHours, …).",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "RfiOrbital",
@@ -302,6 +302,22 @@
302
302
  }
303
303
  ]
304
304
  },
305
+ {
306
+ "key": "SET_STATUS",
307
+ "name": "Set Status",
308
+ "payloadSchema": [
309
+ {
310
+ "name": "entityId",
311
+ "type": "string",
312
+ "required": true
313
+ },
314
+ {
315
+ "name": "newStatus",
316
+ "type": "string",
317
+ "required": true
318
+ }
319
+ ]
320
+ },
305
321
  {
306
322
  "key": "CLOSE_VIEW",
307
323
  "name": "Close View"
@@ -327,22 +343,22 @@
327
343
  "render-ui",
328
344
  "main",
329
345
  {
346
+ "type": "stack",
330
347
  "className": "py-12",
331
- "gap": "md",
332
- "direction": "vertical",
333
348
  "children": [
334
349
  {
335
350
  "type": "spinner"
336
351
  },
337
352
  {
338
- "type": "typography",
353
+ "variant": "caption",
339
354
  "color": "muted",
340
355
  "content": "Loading RFIs…",
341
- "variant": "caption"
356
+ "type": "typography"
342
357
  }
343
358
  ],
344
- "align": "center",
345
- "type": "stack"
359
+ "direction": "vertical",
360
+ "gap": "md",
361
+ "align": "center"
346
362
  }
347
363
  ]
348
364
  ]
@@ -356,69 +372,69 @@
356
372
  "render-ui",
357
373
  "main",
358
374
  {
359
- "type": "stack",
360
- "direction": "vertical",
361
- "gap": "md",
362
375
  "children": [
363
376
  {
377
+ "gap": "sm",
378
+ "align": "center",
364
379
  "direction": "horizontal",
365
380
  "type": "stack",
366
- "align": "center",
367
- "gap": "sm",
368
381
  "children": [
369
382
  {
370
- "name": "help-circle",
371
- "type": "icon"
383
+ "type": "icon",
384
+ "name": "help-circle"
372
385
  },
373
386
  {
374
- "type": "typography",
375
387
  "content": "@config.title",
376
- "variant": "h3"
388
+ "variant": "h3",
389
+ "type": "typography"
377
390
  }
378
391
  ]
379
392
  },
380
393
  {
381
- "type": "simple-grid",
382
- "cols": 4.0,
383
394
  "children": [
384
395
  {
385
- "icon": "help-circle",
386
396
  "label": "Total RFIs",
387
397
  "value": "@payload.data.length",
398
+ "icon": "help-circle",
388
399
  "type": "stat-display"
389
400
  },
390
401
  {
391
402
  "value": "18",
403
+ "label": "Open",
392
404
  "icon": "mail",
393
- "type": "stat-display",
394
- "label": "Open"
405
+ "type": "stat-display"
395
406
  },
396
407
  {
397
408
  "label": "Overdue",
409
+ "icon": "alert-triangle",
398
410
  "value": "5",
399
- "type": "stat-display",
400
- "icon": "alert-triangle"
411
+ "type": "stat-display"
401
412
  },
402
413
  {
403
- "value": "3.2d",
404
- "icon": "clock",
414
+ "type": "stat-display",
405
415
  "label": "Avg response",
406
- "type": "stat-display"
416
+ "icon": "clock",
417
+ "value": "3.2d"
407
418
  }
408
- ]
419
+ ],
420
+ "type": "simple-grid",
421
+ "cols": 4.0
409
422
  },
410
423
  {
411
424
  "type": "divider"
412
425
  },
413
426
  {
414
- "type": "data-grid",
427
+ "entity": "@payload.data",
415
428
  "fields": "@config.fields",
416
429
  "cols": 1.0,
417
- "entity": "@payload.data",
418
- "itemActions": "@config.itemActions",
419
- "gap": "sm"
430
+ "type": "data-grid",
431
+ "gap": "sm",
432
+ "itemActions": "@config.itemActions"
420
433
  }
421
- ]
434
+ ],
435
+ "type": "stack",
436
+ "gap": "md",
437
+ "direction": "vertical"
422
438
  }
423
439
  ]
424
440
  ]
@@ -432,9 +448,9 @@
432
448
  "render-ui",
433
449
  "main",
434
450
  {
435
- "type": "alert",
451
+ "variant": "error",
436
452
  "message": "@payload.error",
437
- "variant": "error"
453
+ "type": "alert"
438
454
  }
439
455
  ]
440
456
  ]
@@ -503,69 +519,69 @@
503
519
  "render-ui",
504
520
  "main",
505
521
  {
522
+ "gap": "md",
523
+ "direction": "vertical",
524
+ "type": "stack",
506
525
  "children": [
507
526
  {
527
+ "align": "center",
528
+ "type": "stack",
529
+ "gap": "sm",
508
530
  "children": [
509
531
  {
510
- "label": "Back",
532
+ "variant": "ghost",
511
533
  "type": "button",
512
- "action": "CLOSE_VIEW",
513
- "variant": "ghost"
534
+ "label": "Back",
535
+ "action": "CLOSE_VIEW"
514
536
  },
515
537
  {
516
- "name": "help-circle",
517
- "type": "icon"
538
+ "type": "icon",
539
+ "name": "help-circle"
518
540
  },
519
541
  {
520
- "variant": "h3",
521
542
  "type": "typography",
522
- "content": "@entity.subject"
543
+ "content": "@entity.subject",
544
+ "variant": "h3"
523
545
  },
524
546
  {
525
- "label": "@entity.status",
526
547
  "type": "badge",
548
+ "label": "@entity.status",
527
549
  "variant": "default"
528
550
  }
529
551
  ],
530
- "direction": "horizontal",
531
- "align": "center",
532
- "gap": "sm",
533
- "type": "stack"
552
+ "direction": "horizontal"
534
553
  },
535
554
  {
536
555
  "type": "divider"
537
556
  },
538
557
  {
539
- "gap": "sm",
540
- "type": "stack",
541
- "direction": "vertical",
542
558
  "children": [
543
559
  {
544
560
  "type": "stack",
545
- "gap": "md",
546
- "direction": "horizontal",
547
561
  "children": [
548
562
  {
549
563
  "type": "typography",
550
564
  "content": "RFI #",
551
- "color": "muted",
552
- "variant": "caption"
565
+ "variant": "caption",
566
+ "color": "muted"
553
567
  },
554
568
  {
555
- "type": "typography",
556
569
  "variant": "body",
570
+ "type": "typography",
557
571
  "content": "@entity.rfiNumber"
558
572
  }
559
- ]
573
+ ],
574
+ "direction": "horizontal",
575
+ "gap": "md"
560
576
  },
561
577
  {
562
- "direction": "horizontal",
578
+ "gap": "md",
563
579
  "children": [
564
580
  {
565
- "content": "Question",
566
581
  "type": "typography",
582
+ "variant": "caption",
567
583
  "color": "muted",
568
- "variant": "caption"
584
+ "content": "Question"
569
585
  },
570
586
  {
571
587
  "variant": "body",
@@ -574,100 +590,100 @@
574
590
  }
575
591
  ],
576
592
  "type": "stack",
577
- "gap": "md"
593
+ "direction": "horizontal"
578
594
  },
579
595
  {
596
+ "type": "stack",
597
+ "gap": "md",
598
+ "direction": "horizontal",
580
599
  "children": [
581
600
  {
582
- "variant": "caption",
583
- "content": "Response",
584
601
  "type": "typography",
602
+ "content": "Response",
603
+ "variant": "caption",
585
604
  "color": "muted"
586
605
  },
587
606
  {
588
- "content": "@entity.response",
589
607
  "variant": "body",
590
- "type": "typography"
608
+ "type": "typography",
609
+ "content": "@entity.response"
591
610
  }
592
- ],
593
- "type": "stack",
594
- "gap": "md",
595
- "direction": "horizontal"
611
+ ]
596
612
  }
597
- ]
613
+ ],
614
+ "gap": "sm",
615
+ "type": "stack",
616
+ "direction": "vertical"
598
617
  },
599
618
  {
600
619
  "type": "divider"
601
620
  },
602
621
  {
603
- "type": "simple-grid",
604
- "cols": 4.0,
605
622
  "children": [
606
623
  {
607
- "label": "Raised by",
608
624
  "type": "stat-display",
609
- "icon": "user",
610
- "value": "@entity.raisedBy"
625
+ "value": "@entity.raisedBy",
626
+ "label": "Raised by",
627
+ "icon": "user"
611
628
  },
612
629
  {
613
630
  "type": "stat-display",
614
- "value": "@entity.assignedTo",
615
631
  "label": "Assigned",
616
- "icon": "user-check"
632
+ "icon": "user-check",
633
+ "value": "@entity.assignedTo"
617
634
  },
618
635
  {
619
636
  "value": "@entity.dueAt",
620
- "label": "Due",
637
+ "type": "stat-display",
621
638
  "icon": "calendar",
622
- "type": "stat-display"
639
+ "label": "Due"
623
640
  },
624
641
  {
625
- "icon": "check-circle",
626
642
  "type": "stat-display",
627
- "label": "Answered",
628
- "value": "@entity.answeredAt"
643
+ "icon": "check-circle",
644
+ "value": "@entity.answeredAt",
645
+ "label": "Answered"
629
646
  }
630
- ]
647
+ ],
648
+ "cols": 4.0,
649
+ "type": "simple-grid"
631
650
  },
632
651
  {
652
+ "direction": "horizontal",
653
+ "gap": "sm",
654
+ "align": "center",
633
655
  "children": [
634
656
  {
635
- "variant": "primary",
636
657
  "actionPayload": {
637
658
  "id": "@entity.id"
638
659
  },
639
660
  "type": "button",
640
661
  "label": "Submit",
662
+ "variant": "primary",
641
663
  "action": "SUBMIT"
642
664
  },
643
665
  {
644
- "type": "button",
645
- "action": "ANSWER",
646
- "label": "Answer",
647
- "variant": "secondary",
648
666
  "actionPayload": {
649
667
  "id": "@entity.id"
650
- }
668
+ },
669
+ "variant": "secondary",
670
+ "action": "ANSWER",
671
+ "label": "Answer",
672
+ "type": "button"
651
673
  },
652
674
  {
653
675
  "type": "button",
676
+ "variant": "danger",
677
+ "label": "Close",
654
678
  "action": "CLOSE",
655
679
  "actionPayload": {
656
680
  "id": "@entity.id"
657
- },
658
- "label": "Close",
659
- "variant": "danger"
681
+ }
660
682
  }
661
683
  ],
662
- "type": "stack",
663
- "align": "center",
664
- "gap": "sm",
665
- "direction": "horizontal"
684
+ "type": "stack"
666
685
  }
667
- ],
668
- "gap": "md",
669
- "type": "stack",
670
- "direction": "vertical"
686
+ ]
671
687
  }
672
688
  ]
673
689
  ]
@@ -696,11 +712,6 @@
696
712
  "render-ui",
697
713
  "main",
698
714
  {
699
- "align": "center",
700
- "direction": "vertical",
701
- "type": "stack",
702
- "gap": "md",
703
- "className": "py-12",
704
715
  "children": [
705
716
  {
706
717
  "type": "spinner"
@@ -708,10 +719,15 @@
708
719
  {
709
720
  "variant": "caption",
710
721
  "color": "muted",
711
- "content": "Submitting RFI…",
712
- "type": "typography"
722
+ "type": "typography",
723
+ "content": "Submitting RFI…"
713
724
  }
714
- ]
725
+ ],
726
+ "className": "py-12",
727
+ "gap": "md",
728
+ "align": "center",
729
+ "direction": "vertical",
730
+ "type": "stack"
715
731
  }
716
732
  ]
717
733
  ]
@@ -731,8 +747,8 @@
731
747
  "Rfi",
732
748
  {
733
749
  "emit": {
734
- "success": "RfiLoaded",
735
- "failure": "RfiLoadFailed"
750
+ "failure": "RfiLoadFailed",
751
+ "success": "RfiLoaded"
736
752
  }
737
753
  }
738
754
  ],
@@ -740,21 +756,21 @@
740
756
  "render-ui",
741
757
  "main",
742
758
  {
759
+ "direction": "vertical",
760
+ "type": "stack",
761
+ "gap": "md",
762
+ "align": "center",
743
763
  "children": [
744
764
  {
745
765
  "type": "spinner"
746
766
  },
747
767
  {
748
768
  "type": "typography",
749
- "content": "Answering RFI…",
769
+ "variant": "caption",
750
770
  "color": "muted",
751
- "variant": "caption"
771
+ "content": "Answering RFI…"
752
772
  }
753
773
  ],
754
- "direction": "vertical",
755
- "gap": "md",
756
- "type": "stack",
757
- "align": "center",
758
774
  "className": "py-12"
759
775
  }
760
776
  ]
@@ -784,21 +800,72 @@
784
800
  "render-ui",
785
801
  "main",
786
802
  {
803
+ "type": "stack",
804
+ "children": [
805
+ {
806
+ "type": "spinner"
807
+ },
808
+ {
809
+ "content": "Closing RFI…",
810
+ "variant": "caption",
811
+ "color": "muted",
812
+ "type": "typography"
813
+ }
814
+ ],
815
+ "gap": "md",
787
816
  "direction": "vertical",
788
817
  "align": "center",
789
- "className": "py-12",
818
+ "className": "py-12"
819
+ }
820
+ ]
821
+ ]
822
+ },
823
+ {
824
+ "from": "browsing",
825
+ "to": "loading",
826
+ "event": "SET_STATUS",
827
+ "effects": [
828
+ [
829
+ "set",
830
+ "@entity.id",
831
+ "@payload.entityId"
832
+ ],
833
+ [
834
+ "set",
835
+ "@entity.status",
836
+ "@payload.newStatus"
837
+ ],
838
+ [
839
+ "persist",
840
+ "update",
841
+ "Rfi",
842
+ "@entity",
843
+ {
844
+ "emit": {
845
+ "failure": "RfiLoadFailed",
846
+ "success": "RfiLoaded"
847
+ }
848
+ }
849
+ ],
850
+ [
851
+ "render-ui",
852
+ "main",
853
+ {
854
+ "type": "stack",
790
855
  "children": [
791
856
  {
792
857
  "type": "spinner"
793
858
  },
794
859
  {
860
+ "content": "Updating RFI status…",
795
861
  "type": "typography",
796
- "color": "muted",
797
- "content": "Closing RFI…",
798
- "variant": "caption"
862
+ "variant": "caption",
863
+ "color": "muted"
799
864
  }
800
865
  ],
801
- "type": "stack",
866
+ "className": "py-12",
867
+ "direction": "vertical",
868
+ "align": "center",
802
869
  "gap": "md"
803
870
  }
804
871
  ]
@@ -823,22 +890,22 @@
823
890
  "render-ui",
824
891
  "main",
825
892
  {
826
- "type": "stack",
827
- "direction": "vertical",
828
- "gap": "md",
829
893
  "align": "center",
894
+ "direction": "vertical",
830
895
  "className": "py-12",
831
896
  "children": [
832
897
  {
833
898
  "type": "spinner"
834
899
  },
835
900
  {
836
- "color": "muted",
837
901
  "type": "typography",
838
902
  "variant": "caption",
839
- "content": "Loading RFIs…"
903
+ "content": "Loading RFIs…",
904
+ "color": "muted"
840
905
  }
841
- ]
906
+ ],
907
+ "type": "stack",
908
+ "gap": "md"
842
909
  }
843
910
  ]
844
911
  ]
@@ -867,22 +934,22 @@
867
934
  "render-ui",
868
935
  "main",
869
936
  {
937
+ "type": "stack",
870
938
  "direction": "vertical",
871
939
  "gap": "md",
872
- "align": "center",
940
+ "className": "py-12",
873
941
  "children": [
874
942
  {
875
943
  "type": "spinner"
876
944
  },
877
945
  {
878
- "color": "muted",
879
- "type": "typography",
880
946
  "content": "Submitting RFI…",
947
+ "type": "typography",
948
+ "color": "muted",
881
949
  "variant": "caption"
882
950
  }
883
951
  ],
884
- "type": "stack",
885
- "className": "py-12"
952
+ "align": "center"
886
953
  }
887
954
  ]
888
955
  ]
@@ -902,8 +969,8 @@
902
969
  "Rfi",
903
970
  {
904
971
  "emit": {
905
- "success": "RfiLoaded",
906
- "failure": "RfiLoadFailed"
972
+ "failure": "RfiLoadFailed",
973
+ "success": "RfiLoaded"
907
974
  }
908
975
  }
909
976
  ],
@@ -911,22 +978,22 @@
911
978
  "render-ui",
912
979
  "main",
913
980
  {
914
- "direction": "vertical",
915
- "type": "stack",
916
- "align": "center",
917
981
  "className": "py-12",
918
982
  "children": [
919
983
  {
920
984
  "type": "spinner"
921
985
  },
922
986
  {
923
- "type": "typography",
924
- "color": "muted",
987
+ "variant": "caption",
925
988
  "content": "Answering RFI…",
926
- "variant": "caption"
989
+ "type": "typography",
990
+ "color": "muted"
927
991
  }
928
992
  ],
929
- "gap": "md"
993
+ "type": "stack",
994
+ "gap": "md",
995
+ "direction": "vertical",
996
+ "align": "center"
930
997
  }
931
998
  ]
932
999
  ]
@@ -946,8 +1013,8 @@
946
1013
  "Rfi",
947
1014
  {
948
1015
  "emit": {
949
- "failure": "RfiLoadFailed",
950
- "success": "RfiLoaded"
1016
+ "success": "RfiLoaded",
1017
+ "failure": "RfiLoadFailed"
951
1018
  }
952
1019
  }
953
1020
  ],
@@ -955,22 +1022,22 @@
955
1022
  "render-ui",
956
1023
  "main",
957
1024
  {
958
- "align": "center",
1025
+ "gap": "md",
959
1026
  "children": [
960
1027
  {
961
1028
  "type": "spinner"
962
1029
  },
963
1030
  {
964
1031
  "type": "typography",
965
- "color": "muted",
966
1032
  "variant": "caption",
1033
+ "color": "muted",
967
1034
  "content": "Closing RFI…"
968
1035
  }
969
1036
  ],
1037
+ "align": "center",
1038
+ "type": "stack",
970
1039
  "direction": "vertical",
971
- "gap": "md",
972
- "className": "py-12",
973
- "type": "stack"
1040
+ "className": "py-12"
974
1041
  }
975
1042
  ]
976
1043
  ]
@@ -985,8 +1052,8 @@
985
1052
  "Rfi",
986
1053
  {
987
1054
  "emit": {
988
- "success": "RfiLoaded",
989
- "failure": "RfiLoadFailed"
1055
+ "failure": "RfiLoadFailed",
1056
+ "success": "RfiLoaded"
990
1057
  }
991
1058
  }
992
1059
  ],
@@ -1003,48 +1070,28 @@
1003
1070
  ]
1004
1071
  },
1005
1072
  "config": {
1006
- "itemActions": {
1007
- "type": "[ItemAction]",
1008
- "default": [
1009
- {
1010
- "label": "Open",
1011
- "icon": "arrow-right",
1012
- "event": "OPEN_RFI",
1013
- "variant": "primary"
1014
- },
1015
- {
1016
- "label": "Close",
1017
- "event": "CLOSE",
1018
- "variant": "danger"
1019
- }
1020
- ],
1021
- "label": "Row actions",
1022
- "description": "Buttons users can click on each RFI row",
1073
+ "resolutionSLAHours": {
1074
+ "type": "number",
1075
+ "default": 120.0,
1076
+ "label": "Resolution SLA (hours)",
1077
+ "description": "Target hours from raised to answered (default 5 business days). Compose std-lifecycle to escalate.",
1078
+ "tier": "essential"
1079
+ },
1080
+ "responseTimeMinutes": {
1081
+ "type": "number",
1082
+ "default": 480.0,
1083
+ "label": "Response time SLA (min)",
1084
+ "description": "Target minutes from raised to first acknowledgement (default 8 business hours).",
1085
+ "tier": "essential"
1086
+ },
1087
+ "skillsRequired": {
1088
+ "type": "[string]",
1089
+ "default": [],
1090
+ "label": "Required skills",
1091
+ "description": "Discipline tags a responder must hold (e.g. 'structural', 'mep', 'arch').",
1023
1092
  "tier": "customization",
1024
1093
  "items": {
1025
- "type": "object",
1026
- "properties": {
1027
- "label": {
1028
- "name": "label",
1029
- "type": "string",
1030
- "required": true
1031
- },
1032
- "event": {
1033
- "name": "event",
1034
- "type": "string",
1035
- "required": true
1036
- },
1037
- "variant": {
1038
- "name": "variant",
1039
- "type": "string",
1040
- "required": false
1041
- },
1042
- "icon": {
1043
- "name": "icon",
1044
- "type": "string",
1045
- "required": false
1046
- }
1047
- }
1094
+ "type": "string"
1048
1095
  }
1049
1096
  },
1050
1097
  "title": {
@@ -1054,28 +1101,61 @@
1054
1101
  "description": "Heading shown above the RFI pipeline",
1055
1102
  "tier": "customization"
1056
1103
  },
1104
+ "dispatchStrategy": {
1105
+ "type": "string",
1106
+ "default": "manual",
1107
+ "label": "Dispatch strategy",
1108
+ "description": "How responders are picked when an RFI is raised.",
1109
+ "tier": "customization",
1110
+ "values": [
1111
+ "nearest",
1112
+ "round-robin",
1113
+ "manual"
1114
+ ]
1115
+ },
1116
+ "serviceAreaRadius": {
1117
+ "type": "number",
1118
+ "default": 0.0,
1119
+ "label": "Service area radius (mi)",
1120
+ "description": "Project-site distance limit for assignable responders. Zero = no restriction.",
1121
+ "tier": "customization"
1122
+ },
1123
+ "customerVisibleStatuses": {
1124
+ "type": "[string]",
1125
+ "default": [
1126
+ "submitted",
1127
+ "answered",
1128
+ "closed"
1129
+ ],
1130
+ "label": "Customer-visible statuses",
1131
+ "description": "Subset of statuses external collaborators see.",
1132
+ "tier": "customization",
1133
+ "items": {
1134
+ "type": "string"
1135
+ }
1136
+ },
1057
1137
  "fields": {
1058
1138
  "type": "[FieldSpec]",
1059
1139
  "default": [
1060
1140
  {
1061
- "label": "RFI #",
1141
+ "name": "rfiNumber",
1062
1142
  "variant": "caption",
1063
- "name": "rfiNumber"
1143
+ "label": "RFI #"
1064
1144
  },
1065
1145
  {
1146
+ "label": "Subject",
1066
1147
  "name": "subject",
1067
- "variant": "caption",
1068
- "label": "Subject"
1148
+ "variant": "caption"
1069
1149
  },
1070
1150
  {
1151
+ "variant": "badge",
1071
1152
  "name": "status",
1072
- "label": "Status",
1073
- "variant": "badge"
1153
+ "label": "Status"
1074
1154
  },
1075
1155
  {
1076
- "variant": "caption",
1077
1156
  "name": "raisedBy",
1078
- "label": "Raised By"
1157
+ "label": "Raised By",
1158
+ "variant": "caption"
1079
1159
  },
1080
1160
  {
1081
1161
  "name": "assignedTo",
@@ -1083,9 +1163,9 @@
1083
1163
  "label": "Assigned"
1084
1164
  },
1085
1165
  {
1166
+ "variant": "caption",
1086
1167
  "name": "dueAt",
1087
- "label": "Due",
1088
- "variant": "caption"
1168
+ "label": "Due"
1089
1169
  }
1090
1170
  ],
1091
1171
  "label": "Columns to show",
@@ -1094,13 +1174,13 @@
1094
1174
  "items": {
1095
1175
  "type": "object",
1096
1176
  "properties": {
1097
- "icon": {
1098
- "name": "icon",
1177
+ "name": {
1178
+ "name": "name",
1099
1179
  "type": "string",
1100
- "required": false
1180
+ "required": true
1101
1181
  },
1102
- "header": {
1103
- "name": "header",
1182
+ "icon": {
1183
+ "name": "icon",
1104
1184
  "type": "string",
1105
1185
  "required": false
1106
1186
  },
@@ -1114,16 +1194,16 @@
1114
1194
  "type": "string",
1115
1195
  "required": false
1116
1196
  },
1117
- "name": {
1118
- "name": "name",
1119
- "type": "string",
1120
- "required": true
1121
- },
1122
1197
  "variant": {
1123
1198
  "name": "variant",
1124
1199
  "type": "string",
1125
1200
  "required": false
1126
1201
  },
1202
+ "header": {
1203
+ "name": "header",
1204
+ "type": "string",
1205
+ "required": false
1206
+ },
1127
1207
  "label": {
1128
1208
  "name": "label",
1129
1209
  "type": "string",
@@ -1131,6 +1211,81 @@
1131
1211
  }
1132
1212
  }
1133
1213
  }
1214
+ },
1215
+ "serviceZones": {
1216
+ "type": "[string]",
1217
+ "default": [],
1218
+ "label": "Service zones",
1219
+ "description": "Named project zones for routing RFIs to the right responder pool.",
1220
+ "tier": "customization",
1221
+ "items": {
1222
+ "type": "string"
1223
+ }
1224
+ },
1225
+ "escalationThresholdHours": {
1226
+ "type": "number",
1227
+ "default": 168.0,
1228
+ "label": "Escalation threshold (hours)",
1229
+ "description": "Hours after which a stalled RFI auto-escalates (default 7 days).",
1230
+ "tier": "customization"
1231
+ },
1232
+ "requirePhotoOnComplete": {
1233
+ "type": "boolean",
1234
+ "default": false,
1235
+ "label": "Require photo on complete",
1236
+ "description": "Block ANSWER unless a supporting attachment is provided.",
1237
+ "tier": "customization"
1238
+ },
1239
+ "requireSignatureOnComplete": {
1240
+ "type": "boolean",
1241
+ "default": false,
1242
+ "label": "Require responder signature on complete",
1243
+ "description": "Block ANSWER unless responder signature is captured (compose std-signature-capture).",
1244
+ "tier": "customization"
1245
+ },
1246
+ "itemActions": {
1247
+ "type": "[ItemAction]",
1248
+ "default": [
1249
+ {
1250
+ "label": "Open",
1251
+ "icon": "arrow-right",
1252
+ "variant": "primary",
1253
+ "event": "OPEN_RFI"
1254
+ },
1255
+ {
1256
+ "event": "CLOSE",
1257
+ "label": "Close",
1258
+ "variant": "danger"
1259
+ }
1260
+ ],
1261
+ "label": "Row actions",
1262
+ "description": "Buttons users can click on each RFI row",
1263
+ "tier": "customization",
1264
+ "items": {
1265
+ "type": "object",
1266
+ "properties": {
1267
+ "icon": {
1268
+ "name": "icon",
1269
+ "type": "string",
1270
+ "required": false
1271
+ },
1272
+ "event": {
1273
+ "name": "event",
1274
+ "type": "string",
1275
+ "required": true
1276
+ },
1277
+ "label": {
1278
+ "name": "label",
1279
+ "type": "string",
1280
+ "required": true
1281
+ },
1282
+ "variant": {
1283
+ "name": "variant",
1284
+ "type": "string",
1285
+ "required": false
1286
+ }
1287
+ }
1288
+ }
1134
1289
  }
1135
1290
  },
1136
1291
  "scope": "collection"
@@ -1149,4 +1304,4 @@
1149
1304
  ]
1150
1305
  }
1151
1306
  ]
1152
- }
1307
+ }