@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-tenant",
3
- "version": "1.1.0",
4
- "description": "std-tenant — person/company occupying a leased unit. Lists tenants in `browsing`; opens tenant detail (name, contact, lease, move-in/out dates, status) in `viewing_single` with Activate / Move Out actions. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-tenant — person/company occupying a leased unit. Lists tenants; detail offers Activate / Move Out. Listens for SET_STATUS so std-lifecycle can drive transitions. Exposes Real-estate knobs (leaseRenewalNoticeDays, petPolicy, lateRentGraceDays, …).",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "TenantOrbital",
@@ -160,6 +160,62 @@
160
160
  "type": "string"
161
161
  }
162
162
  ]
163
+ },
164
+ {
165
+ "event": "TenantUpdated",
166
+ "payloadSchema": [
167
+ {
168
+ "name": "row.id",
169
+ "type": "string",
170
+ "required": true
171
+ },
172
+ {
173
+ "name": "row.name",
174
+ "type": "string",
175
+ "required": true
176
+ },
177
+ {
178
+ "name": "row.email",
179
+ "type": "string"
180
+ },
181
+ {
182
+ "name": "row.phone",
183
+ "type": "string"
184
+ },
185
+ {
186
+ "name": "row.leaseId",
187
+ "type": "string"
188
+ },
189
+ {
190
+ "name": "row.moveInDate",
191
+ "type": "string"
192
+ },
193
+ {
194
+ "name": "row.moveOutDate",
195
+ "type": "string"
196
+ },
197
+ {
198
+ "name": "row.status",
199
+ "type": "string"
200
+ },
201
+ {
202
+ "name": "row.notes",
203
+ "type": "string"
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "event": "TenantUpdateFailed",
209
+ "payloadSchema": [
210
+ {
211
+ "name": "error",
212
+ "type": "string"
213
+ },
214
+ {
215
+ "name": "code",
216
+ "type": "string"
217
+ }
218
+ ]
163
219
  }
164
220
  ],
165
221
  "stateMachine": {
@@ -233,6 +289,46 @@
233
289
  }
234
290
  ]
235
291
  },
292
+ {
293
+ "key": "SET_STATUS",
294
+ "name": "Set Status",
295
+ "payloadSchema": [
296
+ {
297
+ "name": "entityId",
298
+ "type": "string",
299
+ "required": true
300
+ },
301
+ {
302
+ "name": "newStatus",
303
+ "type": "string",
304
+ "required": true
305
+ }
306
+ ]
307
+ },
308
+ {
309
+ "key": "TenantUpdated",
310
+ "name": "Tenant updated",
311
+ "payloadSchema": [
312
+ {
313
+ "name": "row",
314
+ "type": "Tenant"
315
+ }
316
+ ]
317
+ },
318
+ {
319
+ "key": "TenantUpdateFailed",
320
+ "name": "Tenant update failed",
321
+ "payloadSchema": [
322
+ {
323
+ "name": "error",
324
+ "type": "string"
325
+ },
326
+ {
327
+ "name": "code",
328
+ "type": "string"
329
+ }
330
+ ]
331
+ },
236
332
  {
237
333
  "key": "CLOSE_TENANT",
238
334
  "name": "Close Tenant"
@@ -260,8 +356,8 @@
260
356
  "Tenant",
261
357
  {
262
358
  "emit": {
263
- "failure": "TenantLoadFailed",
264
- "success": "TenantLoaded"
359
+ "success": "TenantLoaded",
360
+ "failure": "TenantLoadFailed"
265
361
  }
266
362
  }
267
363
  ],
@@ -274,17 +370,17 @@
274
370
  "type": "spinner"
275
371
  },
276
372
  {
277
- "variant": "caption",
278
373
  "color": "muted",
374
+ "content": "Loading tenants…",
279
375
  "type": "typography",
280
- "content": "Loading tenants…"
376
+ "variant": "caption"
281
377
  }
282
378
  ],
283
379
  "align": "center",
380
+ "className": "py-12",
284
381
  "direction": "vertical",
285
- "type": "stack",
286
382
  "gap": "md",
287
- "className": "py-12"
383
+ "type": "stack"
288
384
  }
289
385
  ]
290
386
  ]
@@ -298,65 +394,65 @@
298
394
  "render-ui",
299
395
  "main",
