@powerhousedao/contributor-billing 0.1.42 → 0.1.43

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 (734) hide show
  1. package/dist/document-models/account-transactions/actions.d.ts.map +1 -1
  2. package/dist/document-models/account-transactions/gen/account/actions.d.ts +1 -1
  3. package/dist/document-models/account-transactions/gen/account/actions.d.ts.map +1 -1
  4. package/dist/document-models/account-transactions/gen/account/actions.js +1 -1
  5. package/dist/document-models/account-transactions/gen/account/operations.d.ts +2 -2
  6. package/dist/document-models/account-transactions/gen/account/operations.d.ts.map +1 -1
  7. package/dist/document-models/account-transactions/gen/account/operations.js +0 -2
  8. package/dist/document-models/account-transactions/gen/budgets/actions.d.ts +1 -1
  9. package/dist/document-models/account-transactions/gen/budgets/actions.d.ts.map +1 -1
  10. package/dist/document-models/account-transactions/gen/budgets/actions.js +1 -1
  11. package/dist/document-models/account-transactions/gen/budgets/operations.d.ts +2 -2
  12. package/dist/document-models/account-transactions/gen/budgets/operations.d.ts.map +1 -1
  13. package/dist/document-models/account-transactions/gen/budgets/operations.js +0 -2
  14. package/dist/document-models/account-transactions/gen/document-model.js +45 -45
  15. package/dist/document-models/account-transactions/gen/document-schema.d.ts +21 -151
  16. package/dist/document-models/account-transactions/gen/document-schema.d.ts.map +1 -1
  17. package/dist/document-models/account-transactions/gen/reducer.d.ts.map +1 -1
  18. package/dist/document-models/account-transactions/gen/reducer.js +16 -8
  19. package/dist/document-models/account-transactions/gen/schema/types.d.ts +13 -1
  20. package/dist/document-models/account-transactions/gen/schema/types.d.ts.map +1 -1
  21. package/dist/document-models/account-transactions/gen/schema/zod.d.ts +11 -5
  22. package/dist/document-models/account-transactions/gen/schema/zod.d.ts.map +1 -1
  23. package/dist/document-models/account-transactions/gen/schema/zod.js +18 -18
  24. package/dist/document-models/account-transactions/gen/transactions/actions.d.ts +1 -1
  25. package/dist/document-models/account-transactions/gen/transactions/actions.d.ts.map +1 -1
  26. package/dist/document-models/account-transactions/gen/transactions/actions.js +1 -1
  27. package/dist/document-models/account-transactions/gen/transactions/operations.d.ts +2 -2
  28. package/dist/document-models/account-transactions/gen/transactions/operations.d.ts.map +1 -1
  29. package/dist/document-models/account-transactions/gen/transactions/operations.js +0 -2
  30. package/dist/document-models/account-transactions/gen/types.d.ts.map +1 -1
  31. package/dist/document-models/account-transactions/hooks.d.ts +5 -2
  32. package/dist/document-models/account-transactions/hooks.d.ts.map +1 -1
  33. package/dist/document-models/account-transactions/hooks.js +3 -4
  34. package/dist/document-models/account-transactions/index.d.ts +0 -4
  35. package/dist/document-models/account-transactions/index.d.ts.map +1 -1
  36. package/dist/document-models/account-transactions/index.js +0 -4
  37. package/dist/document-models/account-transactions/module.d.ts.map +1 -1
  38. package/dist/document-models/account-transactions/module.js +1 -0
  39. package/dist/document-models/account-transactions/tests/account.test.d.ts +2 -0
  40. package/dist/document-models/account-transactions/tests/account.test.d.ts.map +1 -0
  41. package/dist/document-models/account-transactions/tests/account.test.js +15 -0
  42. package/dist/document-models/account-transactions/tests/budgets.test.d.ts +2 -0
  43. package/dist/document-models/account-transactions/tests/budgets.test.d.ts.map +1 -0
  44. package/dist/document-models/account-transactions/tests/budgets.test.js +35 -0
  45. package/dist/document-models/account-transactions/tests/document-model.test.d.ts +10 -0
  46. package/dist/document-models/account-transactions/tests/document-model.test.d.ts.map +1 -0
  47. package/dist/document-models/account-transactions/tests/document-model.test.js +104 -0
  48. package/dist/document-models/account-transactions/tests/transactions.test.d.ts +2 -0
  49. package/dist/document-models/account-transactions/tests/transactions.test.d.ts.map +1 -0
  50. package/dist/document-models/account-transactions/tests/transactions.test.js +45 -0
  51. package/dist/document-models/accounts/actions.d.ts.map +1 -1
  52. package/dist/document-models/accounts/gen/accounts/actions.d.ts +1 -1
  53. package/dist/document-models/accounts/gen/accounts/actions.d.ts.map +1 -1
  54. package/dist/document-models/accounts/gen/accounts/actions.js +1 -1
  55. package/dist/document-models/accounts/gen/accounts/operations.d.ts +2 -2
  56. package/dist/document-models/accounts/gen/accounts/operations.d.ts.map +1 -1
  57. package/dist/document-models/accounts/gen/accounts/operations.js +0 -2
  58. package/dist/document-models/accounts/gen/document-model.js +2 -2
  59. package/dist/document-models/accounts/gen/document-schema.d.ts +15 -113
  60. package/dist/document-models/accounts/gen/document-schema.d.ts.map +1 -1
  61. package/dist/document-models/accounts/gen/reducer.d.ts.map +1 -1
  62. package/dist/document-models/accounts/gen/reducer.js +8 -4
  63. package/dist/document-models/accounts/gen/schema/types.d.ts +13 -1
  64. package/dist/document-models/accounts/gen/schema/types.d.ts.map +1 -1
  65. package/dist/document-models/accounts/gen/schema/zod.d.ts +25 -7
  66. package/dist/document-models/accounts/gen/schema/zod.d.ts.map +1 -1
  67. package/dist/document-models/accounts/gen/schema/zod.js +12 -12
  68. package/dist/document-models/accounts/gen/types.d.ts.map +1 -1
  69. package/dist/document-models/accounts/hooks.d.ts +5 -2
  70. package/dist/document-models/accounts/hooks.d.ts.map +1 -1
  71. package/dist/document-models/accounts/hooks.js +3 -4
  72. package/dist/document-models/accounts/index.d.ts +0 -4
  73. package/dist/document-models/accounts/index.d.ts.map +1 -1
  74. package/dist/document-models/accounts/index.js +0 -4
  75. package/dist/document-models/accounts/module.d.ts.map +1 -1
  76. package/dist/document-models/accounts/module.js +1 -0
  77. package/dist/document-models/accounts/tests/accounts.test.d.ts +2 -0
  78. package/dist/document-models/accounts/tests/accounts.test.d.ts.map +1 -0
  79. package/dist/document-models/accounts/tests/accounts.test.js +45 -0
  80. package/dist/document-models/accounts/tests/document-model.test.d.ts +10 -0
  81. package/dist/document-models/accounts/tests/document-model.test.d.ts.map +1 -0
  82. package/dist/document-models/accounts/tests/document-model.test.js +104 -0
  83. package/dist/document-models/billing-statement/actions.d.ts.map +1 -1
  84. package/dist/document-models/billing-statement/gen/document-model.js +41 -41
  85. package/dist/document-models/billing-statement/gen/document-schema.d.ts +39 -265
  86. package/dist/document-models/billing-statement/gen/document-schema.d.ts.map +1 -1
  87. package/dist/document-models/billing-statement/gen/general/actions.d.ts +1 -1
  88. package/dist/document-models/billing-statement/gen/general/actions.d.ts.map +1 -1
  89. package/dist/document-models/billing-statement/gen/general/actions.js +1 -1
  90. package/dist/document-models/billing-statement/gen/general/operations.d.ts +2 -2
  91. package/dist/document-models/billing-statement/gen/general/operations.d.ts.map +1 -1
  92. package/dist/document-models/billing-statement/gen/general/operations.js +0 -2
  93. package/dist/document-models/billing-statement/gen/line-items/actions.d.ts +1 -1
  94. package/dist/document-models/billing-statement/gen/line-items/actions.d.ts.map +1 -1
  95. package/dist/document-models/billing-statement/gen/line-items/actions.js +1 -1
  96. package/dist/document-models/billing-statement/gen/line-items/operations.d.ts +2 -2
  97. package/dist/document-models/billing-statement/gen/line-items/operations.d.ts.map +1 -1
  98. package/dist/document-models/billing-statement/gen/line-items/operations.js +0 -2
  99. package/dist/document-models/billing-statement/gen/reducer.d.ts.map +1 -1
  100. package/dist/document-models/billing-statement/gen/reducer.js +14 -7
  101. package/dist/document-models/billing-statement/gen/schema/types.d.ts +13 -1
  102. package/dist/document-models/billing-statement/gen/schema/types.d.ts.map +1 -1
  103. package/dist/document-models/billing-statement/gen/schema/zod.d.ts +29 -7
  104. package/dist/document-models/billing-statement/gen/schema/zod.d.ts.map +1 -1
  105. package/dist/document-models/billing-statement/gen/schema/zod.js +10 -10
  106. package/dist/document-models/billing-statement/gen/tags/actions.d.ts +1 -1
  107. package/dist/document-models/billing-statement/gen/tags/actions.d.ts.map +1 -1
  108. package/dist/document-models/billing-statement/gen/tags/actions.js +1 -1
  109. package/dist/document-models/billing-statement/gen/tags/operations.d.ts +2 -2
  110. package/dist/document-models/billing-statement/gen/tags/operations.d.ts.map +1 -1
  111. package/dist/document-models/billing-statement/gen/tags/operations.js +0 -2
  112. package/dist/document-models/billing-statement/gen/types.d.ts.map +1 -1
  113. package/dist/document-models/billing-statement/hooks.d.ts +5 -2
  114. package/dist/document-models/billing-statement/hooks.d.ts.map +1 -1
  115. package/dist/document-models/billing-statement/hooks.js +3 -4
  116. package/dist/document-models/billing-statement/index.d.ts +0 -4
  117. package/dist/document-models/billing-statement/index.d.ts.map +1 -1
  118. package/dist/document-models/billing-statement/index.js +0 -4
  119. package/dist/document-models/billing-statement/module.d.ts.map +1 -1
  120. package/dist/document-models/billing-statement/module.js +1 -0
  121. package/dist/document-models/billing-statement/tests/document-model.test.d.ts +10 -0
  122. package/dist/document-models/billing-statement/tests/document-model.test.d.ts.map +1 -0
  123. package/dist/document-models/billing-statement/tests/document-model.test.js +104 -0
  124. package/dist/document-models/billing-statement/tests/general.test.d.ts +2 -0
  125. package/dist/document-models/billing-statement/tests/general.test.d.ts.map +1 -0
  126. package/dist/document-models/billing-statement/tests/general.test.js +35 -0
  127. package/dist/document-models/billing-statement/tests/line-items.test.d.ts +2 -0
  128. package/dist/document-models/billing-statement/tests/line-items.test.d.ts.map +1 -0
  129. package/dist/document-models/billing-statement/tests/line-items.test.js +35 -0
  130. package/dist/document-models/billing-statement/tests/tags.test.d.ts +2 -0
  131. package/dist/document-models/billing-statement/tests/tags.test.d.ts.map +1 -0
  132. package/dist/document-models/billing-statement/tests/tags.test.js +15 -0
  133. package/dist/document-models/document-models.js +4 -4
  134. package/dist/document-models/expense-report/actions.d.ts +1 -0
  135. package/dist/document-models/expense-report/actions.d.ts.map +1 -1
  136. package/dist/document-models/expense-report/gen/document-model.d.ts.map +1 -1
  137. package/dist/document-models/expense-report/gen/document-model.js +14 -3
  138. package/dist/document-models/expense-report/gen/document-schema.d.ts +36 -208
  139. package/dist/document-models/expense-report/gen/document-schema.d.ts.map +1 -1
  140. package/dist/document-models/expense-report/gen/ph-factories.d.ts.map +1 -1
  141. package/dist/document-models/expense-report/gen/ph-factories.js +2 -0
  142. package/dist/document-models/expense-report/gen/reducer.d.ts.map +1 -1
  143. package/dist/document-models/expense-report/gen/reducer.js +40 -18
  144. package/dist/document-models/expense-report/gen/schema/types.d.ts +19 -1
  145. package/dist/document-models/expense-report/gen/schema/types.d.ts.map +1 -1
  146. package/dist/document-models/expense-report/gen/schema/zod.d.ts +15 -6
  147. package/dist/document-models/expense-report/gen/schema/zod.d.ts.map +1 -1
  148. package/dist/document-models/expense-report/gen/schema/zod.js +37 -29
  149. package/dist/document-models/expense-report/gen/types.d.ts.map +1 -1
  150. package/dist/document-models/expense-report/gen/utils.d.ts.map +1 -1
  151. package/dist/document-models/expense-report/gen/utils.js +2 -0
  152. package/dist/document-models/expense-report/gen/wallet/actions.d.ts +7 -3
  153. package/dist/document-models/expense-report/gen/wallet/actions.d.ts.map +1 -1
  154. package/dist/document-models/expense-report/gen/wallet/actions.js +1 -1
  155. package/dist/document-models/expense-report/gen/wallet/creators.d.ts +3 -2
  156. package/dist/document-models/expense-report/gen/wallet/creators.d.ts.map +1 -1
  157. package/dist/document-models/expense-report/gen/wallet/creators.js +2 -1
  158. package/dist/document-models/expense-report/gen/wallet/operations.d.ts +3 -2
  159. package/dist/document-models/expense-report/gen/wallet/operations.d.ts.map +1 -1
  160. package/dist/document-models/expense-report/gen/wallet/operations.js +0 -2
  161. package/dist/document-models/expense-report/hooks.d.ts +5 -2
  162. package/dist/document-models/expense-report/hooks.d.ts.map +1 -1
  163. package/dist/document-models/expense-report/hooks.js +3 -4
  164. package/dist/document-models/expense-report/index.d.ts +0 -4
  165. package/dist/document-models/expense-report/index.d.ts.map +1 -1
  166. package/dist/document-models/expense-report/index.js +0 -4
  167. package/dist/document-models/expense-report/module.d.ts.map +1 -1
  168. package/dist/document-models/expense-report/module.js +1 -0
  169. package/dist/document-models/expense-report/src/reducers/wallet.d.ts.map +1 -1
  170. package/dist/document-models/expense-report/src/reducers/wallet.js +9 -0
  171. package/dist/document-models/expense-report/tests/document-model.test.d.ts +10 -0
  172. package/dist/document-models/expense-report/tests/document-model.test.d.ts.map +1 -0
  173. package/dist/document-models/expense-report/tests/document-model.test.js +104 -0
  174. package/dist/document-models/expense-report/tests/wallet.test.d.ts +2 -0
  175. package/dist/document-models/expense-report/tests/wallet.test.d.ts.map +1 -0
  176. package/dist/document-models/expense-report/tests/wallet.test.js +175 -0
  177. package/dist/document-models/index.d.ts +3 -7
  178. package/dist/document-models/index.d.ts.map +1 -1
  179. package/dist/document-models/index.js +3 -7
  180. package/dist/document-models/invoice/actions.d.ts.map +1 -1
  181. package/dist/document-models/invoice/gen/document-model.js +146 -146
  182. package/dist/document-models/invoice/gen/document-schema.d.ts +66 -436
  183. package/dist/document-models/invoice/gen/document-schema.d.ts.map +1 -1
  184. package/dist/document-models/invoice/gen/general/actions.d.ts +1 -1
  185. package/dist/document-models/invoice/gen/general/actions.d.ts.map +1 -1
  186. package/dist/document-models/invoice/gen/general/actions.js +1 -1
  187. package/dist/document-models/invoice/gen/general/operations.d.ts +2 -2
  188. package/dist/document-models/invoice/gen/general/operations.d.ts.map +1 -1
  189. package/dist/document-models/invoice/gen/general/operations.js +0 -2
  190. package/dist/document-models/invoice/gen/items/actions.d.ts +1 -1
  191. package/dist/document-models/invoice/gen/items/actions.d.ts.map +1 -1
  192. package/dist/document-models/invoice/gen/items/actions.js +1 -1
  193. package/dist/document-models/invoice/gen/items/operations.d.ts +2 -2
  194. package/dist/document-models/invoice/gen/items/operations.d.ts.map +1 -1
  195. package/dist/document-models/invoice/gen/items/operations.js +0 -2
  196. package/dist/document-models/invoice/gen/parties/actions.d.ts +1 -1
  197. package/dist/document-models/invoice/gen/parties/actions.d.ts.map +1 -1
  198. package/dist/document-models/invoice/gen/parties/actions.js +1 -1
  199. package/dist/document-models/invoice/gen/parties/operations.d.ts +2 -2
  200. package/dist/document-models/invoice/gen/parties/operations.d.ts.map +1 -1
  201. package/dist/document-models/invoice/gen/parties/operations.js +0 -2
  202. package/dist/document-models/invoice/gen/reducer.d.ts.map +1 -1
  203. package/dist/document-models/invoice/gen/reducer.js +56 -28
  204. package/dist/document-models/invoice/gen/schema/types.d.ts +9 -1
  205. package/dist/document-models/invoice/gen/schema/types.d.ts.map +1 -1
  206. package/dist/document-models/invoice/gen/schema/zod.d.ts +42 -21
  207. package/dist/document-models/invoice/gen/schema/zod.d.ts.map +1 -1
  208. package/dist/document-models/invoice/gen/schema/zod.js +67 -67
  209. package/dist/document-models/invoice/gen/transitions/actions.d.ts +1 -1
  210. package/dist/document-models/invoice/gen/transitions/actions.d.ts.map +1 -1
  211. package/dist/document-models/invoice/gen/transitions/actions.js +1 -1
  212. package/dist/document-models/invoice/gen/transitions/operations.d.ts +2 -2
  213. package/dist/document-models/invoice/gen/transitions/operations.d.ts.map +1 -1
  214. package/dist/document-models/invoice/gen/transitions/operations.js +0 -2
  215. package/dist/document-models/invoice/gen/types.d.ts.map +1 -1
  216. package/dist/document-models/invoice/hooks.d.ts +5 -2
  217. package/dist/document-models/invoice/hooks.d.ts.map +1 -1
  218. package/dist/document-models/invoice/hooks.js +3 -4
  219. package/dist/document-models/invoice/index.d.ts +0 -4
  220. package/dist/document-models/invoice/index.d.ts.map +1 -1
  221. package/dist/document-models/invoice/index.js +0 -4
  222. package/dist/document-models/invoice/module.d.ts.map +1 -1
  223. package/dist/document-models/invoice/module.js +1 -0
  224. package/dist/document-models/invoice/tests/document-model.test.d.ts +10 -0
  225. package/dist/document-models/invoice/tests/document-model.test.d.ts.map +1 -0
  226. package/dist/document-models/invoice/tests/document-model.test.js +104 -0
  227. package/dist/document-models/invoice/tests/general.test.d.ts +2 -0
  228. package/dist/document-models/invoice/tests/general.test.d.ts.map +1 -0
  229. package/dist/document-models/invoice/tests/general.test.js +55 -0
  230. package/dist/document-models/invoice/tests/items.test.d.ts +2 -0
  231. package/dist/document-models/invoice/tests/items.test.d.ts.map +1 -0
  232. package/dist/document-models/invoice/tests/items.test.js +55 -0
  233. package/dist/document-models/invoice/tests/parties.test.d.ts +2 -0
  234. package/dist/document-models/invoice/tests/parties.test.d.ts.map +1 -0
  235. package/dist/document-models/invoice/tests/parties.test.js +65 -0
  236. package/dist/document-models/invoice/tests/transitions.test.d.ts +2 -0
  237. package/dist/document-models/invoice/tests/transitions.test.d.ts.map +1 -0
  238. package/dist/document-models/invoice/tests/transitions.test.js +125 -0
  239. package/dist/document-models/resource-template/actions.d.ts +3 -0
  240. package/dist/document-models/resource-template/actions.d.ts.map +1 -1
  241. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts +1 -1
  242. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts.map +1 -1
  243. package/dist/document-models/resource-template/gen/audience-management/actions.js +1 -1
  244. package/dist/document-models/resource-template/gen/audience-management/error.d.ts.map +1 -1
  245. package/dist/document-models/resource-template/gen/audience-management/error.js +2 -6
  246. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts +2 -2
  247. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts.map +1 -1
  248. package/dist/document-models/resource-template/gen/audience-management/operations.js +0 -2
  249. package/dist/document-models/resource-template/gen/document-model.d.ts.map +1 -1
  250. package/dist/document-models/resource-template/gen/document-model.js +61 -28
  251. package/dist/document-models/resource-template/gen/document-schema.d.ts +60 -379
  252. package/dist/document-models/resource-template/gen/document-schema.d.ts.map +1 -1
  253. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts +1 -1
  254. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts.map +1 -1
  255. package/dist/document-models/resource-template/gen/facet-targeting/actions.js +1 -1
  256. package/dist/document-models/resource-template/gen/facet-targeting/error.d.ts.map +1 -1
  257. package/dist/document-models/resource-template/gen/facet-targeting/error.js +3 -9
  258. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts +2 -2
  259. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts.map +1 -1
  260. package/dist/document-models/resource-template/gen/facet-targeting/operations.js +0 -2
  261. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts +15 -3
  262. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts.map +1 -1
  263. package/dist/document-models/resource-template/gen/option-group-management/actions.js +1 -1
  264. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts +5 -2
  265. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts.map +1 -1
  266. package/dist/document-models/resource-template/gen/option-group-management/creators.js +4 -1
  267. package/dist/document-models/resource-template/gen/option-group-management/error.d.ts.map +1 -1
  268. package/dist/document-models/resource-template/gen/option-group-management/error.js +3 -9
  269. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts +5 -2
  270. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts.map +1 -1
  271. package/dist/document-models/resource-template/gen/option-group-management/operations.js +0 -2
  272. package/dist/document-models/resource-template/gen/ph-factories.d.ts.map +1 -1
  273. package/dist/document-models/resource-template/gen/ph-factories.js +1 -0
  274. package/dist/document-models/resource-template/gen/reducer.d.ts.map +1 -1
  275. package/dist/document-models/resource-template/gen/reducer.js +56 -21
  276. package/dist/document-models/resource-template/gen/schema/types.d.ts +34 -3
  277. package/dist/document-models/resource-template/gen/schema/types.d.ts.map +1 -1
  278. package/dist/document-models/resource-template/gen/schema/zod.d.ts +14 -5
  279. package/dist/document-models/resource-template/gen/schema/zod.d.ts.map +1 -1
  280. package/dist/document-models/resource-template/gen/schema/zod.js +43 -15
  281. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts +1 -1
  282. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts.map +1 -1
  283. package/dist/document-models/resource-template/gen/service-category-management/actions.js +1 -1
  284. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts +2 -2
  285. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts.map +1 -1
  286. package/dist/document-models/resource-template/gen/service-category-management/operations.js +0 -2
  287. package/dist/document-models/resource-template/gen/service-management/actions.d.ts +1 -1
  288. package/dist/document-models/resource-template/gen/service-management/actions.d.ts.map +1 -1
  289. package/dist/document-models/resource-template/gen/service-management/actions.js +1 -1
  290. package/dist/document-models/resource-template/gen/service-management/error.d.ts.map +1 -1
  291. package/dist/document-models/resource-template/gen/service-management/error.js +5 -17
  292. package/dist/document-models/resource-template/gen/service-management/operations.d.ts +2 -2
  293. package/dist/document-models/resource-template/gen/service-management/operations.d.ts.map +1 -1
  294. package/dist/document-models/resource-template/gen/service-management/operations.js +0 -2
  295. package/dist/document-models/resource-template/gen/template-management/actions.d.ts +1 -1
  296. package/dist/document-models/resource-template/gen/template-management/actions.d.ts.map +1 -1
  297. package/dist/document-models/resource-template/gen/template-management/actions.js +1 -1
  298. package/dist/document-models/resource-template/gen/template-management/operations.d.ts +2 -2
  299. package/dist/document-models/resource-template/gen/template-management/operations.d.ts.map +1 -1
  300. package/dist/document-models/resource-template/gen/template-management/operations.js +0 -2
  301. package/dist/document-models/resource-template/gen/types.d.ts.map +1 -1
  302. package/dist/document-models/resource-template/gen/utils.d.ts.map +1 -1
  303. package/dist/document-models/resource-template/gen/utils.js +1 -0
  304. package/dist/document-models/resource-template/hooks.d.ts +5 -2
  305. package/dist/document-models/resource-template/hooks.d.ts.map +1 -1
  306. package/dist/document-models/resource-template/hooks.js +3 -4
  307. package/dist/document-models/resource-template/index.d.ts +0 -4
  308. package/dist/document-models/resource-template/index.d.ts.map +1 -1
  309. package/dist/document-models/resource-template/index.js +0 -4
  310. package/dist/document-models/resource-template/module.d.ts.map +1 -1
  311. package/dist/document-models/resource-template/module.js +1 -0
  312. package/dist/document-models/resource-template/src/reducers/audience-management.d.ts.map +1 -1
  313. package/dist/document-models/resource-template/src/reducers/audience-management.js +3 -3
  314. package/dist/document-models/resource-template/src/reducers/facet-preset-management.d.ts.map +1 -0
  315. package/dist/document-models/resource-template/src/reducers/facet-targeting.d.ts.map +1 -1
  316. package/dist/document-models/resource-template/src/reducers/facet-targeting.js +9 -8
  317. package/dist/document-models/resource-template/src/reducers/option-group-management.d.ts.map +1 -1
  318. package/dist/document-models/resource-template/src/reducers/option-group-management.js +33 -7
  319. package/dist/document-models/resource-template/src/reducers/service-category-management.d.ts.map +1 -1
  320. package/dist/document-models/resource-template/src/reducers/service-category-management.js +1 -1
  321. package/dist/document-models/resource-template/src/reducers/service-management.d.ts.map +1 -1
  322. package/dist/document-models/resource-template/src/reducers/service-management.js +14 -11
  323. package/dist/document-models/resource-template/src/reducers/template-management.d.ts.map +1 -1
  324. package/dist/document-models/resource-template/src/reducers/template-management.js +1 -1
  325. package/dist/document-models/resource-template/tests/audience-management.test.d.ts +2 -0
  326. package/dist/document-models/resource-template/tests/audience-management.test.d.ts.map +1 -0
  327. package/dist/document-models/resource-template/tests/audience-management.test.js +25 -0
  328. package/dist/document-models/resource-template/tests/document-model.test.d.ts +10 -0
  329. package/dist/document-models/resource-template/tests/document-model.test.d.ts.map +1 -0
  330. package/dist/document-models/resource-template/tests/document-model.test.js +104 -0
  331. package/dist/document-models/resource-template/tests/facet-targeting.test.d.ts +2 -0
  332. package/dist/document-models/resource-template/tests/facet-targeting.test.d.ts.map +1 -0
  333. package/dist/document-models/resource-template/tests/facet-targeting.test.js +45 -0
  334. package/dist/document-models/resource-template/tests/option-group-management.test.d.ts +2 -0
  335. package/dist/document-models/resource-template/tests/option-group-management.test.d.ts.map +1 -0
  336. package/dist/document-models/resource-template/tests/option-group-management.test.js +65 -0
  337. package/dist/document-models/resource-template/tests/service-category-management.test.d.ts +2 -0
  338. package/dist/document-models/resource-template/tests/service-category-management.test.d.ts.map +1 -0
  339. package/dist/document-models/resource-template/tests/service-category-management.test.js +25 -0
  340. package/dist/document-models/resource-template/tests/service-management.test.d.ts +2 -0
  341. package/dist/document-models/resource-template/tests/service-management.test.d.ts.map +1 -0
  342. package/dist/document-models/resource-template/tests/service-management.test.js +55 -0
  343. package/dist/document-models/resource-template/tests/template-management.test.d.ts +2 -0
  344. package/dist/document-models/resource-template/tests/template-management.test.d.ts.map +1 -0
  345. package/dist/document-models/resource-template/tests/template-management.test.js +45 -0
  346. package/dist/document-models/service-offering/actions.d.ts +3 -0
  347. package/dist/document-models/service-offering/actions.d.ts.map +1 -1
  348. package/dist/document-models/service-offering/gen/document-model.d.ts.map +1 -1
  349. package/dist/document-models/service-offering/gen/document-model.js +100 -22
  350. package/dist/document-models/service-offering/gen/document-schema.d.ts +63 -417
  351. package/dist/document-models/service-offering/gen/document-schema.d.ts.map +1 -1
  352. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts +1 -1
  353. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts.map +1 -1
  354. package/dist/document-models/service-offering/gen/offering-management/actions.js +1 -1
  355. package/dist/document-models/service-offering/gen/offering-management/error.d.ts.map +1 -1
  356. package/dist/document-models/service-offering/gen/offering-management/error.js +6 -19
  357. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts +2 -2
  358. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts.map +1 -1
  359. package/dist/document-models/service-offering/gen/offering-management/operations.js +0 -2
  360. package/dist/document-models/service-offering/gen/option-group-management/actions.d.ts +1 -1
  361. package/dist/document-models/service-offering/gen/option-group-management/actions.d.ts.map +1 -1
  362. package/dist/document-models/service-offering/gen/option-group-management/actions.js +1 -1
  363. package/dist/document-models/service-offering/gen/option-group-management/error.d.ts.map +1 -1
  364. package/dist/document-models/service-offering/gen/option-group-management/error.js +3 -9
  365. package/dist/document-models/service-offering/gen/option-group-management/operations.d.ts +2 -2
  366. package/dist/document-models/service-offering/gen/option-group-management/operations.d.ts.map +1 -1
  367. package/dist/document-models/service-offering/gen/option-group-management/operations.js +0 -2
  368. package/dist/document-models/service-offering/gen/reducer.d.ts.map +1 -1
  369. package/dist/document-models/service-offering/gen/reducer.js +80 -33
  370. package/dist/document-models/service-offering/gen/schema/types.d.ts +84 -12
  371. package/dist/document-models/service-offering/gen/schema/types.d.ts.map +1 -1
  372. package/dist/document-models/service-offering/gen/schema/zod.d.ts +38 -8
  373. package/dist/document-models/service-offering/gen/schema/zod.d.ts.map +1 -1
  374. package/dist/document-models/service-offering/gen/schema/zod.js +100 -31
  375. package/dist/document-models/service-offering/gen/service-management/actions.d.ts +1 -1
  376. package/dist/document-models/service-offering/gen/service-management/actions.d.ts.map +1 -1
  377. package/dist/document-models/service-offering/gen/service-management/actions.js +1 -1
  378. package/dist/document-models/service-offering/gen/service-management/error.d.ts.map +1 -1
  379. package/dist/document-models/service-offering/gen/service-management/error.js +5 -17
  380. package/dist/document-models/service-offering/gen/service-management/operations.d.ts +2 -2
  381. package/dist/document-models/service-offering/gen/service-management/operations.d.ts.map +1 -1
  382. package/dist/document-models/service-offering/gen/service-management/operations.js +0 -2
  383. package/dist/document-models/service-offering/gen/tier-management/actions.d.ts +15 -3
  384. package/dist/document-models/service-offering/gen/tier-management/actions.d.ts.map +1 -1
  385. package/dist/document-models/service-offering/gen/tier-management/actions.js +1 -1
  386. package/dist/document-models/service-offering/gen/tier-management/creators.d.ts +5 -2
  387. package/dist/document-models/service-offering/gen/tier-management/creators.d.ts.map +1 -1
  388. package/dist/document-models/service-offering/gen/tier-management/creators.js +4 -1
  389. package/dist/document-models/service-offering/gen/tier-management/error.d.ts +37 -1
  390. package/dist/document-models/service-offering/gen/tier-management/error.d.ts.map +1 -1
  391. package/dist/document-models/service-offering/gen/tier-management/error.js +50 -13
  392. package/dist/document-models/service-offering/gen/tier-management/operations.d.ts +5 -2
  393. package/dist/document-models/service-offering/gen/tier-management/operations.d.ts.map +1 -1
  394. package/dist/document-models/service-offering/gen/tier-management/operations.js +0 -2
  395. package/dist/document-models/service-offering/gen/types.d.ts.map +1 -1
  396. package/dist/document-models/service-offering/hooks.d.ts +5 -2
  397. package/dist/document-models/service-offering/hooks.d.ts.map +1 -1
  398. package/dist/document-models/service-offering/hooks.js +3 -4
  399. package/dist/document-models/service-offering/index.d.ts +0 -4
  400. package/dist/document-models/service-offering/index.d.ts.map +1 -1
  401. package/dist/document-models/service-offering/index.js +0 -4
  402. package/dist/document-models/service-offering/module.d.ts.map +1 -1
  403. package/dist/document-models/service-offering/module.js +1 -0
  404. package/dist/document-models/service-offering/src/reducers/tier-management.d.ts.map +1 -1
  405. package/dist/document-models/service-offering/src/reducers/tier-management.js +110 -2
  406. package/dist/document-models/service-offering/tests/document-model.test.d.ts +10 -0
  407. package/dist/document-models/service-offering/tests/document-model.test.d.ts.map +1 -0
  408. package/dist/document-models/service-offering/tests/document-model.test.js +104 -0
  409. package/dist/document-models/service-offering/tests/offering-management.test.d.ts +2 -0
  410. package/dist/document-models/service-offering/tests/offering-management.test.d.ts.map +1 -0
  411. package/dist/document-models/service-offering/tests/offering-management.test.js +145 -0
  412. package/dist/document-models/service-offering/tests/option-group-management.test.d.ts +2 -0
  413. package/dist/document-models/service-offering/tests/option-group-management.test.d.ts.map +1 -0
  414. package/dist/document-models/service-offering/tests/option-group-management.test.js +35 -0
  415. package/dist/document-models/service-offering/tests/service-management.test.d.ts +2 -0
  416. package/dist/document-models/service-offering/tests/service-management.test.d.ts.map +1 -0
  417. package/dist/document-models/service-offering/tests/service-management.test.js +55 -0
  418. package/dist/document-models/service-offering/tests/tier-management.test.d.ts +2 -0
  419. package/dist/document-models/service-offering/tests/tier-management.test.d.ts.map +1 -0
  420. package/dist/document-models/service-offering/tests/tier-management.test.js +135 -0
  421. package/dist/document-models/service-subscriptions/actions.d.ts.map +1 -1
  422. package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts +1 -1
  423. package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts.map +1 -1
  424. package/dist/document-models/service-subscriptions/gen/categories/actions.js +1 -1
  425. package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts +2 -2
  426. package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts.map +1 -1
  427. package/dist/document-models/service-subscriptions/gen/categories/operations.js +0 -2
  428. package/dist/document-models/service-subscriptions/gen/document-model.d.ts.map +1 -1
  429. package/dist/document-models/service-subscriptions/gen/document-model.js +70 -70
  430. package/dist/document-models/service-subscriptions/gen/document-schema.d.ts +21 -151
  431. package/dist/document-models/service-subscriptions/gen/document-schema.d.ts.map +1 -1
  432. package/dist/document-models/service-subscriptions/gen/reducer.d.ts.map +1 -1
  433. package/dist/document-models/service-subscriptions/gen/reducer.js +26 -13
  434. package/dist/document-models/service-subscriptions/gen/schema/types.d.ts +13 -1
  435. package/dist/document-models/service-subscriptions/gen/schema/types.d.ts.map +1 -1
  436. package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts +19 -5
  437. package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts.map +1 -1
  438. package/dist/document-models/service-subscriptions/gen/schema/zod.js +21 -21
  439. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts +1 -1
  440. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts.map +1 -1
  441. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.js +1 -1
  442. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts +2 -2
  443. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts.map +1 -1
  444. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.js +0 -2
  445. package/dist/document-models/service-subscriptions/gen/types.d.ts.map +1 -1
  446. package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts +1 -1
  447. package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts.map +1 -1
  448. package/dist/document-models/service-subscriptions/gen/vendors/actions.js +1 -1
  449. package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts +2 -2
  450. package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts.map +1 -1
  451. package/dist/document-models/service-subscriptions/gen/vendors/operations.js +0 -2
  452. package/dist/document-models/service-subscriptions/hooks.d.ts +5 -2
  453. package/dist/document-models/service-subscriptions/hooks.d.ts.map +1 -1
  454. package/dist/document-models/service-subscriptions/hooks.js +3 -4
  455. package/dist/document-models/service-subscriptions/index.d.ts +0 -4
  456. package/dist/document-models/service-subscriptions/index.d.ts.map +1 -1
  457. package/dist/document-models/service-subscriptions/index.js +0 -4
  458. package/dist/document-models/service-subscriptions/module.d.ts.map +1 -1
  459. package/dist/document-models/service-subscriptions/module.js +1 -0
  460. package/dist/document-models/service-subscriptions/tests/categories.test.d.ts +2 -0
  461. package/dist/document-models/service-subscriptions/tests/categories.test.d.ts.map +1 -0
  462. package/dist/document-models/service-subscriptions/tests/categories.test.js +35 -0
  463. package/dist/document-models/service-subscriptions/tests/document-model.test.d.ts +10 -0
  464. package/dist/document-models/service-subscriptions/tests/document-model.test.d.ts.map +1 -0
  465. package/dist/document-models/service-subscriptions/tests/document-model.test.js +104 -0
  466. package/dist/document-models/service-subscriptions/tests/subscriptions.test.d.ts +2 -0
  467. package/dist/document-models/service-subscriptions/tests/subscriptions.test.d.ts.map +1 -0
  468. package/dist/document-models/service-subscriptions/tests/subscriptions.test.js +75 -0
  469. package/dist/document-models/service-subscriptions/tests/vendors.test.d.ts +2 -0
  470. package/dist/document-models/service-subscriptions/tests/vendors.test.d.ts.map +1 -0
  471. package/dist/document-models/service-subscriptions/tests/vendors.test.js +35 -0
  472. package/dist/document-models/snapshot-report/actions.d.ts +2 -1
  473. package/dist/document-models/snapshot-report/actions.d.ts.map +1 -1
  474. package/dist/document-models/snapshot-report/gen/accounts/actions.d.ts +1 -1
  475. package/dist/document-models/snapshot-report/gen/accounts/actions.d.ts.map +1 -1
  476. package/dist/document-models/snapshot-report/gen/accounts/actions.js +1 -1
  477. package/dist/document-models/snapshot-report/gen/accounts/error.d.ts.map +1 -1
  478. package/dist/document-models/snapshot-report/gen/accounts/error.js +3 -9
  479. package/dist/document-models/snapshot-report/gen/accounts/operations.d.ts +2 -2
  480. package/dist/document-models/snapshot-report/gen/accounts/operations.d.ts.map +1 -1
  481. package/dist/document-models/snapshot-report/gen/accounts/operations.js +0 -2
  482. package/dist/document-models/snapshot-report/gen/balances/actions.d.ts +1 -1
  483. package/dist/document-models/snapshot-report/gen/balances/actions.d.ts.map +1 -1
  484. package/dist/document-models/snapshot-report/gen/balances/actions.js +1 -1
  485. package/dist/document-models/snapshot-report/gen/balances/error.d.ts.map +1 -1
  486. package/dist/document-models/snapshot-report/gen/balances/error.js +4 -12
  487. package/dist/document-models/snapshot-report/gen/balances/operations.d.ts +2 -2
  488. package/dist/document-models/snapshot-report/gen/balances/operations.d.ts.map +1 -1
  489. package/dist/document-models/snapshot-report/gen/balances/operations.js +0 -2
  490. package/dist/document-models/snapshot-report/gen/configuration/actions.d.ts +10 -6
  491. package/dist/document-models/snapshot-report/gen/configuration/actions.d.ts.map +1 -1
  492. package/dist/document-models/snapshot-report/gen/configuration/actions.js +1 -1
  493. package/dist/document-models/snapshot-report/gen/configuration/creators.d.ts +4 -3
  494. package/dist/document-models/snapshot-report/gen/configuration/creators.d.ts.map +1 -1
  495. package/dist/document-models/snapshot-report/gen/configuration/creators.js +3 -2
  496. package/dist/document-models/snapshot-report/gen/configuration/operations.d.ts +4 -3
  497. package/dist/document-models/snapshot-report/gen/configuration/operations.d.ts.map +1 -1
  498. package/dist/document-models/snapshot-report/gen/configuration/operations.js +0 -2
  499. package/dist/document-models/snapshot-report/gen/document-model.d.ts.map +1 -1
  500. package/dist/document-models/snapshot-report/gen/document-model.js +22 -11
  501. package/dist/document-models/snapshot-report/gen/document-schema.d.ts +36 -246
  502. package/dist/document-models/snapshot-report/gen/document-schema.d.ts.map +1 -1
  503. package/dist/document-models/snapshot-report/gen/ph-factories.js +1 -1
  504. package/dist/document-models/snapshot-report/gen/reducer.d.ts.map +1 -1
  505. package/dist/document-models/snapshot-report/gen/reducer.js +42 -20
  506. package/dist/document-models/snapshot-report/gen/schema/types.d.ts +22 -8
  507. package/dist/document-models/snapshot-report/gen/schema/types.d.ts.map +1 -1
  508. package/dist/document-models/snapshot-report/gen/schema/zod.d.ts +40 -11
  509. package/dist/document-models/snapshot-report/gen/schema/zod.d.ts.map +1 -1
  510. package/dist/document-models/snapshot-report/gen/schema/zod.js +34 -28
  511. package/dist/document-models/snapshot-report/gen/transactions/actions.d.ts +1 -1
  512. package/dist/document-models/snapshot-report/gen/transactions/actions.d.ts.map +1 -1
  513. package/dist/document-models/snapshot-report/gen/transactions/actions.js +1 -1
  514. package/dist/document-models/snapshot-report/gen/transactions/error.d.ts.map +1 -1
  515. package/dist/document-models/snapshot-report/gen/transactions/error.js +2 -6
  516. package/dist/document-models/snapshot-report/gen/transactions/operations.d.ts +2 -2
  517. package/dist/document-models/snapshot-report/gen/transactions/operations.d.ts.map +1 -1
  518. package/dist/document-models/snapshot-report/gen/transactions/operations.js +0 -2
  519. package/dist/document-models/snapshot-report/gen/types.d.ts.map +1 -1
  520. package/dist/document-models/snapshot-report/gen/utils.js +1 -1
  521. package/dist/document-models/snapshot-report/hooks.d.ts +5 -2
  522. package/dist/document-models/snapshot-report/hooks.d.ts.map +1 -1
  523. package/dist/document-models/snapshot-report/hooks.js +3 -4
  524. package/dist/document-models/snapshot-report/index.d.ts +0 -4
  525. package/dist/document-models/snapshot-report/index.d.ts.map +1 -1
  526. package/dist/document-models/snapshot-report/index.js +0 -4
  527. package/dist/document-models/snapshot-report/module.d.ts.map +1 -1
  528. package/dist/document-models/snapshot-report/module.js +1 -0
  529. package/dist/document-models/snapshot-report/src/reducers/balances.d.ts.map +1 -1
  530. package/dist/document-models/snapshot-report/src/reducers/balances.js +37 -21
  531. package/dist/document-models/snapshot-report/src/reducers/configuration.d.ts.map +1 -1
  532. package/dist/document-models/snapshot-report/src/reducers/configuration.js +11 -3
  533. package/dist/document-models/snapshot-report/tests/accounts.test.d.ts +2 -0
  534. package/dist/document-models/snapshot-report/tests/accounts.test.d.ts.map +1 -0
  535. package/dist/document-models/snapshot-report/tests/accounts.test.js +35 -0
  536. package/dist/document-models/snapshot-report/tests/balances.test.d.ts +2 -0
  537. package/dist/document-models/snapshot-report/tests/balances.test.d.ts.map +1 -0
  538. package/dist/document-models/snapshot-report/tests/balances.test.js +45 -0
  539. package/dist/document-models/snapshot-report/tests/configuration.test.d.ts +2 -0
  540. package/dist/document-models/snapshot-report/tests/configuration.test.d.ts.map +1 -0
  541. package/dist/document-models/snapshot-report/tests/configuration.test.js +75 -0
  542. package/dist/document-models/snapshot-report/tests/document-model.test.d.ts +10 -0
  543. package/dist/document-models/snapshot-report/tests/document-model.test.d.ts.map +1 -0
  544. package/dist/document-models/snapshot-report/tests/document-model.test.js +104 -0
  545. package/dist/document-models/snapshot-report/tests/transactions.test.d.ts +2 -0
  546. package/dist/document-models/snapshot-report/tests/transactions.test.d.ts.map +1 -0
  547. package/dist/document-models/snapshot-report/tests/transactions.test.js +45 -0
  548. package/dist/editors/accounts-editor/editor.d.ts.map +1 -1
  549. package/dist/editors/accounts-editor/editor.js +25 -6
  550. package/dist/editors/billing-statement/components/lineItemsTable.js +8 -8
  551. package/dist/editors/billing-statement/editor.d.ts.map +1 -1
  552. package/dist/editors/billing-statement/editor.js +15 -16
  553. package/dist/editors/billing-statement/lineItemTags/lineItemTags.js +5 -5
  554. package/dist/editors/builder-team-admin/components/ResourcesServices.d.ts.map +1 -1
  555. package/dist/editors/builder-team-admin/components/ResourcesServices.js +3 -1
  556. package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.d.ts.map +1 -1
  557. package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.js +20 -3
  558. package/dist/editors/builder-team-admin/components/team-members.d.ts.map +1 -1
  559. package/dist/editors/builder-team-admin/components/team-members.js +20 -5
  560. package/dist/editors/builder-team-admin/hooks/useExpenseReportAutoPlacement.d.ts.map +1 -1
  561. package/dist/editors/builder-team-admin/hooks/useExpenseReportAutoPlacement.js +45 -17
  562. package/dist/editors/builder-team-admin/hooks/useSnapshotReportAutoPlacement.d.ts.map +1 -1
  563. package/dist/editors/builder-team-admin/hooks/useSnapshotReportAutoPlacement.js +45 -17
  564. package/dist/editors/contributor-billing/components/DriveExplorer.d.ts.map +1 -1
  565. package/dist/editors/contributor-billing/components/DriveExplorer.js +2 -1
  566. package/dist/editors/contributor-billing/components/FolderTree.d.ts.map +1 -1
  567. package/dist/editors/contributor-billing/components/FolderTree.js +72 -11
  568. package/dist/editors/contributor-billing/components/FolderTreeErrorBoundary.d.ts +24 -0
  569. package/dist/editors/contributor-billing/components/FolderTreeErrorBoundary.d.ts.map +1 -0
  570. package/dist/editors/contributor-billing/components/FolderTreeErrorBoundary.js +41 -0
  571. package/dist/editors/contributor-billing/components/InvoiceTable/HeaderStats.d.ts.map +1 -1
  572. package/dist/editors/contributor-billing/components/InvoiceTable/HeaderStats.js +10 -3
  573. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.d.ts.map +1 -1
  574. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.js +65 -28
  575. package/dist/editors/contributor-billing/components/InvoiceTable/NotificationDialog.d.ts +11 -0
  576. package/dist/editors/contributor-billing/components/InvoiceTable/NotificationDialog.d.ts.map +1 -0
  577. package/dist/editors/contributor-billing/components/InvoiceTable/NotificationDialog.js +8 -0
  578. package/dist/editors/expense-report/components/AddReportToRemoteDrive.d.ts +1 -1
  579. package/dist/editors/expense-report/editor.d.ts.map +1 -1
  580. package/dist/editors/expense-report/editor.js +43 -6
  581. package/dist/editors/expense-report/hooks/useSyncWallet.d.ts.map +1 -1
  582. package/dist/editors/expense-report/hooks/useSyncWallet.js +4 -0
  583. package/dist/editors/invoice/exportUBL.js +5 -5
  584. package/dist/editors/resource-template-editor/components/FacetTargeting.js +2 -2
  585. package/dist/editors/resource-template-editor/components/TemplateInfo.d.ts.map +1 -1
  586. package/dist/editors/resource-template-editor/components/TemplateInfo.js +394 -99
  587. package/dist/editors/resource-template-editor/editor.d.ts.map +1 -1
  588. package/dist/editors/resource-template-editor/editor.js +2 -2
  589. package/dist/editors/resource-template-editor/module.d.ts +1 -1
  590. package/dist/editors/resource-template-editor/module.d.ts.map +1 -1
  591. package/dist/editors/resource-template-editor/module.js +1 -1
  592. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.js +1 -1
  593. package/dist/editors/service-offering-editor/components/ServiceCatalog.d.ts.map +1 -1
  594. package/dist/editors/service-offering-editor/components/ServiceCatalog.js +33 -69
  595. package/dist/editors/service-offering-editor/components/ServicesList.d.ts.map +1 -1
  596. package/dist/editors/service-offering-editor/components/ServicesList.js +1 -1
  597. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts.map +1 -1
  598. package/dist/editors/service-offering-editor/components/TheMatrix.js +475 -132
  599. package/dist/editors/service-offering-editor/components/TierDefinition.d.ts.map +1 -1
  600. package/dist/editors/service-offering-editor/components/TierDefinition.js +307 -122
  601. package/dist/editors/service-offering-editor/components/TierPricingOptionsPanel.d.ts +11 -0
  602. package/dist/editors/service-offering-editor/components/TierPricingOptionsPanel.d.ts.map +1 -0
  603. package/dist/editors/service-offering-editor/components/TierPricingOptionsPanel.js +405 -0
  604. package/dist/editors/service-offering-editor/components/TiersList.d.ts.map +1 -1
  605. package/dist/editors/service-offering-editor/components/TiersList.js +1 -1
  606. package/dist/editors/service-offering-editor/components/pricing-utils.d.ts +10 -0
  607. package/dist/editors/service-offering-editor/components/pricing-utils.d.ts.map +1 -0
  608. package/dist/editors/service-offering-editor/components/pricing-utils.js +65 -0
  609. package/dist/editors/service-offering-editor/module.d.ts +1 -1
  610. package/dist/editors/service-offering-editor/module.d.ts.map +1 -1
  611. package/dist/editors/service-offering-editor/module.js +1 -1
  612. package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.js +1 -1
  613. package/dist/editors/snapshot-report-editor/components/AddReportToRemoteDrive.js +1 -1
  614. package/dist/editors/snapshot-report-editor/components/SetOwner.d.ts +4 -4
  615. package/dist/editors/snapshot-report-editor/components/SetOwner.d.ts.map +1 -1
  616. package/dist/editors/snapshot-report-editor/components/SetOwner.js +25 -14
  617. package/dist/editors/snapshot-report-editor/editor.d.ts.map +1 -1
  618. package/dist/editors/snapshot-report-editor/editor.js +14 -7
  619. package/dist/editors/snapshot-report-editor/hooks/useSyncSnapshotAccount.d.ts.map +1 -1
  620. package/dist/editors/snapshot-report-editor/hooks/useSyncSnapshotAccount.js +133 -8
  621. package/dist/editors/snapshot-report-editor/utils/flowTypeCalculations.d.ts +4 -0
  622. package/dist/editors/snapshot-report-editor/utils/flowTypeCalculations.d.ts.map +1 -1
  623. package/dist/editors/snapshot-report-editor/utils/flowTypeCalculations.js +28 -0
  624. package/dist/index.d.ts +1 -1
  625. package/dist/powerhouse.manifest.json +2 -2
  626. package/dist/scripts/alchemy/alchemyEnvironment.d.ts +2 -2
  627. package/dist/scripts/alchemy/alchemyEnvironment.d.ts.map +1 -1
  628. package/dist/scripts/alchemy/alchemyEnvironment.js +31 -10
  629. package/dist/style.css +1327 -1108
  630. package/dist/subgraphs/budget-statements/resolvers.js +2 -2
  631. package/dist/subgraphs/expense-report/resolvers.d.ts.map +1 -1
  632. package/dist/subgraphs/expense-report/resolvers.js +12 -0
  633. package/dist/subgraphs/expense-report/schema.d.ts.map +1 -1
  634. package/dist/subgraphs/expense-report/schema.js +9 -0
  635. package/dist/subgraphs/index.d.ts +2 -9
  636. package/dist/subgraphs/index.d.ts.map +1 -1
  637. package/dist/subgraphs/index.js +2 -9
  638. package/dist/subgraphs/invoice-addon/schema.d.ts.map +1 -1
  639. package/dist/subgraphs/invoice-addon/schema.js +5 -7
  640. package/dist/subgraphs/snapshot-report/resolvers.d.ts.map +1 -1
  641. package/dist/subgraphs/snapshot-report/resolvers.js +15 -3
  642. package/dist/subgraphs/snapshot-report/schema.d.ts.map +1 -1
  643. package/dist/subgraphs/snapshot-report/schema.js +11 -4
  644. package/package.json +26 -21
  645. package/dist/document-models/resource-template/reducers/audience-management.d.ts +0 -3
  646. package/dist/document-models/resource-template/reducers/audience-management.d.ts.map +0 -1
  647. package/dist/document-models/resource-template/reducers/audience-management.js +0 -17
  648. package/dist/document-models/resource-template/reducers/facet-preset-management.d.ts.map +0 -1
  649. package/dist/document-models/resource-template/reducers/facet-targeting.d.ts +0 -3
  650. package/dist/document-models/resource-template/reducers/facet-targeting.d.ts.map +0 -1
  651. package/dist/document-models/resource-template/reducers/facet-targeting.js +0 -47
  652. package/dist/document-models/resource-template/reducers/option-group-management.d.ts +0 -3
  653. package/dist/document-models/resource-template/reducers/option-group-management.d.ts.map +0 -1
  654. package/dist/document-models/resource-template/reducers/option-group-management.js +0 -44
  655. package/dist/document-models/resource-template/reducers/service-category-management.d.ts +0 -3
  656. package/dist/document-models/resource-template/reducers/service-category-management.d.ts.map +0 -1
  657. package/dist/document-models/resource-template/reducers/service-category-management.js +0 -10
  658. package/dist/document-models/resource-template/reducers/service-management.d.ts +0 -3
  659. package/dist/document-models/resource-template/reducers/service-management.d.ts.map +0 -1
  660. package/dist/document-models/resource-template/reducers/service-management.js +0 -71
  661. package/dist/document-models/resource-template/reducers/template-management.d.ts +0 -3
  662. package/dist/document-models/resource-template/reducers/template-management.d.ts.map +0 -1
  663. package/dist/document-models/resource-template/reducers/template-management.js +0 -32
  664. package/dist/editors/accounts-editor/components/AccountsFilter.d.ts +0 -8
  665. package/dist/editors/accounts-editor/components/AccountsFilter.d.ts.map +0 -1
  666. package/dist/editors/accounts-editor/components/AccountsFilter.js +0 -34
  667. package/dist/editors/billing-statement/components/objectSetTable.d.ts +0 -7
  668. package/dist/editors/billing-statement/components/objectSetTable.d.ts.map +0 -1
  669. package/dist/editors/billing-statement/components/objectSetTable.js +0 -96
  670. package/dist/subgraphs/account-transactions/index.d.ts +0 -11
  671. package/dist/subgraphs/account-transactions/index.d.ts.map +0 -1
  672. package/dist/subgraphs/account-transactions/index.js +0 -11
  673. package/dist/subgraphs/account-transactions/resolvers.d.ts +0 -3
  674. package/dist/subgraphs/account-transactions/resolvers.d.ts.map +0 -1
  675. package/dist/subgraphs/account-transactions/resolvers.js +0 -168
  676. package/dist/subgraphs/account-transactions/schema.d.ts +0 -3
  677. package/dist/subgraphs/account-transactions/schema.d.ts.map +0 -1
  678. package/dist/subgraphs/account-transactions/schema.js +0 -129
  679. package/dist/subgraphs/accounts/index.d.ts +0 -11
  680. package/dist/subgraphs/accounts/index.d.ts.map +0 -1
  681. package/dist/subgraphs/accounts/index.js +0 -11
  682. package/dist/subgraphs/accounts/resolvers.d.ts +0 -3
  683. package/dist/subgraphs/accounts/resolvers.d.ts.map +0 -1
  684. package/dist/subgraphs/accounts/resolvers.js +0 -120
  685. package/dist/subgraphs/accounts/schema.d.ts +0 -3
  686. package/dist/subgraphs/accounts/schema.d.ts.map +0 -1
  687. package/dist/subgraphs/accounts/schema.js +0 -75
  688. package/dist/subgraphs/billing-statement/index.d.ts +0 -11
  689. package/dist/subgraphs/billing-statement/index.d.ts.map +0 -1
  690. package/dist/subgraphs/billing-statement/index.js +0 -11
  691. package/dist/subgraphs/billing-statement/resolvers.d.ts +0 -3
  692. package/dist/subgraphs/billing-statement/resolvers.d.ts.map +0 -1
  693. package/dist/subgraphs/billing-statement/resolvers.js +0 -156
  694. package/dist/subgraphs/billing-statement/schema.d.ts +0 -3
  695. package/dist/subgraphs/billing-statement/schema.d.ts.map +0 -1
  696. package/dist/subgraphs/billing-statement/schema.js +0 -110
  697. package/dist/subgraphs/invoice/index.d.ts +0 -11
  698. package/dist/subgraphs/invoice/index.d.ts.map +0 -1
  699. package/dist/subgraphs/invoice/index.js +0 -11
  700. package/dist/subgraphs/invoice/resolvers.d.ts +0 -3
  701. package/dist/subgraphs/invoice/resolvers.d.ts.map +0 -1
  702. package/dist/subgraphs/invoice/resolvers.js +0 -408
  703. package/dist/subgraphs/invoice/schema.d.ts +0 -3
  704. package/dist/subgraphs/invoice/schema.d.ts.map +0 -1
  705. package/dist/subgraphs/invoice/schema.js +0 -390
  706. package/dist/subgraphs/resource-template/index.d.ts +0 -11
  707. package/dist/subgraphs/resource-template/index.d.ts.map +0 -1
  708. package/dist/subgraphs/resource-template/index.js +0 -11
  709. package/dist/subgraphs/resource-template/resolvers.d.ts +0 -3
  710. package/dist/subgraphs/resource-template/resolvers.d.ts.map +0 -1
  711. package/dist/subgraphs/resource-template/resolvers.js +0 -312
  712. package/dist/subgraphs/resource-template/schema.d.ts +0 -3
  713. package/dist/subgraphs/resource-template/schema.d.ts.map +0 -1
  714. package/dist/subgraphs/resource-template/schema.js +0 -262
  715. package/dist/subgraphs/service-offering/index.d.ts +0 -11
  716. package/dist/subgraphs/service-offering/index.d.ts.map +0 -1
  717. package/dist/subgraphs/service-offering/index.js +0 -11
  718. package/dist/subgraphs/service-offering/resolvers.d.ts +0 -3
  719. package/dist/subgraphs/service-offering/resolvers.d.ts.map +0 -1
  720. package/dist/subgraphs/service-offering/resolvers.js +0 -456
  721. package/dist/subgraphs/service-offering/schema.d.ts +0 -3
  722. package/dist/subgraphs/service-offering/schema.d.ts.map +0 -1
  723. package/dist/subgraphs/service-offering/schema.js +0 -407
  724. package/dist/subgraphs/service-subscriptions/index.d.ts +0 -11
  725. package/dist/subgraphs/service-subscriptions/index.d.ts.map +0 -1
  726. package/dist/subgraphs/service-subscriptions/index.js +0 -11
  727. package/dist/subgraphs/service-subscriptions/resolvers.d.ts +0 -3
  728. package/dist/subgraphs/service-subscriptions/resolvers.d.ts.map +0 -1
  729. package/dist/subgraphs/service-subscriptions/resolvers.js +0 -228
  730. package/dist/subgraphs/service-subscriptions/schema.d.ts +0 -3
  731. package/dist/subgraphs/service-subscriptions/schema.d.ts.map +0 -1
  732. package/dist/subgraphs/service-subscriptions/schema.js +0 -193
  733. /package/dist/document-models/resource-template/{reducers → src/reducers}/facet-preset-management.d.ts +0 -0
  734. /package/dist/document-models/resource-template/{reducers → src/reducers}/facet-preset-management.js +0 -0
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useMemo, useEffect, useRef, useCallback } from "react";
3
3
  import { generateId } from "document-model/core";