300
396
  {
397
+ "gap": "md",
301
398
  "children": [
302
399
  {
303
400
  "type": "stack",
304
- "align": "center",
305
401
  "gap": "sm",
402
+ "align": "center",
306
403
  "children": [
307
404
  {
308
405
  "type": "icon",
309
406
  "name": "users"
310
407
  },
311
408
  {
312
- "variant": "h3",
313
409
  "content": "@config.title",
410
+ "variant": "h3",
314
411
  "type": "typography"
315
412
  }
316
413
  ],
317
414
  "direction": "horizontal"
318
415
  },
319
416
  {
417
+ "type": "simple-grid",
320
418
  "cols": 4.0,
321
419
  "children": [
322
420
  {
323
- "label": "Total tenants",
324
- "value": "@payload.data.length",
325
421
  "icon": "users",
326
- "type": "stat-display"
422
+ "value": "@payload.data.length",
423
+ "type": "stat-display",
424
+ "label": "Total tenants"
327
425
  },
328
426
  {
329
- "type": "stat-display",
330
- "value": "42",
331
427
  "icon": "check-circle",
428
+ "value": "42",
429
+ "type": "stat-display",
332
430
  "label": "Current"
333
431
  },
334
432
  {
335
- "icon": "user-plus",
336
- "value": "8",
337
433
  "type": "stat-display",
338
- "label": "Prospective"
434
+ "label": "Prospective",
435
+ "value": "8",
436
+ "icon": "user-plus"
339
437
  },
340
438
  {
341
- "icon": "user-minus",
342
439
  "type": "stat-display",
343
- "label": "Former",
344
- "value": "120"
440
+ "icon": "user-minus",
441
+ "value": "120",
442
+ "label": "Former"
345
443
  }
346
- ],
347
- "type": "simple-grid"
444
+ ]
348
445
  },
349
446
  {
350
447
  "type": "divider"
351
448
  },
352
449
  {
450
+ "fields": "@config.fields",
353
451
  "type": "data-grid",
354
452
  "entity": "@payload.data",
355
- "fields": "@config.fields",
356
453
  "itemActions": "@config.itemActions"
357
454
  }
358
455
  ],
359
- "gap": "md",
360
456
  "type": "stack",
361
457
  "direction": "vertical"
362
458
  }
@@ -373,9 +469,9 @@
373
469
  "main",
374
470
  {
375
471
  "title": "Failed to load tenants",
376
- "type": "alert",
472
+ "message": "@payload.error",
377
473
  "variant": "error",
378
- "message": "@payload.error"
474
+ "type": "alert"
379
475
  }
380
476
  ]
381
477
  ]
@@ -434,35 +530,36 @@
434
530
  "render-ui",
435
531
  "main",