4
+ import { RECURRING_BILLING_CYCLES, BILLING_CYCLE_SHORT_LABELS, formatPrice, getMonthlyEquivalent, } from "./pricing-utils.js";
4
5
  import { addServiceLevel, updateServiceLevel, addUsageLimit, updateUsageLimit, removeUsageLimit, addService, updateService, } from "../../../document-models/service-offering/gen/creators.js";
6
+ import { useResourceTemplateDocumentsInSelectedDrive } from "../../../document-models/resource-template/hooks.js";
5
7
  const SERVICE_LEVELS = [
6
8
  {
7
9
  value: "INCLUDED",
@@ -41,38 +43,6 @@ const SERVICE_LEVELS = [
41
43
  },
42
44
  ];
43
45
  const UNGROUPED_ID = "__ungrouped__";
44
- const FACET_CATEGORIES = {
45
- FUNCTION: {
46
- label: "SNO Function",
47
- options: [
48
- { id: "operational-hub", label: "Operational Hub" },
49
- { id: "embryonic-hub", label: "Embryonic Hub" },
50
- ],
51
- },
52
- LEGAL_ENTITY: {
53
- label: "Legal Entity",
54
- options: [
55
- { id: "swiss-association", label: "Swiss Association" },
56
- { id: "bvi-ltd", label: "BVI Ltd" },
57
- { id: "unaffiliated", label: "Unaffiliated" },
58
- ],
59
- },
60
- TEAM_STRUCTURE: {
61
- label: "Team",
62
- options: [
63
- { id: "remote-team", label: "Remote" },
64
- { id: "on-premise", label: "On-Premise" },
65
- { id: "hybrid", label: "Hybrid" },
66
- ],
67
- },
68
- ANONYMITY: {
69
- label: "Anonymity",
70
- options: [
71
- { id: "high-anonymity", label: "High" },
72
- { id: "highest-anonymity", label: "Highest" },
73
- ],
74
- },
75
- };
76
46
  const matrixStyles = `
77
47
  .matrix {
78
48
  background: var(--so-white);
@@ -268,6 +238,40 @@ const matrixStyles = `
268
238
  color: var(--so-violet-200);
269
239
  }