436
532
  {
533
+ "type": "stack",
437
534
  "gap": "md",
438
535
  "children": [
439
536
  {
537
+ "align": "center",
538
+ "type": "stack",
539
+ "gap": "sm",
440
540
  "direction": "horizontal",
441
541
  "children": [
442
542
  {
443
- "label": "Back",
444
543
  "variant": "ghost",
445
- "action": "CLOSE_TENANT",
446
- "type": "button"
544
+ "type": "button",
545
+ "label": "Back",
546
+ "action": "CLOSE_TENANT"
447
547
  },
448
548
  {
449
- "name": "user",
450
- "type": "icon"
549
+ "type": "icon",
550
+ "name": "user"
451
551
  },
452
552
  {
553
+ "variant": "h3",
453
554
  "type": "typography",
454
- "content": "@entity.name",
455
- "variant": "h3"
555
+ "content": "@entity.name"
456
556
  },
457
557
  {
458
- "label": "@entity.status",
459
558
  "type": "badge",
559
+ "label": "@entity.status",
460
560
  "variant": "default"
461
561
  }
462
- ],
463
- "type": "stack",
464
- "align": "center",
465
- "gap": "sm"
562
+ ]
466
563
  },
467
564
  {
468
565
  "type": "divider"
@@ -470,22 +567,22 @@
470
567
  {
471
568
  "children": [
472
569
  {
570
+ "type": "stack",
571
+ "direction": "horizontal",
473
572
  "children": [
474
573
  {
475
- "variant": "caption",
476
- "content": "Email",
477
574
  "type": "typography",
575
+ "content": "Email",
576
+ "variant": "caption",
478
577
  "color": "muted"
479
578
  },
480
579
  {
481
- "content": "@entity.email",
580
+ "type": "typography",
482
581
  "variant": "body",
483
- "type": "typography"
582
+ "content": "@entity.email"
484
583
  }
485
584
  ],
486
- "gap": "md",
487
- "type": "stack",
488
- "direction": "horizontal"
585
+ "gap": "md"
489
586
  },
490
587
  {
491
588
  "direction": "horizontal",
@@ -493,10 +590,10 @@
493
590
  "gap": "md",
494
591
  "children": [
495
592
  {
593
+ "content": "Phone",
496
594
  "variant": "caption",
497
- "type": "typography",
498
595
  "color": "muted",
499
- "content": "Phone"
596
+ "type": "typography"
500
597
  },
501
598
  {
502
599
  "variant": "body",
@@ -506,39 +603,39 @@
506
603
  ]
507
604
  },
508
605
  {
606
+ "direction": "horizontal",
509
607
  "gap": "md",
510
608
  "children": [
511
609
  {
512
- "content": "Lease",
513
- "variant": "caption",
514
610
  "type": "typography",
611
+ "variant": "caption",
612
+ "content": "Lease",
515
613
  "color": "muted"
516
614
  },
517
615
  {
518
- "variant": "body",
616
+ "type": "typography",
519
617
  "content": "@entity.leaseId",
520
- "type": "typography"
618
+ "variant": "body"
521
619
  }
522
620
  ],
523
- "direction": "horizontal",
524
621
  "type": "stack"
525
622
  },
526
623
  {
527
- "type": "stack",
624
+ "direction": "horizontal",
528
625
  "children": [
529
626
  {
530
- "color": "muted",
531
627
  "type": "typography",
532
- "variant": "caption",
533
- "content": "Notes"
628
+ "color": "muted",
629
+ "content": "Notes",
630
+ "variant": "caption"
534
631
  },
535
632
  {
536
- "content": "@entity.notes",
537
633
  "type": "typography",
538
- "variant": "body"
634
+ "variant": "body",
635
+ "content": "@entity.notes"
539
636
  }
540
637
  ],
541
- "direction": "horizontal",
638
+ "type": "stack",
542
639
  "gap": "md"
543
640
  }
544
641
  ],
@@ -550,51 +647,50 @@
550
647
  "type": "divider"
551
648
  },
552
649
  {
553
- "cols": 2.0,
554
- "type": "simple-grid",
555
650
  "children": [
556
651
  {
557
652
  "icon": "calendar",
558
- "value": "@entity.moveInDate",
559
653
  "type": "stat-display",
654
+ "value": "@entity.moveInDate",
560
655
  "label": "Move-In"
561
656
  },
562
657
  {
658
+ "icon": "calendar",
563
659
  "label": "Move-Out",
564
- "value": "@entity.moveOutDate",
565
660
  "type": "stat-display",
566
- "icon": "calendar"
661
+ "value": "@entity.moveOutDate"
567
662
  }
568
- ]
663
+ ],
664
+ "cols": 2.0,
665
+ "type": "simple-grid"
569
666
  },
570
667
  {
571
668
  "gap": "sm",
669
+ "type": "stack",
572
670
  "children": [
573
671
  {
672
+ "label": "Activate",
673
+ "variant": "primary",
674
+ "type": "button",
675
+ "action": "ACTIVATE_TENANT",
574
676
  "actionPayload": {
575
677
  "id": "@entity.id"
576
- },
577
- "action": "ACTIVATE_TENANT",
578
- "type": "button",
579
- "label": "Activate",
580
- "variant": "primary"
678
+ }
581
679
  },
582
680
  {
583
- "action": "MOVE_OUT",
584
- "type": "button",
585
681
  "label": "Move Out",
586
- "variant": "danger",
682
+ "action": "MOVE_OUT",
587
683
  "actionPayload": {
588
684
  "id": "@entity.id"
589
- }
685
+ },
686
+ "type": "button",
687
+ "variant": "danger"
590
688
  }
591
689
  ],
592
- "type": "stack",
593
690
  "direction": "horizontal",
594
691
  "align": "center"
595
692
  }
596
693
  ],
597
- "type": "stack",
598
694
  "direction": "vertical"
599
695
  }
600
696
  ]
@@ -615,8 +711,8 @@
615
711
  "Tenant",