270
240
 
241
+ /* Billing Cycle Selector in Tier Header */
242
+ .matrix__tier-cycle-select {
243
+ font-family: var(--so-font-sans);
244
+ font-size: 0.625rem;
245
+ color: var(--so-slate-600);
246
+ background: var(--so-white);
247
+ border: 1px solid var(--so-slate-200);
248
+ border-radius: var(--so-radius-sm);
249
+ padding: 0.25rem 0.5rem;
250
+ cursor: pointer;
251
+ outline: none;
252
+ transition: var(--so-transition-fast);
253
+ margin-top: 0.25rem;
254
+ }
255
+
256
+ .matrix__tier-cycle-select:hover {
257
+ border-color: var(--so-slate-300);
258
+ }
259
+
260
+ .matrix__tier-cycle-select:focus {
261
+ border-color: var(--so-violet-400);
262
+ box-shadow: 0 0 0 2px var(--so-violet-100);
263
+ }
264
+
265
+ .matrix__tier-header--selected .matrix__tier-cycle-select {
266
+ background: var(--so-violet-500);
267
+ border-color: var(--so-violet-400);
268
+ color: var(--so-white);
269
+ }
270
+
271
+ .matrix__tier-header--selected .matrix__tier-cycle-select:focus {
272
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3);
273
+ }
274
+
271
275
  /* Section Header */