616
712
  {
617
713
  "emit": {
618
- "success": "TenantLoaded",
619
- "failure": "TenantLoadFailed"
714
+ "failure": "TenantLoadFailed",
715
+ "success": "TenantLoaded"
620
716
  }
621
717
  }
622
718
  ],
@@ -624,22 +720,106 @@
624
720
  "render-ui",
625
721
  "main",
626
722
  {
627
- "direction": "vertical",
628
723
  "children": [
629
724
  {
630
725
  "type": "spinner"
631
726
  },
632
727
  {
633
- "type": "typography",
634
728
  "variant": "caption",
729
+ "type": "typography",
635
730
  "color": "muted",
636
731
  "content": "Recording move-out…"
637
732
  }
638
733
  ],
734
+ "align": "center",
639
735
  "type": "stack",
736
+ "gap": "md",
737
+ "direction": "vertical",
738
+ "className": "py-12"
739
+ }
740
+ ]
741
+ ]
742
+ },
743
+ {
744
+ "from": "browsing",
745
+ "to": "loading",
746
+ "event": "SET_STATUS",
747
+ "effects": [
748
+ [
749
+ "set",
750
+ "@entity.id",
751
+ "@payload.entityId"
752
+ ],
753
+ [
754
+ "set",
755
+ "@entity.status",
756
+ "@payload.newStatus"
757
+ ],
758
+ [
759
+ "persist",
760
+ "update",
761
+ "Tenant",
762
+ "@entity",
763
+ {
764
+ "emit": {
765
+ "failure": "TenantUpdateFailed",
766
+ "success": "TenantUpdated"
767
+ }
768
+ }
769
+ ],
770
+ [
771
+ "render-ui",
772
+ "main",
773
+ {
640
774
  "className": "py-12",
641
775
  "gap": "md",
642
- "align": "center"
776
+ "align": "center",
777
+ "children": [
778
+ {
779
+ "type": "spinner"
780
+ },
781
+ {
782
+ "type": "typography",
783
+ "content": "Updating tenant status…",
784
+ "variant": "caption",
785
+ "color": "muted"
786
+ }
787
+ ],
788
+ "direction": "vertical",
789
+ "type": "stack"
790
+ }
791
+ ]
792
+ ]
793
+ },
794
+ {
795
+ "from": "browsing",
796
+ "to": "loading",
797
+ "event": "TenantUpdated",
798
+ "effects": [
799
+ [
800
+ "fetch",
801
+ "Tenant",
802
+ {
803
+ "emit": {
804
+ "success": "TenantLoaded",
805
+ "failure": "TenantLoadFailed"
806
+ }
807
+ }
808
+ ]
809
+ ]
810
+ },
811
+ {
812
+ "from": "browsing",
813
+ "to": "browsing",
814
+ "event": "TenantUpdateFailed",
815
+ "effects": [
816
+ [
817
+ "render-ui",
818
+ "main",
819
+ {
820
+ "type": "alert",
821
+ "variant": "error",
822
+ "message": "@payload.error"
643
823
  }
644
824
  ]
645
825
  ]
@@ -663,22 +843,22 @@
663
843
  "render-ui",
664
844
  "main",
665
845
  {
846
+ "className": "py-12",
847
+ "align": "center",
666
848
  "children": [
667
849
  {
668
850
  "type": "spinner"
669
851
  },
670
852
  {
671
- "content": "Loading tenants…",
672
- "type": "typography",
673
853
  "color": "muted",
674
- "variant": "caption"
854
+ "type": "typography",
855
+ "variant": "caption",
856
+ "content": "Loading tenants…"
675
857
  }
676
858
  ],
677
- "align": "center",
678
- "direction": "vertical",
679
859
  "type": "stack",
680
860
  "gap": "md",
681
- "className": "py-12"
861
+ "direction": "vertical"
682
862
  }
683
863
  ]
684
864
  ]
@@ -707,22 +887,22 @@
707
887
  "render-ui",
708
888
  "main",
709
889
  {
710
- "align": "center",
711
- "className": "py-12",
712
890
  "children": [
713
891
  {
714
892
  "type": "spinner"
715
893
  },
716
894
  {
717
- "content": "Activating tenant…",
718
- "variant": "caption",
719
895
  "type": "typography",
720
- "color": "muted"
896
+ "variant": "caption",
897
+ "color": "muted",
898
+ "content": "Activating tenant…"
721
899
  }
722
900
  ],
723
- "type": "stack",
901
+ "direction": "vertical",
724
902
  "gap": "md",
725
- "direction": "vertical"
903
+ "type": "stack",
904
+ "align": "center",
905
+ "className": "py-12"
726
906
  }