272
276
  .matrix__section-header {
273
277
  background: var(--so-slate-100);
@@ -890,11 +894,26 @@ const matrixStyles = `
890
894
  border-bottom: 1px solid var(--so-slate-100);
891
895
  }
892
896
 
897
+ .matrix__metric-value-container {
898
+ display: flex;
899
+ flex-direction: column;
900
+ align-items: center;
901
+ gap: 0.125rem;
902
+ }
903
+
893
904
  .matrix__metric-value {
894
905
  font-size: 0.6875rem;
895
906
  color: var(--so-slate-500);
896
907
  }
897
908
 
909
+ .matrix__metric-overage {
910
+ font-family: var(--so-font-mono);
911
+ font-size: 0.5625rem;
912
+ font-weight: 500;
913
+ color: #059669;
914
+ white-space: nowrap;
915
+ }
916
+
898
917
  /* Add Metric Button on Service Row */
899
918
  .matrix__service-cell-wrapper {
900
919
  display: flex;
@@ -927,6 +946,54 @@ const matrixStyles = `
927
946
  color: var(--so-violet-700);
928
947
  }
929
948
 
949
+ /* Service Reorder Buttons */
950
+ .matrix__reorder-btns {
951
+ display: flex;
952
+ flex-direction: column;
953
+ gap: 2px;
954
+ margin-right: 0.5rem;
955
+ opacity: 0;
956
+ transition: opacity 0.15s ease;
957
+ }
958
+
959
+ .matrix__service-row:hover .matrix__reorder-btns {
960
+ opacity: 1;
961
+ }
962
+
963
+ .matrix__reorder-btn {
964
+ display: flex;
965
+ align-items: center;
966
+ justify-content: center;
967
+ width: 18px;
968
+ height: 14px;
969
+ padding: 0;
970
+ background: var(--so-slate-100);
971
+ border: 1px solid var(--so-slate-200);
972
+ border-radius: 3px;
973
+ cursor: pointer;
974
+ transition: all 0.1s ease;
975
+ }
976
+
977
+ .matrix__reorder-btn:hover:not(:disabled) {
978
+ background: var(--so-violet-100);
979
+ border-color: var(--so-violet-300);
980
+ }
981
+
982
+ .matrix__reorder-btn:disabled {
983
+ opacity: 0.3;
984
+ cursor: not-allowed;
985
+ }
986
+
987
+ .matrix__reorder-btn svg {
988
+ width: 10px;
989
+ height: 10px;
990
+ color: var(--so-slate-500);
991
+ }
992
+
993
+ .matrix__reorder-btn:hover:not(:disabled) svg {
994
+ color: var(--so-violet-600);
995
+ }
996
+
930
997
  /* Add Service Row */