727
907
  ]
728
908
  ]
@@ -742,8 +922,8 @@
742
922
  "Tenant",
743
923
  {
744
924
  "emit": {
745
- "success": "TenantLoaded",
746
- "failure": "TenantLoadFailed"
925
+ "failure": "TenantLoadFailed",
926
+ "success": "TenantLoaded"
747
927
  }
748
928
  }
749
929
  ],
@@ -751,11 +931,7 @@
751
931
  "render-ui",
752
932
  "main",
753
933
  {
754
- "direction": "vertical",
755
- "align": "center",
756
- "type": "stack",
757
934
  "gap": "md",
758
- "className": "py-12",
759
935
  "children": [
760
936
  {
761
937
  "type": "spinner"
@@ -763,10 +939,14 @@
763
939
  {
764
940
  "color": "muted",
765
941
  "variant": "caption",
766
- "content": "Recording move-out…",
767
- "type": "typography"
942
+ "type": "typography",
943
+ "content": "Recording move-out…"
768
944
  }
769
- ]
945
+ ],
946
+ "align": "center",
947
+ "type": "stack",
948
+ "className": "py-12",
949
+ "direction": "vertical"
770
950
  }
771
951
  ]
772
952
  ]
@@ -781,8 +961,8 @@
781
961
  "Tenant",
782
962
  {
783
963
  "emit": {
784
- "failure": "TenantLoadFailed",
785
- "success": "TenantLoaded"
964
+ "success": "TenantLoaded",
965
+ "failure": "TenantLoadFailed"
786
966
  }
787
967
  }
788
968
  ],
@@ -790,8 +970,8 @@
790
970
  "render-ui",
791
971
  "main",
792
972
  {
793
- "size": "sm",
794
- "type": "spinner"
973
+ "type": "spinner",
974
+ "size": "sm"
795
975
  }
796
976
  ]
797
977
  ]
@@ -799,30 +979,57 @@
799
979
  ]
800
980
  },