931
998
  .matrix__add-service-row td {
932
999
  padding: 0.5rem 1rem;
@@ -1267,6 +1334,89 @@ const matrixStyles = `
1267
1334
  color: #64748b;
1268
1335
  }
1269
1336
 
1337
+ .matrix__panel-limit-value-group {
1338
+ display: flex;
1339
+ flex-direction: column;
1340
+ gap: 0.125rem;
1341
+ }
1342
+
1343
+ .matrix__panel-limit-overage {
1344
+ font-family: var(--so-font-mono);
1345
+ font-size: 0.6875rem;
1346
+ color: #059669;
1347
+ font-weight: 500;
1348
+ }
1349
+
1350
+ /* Overage Pricing Section */
1351
+ .matrix__panel-overage-section {
1352
+ margin-top: 0.5rem;
1353
+ padding-top: 0.75rem;
1354
+ border-top: 1px dashed #cbd5e1;
1355
+ }
1356
+
1357
+ .matrix__panel-overage-row {
1358
+ display: flex;
1359
+ align-items: center;
1360
+ gap: 0.375rem;
1361
+ flex-wrap: wrap;
1362
+ }
1363
+
1364
+ .matrix__panel-overage-price {
1365
+ display: flex;
1366
+ align-items: center;
1367
+ gap: 0.25rem;
1368
+ }
1369
+
1370
+ .matrix__panel-overage-currency {
1371
+ font-family: var(--so-font-mono);
1372
+ font-size: 0.875rem;
1373
+ color: #64748b;
1374
+ }
1375
+
1376
+ .matrix__panel-overage-input {
1377
+ width: 4.5rem;
1378
+ font-family: var(--so-font-mono);
1379
+ font-size: 0.875rem;
1380
+ font-weight: 500;
1381
+ color: #0f172a;
1382
+ background: #ffffff;
1383
+ border: 1px solid #cbd5e1;
1384
+ border-radius: var(--so-radius-sm);
1385
+ padding: 0.375rem 0.5rem;
1386
+ outline: none;
1387
+ transition: border-color 0.15s ease;
1388
+ }
1389
+
1390
+ .matrix__panel-overage-input:focus {
1391
+ border-color: #7c3aed;
1392
+ }
1393
+
1394
+ .matrix__panel-overage-separator {
1395
+ font-size: 0.875rem;
1396
+ color: #94a3b8;
1397
+ }
1398
+
1399
+ .matrix__panel-overage-select {
1400
+ font-family: var(--so-font-sans);
1401
+ font-size: 0.8125rem;
1402
+ color: #334155;
1403
+ background: #ffffff;
1404
+ border: 1px solid #cbd5e1;
1405
+ border-radius: var(--so-radius-sm);
1406
+ padding: 0.375rem 0.5rem;
1407
+ cursor: pointer;
1408
+ outline: none;
1409
+ }
1410
+
1411
+ .matrix__panel-overage-select:focus {
1412
+ border-color: #7c3aed;
1413
+ }
1414
+
1415
+ .matrix__panel-overage-label {
1416
+ font-size: 0.75rem;
1417
+ color: #64748b;
1418
+ }
1419
+
1270
1420
  .matrix__panel-limit-actions {
1271
1421
  display: flex;
1272
1422
  gap: 0.25rem;
@@ -1688,6 +1838,26 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
1688
1838
  const services = state.global.services ?? [];
1689
1839
  const tiers = state.global.tiers ?? [];
1690
1840
  const optionGroups = state.global.optionGroups ?? [];
1841
+ const resourceTemplateId = state.global.resourceTemplateId;
1842
+ // Get resource templates to find the selected one
1843
+ const templates = useResourceTemplateDocumentsInSelectedDrive();
1844
+ // Get selected facets from the offering document's facetTargets
1845
+ const offeringFacetTargets = state.global.facetTargets ?? [];
1846
+ // Build facet categories from the SERVICE OFFERING's selected facet targets
1847
+ // This ensures only the options selected in the offering's facet targeting appear in the Matrix
1848
+ const facetCategories = useMemo(() => {
1849
+ const categories = {};
1850
+ offeringFacetTargets.forEach((facet) => {
1851
+ categories[facet.categoryKey] = {
1852
+ label: facet.categoryLabel,
1853
+ options: facet.selectedOptions.map((option) => ({
1854
+ id: option.toLowerCase().replace(/\s+/g, "-"),
1855
+ label: option,
1856
+ })),
1857
+ };
1858
+ });
1859
+ return categories;
1860
+ }, [offeringFacetTargets]);
1691
1861
  const [enabledOptionalGroups, setEnabledOptionalGroups] = useState(new Set(optionGroups.filter((g) => g.defaultSelected).map((g) => g.id)));
1692
1862
  const [selectedCell, setSelectedCell] = useState(null);
1693
1863
  const [addServiceModal, setAddServiceModal] = useState(null);
@@ -1695,17 +1865,30 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
1695
1865
  const [newServiceDescription, setNewServiceDescription] = useState("");
1696
1866
  const [newServiceSelectedTiers, setNewServiceSelectedTiers] = useState(new Set());
1697
1867
  const [selectedTierIdx, setSelectedTierIdx] = useState(0);
1698
- const [selectedFacets, setSelectedFacets] = useState({
1699
- FUNCTION: "operational-hub",
1700
- LEGAL_ENTITY: "swiss-association",
1701
- TEAM_STRUCTURE: "remote-team",
1702
- ANONYMITY: "high-anonymity",
1868
+ // Selected billing cycle per tier (for tiers with multiple pricing options)
1869
+ const [selectedBillingCycles, setSelectedBillingCycles] = useState({});
1870
+ // Initialize selected facets from offering's facet targets
1871
+ const [selectedFacets, setSelectedFacets] = useState(() => {
1872
+ const initial = {};
1873
+ offeringFacetTargets.forEach((facet) => {
1874
+ if (facet.selectedOptions.length > 0) {
1875
+ initial[facet.categoryKey] = facet.selectedOptions[0]
1876
+ .toLowerCase()
1877
+ .replace(/\s+/g, "-");
1878
+ }
1879
+ });
1880
+ return initial;
1703
1881
  });
1704
1882
  // Metric editing modal state
1705
1883
  const [metricModal, setMetricModal] = useState(null);
1706
1884
  const [metricName, setMetricName] = useState("");
1707
1885
  const [metricLimits, setMetricLimits] = useState({});
1708
1886
  const [metricEnabledTiers, setMetricEnabledTiers] = useState(new Set());
1887
+ // Per-tier overage pricing for metric modal
1888
+ const [metricOveragePrices, setMetricOveragePrices] = useState({});
1889
+ const [metricOverageCycles, setMetricOverageCycles] = useState({});
1890
+ // Unit name for the metric (e.g., "entity", "user", "API call")
1891
+ const [metricUnitName, setMetricUnitName] = useState("");
1709
1892
  // Bulk actions state
1710
1893
  const [showBulkActions, setShowBulkActions] = useState(false);
1711
1894
  const getServiceGroup = (service) => {
@@ -1989,32 +2172,53 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
1989
2172
  setMetricName("");
1990
2173
  // Initialize limits for all tiers to empty string
1991
2174
  const initialLimits = {};
2175
+ const initialOveragePrices = {};
2176
+ const initialOverageCycles = {};
1992
2177
  // For new metrics, enable all tiers by default
1993
2178
  const allTierIds = new Set();
1994
2179
  tiers.forEach((tier) => {
1995
2180
  initialLimits[tier.id] = "";
2181
+ initialOveragePrices[tier.id] = "";
2182
+ initialOverageCycles[tier.id] = "";
1996
2183
  allTierIds.add(tier.id);
1997
2184
  });
1998
2185
  setMetricLimits(initialLimits);
1999
2186
  setMetricEnabledTiers(allTierIds);
2187
+ // Reset per-tier overage pricing and unit name
2188
+ setMetricOveragePrices(initialOveragePrices);
2189
+ setMetricOverageCycles(initialOverageCycles);
2190
+ setMetricUnitName("");
2000
2191
  };
2001
2192
  const handleEditMetric = (serviceId, metric) => {
2002
2193
  setMetricModal({ serviceId, metric });
2003
2194
  setMetricName(metric);
2004
2195
  // Initialize limits with existing values and track which tiers have this metric
2005
2196
  const existingLimits = {};
2197
+ const existingOveragePrices = {};
2198
+ const existingOverageCycles = {};
2006
2199
  const enabledTiers = new Set();
2200
+ let existingUnitName = "";
2007
2201
  tiers.forEach((tier) => {
2008
2202
  const usageLimit = tier.usageLimits.find((ul) => ul.serviceId === serviceId && ul.metric === metric);
2009
2203
  // Load value from either limit (numeric) or notes (string)
2010
2204
  existingLimits[tier.id] =
2011
2205
  usageLimit?.limit?.toString() || usageLimit?.notes || "";
2206
+ // Load per-tier overage pricing
2207
+ existingOveragePrices[tier.id] = usageLimit?.unitPrice?.toString() || "";
2208
+ existingOverageCycles[tier.id] = usageLimit?.unitPriceBillingCycle || "";
2012
2209
  if (usageLimit) {
2013
2210
  enabledTiers.add(tier.id);
2211
+ // Get unit name from first tier that has it
2212
+ if (!existingUnitName && usageLimit.unitName) {
2213
+ existingUnitName = usageLimit.unitName;
2214
+ }
2014
2215
  }
2015
2216
  });
2016
2217
  setMetricLimits(existingLimits);
2017
2218
  setMetricEnabledTiers(enabledTiers);
2219
+ setMetricOveragePrices(existingOveragePrices);
2220
+ setMetricOverageCycles(existingOverageCycles);
2221
+ setMetricUnitName(existingUnitName);
2018
2222
  };
2019
2223
  const handleRemoveMetric = (serviceId, metric) => {
2020
2224
  // Remove this metric from all tiers
@@ -2039,6 +2243,35 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2039
2243
  lastModified: new Date().toISOString(),
2040
2244
  }));
2041
2245
  };
2246
+ // Service reordering - swap display order with adjacent service
2247
+ const handleReorderService = (serviceId, direction, groupServices) => {
2248
+ // Sort services by displayOrder for consistent ordering
2249
+ const sortedServices = [...groupServices].sort((a, b) => {
2250
+ const orderA = a.displayOrder ?? 999;
2251
+ const orderB = b.displayOrder ?? 999;
2252
+ return orderA - orderB;
2253
+ });
2254
+ const currentIndex = sortedServices.findIndex((s) => s.id === serviceId);
2255
+ if (currentIndex === -1)
2256
+ return;
2257
+ const targetIndex = direction === "up" ? currentIndex - 1 : currentIndex + 1;
2258
+ if (targetIndex < 0 || targetIndex >= sortedServices.length)
2259
+ return;
2260
+ const currentService = sortedServices[currentIndex];
2261
+ const targetService = sortedServices[targetIndex];
2262
+ const now = new Date().toISOString();
2263
+ // Swap display orders
2264
+ dispatch(updateService({
2265
+ id: currentService.id,
2266
+ displayOrder: targetIndex,
2267
+ lastModified: now,
2268
+ }));
2269
+ dispatch(updateService({
2270
+ id: targetService.id,
2271
+ displayOrder: currentIndex,
2272
+ lastModified: now,
2273
+ }));
2274
+ };
2042
2275
  const handleSaveMetric = () => {
2043
2276
  if (!metricModal || !metricName.trim())
2044
2277
  return;
@@ -2053,6 +2286,13 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2053
2286
  // Check if value is numeric or string
2054
2287
  const parsedLimit = limitValue ? parseInt(limitValue, 10) : null;
2055
2288
  const isNumeric = parsedLimit !== null && !isNaN(parsedLimit);
2289
+ // Get per-tier overage pricing
2290
+ const tierOveragePrice = metricOveragePrices[tier.id];
2291
+ const tierOverageCycle = metricOverageCycles[tier.id];
2292
+ const parsedOveragePrice = tierOveragePrice
2293
+ ? parseFloat(tierOveragePrice)
2294
+ : null;
2295
+ const hasOveragePricing = parsedOveragePrice && tierOverageCycle;
2056
2296
  if (existingLimit && !isEnabled) {
2057
2297
  // Remove limit - tier was disabled
2058
2298
  dispatch(removeUsageLimit({
@@ -2067,8 +2307,14 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2067
2307
  tierId: tier.id,
2068
2308
  limitId: existingLimit.id,
2069
2309
  metric: metricName.trim(),
2310
+ unitName: metricUnitName.trim() || undefined,
2070
2311
  limit: isNumeric ? parsedLimit : null,
2071
2312
  notes: !isNumeric && limitValue ? limitValue.trim() : null,
2313
+ unitPrice: hasOveragePricing ? parsedOveragePrice : null,
2314
+ unitPriceCurrency: hasOveragePricing ? "USD" : undefined,
2315
+ unitPriceBillingCycle: hasOveragePricing
2316
+ ? tierOverageCycle
2317
+ : undefined,
2072
2318
  lastModified: now,
2073
2319
  }));
2074
2320
  }
@@ -2079,9 +2325,15 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2079
2325
  limitId: generateId(),
2080
2326
  serviceId,
2081
2327
  metric: metricName.trim(),
2328
+ unitName: metricUnitName.trim() || undefined,
2082
2329
  limit: isNumeric ? parsedLimit : null,
2083
2330
  notes: !isNumeric && limitValue ? limitValue.trim() : null,
2084
2331
  resetPeriod: "MONTHLY",
2332
+ unitPrice: hasOveragePricing ? parsedOveragePrice : undefined,
2333
+ unitPriceCurrency: hasOveragePricing ? "USD" : undefined,
2334
+ unitPriceBillingCycle: hasOveragePricing
2335
+ ? tierOverageCycle
2336
+ : undefined,
2085
2337
  lastModified: now,
2086
2338
  }));
2087
2339
  }
@@ -2090,6 +2342,9 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2090
2342
  setMetricName("");
2091
2343
  setMetricLimits({});
2092
2344
  setMetricEnabledTiers(new Set());
2345
+ setMetricOveragePrices({});
2346
+ setMetricOverageCycles({});
2347
+ setMetricUnitName("");
2093
2348
  };
2094
2349
  const getLevelDisplay = (serviceLevel) => {
2095
2350
  if (!serviceLevel)
@@ -2114,41 +2369,72 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2114
2369
  ? "Add services in the Service Catalog to configure the matrix."
2115
2370
  : "Add tiers in Tier Definition to configure the matrix." })] }) })] }));
2116
2371
  }
2117
- return (_jsxs(_Fragment, { children: [_jsx("style", { children: matrixStyles }), _jsxs("div", { className: "matrix", children: [_jsxs("div", { className: "matrix__facets", children: [_jsx("div", { className: "matrix__facets-row", children: Object.entries(FACET_CATEGORIES).map(([key, category]) => (_jsxs("div", { className: "matrix__facet-group", children: [_jsx("span", { className: "matrix__facet-label", children: category.label }), key === "ANONYMITY" ? (_jsx("div", { className: "matrix__toggle-group", children: category.options.map((option) => (_jsx("button", { onClick: () => setSelectedFacets((prev) => ({
2118
- ...prev,
2119
- [key]: option.id,
2120
- })), className: `matrix__toggle-btn ${selectedFacets[key] === option.id
2121
- ? "matrix__toggle-btn--active"
2122
- : ""}`, children: option.label }, option.id))) })) : (_jsx("select", { value: selectedFacets[key] || "", onChange: (e) => setSelectedFacets((prev) => ({
2372
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: matrixStyles }), _jsxs("div", { className: "matrix", children: [Object.keys(facetCategories).length > 0 && (_jsx("div", { className: "matrix__facets", children: _jsx("div", { className: "matrix__facets-row", children: Object.entries(facetCategories).map(([key, category]) => (_jsxs("div", { className: "matrix__facet-group", children: [_jsx("span", { className: "matrix__facet-label", children: category.label }), category.options.length <= 3 ? (_jsx("div", { className: "matrix__toggle-group", children: category.options.map((option) => (_jsx("button", { type: "button", onClick: () => setSelectedFacets((prev) => ({
2123
2373
  ...prev,
2124
- [key]: e.target.value,
2125
- })), className: "matrix__facet-select", children: category.options.map((option) => (_jsx("option", { value: option.id, children: option.label }, option.id))) }))] }, key))) }), selectedFacets.ANONYMITY === "highest-anonymity" && (_jsx("div", { className: "matrix__facet-notice", children: _jsxs("p", { className: "matrix__facet-notice-text", children: [_jsx("strong", { children: "Highest Anonymity:" }), " Additional setup services may be required for enhanced privacy configurations."] }) }))] }), services.length > 0 && tiers.length > 0 && (_jsxs("div", { className: "matrix__bulk-actions", children: [_jsxs("button", { type: "button", onClick: () => setShowBulkActions(!showBulkActions), className: "matrix__bulk-toggle", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M4 6h16M4 12h16M4 18h7" }) }), "Bulk Actions", _jsx("svg", { className: `matrix__bulk-toggle-arrow ${showBulkActions ? "matrix__bulk-toggle-arrow--open" : ""}`, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M19 9l-7 7-7-7" }) })] }), showBulkActions && (_jsxs("div", { className: "matrix__bulk-panel", children: [_jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Include all services in:" }), _jsx("div", { className: "matrix__bulk-buttons", children: tiers.map((tier) => (_jsxs("button", { type: "button", onClick: () => handleBulkIncludeAllInTier(tier.id), className: "matrix__bulk-btn matrix__bulk-btn--include", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M5 12l5 5L20 7" }) }), tier.name] }, tier.id))) })] }), _jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Clear all from:" }), _jsx("div", { className: "matrix__bulk-buttons", children: tiers.map((tier) => (_jsxs("button", { type: "button", onClick: () => handleBulkClearTier(tier.id), className: "matrix__bulk-btn matrix__bulk-btn--clear", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }), tier.name] }, tier.id))) })] }), tiers.length >= 2 && (_jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Copy configuration:" }), _jsx("div", { className: "matrix__bulk-copy", children: tiers.map((sourceTier, idx) => tiers
2374
+ [key]: option.id,
2375
+ })), className: `matrix__toggle-btn ${selectedFacets[key] === option.id
2376
+ ? "matrix__toggle-btn--active"
2377
+ : ""}`, children: option.label }, option.id))) })) : (_jsx("select", { value: selectedFacets[key] || category.options[0]?.id || "", onChange: (e) => setSelectedFacets((prev) => ({
2378
+ ...prev,
2379
+ [key]: e.target.value,
2380
+ })), className: "matrix__facet-select", children: category.options.map((option) => (_jsx("option", { value: option.id, children: option.label }, option.id))) }))] }, key))) }) })), services.length > 0 && tiers.length > 0 && (_jsxs("div", { className: "matrix__bulk-actions", children: [_jsxs("button", { type: "button", onClick: () => setShowBulkActions(!showBulkActions), className: "matrix__bulk-toggle", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M4 6h16M4 12h16M4 18h7" }) }), "Bulk Actions", _jsx("svg", { className: `matrix__bulk-toggle-arrow ${showBulkActions ? "matrix__bulk-toggle-arrow--open" : ""}`, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M19 9l-7 7-7-7" }) })] }), showBulkActions && (_jsxs("div", { className: "matrix__bulk-panel", children: [_jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Include all services in:" }), _jsx("div", { className: "matrix__bulk-buttons", children: tiers.map((tier) => (_jsxs("button", { type: "button", onClick: () => handleBulkIncludeAllInTier(tier.id), className: "matrix__bulk-btn matrix__bulk-btn--include", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M5 12l5 5L20 7" }) }), tier.name] }, tier.id))) })] }), _jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Clear all from:" }), _jsx("div", { className: "matrix__bulk-buttons", children: tiers.map((tier) => (_jsxs("button", { type: "button", onClick: () => handleBulkClearTier(tier.id), className: "matrix__bulk-btn matrix__bulk-btn--clear", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 18L18 6M6 6l12 12" }) }), tier.name] }, tier.id))) })] }), tiers.length >= 2 && (_jsxs("div", { className: "matrix__bulk-section", children: [_jsx("span", { className: "matrix__bulk-label", children: "Copy configuration:" }), _jsx("div", { className: "matrix__bulk-copy", children: tiers.map((sourceTier, idx) => tiers
2126
2381
  .filter((_, i) => i !== idx)
2127
2382
  .map((targetTier) => (_jsxs("button", { type: "button", onClick: () => handleBulkCopyFromTier(sourceTier.id, targetTier.id), className: "matrix__bulk-btn matrix__bulk-btn--copy", children: [sourceTier.name, " \u2192 ", targetTier.name] }, `${sourceTier.id}-${targetTier.id}`)))) })] })), _jsxs("div", { className: "matrix__bulk-section matrix__bulk-patterns", children: [_jsxs("span", { className: "matrix__bulk-label", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "matrix__bulk-label-icon", children: _jsx("path", { d: "M13 10V3L4 14h7v7l9-11h-7z" }) }), "Apply Pattern Preset:"] }), _jsxs("div", { className: "matrix__pattern-grid", children: [_jsxs("button", { type: "button", onClick: () => handleApplyPattern("good-better-best"), className: "matrix__pattern-btn", title: "Progressive inclusion: Basic tier gets 50%, mid-tier 75%, top tier 100%", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\uD83D\uDCC8" }), _jsx("span", { className: "matrix__pattern-name", children: "Good-Better-Best" }), _jsx("span", { className: "matrix__pattern-desc", children: "Progressive inclusion" })] }), _jsxs("button", { type: "button", onClick: () => handleApplyPattern("premium-only"), className: "matrix__pattern-btn", title: "Top 30% services exclusive to premium tier, rest included everywhere", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\u2B50" }), _jsx("span", { className: "matrix__pattern-name", children: "Premium Exclusives" }), _jsx("span", { className: "matrix__pattern-desc", children: "Top services in top tier only" })] }), _jsxs("button", { type: "button", onClick: () => handleApplyPattern("core-upgrades"), className: "matrix__pattern-btn", title: "Core services included, extras as optional add-ons", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\uD83C\uDFAF" }), _jsx("span", { className: "matrix__pattern-name", children: "Core + Add-ons" }), _jsx("span", { className: "matrix__pattern-desc", children: "Half included, half optional" })] }), _jsxs("button", { type: "button", onClick: () => handleApplyPattern("ascending"), className: "matrix__pattern-btn", title: "Each tier unlocks more services progressively", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\uD83E\uDE9C" }), _jsx("span", { className: "matrix__pattern-name", children: "Ascending Tiers" }), _jsx("span", { className: "matrix__pattern-desc", children: "Each tier unlocks more" })] }), _jsxs("button", { type: "button", onClick: () => handleApplyPattern("all-included"), className: "matrix__pattern-btn matrix__pattern-btn--simple", title: "Everything included in all tiers", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\u2713" }), _jsx("span", { className: "matrix__pattern-name", children: "All Included" })] }), _jsxs("button", { type: "button", onClick: () => handleApplyPattern("all-optional"), className: "matrix__pattern-btn matrix__pattern-btn--simple", title: "Everything optional in all tiers", children: [_jsx("span", { className: "matrix__pattern-icon", children: "\u25D0" }), _jsx("span", { className: "matrix__pattern-name", children: "All Optional" })] })] })] })] }))] })), incompleteServices.length > 0 && (_jsxs("div", { className: "matrix__incomplete-warning", children: [_jsx("div", { className: "matrix__incomplete-icon", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }) }), _jsxs("div", { className: "matrix__incomplete-content", children: [_jsxs("span", { className: "matrix__incomplete-title", children: [incompleteServices.length, " service", incompleteServices.length !== 1 ? "s" : "", " not configured"] }), _jsxs("span", { className: "matrix__incomplete-text", children: ["The following services are not included in any tier:", " ", _jsx("strong", { children: incompleteServices
2128
2383
  .slice(0, 3)
2129
2384
  .map((s) => s.title)
2130
2385
  .join(", ") }), incompleteServices.length > 3 &&
2131
- ` and ${incompleteServices.length - 3} more`] })] })] })), _jsx("div", { className: "matrix__table-wrap", children: _jsxs("table", { className: "matrix__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "matrix__corner-cell" }), tiers.map((tier, idx) => (_jsx("th", { onClick: () => setSelectedTierIdx(idx), className: `matrix__tier-header ${idx === selectedTierIdx
2132
- ? "matrix__tier-header--selected"
2133
- : ""}`, children: _jsxs("div", { className: "matrix__tier-header-inner", children: [_jsx("div", { className: "matrix__tier-radio" }), _jsx("span", { className: "matrix__tier-name", children: tier.name }), _jsx("span", { className: "matrix__tier-price", children: tier.isCustomPricing
2134
- ? "Custom"
2135
- : `$${tier.pricing.amount}/mo` })] }) }, tier.id)))] }) }), _jsxs("tbody", { children: [_jsx("tr", { children: _jsx("td", { colSpan: tiers.length + 1, className: "matrix__section-header", children: "Service Catalog" }) }), (setupGroups.length > 0 ||
2136
- ungroupedSetupServices.length > 0) && (_jsx("tr", { children: _jsxs("td", { colSpan: tiers.length + 1, className: "matrix__category-header", children: [_jsx("span", { className: "matrix__category-icon", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: [_jsx("path", { d: "M19 21V5a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v16" }), _jsx("path", { d: "M9 21v-6h6v6" }), _jsx("path", { d: "M9 7h.01M9 11h.01M15 7h.01M15 11h.01" })] }) }), "Setup & Formation"] }) })), setupGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: true, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, setupFee: groupSetupFees[group.id], onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive }, group.id))), ungroupedSetupServices.length > 0 && (_jsx(ServiceGroupSection, { group: {
2386
+ ` and ${incompleteServices.length - 3} more`] })] })] })), _jsx("div", { className: "matrix__table-wrap", children: _jsxs("table", { className: "matrix__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "matrix__corner-cell" }), tiers.map((tier, idx) => {
2387
+ const hasPricingOptions = tier.pricingOptions && tier.pricingOptions.length > 0;
2388
+ const selectedCycleId = selectedBillingCycles[tier.id];
2389
+ const activePricingOption = hasPricingOptions
2390
+ ? tier.pricingOptions.find((po) => po.id === selectedCycleId) ||
2391
+ tier.pricingOptions.find((po) => po.isDefault) ||
2392
+ tier.pricingOptions[0]
2393
+ : null;
2394
+ const displayAmount = activePricingOption
2395
+ ? activePricingOption.amount
2396
+ : tier.pricing.amount;
2397
+ const displayCycle = activePricingOption
2398
+ ? activePricingOption.billingCycle
2399
+ : tier.pricing.billingCycle;
2400
+ const monthlyEquivalent = displayAmount &&
2401
+ displayCycle !== "MONTHLY" &&
2402
+ displayCycle !== "ONE_TIME"
2403
+ ? getMonthlyEquivalent(displayAmount, displayCycle)
2404
+ : null;
2405
+ return (_jsx("th", { onClick: () => setSelectedTierIdx(idx), className: `matrix__tier-header ${idx === selectedTierIdx
2406
+ ? "matrix__tier-header--selected"
2407
+ : ""}`, children: _jsxs("div", { className: "matrix__tier-header-inner", children: [_jsx("div", { className: "matrix__tier-radio" }), _jsx("span", { className: "matrix__tier-name", children: tier.name }), _jsx("span", { className: "matrix__tier-price", children: tier.isCustomPricing
2408
+ ? "Custom"
2409
+ : monthlyEquivalent
2410
+ ? `$${monthlyEquivalent.toFixed(0)}/mo`
2411
+ : displayAmount !== null
2412
+ ? `$${displayAmount}/mo`
2413
+ : "$null/mo" }), hasPricingOptions &&
2414
+ tier.pricingOptions.length > 1 && (_jsx("select", { value: selectedCycleId || activePricingOption?.id || "", onClick: (e) => e.stopPropagation(), onChange: (e) => {
2415
+ e.stopPropagation();
2416
+ setSelectedBillingCycles((prev) => ({
2417
+ ...prev,
2418
+ [tier.id]: e.target.value,
2419
+ }));
2420
+ }, className: "matrix__tier-cycle-select", children: tier.pricingOptions.map((po) => (_jsxs("option", { value: po.id, children: [BILLING_CYCLE_SHORT_LABELS[po.billingCycle], " ", "- $", po.amount] }, po.id))) }))] }) }, tier.id));
2421
+ })] }) }), _jsxs("tbody", { children: [_jsx("tr", { children: _jsx("td", { colSpan: tiers.length + 1, className: "matrix__section-header", children: "Service Catalog" }) }), (setupGroups.length > 0 ||
2422
+ ungroupedSetupServices.length > 0) && (_jsx("tr", { children: _jsxs("td", { colSpan: tiers.length + 1, className: "matrix__category-header", children: [_jsx("span", { className: "matrix__category-icon", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: [_jsx("path", { d: "M19 21V5a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v16" }), _jsx("path", { d: "M9 21v-6h6v6" }), _jsx("path", { d: "M9 7h.01M9 11h.01M15 7h.01M15 11h.01" })] }) }), "Setup & Formation"] }) })), setupGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: true, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, setupFee: groupSetupFees[group.id], onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive, onReorderService: handleReorderService }, group.id))), ungroupedSetupServices.length > 0 && (_jsx(ServiceGroupSection, { group: {
2137
2423
  id: UNGROUPED_ID,
2138
2424
  name: "Setup & Formation",
2139
2425
  description: null,
2140
2426
  isAddOn: false,
2141
2427
  defaultSelected: true,
2142
- }, services: ungroupedSetupServices, tiers: tiers, isSetupFormation: true, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, setupFee: groupSetupFees[UNGROUPED_ID], selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive }, "ungrouped-setup")), (regularGroups.length > 0 ||
2143
- ungroupedRegularServices.length > 0) && (_jsx("tr", { children: _jsxs("td", { colSpan: tiers.length + 1, className: "matrix__category-header", children: [_jsx("span", { className: "matrix__category-icon", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83" }) }) }), "Recurring Services"] }) })), regularGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: false, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, dispatch: dispatch, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive }, group.id))), ungroupedRegularServices.length > 0 && (_jsx(ServiceGroupSection, { group: {
2428
+ }, services: ungroupedSetupServices, tiers: tiers, isSetupFormation: true, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, setupFee: groupSetupFees[UNGROUPED_ID], selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive, onReorderService: handleReorderService }, "ungrouped-setup")), (regularGroups.length > 0 ||
2429
+ ungroupedRegularServices.length > 0) && (_jsx("tr", { children: _jsxs("td", { colSpan: tiers.length + 1, className: "matrix__category-header", children: [_jsx("span", { className: "matrix__category-icon", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83" }) }) }), "Recurring Services"] }) })), regularGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: false, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, dispatch: dispatch, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive, onReorderService: handleReorderService }, group.id))), ungroupedRegularServices.length > 0 && (_jsx(ServiceGroupSection, { group: {
2144
2430
  id: UNGROUPED_ID,
2145
2431
  name: "Recurring Services",
2146
2432
  description: null,
2147
2433
  isAddOn: false,
2148
2434
  defaultSelected: true,
2149
- }, services: ungroupedRegularServices, tiers: tiers, isSetupFormation: false, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive }, "ungrouped-regular")), _jsxs("tr", { className: "matrix__total-row", children: [_jsx("td", { children: "SUBTOTAL" }), tiers.map((tier) => (_jsx("td", { style: { textAlign: "center" }, children: tier.isCustomPricing
2435
+ }, services: ungroupedRegularServices, tiers: tiers, isSetupFormation: false, isOptional: false, isEnabled: true, onToggle: () => { }, getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive, onReorderService: handleReorderService }, "ungrouped-regular")), _jsxs("tr", { className: "matrix__total-row", children: [_jsx("td", { children: "SUBTOTAL" }), tiers.map((tier) => (_jsx("td", { style: { textAlign: "center" }, children: tier.isCustomPricing
2150
2436
  ? "Custom"
2151
- : `$${tier.pricing.amount}` }, tier.id)))] }), addonGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: false, isOptional: true, isEnabled: enabledOptionalGroups.has(group.id), onToggle: () => toggleOptionalGroup(group.id), getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive }, group.id))), _jsxs("tr", { className: "matrix__grand-total-row", children: [_jsx("td", { children: "Grand Total (Recurring)" }), tiers.map((tier, idx) => {
2437
+ : `$${tier.pricing.amount}` }, tier.id)))] }), addonGroups.map((group) => (_jsx(ServiceGroupSection, { group: group, services: groupedServices.get(group.id) || [], tiers: tiers, isSetupFormation: false, isOptional: true, isEnabled: enabledOptionalGroups.has(group.id), onToggle: () => toggleOptionalGroup(group.id), getServiceLevelForTier: getServiceLevelForTier, getUniqueMetricsForService: getUniqueMetricsForService, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, handleSetServiceLevel: handleSetServiceLevel, dispatch: dispatch, onAddService: openAddServiceModal, selectedTierIdx: selectedTierIdx, onAddMetric: handleAddMetric, onEditMetric: handleEditMetric, onRemoveMetric: handleRemoveMetric, onTogglePremiumExclusive: handleTogglePremiumExclusive, onReorderService: handleReorderService }, group.id))), _jsxs("tr", { className: "matrix__grand-total-row", children: [_jsx("td", { children: "Grand Total (Recurring)" }), tiers.map((tier, idx) => {
2152
2438
  const tierPrice = tier.pricing.amount || 0;
2153
2439
  const grandTotal = tierPrice;
2154
2440
  return (_jsx("td", { className: idx === selectedTierIdx
@@ -2176,17 +2462,19 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2176
2462
  setNewServiceName("");
2177
2463
  setNewServiceDescription("");
2178
2464
  setNewServiceSelectedTiers(new Set());
2179
- }, className: "matrix__modal-btn matrix__modal-btn--cancel", children: "Cancel" }), _jsx("button", { onClick: handleAddService, disabled: !newServiceName.trim() || newServiceSelectedTiers.size === 0, className: "matrix__modal-btn matrix__modal-btn--primary", children: "Add Service" })] })] }) })), metricModal && (_jsx("div", { className: "matrix__modal-overlay", children: _jsxs("div", { className: "matrix__modal matrix__modal--wide", children: [_jsx("h3", { className: "matrix__modal-title", children: metricModal.metric ? "Edit Metric" : "Add Metric" }), _jsxs("div", { className: "matrix__modal-field", children: [_jsx("label", { className: "matrix__modal-label", children: "Metric Name" }), _jsx("input", { type: "text", value: metricName, onChange: (e) => setMetricName(e.target.value), placeholder: "e.g., API Calls, Storage, Users", className: "matrix__modal-input", autoFocus: true })] }), _jsxs("div", { className: "matrix__modal-field", children: [_jsx("label", { className: "matrix__modal-label", children: "Pricing Tiers & Values" }), _jsx("p", { className: "matrix__modal-hint", style: { marginBottom: "0.75rem" }, children: "Enable the metric for each tier and set values." }), _jsx("div", { style: {
2465
+ }, className: "matrix__modal-btn matrix__modal-btn--cancel", children: "Cancel" }), _jsx("button", { onClick: handleAddService, disabled: !newServiceName.trim() || newServiceSelectedTiers.size === 0, className: "matrix__modal-btn matrix__modal-btn--primary", children: "Add Service" })] })] }) })), metricModal && (_jsx("div", { className: "matrix__modal-overlay", children: _jsxs("div", { className: "matrix__modal matrix__modal--wide", children: [_jsx("h3", { className: "matrix__modal-title", children: metricModal.metric ? "Edit Metric" : "Add Metric" }), _jsxs("div", { className: "matrix__modal-field", children: [_jsx("label", { className: "matrix__modal-label", children: "Metric Name" }), _jsx("input", { type: "text", value: metricName, onChange: (e) => setMetricName(e.target.value), placeholder: "e.g., Number of Entities, API Calls, Storage", className: "matrix__modal-input", autoFocus: true })] }), _jsxs("div", { className: "matrix__modal-field", children: [_jsx("label", { className: "matrix__modal-label", children: "Unit Name (Optional)" }), _jsx("input", { type: "text", value: metricUnitName, onChange: (e) => setMetricUnitName(e.target.value), placeholder: "e.g., entity, user, API call, GB", className: "matrix__modal-input" }), _jsx("p", { className: "matrix__modal-hint", style: { marginTop: "0.375rem" }, children: "Used for overage pricing display (e.g., \"$50 per entity per month\")" })] }), _jsxs("div", { className: "matrix__modal-field", children: [_jsx("label", { className: "matrix__modal-label", children: "Pricing Tiers & Values" }), _jsx("p", { className: "matrix__modal-hint", style: { marginBottom: "0.75rem" }, children: "Enable the metric for each tier and set values." }), _jsx("div", { style: {
2180
2466
  display: "flex",
2181
2467
  flexDirection: "column",
2182
2468
  gap: "0.5rem",
2183
2469
  }, children: tiers.map((tier) => {
2184
2470
  const isEnabled = metricEnabledTiers.has(tier.id);
2471
+ const tierOveragePrice = metricOveragePrices[tier.id] || "";
2472
+ const tierOverageCycle = metricOverageCycles[tier.id] || "";
2185
2473
  return (_jsxs("div", { style: {
2186
2474
  display: "flex",
2187
- alignItems: "center",
2188
- gap: "0.75rem",
2189
- padding: "0.5rem",
2475
+ flexDirection: "column",
2476
+ gap: "0.5rem",
2477
+ padding: "0.75rem",
2190
2478
  borderRadius: "6px",
2191
2479
  background: isEnabled
2192
2480
  ? "rgba(124, 58, 237, 0.05)"
@@ -2195,48 +2483,101 @@ export function TheMatrix({ document, dispatch, groupSetupFees = {}, }) {
2195
2483
  ? "1px solid rgba(124, 58, 237, 0.2)"
2196
2484
  : "1px solid #e2e8f0",
2197
2485
  transition: "all 0.15s ease",
2198
- }, children: [_jsxs("label", { style: {
2486
+ }, children: [_jsxs("div", { style: {
2487
+ display: "flex",
2488
+ alignItems: "center",
2489
+ gap: "0.75rem",
2490
+ }, children: [_jsxs("label", { style: {
2491
+ display: "flex",
2492
+ alignItems: "center",
2493
+ gap: "0.5rem",
2494
+ cursor: "pointer",
2495
+ minWidth: "120px",
2496
+ }, children: [_jsx("input", { type: "checkbox", checked: isEnabled, onChange: (e) => {
2497
+ setMetricEnabledTiers((prev) => {
2498
+ const next = new Set(prev);
2499
+ if (e.target.checked) {
2500
+ next.add(tier.id);
2501
+ }
2502
+ else {
2503
+ next.delete(tier.id);
2504
+ }
2505
+ return next;
2506
+ });
2507
+ }, style: {
2508
+ width: "16px",
2509
+ height: "16px",
2510
+ accentColor: "#7c3aed",
2511
+ cursor: "pointer",
2512
+ } }), _jsx("span", { style: {
2513
+ fontWeight: 600,
2514
+ color: isEnabled ? "#334155" : "#94a3b8",
2515
+ fontSize: "0.875rem",
2516
+ }, children: tier.name })] }), _jsx("input", { type: "text", value: metricLimits[tier.id] || "", onChange: (e) => setMetricLimits((prev) => ({
2517
+ ...prev,
2518
+ [tier.id]: e.target.value,
2519
+ })), placeholder: isEnabled ? "Limit value" : "—", className: "matrix__modal-input", disabled: !isEnabled, style: {
2520
+ flex: 1,
2521
+ opacity: isEnabled ? 1 : 0.5,
2522
+ cursor: isEnabled ? "text" : "not-allowed",
2523
+ } })] }), isEnabled && (_jsxs("div", { style: {
2199
2524
  display: "flex",
2200
2525
  alignItems: "center",
2201
2526
  gap: "0.5rem",
2202
- cursor: "pointer",
2203
- minWidth: "120px",
2204
- }, children: [_jsx("input", { type: "checkbox", checked: isEnabled, onChange: (e) => {
2205
- setMetricEnabledTiers((prev) => {
2206
- const next = new Set(prev);
2207
- if (e.target.checked) {
2208
- next.add(tier.id);
2209
- }
2210
- else {
2211
- next.delete(tier.id);
2212
- }
2213
- return next;
2214
- });
2215
- }, style: {
2216
- width: "16px",
2217
- height: "16px",
2218
- accentColor: "#7c3aed",
2527
+ marginLeft: "1.75rem",
2528
+ padding: "0.5rem 0.75rem",
2529
+ background: "rgba(255,255,255,0.6)",
2530
+ borderRadius: "4px",
2531
+ }, children: [_jsx("span", { style: {
2532
+ fontSize: "0.75rem",
2533
+ color: "#64748b",
2534
+ whiteSpace: "nowrap",
2535
+ }, children: "Overage:" }), _jsx("span", { style: {
2536
+ fontFamily: "var(--so-font-mono)",
2537
+ fontSize: "0.8125rem",
2538
+ color: "#64748b",
2539
+ }, children: "$" }), _jsx("input", { type: "number", value: tierOveragePrice, onChange: (e) => setMetricOveragePrices((prev) => ({
2540
+ ...prev,
2541
+ [tier.id]: e.target.value,
2542
+ })), placeholder: "0.00", step: "0.01", style: {
2543
+ width: "4rem",
2544
+ fontFamily: "var(--so-font-mono)",
2545
+ fontSize: "0.8125rem",
2546
+ fontWeight: 500,
2547
+ color: "#0f172a",
2548
+ background: "#ffffff",
2549
+ border: "1px solid #cbd5e1",
2550
+ borderRadius: "4px",
2551
+ padding: "0.25rem 0.375rem",
2552
+ outline: "none",
2553
+ } }), _jsx("span", { style: { fontSize: "0.75rem", color: "#94a3b8" }, children: "/" }), _jsxs("select", { value: tierOverageCycle, onChange: (e) => setMetricOverageCycles((prev) => ({
2554
+ ...prev,
2555
+ [tier.id]: e.target.value || "",
2556
+ })), style: {
2557
+ fontFamily: "var(--so-font-sans)",
2558
+ fontSize: "0.75rem",
2559
+ color: "#334155",
2560
+ background: "#ffffff",
2561
+ border: "1px solid #cbd5e1",
2562
+ borderRadius: "4px",
2563
+ padding: "0.25rem 0.375rem",
2219
2564
  cursor: "pointer",
2220
- } }), _jsx("span", { style: {
2221
- fontWeight: 600,
2222
- color: isEnabled ? "#334155" : "#94a3b8",
2223
- fontSize: "0.875rem",
2224
- }, children: tier.name })] }), _jsx("input", { type: "text", value: metricLimits[tier.id] || "", onChange: (e) => setMetricLimits((prev) => ({
2225
- ...prev,
2226
- [tier.id]: e.target.value,
2227
- })), placeholder: isEnabled ? "Enter value" : "—", className: "matrix__modal-input", disabled: !isEnabled, style: {
2228
- flex: 1,
2229
- opacity: isEnabled ? 1 : 0.5,
2230
- cursor: isEnabled ? "text" : "not-allowed",
2231
- } })] }, tier.id));
2565
+ outline: "none",
2566
+ }, children: [_jsx("option", { value: "", children: "None" }), RECURRING_BILLING_CYCLES.map((cycle) => (_jsx("option", { value: cycle, children: BILLING_CYCLE_SHORT_LABELS[cycle] }, cycle)))] }), _jsxs("span", { style: {
2567
+ fontSize: "0.6875rem",
2568
+ color: "#64748b",
2569
+ }, children: ["per extra ", metricUnitName || "unit"] })] }))] }, tier.id));
2232
2570
  }) })] }), _jsxs("div", { className: "matrix__modal-actions", children: [_jsx("button", { onClick: () => {
2233
2571
  setMetricModal(null);
2234
2572
  setMetricName("");
2573
+ setMetricUnitName("");
2235
2574
  setMetricLimits({});
2236
2575
  setMetricEnabledTiers(new Set());
2576
+ setMetricOveragePrices({});
2577
+ setMetricOverageCycles({});
2237
2578
  }, className: "matrix__modal-btn matrix__modal-btn--cancel", children: "Cancel" }), _jsx("button", { onClick: handleSaveMetric, disabled: !metricName.trim() || metricEnabledTiers.size === 0, className: "matrix__modal-btn matrix__modal-btn--primary", children: metricModal.metric ? "Save Changes" : "Add Metric" })] })] }) }))] })] }));
2238
2579
  }
2239
- function ServiceGroupSection({ group, services, tiers, isSetupFormation, isOptional, isEnabled, onToggle, getServiceLevelForTier, getUniqueMetricsForService, getUsageLimitForMetric, getLevelDisplay, selectedCell, setSelectedCell, setupFee, onAddService, selectedTierIdx, onAddMetric, onEditMetric, onRemoveMetric, onTogglePremiumExclusive, }) {
2580
+ function ServiceGroupSection({ group, services, tiers, isSetupFormation, isOptional, isEnabled, onToggle, getServiceLevelForTier, getUniqueMetricsForService, getUsageLimitForMetric, getLevelDisplay, selectedCell, setSelectedCell, setupFee, onAddService, selectedTierIdx, onAddMetric, onEditMetric, onRemoveMetric, onTogglePremiumExclusive, onReorderService, }) {
2240
2581
  const showGroup = services.length > 0 || onAddService;
2241
2582
  if (!showGroup)
2242
2583
  return null;
@@ -2256,9 +2597,9 @@ function ServiceGroupSection({ group, services, tiers, isSetupFormation, isOptio
2256
2597
  ? "INCLUDED"
2257
2598
  : isOptional
2258
2599
  ? "OPTIONAL"
2259
- : "INCLUDED" }) })] }), services.map((service) => {
2600
+ : "INCLUDED" }) })] }), services.map((service, serviceIndex) => {
2260
2601
  const metrics = getUniqueMetricsForService(service.id);
2261
- return (_jsx(ServiceRowWithMetrics, { service: service, metrics: metrics, tiers: tiers, rowClass: rowClass, getServiceLevelForTier: getServiceLevelForTier, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, selectedTierIdx: selectedTierIdx, onAddMetric: onAddMetric, onEditMetric: onEditMetric, onRemoveMetric: onRemoveMetric, onTogglePremiumExclusive: onTogglePremiumExclusive }, service.id));
2602
+ return (_jsx(ServiceRowWithMetrics, { service: service, metrics: metrics, tiers: tiers, rowClass: rowClass, getServiceLevelForTier: getServiceLevelForTier, getUsageLimitForMetric: getUsageLimitForMetric, getLevelDisplay: getLevelDisplay, selectedCell: selectedCell, setSelectedCell: setSelectedCell, selectedTierIdx: selectedTierIdx, onAddMetric: onAddMetric, onEditMetric: onEditMetric, onRemoveMetric: onRemoveMetric, onTogglePremiumExclusive: onTogglePremiumExclusive, onReorderService: onReorderService, groupServices: services, serviceIndex: serviceIndex }, service.id));
2262
2603
  }), onAddService && group.id !== "__ungrouped__" && (_jsxs("tr", { className: `matrix__add-service-row ${rowClass}`, children: [_jsx("td", { className: rowClass, children: _jsxs("button", { onClick: () => onAddService(group.id, isSetupFormation), className: "matrix__add-service-btn", children: [_jsx("svg", { className: "matrix__add-service-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" }) }), "+ Add a Service"] }) }), _jsx("td", { colSpan: tiers.length, className: rowClass })] })), isSetupFormation && (_jsxs("tr", { className: "matrix__setup-total-row", children: [_jsx("td", { children: "TOTAL SETUP FEE" }), _jsx("td", { colSpan: tiers.length, style: { textAlign: "center" }, children: setupFee
2263
2604
  ? `$${setupFee} flat fee (applied to all tiers)`
2264
2605
  : "No setup fee configured" })] })), isOptional && (_jsxs("tr", { className: `matrix__total-row ${headerClass}`, children: [_jsx("td", { className: headerClass, children: "SUBTOTAL" }), tiers.map((tier, tierIdx) => {
@@ -2274,10 +2615,16 @@ function ServiceGroupSection({ group, services, tiers, isSetupFormation, isOptio
2274
2615
  }, children: isEnabled ? priceDisplay : "$0" }, tier.id));
2275
2616
  })] }))] }));
2276
2617
  }
2277
- function ServiceRowWithMetrics({ service, metrics, tiers, rowClass, getServiceLevelForTier, getUsageLimitForMetric, getLevelDisplay, selectedCell, setSelectedCell, selectedTierIdx, onAddMetric, onEditMetric, onRemoveMetric, onTogglePremiumExclusive, }) {
2618
+ function ServiceRowWithMetrics({ service, metrics, tiers, rowClass, getServiceLevelForTier, getUsageLimitForMetric, getLevelDisplay, selectedCell, setSelectedCell, selectedTierIdx, onAddMetric, onEditMetric, onRemoveMetric, onTogglePremiumExclusive, onReorderService, groupServices, serviceIndex, }) {
2278
2619
  // Use persisted isPremiumExclusive field from document state
2279
2620
  const isPremiumExclusive = service.isPremiumExclusive;
2280
- return (_jsxs(_Fragment, { children: [_jsxs("tr", { className: `matrix__service-row ${rowClass}`, children: [_jsx("td", { className: `matrix__service-cell ${rowClass}`, children: _jsxs("div", { className: "matrix__service-cell-wrapper", children: [_jsx("span", { className: "matrix__service-title", children: service.title }), _jsxs("button", { onClick: (e) => {
2621
+ return (_jsxs(_Fragment, { children: [_jsxs("tr", { className: `matrix__service-row ${rowClass}`, children: [_jsx("td", { className: `matrix__service-cell ${rowClass}`, children: _jsxs("div", { className: "matrix__service-cell-wrapper", children: [_jsxs("div", { className: "matrix__reorder-btns", children: [_jsx("button", { className: "matrix__reorder-btn", onClick: (e) => {
2622
+ e.stopPropagation();
2623
+ onReorderService(service.id, "up", groupServices);
2624
+ }, disabled: serviceIndex === 0, title: "Move up", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M18 15l-6-6-6 6" }) }) }), _jsx("button", { className: "matrix__reorder-btn", onClick: (e) => {
2625
+ e.stopPropagation();
2626
+ onReorderService(service.id, "down", groupServices);
2627
+ }, disabled: serviceIndex === groupServices.length - 1, title: "Move down", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 9l6 6 6-6" }) }) })] }), _jsx("span", { className: "matrix__service-title", children: service.title }), _jsxs("button", { onClick: (e) => {
2281
2628
  e.stopPropagation();
2282
2629
  onTogglePremiumExclusive(service.id);
2283
2630
  }, className: `matrix__premium-badge ${isPremiumExclusive ? "matrix__premium-badge--active" : "matrix__premium-badge--inactive"}`, title: isPremiumExclusive
@@ -2311,11 +2658,12 @@ function ServiceRowWithMetrics({ service, metrics, tiers, rowClass, getServiceLe
2311
2658
  const usageLimit = getUsageLimitForMetric(service.id, metric, tier);
2312
2659
  return (_jsx("td", { className: `matrix__metric-value-cell ${tierIdx === selectedTierIdx
2313
2660
  ? "matrix__level-cell--highlight"
2314
- : ""}`, children: _jsx("span", { className: "matrix__metric-value", children: usageLimit
2315
- ? usageLimit.limit
2316
- ? `Up to ${usageLimit.limit}`
2317
- : usageLimit.notes || "Unlimited"
2318
- : "—" }) }, tier.id));
2661
+ : ""}`, children: _jsxs("div", { className: "matrix__metric-value-container", children: [_jsx("span", { className: "matrix__metric-value", children: usageLimit
2662
+ ? usageLimit.limit
2663
+ ? `Up to ${usageLimit.limit}`
2664
+ : usageLimit.notes || "Unlimited"
2665
+ : "—" }), usageLimit?.unitPrice &&
2666
+ usageLimit?.unitPriceBillingCycle && (_jsxs("span", { className: "matrix__metric-overage", children: ["+", formatPrice(usageLimit.unitPrice, usageLimit.unitPriceCurrency || "USD"), "/", BILLING_CYCLE_SHORT_LABELS[usageLimit.unitPriceBillingCycle].toLowerCase()] }))] }) }, tier.id));
2319
2667
  })] }, `${service.id}-${metric}`)))] }));