801
981
  "config": {
802
- "title": {
982
+ "petPolicy": {
803
983
  "type": "string",
804
- "default": "Tenants",
805
- "label": "Section title",
806
- "description": "Heading shown above the tenant directory",
984
+ "default": "no-pets",
985
+ "label": "Pet policy",
986
+ "description": "Default pet policy enforced for new tenants.",
987
+ "tier": "customization",
988
+ "values": [
989
+ "no-pets",
990
+ "cats-only",
991
+ "dogs-only",
992
+ "all"
993
+ ]
994
+ },
995
+ "inspectionFrequencyMonths": {
996
+ "type": "number",
997
+ "default": 12.0,
998
+ "label": "Inspection cadence (months)",
999
+ "description": "Months between scheduled unit inspections.",
1000
+ "tier": "advanced"
1001
+ },
1002
+ "securityDepositMonths": {
1003
+ "type": "number",
1004
+ "default": 1.0,
1005
+ "label": "Security deposit (months)",
1006
+ "description": "Months of rent required as security deposit.",
1007
+ "tier": "customization"
1008
+ },
1009
+ "leaseRenewalNoticeDays": {
1010
+ "type": "number",
1011
+ "default": 60.0,
1012
+ "label": "Renewal notice (days)",
1013
+ "description": "Days before lease end when a renewal nudge fires for this tenant.",
807
1014
  "tier": "customization"
808
1015
  },
809
1016
  "fields": {
810
1017
  "type": "[FieldSpec]",
811
1018
  "default": [
812
1019
  {
813
- "label": "Name",
1020
+ "variant": "h4",
814
1021
  "name": "name",
815
- "variant": "h4"
1022
+ "label": "Name"
816
1023
  },
817
1024
  {
818
- "label": "Email",
1025
+ "name": "email",
819
1026
  "variant": "body",
820
- "name": "email"
1027
+ "label": "Email"
821
1028
  },
822
1029
  {
1030
+ "name": "phone",
823
1031
  "label": "Phone",
824
- "variant": "caption",
825
- "name": "phone"
1032
+ "variant": "caption"
826
1033
  },
827
1034
  {
828
1035
  "variant": "badge",
@@ -830,9 +1037,9 @@
830
1037
  "label": "Status"
831
1038
  },
832
1039
  {
1040
+ "name": "moveInDate",
833
1041
  "label": "Move-In",
834
- "variant": "caption",
835
- "name": "moveInDate"
1042
+ "variant": "caption"
836
1043
  }
837
1044
  ],
838
1045
  "label": "Columns to show",
@@ -841,40 +1048,40 @@
841
1048
  "items": {
842
1049
  "type": "object",
843
1050
  "properties": {
844
- "label": {
845
- "name": "label",
1051
+ "key": {
1052
+ "name": "key",
846
1053
  "type": "string",
847
1054
  "required": false
848
1055
  },
849
- "header": {
850
- "name": "header",
1056
+ "icon": {
1057
+ "name": "icon",
851
1058
  "type": "string",
852
1059
  "required": false
853
1060
  },
854
- "icon": {
855
- "name": "icon",
1061
+ "variant": {
1062
+ "name": "variant",
856
1063
  "type": "string",
857
1064
  "required": false
858
1065
  },
859
- "key": {
860
- "name": "key",
1066
+ "label": {
1067
+ "name": "label",
861
1068
  "type": "string",
862
1069
  "required": false
863
1070
  },
864
- "name": {
865
- "name": "name",
1071
+ "header": {
1072
+ "name": "header",
866
1073
  "type": "string",
867
- "required": true
1074
+ "required": false
868
1075
  },
869
1076
  "format": {
870
1077
  "name": "format",
871
1078
  "type": "string",
872
1079
  "required": false
873
1080
  },
874
- "variant": {
875
- "name": "variant",
1081
+ "name": {
1082
+ "name": "name",
876
1083
  "type": "string",
877
- "required": false
1084
+ "required": true
878
1085
  }
879
1086
  }
880
1087
  }
@@ -883,15 +1090,15 @@
883
1090
  "type": "[ItemAction]",
884
1091
  "default": [
885
1092
  {
886
- "icon": "arrow-right",
1093
+ "label": "Open",
887
1094
  "variant": "primary",
888
1095
  "event": "OPEN_TENANT",
889
- "label": "Open"
1096
+ "icon": "arrow-right"
890
1097
  },
891
1098
  {
1099
+ "event": "MOVE_OUT",
892
1100
  "variant": "danger",
893
- "label": "Move Out",
894
- "event": "MOVE_OUT"
1101
+ "label": "Move Out"
895
1102
  }
896
1103
  ],
897
1104
  "label": "Row actions",
@@ -900,28 +1107,49 @@
900
1107
  "items": {
901
1108
  "type": "object",
902
1109
  "properties": {
903
- "icon": {
904
- "name": "icon",
1110
+ "label": {
1111
+ "name": "label",
905
1112
  "type": "string",
906
- "required": false
1113
+ "required": true
907
1114
  },
908
1115
  "variant": {
909
1116
  "name": "variant",
910
1117
  "type": "string",
911
1118
  "required": false
912
1119
  },
913
- "label": {
914
- "name": "label",
915
- "type": "string",
916
- "required": true
917
- },
918
1120
  "event": {
919
1121
  "name": "event",
920
1122
  "type": "string",
921
1123
  "required": true
1124
+ },
1125
+ "icon": {
1126
+ "name": "icon",
1127
+ "type": "string",
1128
+ "required": false
922
1129
  }
923
1130
  }
924
1131
  }
1132
+ },
1133
+ "autoRenewEnabled": {
1134
+ "type": "boolean",
1135
+ "default": false,
1136
+ "label": "Auto-renew",
1137
+ "description": "Roll over the tenant's lease at term without an explicit non-renew notice.",
1138
+ "tier": "customization"
1139
+ },
1140
+ "lateRentGraceDays": {
1141
+ "type": "number",
1142
+ "default": 5.0,
1143
+ "label": "Late rent grace (days)",
1144
+ "description": "Days after rent due before a tenant rolls into a late status.",
1145
+ "tier": "customization"
1146
+ },
1147
+ "title": {
1148
+ "type": "string",
1149
+ "default": "Tenants",
1150
+ "label": "Section title",
1151
+ "description": "Heading shown above the tenant directory",
1152
+ "tier": "customization"
925
1153
  }
926
1154
  },
927
1155
  "scope": "collection"
@@ -940,4 +1168,4 @@
940
1168
  ]
941
1169
  }
942
1170
  ]
943
- }
1171
+ }