2320
2668
  }
2321
2669
  function ServiceLevelDetailPanel({ serviceId, tierId, services, tiers, optionGroups: _optionGroups, dispatch, onClose, }) {
@@ -2414,37 +2762,6 @@ function ServiceLevelDetailPanel({ serviceId, tierId, services, tiers, optionGro
2414
2762
  lastModified: new Date().toISOString(),
2415
2763
  }));
2416
2764
  };
2417
- const handleSetLevel = (level) => {
2418
- if (serviceLevel) {
2419
- dispatch(updateServiceLevel({
2420
- tierId: tier.id,
2421
- serviceLevelId: serviceLevel.id,
2422
- level,
2423
- customValue: level === "CUSTOM" ? customValue : undefined,
2424
- lastModified: new Date().toISOString(),
2425
- }));
2426
- }
2427
- else {
2428
- dispatch(addServiceLevel({
2429
- tierId: tier.id,
2430
- serviceLevelId: generateId(),
2431
- serviceId: service.id,
2432
- level,
2433
- customValue: level === "CUSTOM" ? customValue : undefined,
2434
- lastModified: new Date().toISOString(),
2435
- }));
2436
- }
2437
- };
2438
- const handleUpdateCustomValue = () => {
2439
- if (serviceLevel && serviceLevel.level === "CUSTOM") {
2440
- dispatch(updateServiceLevel({
2441
- tierId: tier.id,
2442
- serviceLevelId: serviceLevel.id,
2443
- customValue,
2444
- lastModified: new Date().toISOString(),
2445
- }));
2446
- }
2447
- };
2448
2765
  return (_jsx("div", { ref: overlayRef, className: "matrix__panel-overlay", onClick: handleOverlayClick, role: "dialog", "aria-modal": "true", "aria-labelledby": "panel-title", children: _jsxs("div", { ref: panelRef, className: "matrix__panel", children: [_jsxs("div", { className: "matrix__panel-header", children: [_jsxs("div", { className: "matrix__panel-header-top", children: [_jsxs("span", { className: "matrix__panel-tier", children: [tier.name, " Tier"] }), _jsx("button", { onClick: onClose, className: "matrix__panel-close", children: _jsx("svg", { className: "matrix__panel-close-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsx("h3", { id: "panel-title", className: "matrix__panel-title", children: service.title })] }), _jsx("div", { className: "matrix__panel-body", children: _jsxs("div", { children: [_jsxs("div", { className: "matrix__panel-limits-header", children: [_jsx("label", { className: "matrix__panel-section-label", style: { marginBottom: 0 }, children: "Metrics" }), _jsx("button", { onClick: () => setIsAddingMetric(true), className: "matrix__panel-add-btn", children: "+ Add Metric" })] }), usageLimits.map((limit) => (_jsx(MetricLimitItem, { limit: limit, tierId: tier.id, dispatch: dispatch, onRemove: () => handleRemoveLimit(limit.id) }, limit.id))), usageLimits.length === 0 && !isAddingMetric && (_jsx("p", { className: "matrix__panel-empty-text", children: "No metrics added yet. Metrics will appear as nested rows under this service in the matrix." })), isAddingMetric && (_jsxs("div", { className: "matrix__panel-edit-form", children: [_jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Metric Name" }), _jsx("input", { type: "text", value: newMetric, onChange: (e) => setNewMetric(e.target.value), placeholder: "e.g., API Calls, Storage, Users", className: "matrix__panel-input", autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Value" }), _jsx("input", { type: "text", value: newLimit, onChange: (e) => setNewLimit(e.target.value), placeholder: "e.g., 100, Unlimited, Custom", className: "matrix__panel-input" }), _jsx("p", { className: "matrix__panel-edit-hint", children: "Enter a value or leave empty" })] }), _jsxs("div", { className: "matrix__panel-edit-actions", children: [_jsx("button", { onClick: handleAddLimit, disabled: !newMetric.trim(), className: "matrix__panel-edit-btn matrix__panel-edit-btn--primary", children: "Add Metric" }), _jsx("button", { onClick: () => {
2449
2766
  setNewMetric("");
2450
2767
  setNewLimit("");
@@ -2454,27 +2771,53 @@ function ServiceLevelDetailPanel({ serviceId, tierId, services, tiers, optionGro
2454
2771
  function MetricLimitItem({ limit, tierId, dispatch, onRemove, }) {
2455
2772
  const [isEditing, setIsEditing] = useState(false);
2456
2773
  const [editMetric, setEditMetric] = useState(limit.metric);
2774
+ const [editUnitName, setEditUnitName] = useState(limit.unitName || "");
2457
2775
  const [editLimit, setEditLimit] = useState(limit.limit?.toString() || limit.notes || "");
2776
+ // Overage pricing state
2777
+ const [editUnitPrice, setEditUnitPrice] = useState(limit.unitPrice?.toString() || "");
2778
+ const [editUnitPriceCurrency] = useState(limit.unitPriceCurrency || "USD");
2779
+ const [editUnitPriceBillingCycle, setEditUnitPriceBillingCycle] = useState(limit.unitPriceBillingCycle || "");
2458
2780
  const handleSave = () => {
2459
2781
  const parsedLimit = editLimit ? parseInt(editLimit, 10) : null;
2460
2782
  const isNumeric = parsedLimit !== null && !isNaN(parsedLimit);
2783
+ const parsedUnitPrice = editUnitPrice ? parseFloat(editUnitPrice) : null;
2461
2784
  dispatch(updateUsageLimit({
2462
2785
  tierId,
2463
2786
  limitId: limit.id,
2464
2787
  metric: editMetric.trim() || limit.metric,
2788
+ unitName: editUnitName.trim() || undefined,
2465
2789
  limit: isNumeric ? parsedLimit : undefined,
2466
2790
  notes: !isNumeric && editLimit ? editLimit.trim() : undefined,
2791
+ unitPrice: parsedUnitPrice,
2792
+ unitPriceCurrency: parsedUnitPrice && editUnitPriceBillingCycle
2793
+ ? editUnitPriceCurrency
2794
+ : undefined,
2795
+ unitPriceBillingCycle: parsedUnitPrice && editUnitPriceBillingCycle
2796
+ ? editUnitPriceBillingCycle
2797
+ : undefined,
2467
2798
  lastModified: new Date().toISOString(),
2468
2799
  }));
2469
2800
  setIsEditing(false);
2470
2801
  };
2471
2802
  const handleCancel = () => {
2472
2803
  setEditMetric(limit.metric);
2804
+ setEditUnitName(limit.unitName || "");
2473
2805
  setEditLimit(limit.limit?.toString() || limit.notes || "");
2806
+ setEditUnitPrice(limit.unitPrice?.toString() || "");
2807
+ setEditUnitPriceBillingCycle(limit.unitPriceBillingCycle || "");
2474
2808
  setIsEditing(false);
2475
2809
  };
2810
+ // Format overage display string
2811
+ const getOverageDisplay = () => {
2812
+ if (!limit.unitPrice || !limit.unitPriceBillingCycle)
2813
+ return null;
2814
+ const cycleLabel = BILLING_CYCLE_SHORT_LABELS[limit.unitPriceBillingCycle].toLowerCase();
2815
+ const unitLabel = limit.unitName || "unit";
2816
+ return `+${formatPrice(limit.unitPrice, limit.unitPriceCurrency || "USD")} per ${unitLabel}/${cycleLabel}`;
2817
+ };
2818
+ const overageDisplay = getOverageDisplay();
2476
2819
  if (isEditing) {
2477
- return (_jsxs("div", { className: "matrix__panel-edit-form", children: [_jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Metric Name" }), _jsx("input", { type: "text", value: editMetric, onChange: (e) => setEditMetric(e.target.value), placeholder: "Metric name", className: "matrix__panel-input", autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Value" }), _jsx("input", { type: "text", value: editLimit, onChange: (e) => setEditLimit(e.target.value), placeholder: "e.g., 100, Unlimited, Custom", className: "matrix__panel-input" }), _jsx("p", { className: "matrix__panel-edit-hint", children: "Enter a value or leave empty" })] }), _jsxs("div", { className: "matrix__panel-edit-actions", children: [_jsx("button", { onClick: handleSave, className: "matrix__panel-edit-btn matrix__panel-edit-btn--primary", children: "Save" }), _jsx("button", { onClick: handleCancel, className: "matrix__panel-edit-btn matrix__panel-edit-btn--secondary", children: "Cancel" })] })] }));
2820
+ return (_jsxs("div", { className: "matrix__panel-edit-form", children: [_jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Metric Name" }), _jsx("input", { type: "text", value: editMetric, onChange: (e) => setEditMetric(e.target.value), placeholder: "e.g., Number of Entities", className: "matrix__panel-input", autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Unit Name" }), _jsx("input", { type: "text", value: editUnitName, onChange: (e) => setEditUnitName(e.target.value), placeholder: "e.g., entity, credit card, contractor", className: "matrix__panel-input" }), _jsx("p", { className: "matrix__panel-edit-hint", children: "Used for overage pricing display (e.g., \"$50 per entity\")" })] }), _jsxs("div", { children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Included Value" }), _jsx("input", { type: "text", value: editLimit, onChange: (e) => setEditLimit(e.target.value), placeholder: "e.g., 100, Unlimited, Custom", className: "matrix__panel-input" }), _jsx("p", { className: "matrix__panel-edit-hint", children: "Enter limit included in tier or leave empty" })] }), _jsxs("div", { className: "matrix__panel-overage-section", children: [_jsx("label", { className: "matrix__panel-edit-label", children: "Overage Pricing (Optional)" }), _jsx("p", { className: "matrix__panel-edit-hint", style: { marginBottom: "0.5rem" }, children: "Set a price for usage beyond the included limit" }), _jsxs("div", { className: "matrix__panel-overage-row", children: [_jsxs("div", { className: "matrix__panel-overage-price", children: [_jsx("span", { className: "matrix__panel-overage-currency", children: "$" }), _jsx("input", { type: "number", value: editUnitPrice, onChange: (e) => setEditUnitPrice(e.target.value), placeholder: "0.00", step: "0.01", className: "matrix__panel-overage-input" })] }), _jsx("span", { className: "matrix__panel-overage-separator", children: "/" }), _jsxs("select", { value: editUnitPriceBillingCycle, onChange: (e) => setEditUnitPriceBillingCycle(e.target.value || ""), className: "matrix__panel-overage-select", children: [_jsx("option", { value: "", children: "No overage" }), RECURRING_BILLING_CYCLES.map((cycle) => (_jsx("option", { value: cycle, children: BILLING_CYCLE_SHORT_LABELS[cycle] }, cycle)))] }), _jsxs("span", { className: "matrix__panel-overage-label", children: ["per ", editUnitName || "unit"] })] })] }), _jsxs("div", { className: "matrix__panel-edit-actions", children: [_jsx("button", { onClick: handleSave, className: "matrix__panel-edit-btn matrix__panel-edit-btn--primary", children: "Save" }), _jsx("button", { onClick: handleCancel, className: "matrix__panel-edit-btn matrix__panel-edit-btn--secondary", children: "Cancel" })] })] }));
2478
2821
  }
2479
- return (_jsxs("div", { className: "matrix__panel-limit-item", children: [_jsxs("div", { className: "matrix__panel-limit-content", onClick: () => setIsEditing(true), children: [_jsx("div", { className: "matrix__panel-limit-metric", children: limit.metric }), _jsx("div", { className: "matrix__panel-limit-value", children: limit.limit ?? limit.notes ?? "—" })] }), _jsxs("div", { className: "matrix__panel-limit-actions", children: [_jsx("button", { onClick: () => setIsEditing(true), className: "matrix__panel-limit-btn matrix__panel-limit-btn--edit", title: "Edit metric", children: _jsx("svg", { className: "matrix__panel-limit-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" }) }) }), _jsx("button", { onClick: onRemove, className: "matrix__panel-limit-btn matrix__panel-limit-btn--remove", title: "Remove metric", children: _jsx("svg", { className: "matrix__panel-limit-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] })] }));
2822
+ return (_jsxs("div", { className: "matrix__panel-limit-item", children: [_jsxs("div", { className: "matrix__panel-limit-content", onClick: () => setIsEditing(true), children: [_jsx("div", { className: "matrix__panel-limit-metric", children: limit.metric }), _jsxs("div", { className: "matrix__panel-limit-value-group", children: [_jsx("div", { className: "matrix__panel-limit-value", children: limit.limit ?? limit.notes ?? "—" }), overageDisplay && (_jsx("div", { className: "matrix__panel-limit-overage", children: overageDisplay }))] })] }), _jsxs("div", { className: "matrix__panel-limit-actions", children: [_jsx("button", { onClick: () => setIsEditing(true), className: "matrix__panel-limit-btn matrix__panel-limit-btn--edit", title: "Edit metric", children: _jsx("svg", { className: "matrix__panel-limit-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" }) }) }), _jsx("button", { onClick: onRemove, className: "matrix__panel-limit-btn matrix__panel-limit-btn--remove", title: "Remove metric", children: _jsx("svg", { className: "matrix__panel-limit-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] })] }));
2480
2823
  }