@powerhousedao/builder-team-admin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +179 -0
  3. package/dist/document-models/builders/actions.d.ts +14 -0
  4. package/dist/document-models/builders/actions.d.ts.map +1 -0
  5. package/dist/document-models/builders/actions.js +4 -0
  6. package/dist/document-models/builders/gen/actions.d.ts +4 -0
  7. package/dist/document-models/builders/gen/actions.d.ts.map +1 -0
  8. package/dist/document-models/builders/gen/actions.js +1 -0
  9. package/dist/document-models/builders/gen/builders/actions.d.ts +12 -0
  10. package/dist/document-models/builders/gen/builders/actions.d.ts.map +1 -0
  11. package/dist/document-models/builders/gen/builders/actions.js +1 -0
  12. package/dist/document-models/builders/gen/builders/creators.d.ts +5 -0
  13. package/dist/document-models/builders/gen/builders/creators.d.ts.map +1 -0
  14. package/dist/document-models/builders/gen/builders/creators.js +4 -0
  15. package/dist/document-models/builders/gen/builders/error.d.ts +2 -0
  16. package/dist/document-models/builders/gen/builders/error.d.ts.map +1 -0
  17. package/dist/document-models/builders/gen/builders/error.js +1 -0
  18. package/dist/document-models/builders/gen/builders/operations.d.ts +8 -0
  19. package/dist/document-models/builders/gen/builders/operations.d.ts.map +1 -0
  20. package/dist/document-models/builders/gen/builders/operations.js +3 -0
  21. package/dist/document-models/builders/gen/creators.d.ts +3 -0
  22. package/dist/document-models/builders/gen/creators.d.ts.map +1 -0
  23. package/dist/document-models/builders/gen/creators.js +2 -0
  24. package/dist/document-models/builders/gen/document-model.d.ts +3 -0
  25. package/dist/document-models/builders/gen/document-model.d.ts.map +1 -0
  26. package/dist/document-models/builders/gen/document-model.js +59 -0
  27. package/dist/document-models/builders/gen/document-schema.d.ts +142 -0
  28. package/dist/document-models/builders/gen/document-schema.d.ts.map +1 -0
  29. package/dist/document-models/builders/gen/document-schema.js +33 -0
  30. package/dist/document-models/builders/gen/document-type.d.ts +2 -0
  31. package/dist/document-models/builders/gen/document-type.d.ts.map +1 -0
  32. package/dist/document-models/builders/gen/document-type.js +1 -0
  33. package/dist/document-models/builders/gen/index.d.ts +12 -0
  34. package/dist/document-models/builders/gen/index.d.ts.map +1 -0
  35. package/dist/document-models/builders/gen/index.js +11 -0
  36. package/dist/document-models/builders/gen/ph-factories.d.ts +23 -0
  37. package/dist/document-models/builders/gen/ph-factories.d.ts.map +1 -0
  38. package/dist/document-models/builders/gen/ph-factories.js +47 -0
  39. package/dist/document-models/builders/gen/reducer.d.ts +3 -0
  40. package/dist/document-models/builders/gen/reducer.d.ts.map +1 -0
  41. package/dist/document-models/builders/gen/reducer.js +21 -0
  42. package/dist/document-models/builders/gen/schema/index.d.ts +3 -0
  43. package/dist/document-models/builders/gen/schema/index.d.ts.map +1 -0
  44. package/dist/document-models/builders/gen/schema/index.js +2 -0
  45. package/dist/document-models/builders/gen/schema/types.d.ts +146 -0
  46. package/dist/document-models/builders/gen/schema/types.d.ts.map +1 -0
  47. package/dist/document-models/builders/gen/schema/types.js +1 -0
  48. package/dist/document-models/builders/gen/schema/zod.d.ts +13 -0
  49. package/dist/document-models/builders/gen/schema/zod.d.ts.map +1 -0
  50. package/dist/document-models/builders/gen/schema/zod.js +21 -0
  51. package/dist/document-models/builders/gen/types.d.ts +12 -0
  52. package/dist/document-models/builders/gen/types.d.ts.map +1 -0
  53. package/dist/document-models/builders/gen/types.js +1 -0
  54. package/dist/document-models/builders/gen/utils.d.ts +15 -0
  55. package/dist/document-models/builders/gen/utils.d.ts.map +1 -0
  56. package/dist/document-models/builders/gen/utils.js +51 -0
  57. package/dist/document-models/builders/hooks.d.ts +11 -0
  58. package/dist/document-models/builders/hooks.d.ts.map +1 -0
  59. package/dist/document-models/builders/hooks.js +26 -0
  60. package/dist/document-models/builders/index.d.ts +10 -0
  61. package/dist/document-models/builders/index.d.ts.map +1 -0
  62. package/dist/document-models/builders/index.js +9 -0
  63. package/dist/document-models/builders/module.d.ts +5 -0
  64. package/dist/document-models/builders/module.d.ts.map +1 -0
  65. package/dist/document-models/builders/module.js +10 -0
  66. package/dist/document-models/builders/src/index.d.ts +2 -0
  67. package/dist/document-models/builders/src/index.d.ts.map +1 -0
  68. package/dist/document-models/builders/src/index.js +1 -0
  69. package/dist/document-models/builders/src/reducers/builders.d.ts +3 -0
  70. package/dist/document-models/builders/src/reducers/builders.d.ts.map +1 -0
  71. package/dist/document-models/builders/src/reducers/builders.js +8 -0
  72. package/dist/document-models/builders/src/tests/builders.test.d.ts +6 -0
  73. package/dist/document-models/builders/src/tests/builders.test.d.ts.map +1 -0
  74. package/dist/document-models/builders/src/tests/builders.test.js +29 -0
  75. package/dist/document-models/builders/src/tests/document-model.test.d.ts +10 -0
  76. package/dist/document-models/builders/src/tests/document-model.test.d.ts.map +1 -0
  77. package/dist/document-models/builders/src/tests/document-model.test.js +104 -0
  78. package/dist/document-models/builders/src/utils.d.ts +2 -0
  79. package/dist/document-models/builders/src/utils.d.ts.map +1 -0
  80. package/dist/document-models/builders/src/utils.js +1 -0
  81. package/dist/document-models/builders/utils.d.ts +14 -0
  82. package/dist/document-models/builders/utils.d.ts.map +1 -0
  83. package/dist/document-models/builders/utils.js +7 -0
  84. package/dist/document-models/document-models.d.ts +3 -0
  85. package/dist/document-models/document-models.d.ts.map +1 -0
  86. package/dist/document-models/document-models.js +6 -0
  87. package/dist/document-models/expense-report/actions.d.ts +27 -0
  88. package/dist/document-models/expense-report/actions.d.ts.map +1 -0
  89. package/dist/document-models/expense-report/actions.js +4 -0
  90. package/dist/document-models/expense-report/gen/actions.d.ts +4 -0
  91. package/dist/document-models/expense-report/gen/actions.d.ts.map +1 -0
  92. package/dist/document-models/expense-report/gen/actions.js +1 -0
  93. package/dist/document-models/expense-report/gen/creators.d.ts +3 -0
  94. package/dist/document-models/expense-report/gen/creators.d.ts.map +1 -0
  95. package/dist/document-models/expense-report/gen/creators.js +2 -0
  96. package/dist/document-models/expense-report/gen/document-model.d.ts +3 -0
  97. package/dist/document-models/expense-report/gen/document-model.d.ts.map +1 -0
  98. package/dist/document-models/expense-report/gen/document-model.js +202 -0
  99. package/dist/document-models/expense-report/gen/document-schema.d.ts +199 -0
  100. package/dist/document-models/expense-report/gen/document-schema.d.ts.map +1 -0
  101. package/dist/document-models/expense-report/gen/document-schema.js +33 -0
  102. package/dist/document-models/expense-report/gen/document-type.d.ts +2 -0
  103. package/dist/document-models/expense-report/gen/document-type.d.ts.map +1 -0
  104. package/dist/document-models/expense-report/gen/document-type.js +1 -0
  105. package/dist/document-models/expense-report/gen/index.d.ts +12 -0
  106. package/dist/document-models/expense-report/gen/index.d.ts.map +1 -0
  107. package/dist/document-models/expense-report/gen/index.js +11 -0
  108. package/dist/document-models/expense-report/gen/ph-factories.d.ts +23 -0
  109. package/dist/document-models/expense-report/gen/ph-factories.d.ts.map +1 -0
  110. package/dist/document-models/expense-report/gen/ph-factories.js +186 -0
  111. package/dist/document-models/expense-report/gen/reducer.d.ts +3 -0
  112. package/dist/document-models/expense-report/gen/reducer.d.ts.map +1 -0
  113. package/dist/document-models/expense-report/gen/reducer.js +73 -0
  114. package/dist/document-models/expense-report/gen/schema/index.d.ts +3 -0
  115. package/dist/document-models/expense-report/gen/schema/index.d.ts.map +1 -0
  116. package/dist/document-models/expense-report/gen/schema/index.js +2 -0
  117. package/dist/document-models/expense-report/gen/schema/types.d.ts +258 -0
  118. package/dist/document-models/expense-report/gen/schema/types.d.ts.map +1 -0
  119. package/dist/document-models/expense-report/gen/schema/types.js +1 -0
  120. package/dist/document-models/expense-report/gen/schema/zod.d.ts +32 -0
  121. package/dist/document-models/expense-report/gen/schema/zod.d.ts.map +1 -0
  122. package/dist/document-models/expense-report/gen/schema/zod.js +200 -0
  123. package/dist/document-models/expense-report/gen/types.d.ts +12 -0
  124. package/dist/document-models/expense-report/gen/types.d.ts.map +1 -0
  125. package/dist/document-models/expense-report/gen/types.js +1 -0
  126. package/dist/document-models/expense-report/gen/utils.d.ts +15 -0
  127. package/dist/document-models/expense-report/gen/utils.d.ts.map +1 -0
  128. package/dist/document-models/expense-report/gen/utils.js +190 -0
  129. package/dist/document-models/expense-report/gen/wallet/actions.d.ts +64 -0
  130. package/dist/document-models/expense-report/gen/wallet/actions.d.ts.map +1 -0
  131. package/dist/document-models/expense-report/gen/wallet/actions.js +1 -0
  132. package/dist/document-models/expense-report/gen/wallet/creators.d.ts +18 -0
  133. package/dist/document-models/expense-report/gen/wallet/creators.d.ts.map +1 -0
  134. package/dist/document-models/expense-report/gen/wallet/creators.js +17 -0
  135. package/dist/document-models/expense-report/gen/wallet/error.d.ts +2 -0
  136. package/dist/document-models/expense-report/gen/wallet/error.d.ts.map +1 -0
  137. package/dist/document-models/expense-report/gen/wallet/error.js +1 -0
  138. package/dist/document-models/expense-report/gen/wallet/operations.d.ts +21 -0
  139. package/dist/document-models/expense-report/gen/wallet/operations.d.ts.map +1 -0
  140. package/dist/document-models/expense-report/gen/wallet/operations.js +3 -0
  141. package/dist/document-models/expense-report/hooks.d.ts +11 -0
  142. package/dist/document-models/expense-report/hooks.d.ts.map +1 -0
  143. package/dist/document-models/expense-report/hooks.js +26 -0
  144. package/dist/document-models/expense-report/index.d.ts +10 -0
  145. package/dist/document-models/expense-report/index.d.ts.map +1 -0
  146. package/dist/document-models/expense-report/index.js +9 -0
  147. package/dist/document-models/expense-report/module.d.ts +5 -0
  148. package/dist/document-models/expense-report/module.d.ts.map +1 -0
  149. package/dist/document-models/expense-report/module.js +10 -0
  150. package/dist/document-models/expense-report/src/index.d.ts +2 -0
  151. package/dist/document-models/expense-report/src/index.d.ts.map +1 -0
  152. package/dist/document-models/expense-report/src/index.js +1 -0
  153. package/dist/document-models/expense-report/src/reducers/wallet.d.ts +3 -0
  154. package/dist/document-models/expense-report/src/reducers/wallet.d.ts.map +1 -0
  155. package/dist/document-models/expense-report/src/reducers/wallet.js +196 -0
  156. package/dist/document-models/expense-report/src/tests/document-model.test.d.ts +10 -0
  157. package/dist/document-models/expense-report/src/tests/document-model.test.d.ts.map +1 -0
  158. package/dist/document-models/expense-report/src/tests/document-model.test.js +104 -0
  159. package/dist/document-models/expense-report/src/tests/wallet.test.d.ts +6 -0
  160. package/dist/document-models/expense-report/src/tests/wallet.test.d.ts.map +1 -0
  161. package/dist/document-models/expense-report/src/tests/wallet.test.js +159 -0
  162. package/dist/document-models/expense-report/src/utils.d.ts +2 -0
  163. package/dist/document-models/expense-report/src/utils.d.ts.map +1 -0
  164. package/dist/document-models/expense-report/src/utils.js +1 -0
  165. package/dist/document-models/expense-report/utils.d.ts +14 -0
  166. package/dist/document-models/expense-report/utils.d.ts.map +1 -0
  167. package/dist/document-models/expense-report/utils.js +7 -0
  168. package/dist/document-models/index.d.ts +3 -0
  169. package/dist/document-models/index.d.ts.map +1 -0
  170. package/dist/document-models/index.js +2 -0
  171. package/dist/document-models/service-subscriptions/actions.d.ts +25 -0
  172. package/dist/document-models/service-subscriptions/actions.d.ts.map +1 -0
  173. package/dist/document-models/service-subscriptions/actions.js +9 -0
  174. package/dist/document-models/service-subscriptions/gen/actions.d.ts +8 -0
  175. package/dist/document-models/service-subscriptions/gen/actions.d.ts.map +1 -0
  176. package/dist/document-models/service-subscriptions/gen/actions.js +3 -0
  177. package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts +16 -0
  178. package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts.map +1 -0
  179. package/dist/document-models/service-subscriptions/gen/categories/actions.js +1 -0
  180. package/dist/document-models/service-subscriptions/gen/categories/creators.d.ts +6 -0
  181. package/dist/document-models/service-subscriptions/gen/categories/creators.d.ts.map +1 -0
  182. package/dist/document-models/service-subscriptions/gen/categories/creators.js +5 -0
  183. package/dist/document-models/service-subscriptions/gen/categories/error.d.ts +2 -0
  184. package/dist/document-models/service-subscriptions/gen/categories/error.d.ts.map +1 -0
  185. package/dist/document-models/service-subscriptions/gen/categories/error.js +1 -0
  186. package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts +9 -0
  187. package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts.map +1 -0
  188. package/dist/document-models/service-subscriptions/gen/categories/operations.js +3 -0
  189. package/dist/document-models/service-subscriptions/gen/creators.d.ts +7 -0
  190. package/dist/document-models/service-subscriptions/gen/creators.d.ts.map +1 -0
  191. package/dist/document-models/service-subscriptions/gen/creators.js +6 -0
  192. package/dist/document-models/service-subscriptions/gen/document-model.d.ts +3 -0
  193. package/dist/document-models/service-subscriptions/gen/document-model.d.ts.map +1 -0
  194. package/dist/document-models/service-subscriptions/gen/document-model.js +194 -0
  195. package/dist/document-models/service-subscriptions/gen/document-schema.d.ts +180 -0
  196. package/dist/document-models/service-subscriptions/gen/document-schema.d.ts.map +1 -0
  197. package/dist/document-models/service-subscriptions/gen/document-schema.js +33 -0
  198. package/dist/document-models/service-subscriptions/gen/document-type.d.ts +2 -0
  199. package/dist/document-models/service-subscriptions/gen/document-type.d.ts.map +1 -0
  200. package/dist/document-models/service-subscriptions/gen/document-type.js +1 -0
  201. package/dist/document-models/service-subscriptions/gen/index.d.ts +14 -0
  202. package/dist/document-models/service-subscriptions/gen/index.d.ts.map +1 -0
  203. package/dist/document-models/service-subscriptions/gen/index.js +13 -0
  204. package/dist/document-models/service-subscriptions/gen/ph-factories.d.ts +23 -0
  205. package/dist/document-models/service-subscriptions/gen/ph-factories.d.ts.map +1 -0
  206. package/dist/document-models/service-subscriptions/gen/ph-factories.js +45 -0
  207. package/dist/document-models/service-subscriptions/gen/reducer.d.ts +3 -0
  208. package/dist/document-models/service-subscriptions/gen/reducer.d.ts.map +1 -0
  209. package/dist/document-models/service-subscriptions/gen/reducer.js +67 -0
  210. package/dist/document-models/service-subscriptions/gen/schema/index.d.ts +3 -0
  211. package/dist/document-models/service-subscriptions/gen/schema/index.d.ts.map +1 -0
  212. package/dist/document-models/service-subscriptions/gen/schema/index.js +2 -0
  213. package/dist/document-models/service-subscriptions/gen/schema/types.d.ts +274 -0
  214. package/dist/document-models/service-subscriptions/gen/schema/types.d.ts.map +1 -0
  215. package/dist/document-models/service-subscriptions/gen/schema/types.js +1 -0
  216. package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts +31 -0
  217. package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts.map +1 -0
  218. package/dist/document-models/service-subscriptions/gen/schema/zod.js +199 -0
  219. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts +32 -0
  220. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts.map +1 -0
  221. package/dist/document-models/service-subscriptions/gen/subscriptions/actions.js +1 -0
  222. package/dist/document-models/service-subscriptions/gen/subscriptions/creators.d.ts +10 -0
  223. package/dist/document-models/service-subscriptions/gen/subscriptions/creators.d.ts.map +1 -0
  224. package/dist/document-models/service-subscriptions/gen/subscriptions/creators.js +9 -0
  225. package/dist/document-models/service-subscriptions/gen/subscriptions/error.d.ts +2 -0
  226. package/dist/document-models/service-subscriptions/gen/subscriptions/error.d.ts.map +1 -0
  227. package/dist/document-models/service-subscriptions/gen/subscriptions/error.js +1 -0
  228. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts +13 -0
  229. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts.map +1 -0
  230. package/dist/document-models/service-subscriptions/gen/subscriptions/operations.js +3 -0
  231. package/dist/document-models/service-subscriptions/gen/types.d.ts +12 -0
  232. package/dist/document-models/service-subscriptions/gen/types.d.ts.map +1 -0
  233. package/dist/document-models/service-subscriptions/gen/types.js +1 -0
  234. package/dist/document-models/service-subscriptions/gen/utils.d.ts +15 -0
  235. package/dist/document-models/service-subscriptions/gen/utils.d.ts.map +1 -0
  236. package/dist/document-models/service-subscriptions/gen/utils.js +53 -0
  237. package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts +16 -0
  238. package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts.map +1 -0
  239. package/dist/document-models/service-subscriptions/gen/vendors/actions.js +1 -0
  240. package/dist/document-models/service-subscriptions/gen/vendors/creators.d.ts +6 -0
  241. package/dist/document-models/service-subscriptions/gen/vendors/creators.d.ts.map +1 -0
  242. package/dist/document-models/service-subscriptions/gen/vendors/creators.js +5 -0
  243. package/dist/document-models/service-subscriptions/gen/vendors/error.d.ts +2 -0
  244. package/dist/document-models/service-subscriptions/gen/vendors/error.d.ts.map +1 -0
  245. package/dist/document-models/service-subscriptions/gen/vendors/error.js +1 -0
  246. package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts +9 -0
  247. package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts.map +1 -0
  248. package/dist/document-models/service-subscriptions/gen/vendors/operations.js +3 -0
  249. package/dist/document-models/service-subscriptions/hooks.d.ts +11 -0
  250. package/dist/document-models/service-subscriptions/hooks.d.ts.map +1 -0
  251. package/dist/document-models/service-subscriptions/hooks.js +26 -0
  252. package/dist/document-models/service-subscriptions/index.d.ts +10 -0
  253. package/dist/document-models/service-subscriptions/index.d.ts.map +1 -0
  254. package/dist/document-models/service-subscriptions/index.js +9 -0
  255. package/dist/document-models/service-subscriptions/module.d.ts +5 -0
  256. package/dist/document-models/service-subscriptions/module.d.ts.map +1 -0
  257. package/dist/document-models/service-subscriptions/module.js +10 -0
  258. package/dist/document-models/service-subscriptions/src/index.d.ts +2 -0
  259. package/dist/document-models/service-subscriptions/src/index.d.ts.map +1 -0
  260. package/dist/document-models/service-subscriptions/src/index.js +1 -0
  261. package/dist/document-models/service-subscriptions/src/reducers/categories.d.ts +3 -0
  262. package/dist/document-models/service-subscriptions/src/reducers/categories.d.ts.map +1 -0
  263. package/dist/document-models/service-subscriptions/src/reducers/categories.js +24 -0
  264. package/dist/document-models/service-subscriptions/src/reducers/subscriptions.d.ts +3 -0
  265. package/dist/document-models/service-subscriptions/src/reducers/subscriptions.d.ts.map +1 -0
  266. package/dist/document-models/service-subscriptions/src/reducers/subscriptions.js +114 -0
  267. package/dist/document-models/service-subscriptions/src/reducers/vendors.d.ts +3 -0
  268. package/dist/document-models/service-subscriptions/src/reducers/vendors.d.ts.map +1 -0
  269. package/dist/document-models/service-subscriptions/src/reducers/vendors.js +30 -0
  270. package/dist/document-models/service-subscriptions/src/tests/categories.test.d.ts +6 -0
  271. package/dist/document-models/service-subscriptions/src/tests/categories.test.d.ts.map +1 -0
  272. package/dist/document-models/service-subscriptions/src/tests/categories.test.js +39 -0
  273. package/dist/document-models/service-subscriptions/src/tests/document-model.test.d.ts +10 -0
  274. package/dist/document-models/service-subscriptions/src/tests/document-model.test.d.ts.map +1 -0
  275. package/dist/document-models/service-subscriptions/src/tests/document-model.test.js +104 -0
  276. package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.d.ts +6 -0
  277. package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.d.ts.map +1 -0
  278. package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.js +79 -0
  279. package/dist/document-models/service-subscriptions/src/tests/vendors.test.d.ts +6 -0
  280. package/dist/document-models/service-subscriptions/src/tests/vendors.test.d.ts.map +1 -0
  281. package/dist/document-models/service-subscriptions/src/tests/vendors.test.js +39 -0
  282. package/dist/document-models/service-subscriptions/src/utils.d.ts +2 -0
  283. package/dist/document-models/service-subscriptions/src/utils.d.ts.map +1 -0
  284. package/dist/document-models/service-subscriptions/src/utils.js +1 -0
  285. package/dist/document-models/service-subscriptions/utils.d.ts +14 -0
  286. package/dist/document-models/service-subscriptions/utils.d.ts.map +1 -0
  287. package/dist/document-models/service-subscriptions/utils.js +7 -0
  288. package/dist/editors/builder-team-admin/components/CreateDocument.d.ts +6 -0
  289. package/dist/editors/builder-team-admin/components/CreateDocument.d.ts.map +1 -0
  290. package/dist/editors/builder-team-admin/components/CreateDocument.js +18 -0
  291. package/dist/editors/builder-team-admin/components/DriveContents.d.ts +6 -0
  292. package/dist/editors/builder-team-admin/components/DriveContents.d.ts.map +1 -0
  293. package/dist/editors/builder-team-admin/components/DriveContents.js +38 -0
  294. package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts +7 -0
  295. package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts.map +1 -0
  296. package/dist/editors/builder-team-admin/components/DriveExplorer.js +45 -0
  297. package/dist/editors/builder-team-admin/components/EmptyState.d.ts +3 -0
  298. package/dist/editors/builder-team-admin/components/EmptyState.d.ts.map +1 -0
  299. package/dist/editors/builder-team-admin/components/EmptyState.js +10 -0
  300. package/dist/editors/builder-team-admin/components/ExpenseReportsStats.d.ts +11 -0
  301. package/dist/editors/builder-team-admin/components/ExpenseReportsStats.d.ts.map +1 -0
  302. package/dist/editors/builder-team-admin/components/ExpenseReportsStats.js +137 -0
  303. package/dist/editors/builder-team-admin/components/Files.d.ts +3 -0
  304. package/dist/editors/builder-team-admin/components/Files.d.ts.map +1 -0
  305. package/dist/editors/builder-team-admin/components/Files.js +12 -0
  306. package/dist/editors/builder-team-admin/components/FolderTree.d.ts +14 -0
  307. package/dist/editors/builder-team-admin/components/FolderTree.d.ts.map +1 -0
  308. package/dist/editors/builder-team-admin/components/FolderTree.js +209 -0
  309. package/dist/editors/builder-team-admin/components/Folders.d.ts +3 -0
  310. package/dist/editors/builder-team-admin/components/Folders.d.ts.map +1 -0
  311. package/dist/editors/builder-team-admin/components/Folders.js +12 -0
  312. package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.d.ts +3 -0
  313. package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.d.ts.map +1 -0
  314. package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.js +6 -0
  315. package/dist/editors/builder-team-admin/components/expense-reports.d.ts +2 -0
  316. package/dist/editors/builder-team-admin/components/expense-reports.d.ts.map +1 -0
  317. package/dist/editors/builder-team-admin/components/expense-reports.js +250 -0
  318. package/dist/editors/builder-team-admin/components/overview/ProfileHeader.d.ts +10 -0
  319. package/dist/editors/builder-team-admin/components/overview/ProfileHeader.d.ts.map +1 -0
  320. package/dist/editors/builder-team-admin/components/overview/ProfileHeader.js +24 -0
  321. package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.d.ts +15 -0
  322. package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.d.ts.map +1 -0
  323. package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.js +61 -0
  324. package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.d.ts +10 -0
  325. package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.d.ts.map +1 -0
  326. package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.js +97 -0
  327. package/dist/editors/builder-team-admin/components/team-members.d.ts +2 -0
  328. package/dist/editors/builder-team-admin/components/team-members.d.ts.map +1 -0
  329. package/dist/editors/builder-team-admin/components/team-members.js +200 -0
  330. package/dist/editors/builder-team-admin/config.d.ts +4 -0
  331. package/dist/editors/builder-team-admin/config.d.ts.map +1 -0
  332. package/dist/editors/builder-team-admin/config.js +10 -0
  333. package/dist/editors/builder-team-admin/editor.d.ts +4 -0
  334. package/dist/editors/builder-team-admin/editor.d.ts.map +1 -0
  335. package/dist/editors/builder-team-admin/editor.js +11 -0
  336. package/dist/editors/builder-team-admin/module.d.ts +3 -0
  337. package/dist/editors/builder-team-admin/module.d.ts.map +1 -0
  338. package/dist/editors/builder-team-admin/module.js +10 -0
  339. package/dist/editors/builders/editor.d.ts +3 -0
  340. package/dist/editors/builders/editor.d.ts.map +1 -0
  341. package/dist/editors/builders/editor.js +204 -0
  342. package/dist/editors/builders/module.d.ts +4 -0
  343. package/dist/editors/builders/module.d.ts.map +1 -0
  344. package/dist/editors/builders/module.js +10 -0
  345. package/dist/editors/editors.d.ts +3 -0
  346. package/dist/editors/editors.d.ts.map +1 -0
  347. package/dist/editors/editors.js +8 -0
  348. package/dist/editors/expense-report/components/AddBillingStatementModal.d.ts +11 -0
  349. package/dist/editors/expense-report/components/AddBillingStatementModal.d.ts.map +1 -0
  350. package/dist/editors/expense-report/components/AddBillingStatementModal.js +195 -0
  351. package/dist/editors/expense-report/components/AggregatedExpensesTable.d.ts +11 -0
  352. package/dist/editors/expense-report/components/AggregatedExpensesTable.d.ts.map +1 -0
  353. package/dist/editors/expense-report/components/AggregatedExpensesTable.js +388 -0
  354. package/dist/editors/expense-report/components/ExpenseReportPDF.d.ts +10 -0
  355. package/dist/editors/expense-report/components/ExpenseReportPDF.d.ts.map +1 -0
  356. package/dist/editors/expense-report/components/ExpenseReportPDF.js +287 -0
  357. package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.d.ts +14 -0
  358. package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.d.ts.map +1 -0
  359. package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.js +64 -0
  360. package/dist/editors/expense-report/components/WalletsTable.d.ts +12 -0
  361. package/dist/editors/expense-report/components/WalletsTable.d.ts.map +1 -0
  362. package/dist/editors/expense-report/components/WalletsTable.js +456 -0
  363. package/dist/editors/expense-report/config.d.ts +3 -0
  364. package/dist/editors/expense-report/config.d.ts.map +1 -0
  365. package/dist/editors/expense-report/config.js +3 -0
  366. package/dist/editors/expense-report/editor.d.ts +2 -0
  367. package/dist/editors/expense-report/editor.d.ts.map +1 -0
  368. package/dist/editors/expense-report/editor.js +107 -0
  369. package/dist/editors/expense-report/hooks/useSyncWallet.d.ts +5 -0
  370. package/dist/editors/expense-report/hooks/useSyncWallet.d.ts.map +1 -0
  371. package/dist/editors/expense-report/hooks/useSyncWallet.js +150 -0
  372. package/dist/editors/expense-report/hooks/useWalletSync.d.ts +9 -0
  373. package/dist/editors/expense-report/hooks/useWalletSync.d.ts.map +1 -0
  374. package/dist/editors/expense-report/hooks/useWalletSync.js +78 -0
  375. package/dist/editors/expense-report/module.d.ts +3 -0
  376. package/dist/editors/expense-report/module.d.ts.map +1 -0
  377. package/dist/editors/expense-report/module.js +9 -0
  378. package/dist/editors/index.d.ts +4 -0
  379. package/dist/editors/index.d.ts.map +1 -0
  380. package/dist/editors/index.js +3 -0
  381. package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.d.ts +7 -0
  382. package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.d.ts.map +1 -0
  383. package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.js +39 -0
  384. package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.d.ts +10 -0
  385. package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.d.ts.map +1 -0
  386. package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.js +64 -0
  387. package/dist/editors/service-subscriptions-editor/components/AddVendorModal.d.ts +7 -0
  388. package/dist/editors/service-subscriptions-editor/components/AddVendorModal.d.ts.map +1 -0
  389. package/dist/editors/service-subscriptions-editor/components/AddVendorModal.js +43 -0
  390. package/dist/editors/service-subscriptions-editor/components/CategoriesList.d.ts +8 -0
  391. package/dist/editors/service-subscriptions-editor/components/CategoriesList.d.ts.map +1 -0
  392. package/dist/editors/service-subscriptions-editor/components/CategoriesList.js +23 -0
  393. package/dist/editors/service-subscriptions-editor/components/EditName.d.ts +3 -0
  394. package/dist/editors/service-subscriptions-editor/components/EditName.d.ts.map +1 -0
  395. package/dist/editors/service-subscriptions-editor/components/EditName.js +31 -0
  396. package/dist/editors/service-subscriptions-editor/components/StatsOverview.d.ts +8 -0
  397. package/dist/editors/service-subscriptions-editor/components/StatsOverview.d.ts.map +1 -0
  398. package/dist/editors/service-subscriptions-editor/components/StatsOverview.js +32 -0
  399. package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.d.ts +10 -0
  400. package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.d.ts.map +1 -0
  401. package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.js +88 -0
  402. package/dist/editors/service-subscriptions-editor/components/VendorsList.d.ts +8 -0
  403. package/dist/editors/service-subscriptions-editor/components/VendorsList.d.ts.map +1 -0
  404. package/dist/editors/service-subscriptions-editor/components/VendorsList.js +23 -0
  405. package/dist/editors/service-subscriptions-editor/editor.d.ts +2 -0
  406. package/dist/editors/service-subscriptions-editor/editor.d.ts.map +1 -0
  407. package/dist/editors/service-subscriptions-editor/editor.js +60 -0
  408. package/dist/editors/service-subscriptions-editor/module.d.ts +4 -0
  409. package/dist/editors/service-subscriptions-editor/module.d.ts.map +1 -0
  410. package/dist/editors/service-subscriptions-editor/module.js +10 -0
  411. package/dist/index.d.ts +5 -0
  412. package/dist/index.d.ts.map +1 -0
  413. package/dist/index.js +6 -0
  414. package/dist/package.json +119 -0
  415. package/dist/powerhouse.manifest.json +27 -0
  416. package/dist/processors/index.d.ts +2 -0
  417. package/dist/processors/index.d.ts.map +1 -0
  418. package/dist/processors/index.js +1 -0
  419. package/dist/style.css +3948 -0
  420. package/dist/subgraphs/index.d.ts +2 -0
  421. package/dist/subgraphs/index.d.ts.map +1 -0
  422. package/dist/subgraphs/index.js +1 -0
  423. package/dist/subgraphs/service-subscriptions/index.d.ts +11 -0
  424. package/dist/subgraphs/service-subscriptions/index.d.ts.map +1 -0
  425. package/dist/subgraphs/service-subscriptions/index.js +11 -0
  426. package/dist/subgraphs/service-subscriptions/resolvers.d.ts +3 -0
  427. package/dist/subgraphs/service-subscriptions/resolvers.d.ts.map +1 -0
  428. package/dist/subgraphs/service-subscriptions/resolvers.js +228 -0
  429. package/dist/subgraphs/service-subscriptions/schema.d.ts +3 -0
  430. package/dist/subgraphs/service-subscriptions/schema.d.ts.map +1 -0
  431. package/dist/subgraphs/service-subscriptions/schema.js +193 -0
  432. package/dist/vite.config.d.ts +3 -0
  433. package/dist/vite.config.d.ts.map +1 -0
  434. package/dist/vite.config.js +13 -0
  435. package/dist/vitest.config.d.ts +3 -0
  436. package/dist/vitest.config.d.ts.map +1 -0
  437. package/dist/vitest.config.js +15 -0
  438. package/package.json +119 -0
@@ -0,0 +1,150 @@
1
+ import { useDocumentsInSelectedDrive } from "@powerhousedao/reactor-browser";
2
+ import { actions } from "../../../document-models/expense-report/index.js";
3
+ import { generateId } from "document-model";
4
+ export function useSyncWallet() {
5
+ const documents = useDocumentsInSelectedDrive();
6
+ const syncWallet = (walletAddress, existingLineItems, billingStatementIds, groups, allWallets, accountTransactionsDocumentId, periodStart, periodEnd, dispatch) => {
7
+ if (!documents)
8
+ return;
9
+ // Get billing statement documents
10
+ const billingStatements = new Map();
11
+ documents
12
+ .filter((doc) => doc.header.documentType === "powerhouse/billing-statement")
13
+ .forEach((doc) => {
14
+ billingStatements.set(doc.header.id, doc);
15
+ });
16
+ // Helper function to map tag to group
17
+ const mapTagToGroup = (billingLineItem) => {
18
+ // Find expense-account tag
19
+ const expenseAccountTag = billingLineItem.lineItemTag?.find((tag) => tag.dimension === "expense-account");
20
+ if (!expenseAccountTag || !expenseAccountTag.label)
21
+ return null;
22
+ // Find matching group by label
23
+ const group = groups.find((g) => g.label === expenseAccountTag.label);
24
+ return group ? group.id : null;
25
+ };
26
+ // Helper function to calculate payments from AccountTransactions document
27
+ const calculatePaymentsFromTransactions = (txDocumentId, start, end) => {
28
+ // Find AccountTransactions document
29
+ const txDoc = documents?.find((doc) => doc.header.id === txDocumentId &&
30
+ doc.header.documentType === "powerhouse/account-transactions");
31
+ if (!txDoc?.state?.global?.transactions) {
32
+ return 0;
33
+ }
34
+ const transactions = txDoc.state.global.transactions || [];
35
+ const startDate = new Date(start);
36
+ const endDate = new Date(end);
37
+ // USD stablecoin list
38
+ const USD_STABLECOINS = ["USDC", "USDT", "USDS", "DAI", "GUSD", "TUSD"];
39
+ // Create set of all wallet addresses for intergroup detection
40
+ const walletAddresses = new Set(allWallets.map((w) => w.wallet?.toLowerCase()).filter(Boolean));
41
+ // Calculate total payments from USD transactions
42
+ const totalPayments = transactions.reduce((sum, tx) => {
43
+ // Only count OUTFLOW transactions
44
+ if (tx.direction !== "OUTFLOW")
45
+ return sum;
46
+ // Check if transaction is within period
47
+ const txDate = new Date(tx.datetime);
48
+ if (txDate < startDate || txDate > endDate)
49
+ return sum;
50
+ // Extract currency unit from amount
51
+ const unit = tx.amount?.unit || tx.details?.token;
52
+ if (!USD_STABLECOINS.includes(unit))
53
+ return sum;
54
+ // Exclude intergroup transactions (transactions to other wallets in this report)
55
+ const counterParty = tx.counterParty?.toLowerCase();
56
+ if (counterParty && walletAddresses.has(counterParty))
57
+ return sum;
58
+ // Add the transaction amount (convert to number if it's a string)
59
+ const amount = parseFloat(tx.amount?.value || 0);
60
+ return sum + amount;
61
+ }, 0);
62
+ return totalPayments;
63
+ };
64
+ // Aggregate line items by category
65
+ const categoryAggregation = new Map();
66
+ // Extract and aggregate line items from all billing statements
67
+ billingStatementIds.forEach((statementId) => {
68
+ const statement = billingStatements.get(statementId);
69
+ if (!statement?.state?.global?.lineItems)
70
+ return;
71
+ const lineItems = statement.state.global.lineItems || [];
72
+ lineItems.forEach((billingLineItem) => {
73
+ const groupId = mapTagToGroup(billingLineItem);
74
+ const categoryKey = groupId || "uncategorized";
75
+ const existing = categoryAggregation.get(categoryKey);
76
+ if (existing) {
77
+ // Aggregate values for the same category
78
+ existing.actuals += billingLineItem.totalPriceCash || 0;
79
+ }
80
+ else {
81
+ // Create new category entry
82
+ const group = groups.find((g) => g.id === groupId);
83
+ categoryAggregation.set(categoryKey, {
84
+ groupId: groupId,
85
+ groupLabel: group?.label || "Uncategorized",
86
+ budget: 0,
87
+ actuals: billingLineItem.totalPriceCash || 0,
88
+ forecast: 0,
89
+ payments: 0,
90
+ });
91
+ }
92
+ });
93
+ });
94
+ // Calculate payments from transactions for "Uncategorized" items
95
+ if (accountTransactionsDocumentId && periodStart && periodEnd) {
96
+ const transactionPayments = calculatePaymentsFromTransactions(accountTransactionsDocumentId, periodStart, periodEnd);
97
+ if (transactionPayments > 0) {
98
+ // Add payments to "uncategorized" category
99
+ const uncategorized = categoryAggregation.get("uncategorized");
100
+ if (uncategorized) {
101
+ // Update existing uncategorized category with payments
102
+ uncategorized.payments = transactionPayments;
103
+ }
104
+ else {
105
+ // Create new uncategorized category entry with payments
106
+ categoryAggregation.set("uncategorized", {
107
+ groupId: null,
108
+ groupLabel: "Uncategorized",
109
+ budget: 0,
110
+ actuals: 0,
111
+ forecast: 0,
112
+ payments: transactionPayments,
113
+ });
114
+ }
115
+ }
116
+ }
117
+ // Now add or update line items in wallet
118
+ categoryAggregation.forEach((aggregatedItem) => {
119
+ // Check if this line item already exists for this wallet
120
+ const existingLineItem = existingLineItems.find((item) => item.group === aggregatedItem.groupId);
121
+ if (existingLineItem && existingLineItem.id) {
122
+ // Update existing line item
123
+ dispatch(actions.updateLineItem({
124
+ wallet: walletAddress,
125
+ lineItemId: existingLineItem.id,
126
+ actuals: aggregatedItem.actuals,
127
+ payments: aggregatedItem.payments,
128
+ }));
129
+ }
130
+ else {
131
+ // Add new line item
132
+ const expenseLineItem = {
133
+ id: generateId(),
134
+ label: aggregatedItem.groupLabel,
135
+ group: aggregatedItem.groupId,
136
+ budget: aggregatedItem.budget,
137
+ actuals: aggregatedItem.actuals,
138
+ forecast: aggregatedItem.forecast,
139
+ payments: aggregatedItem.payments,
140
+ comments: null,
141
+ };
142
+ dispatch(actions.addLineItem({
143
+ wallet: walletAddress,
144
+ lineItem: expenseLineItem,
145
+ }));
146
+ }
147
+ });
148
+ };
149
+ return { syncWallet };
150
+ }
@@ -0,0 +1,9 @@
1
+ import type { Wallet } from "../../../document-models/expense-report/gen/types.js";
2
+ interface SyncStatus {
3
+ needsSync: boolean;
4
+ outdatedWallets: string[];
5
+ tagChangedWallets: string[];
6
+ }
7
+ export declare function useWalletSync(wallets: Wallet[]): SyncStatus;
8
+ export {};
9
+ //# sourceMappingURL=useWalletSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWalletSync.d.ts","sourceRoot":"","sources":["../../../../editors/expense-report/hooks/useWalletSync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sDAAsD,CAAC;AAEnF,UAAU,UAAU;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CA2G3D"}
@@ -0,0 +1,78 @@
1
+ import { useMemo } from "react";
2
+ import { useDocumentsInSelectedDrive } from "@powerhousedao/reactor-browser";
3
+ export function useWalletSync(wallets) {
4
+ const documents = useDocumentsInSelectedDrive();
5
+ const syncStatus = useMemo(() => {
6
+ if (!documents || wallets.length === 0) {
7
+ return { needsSync: false, outdatedWallets: [], tagChangedWallets: [] };
8
+ }
9
+ // Create a map of billing statement documents
10
+ const billingStatements = new Map();
11
+ documents
12
+ .filter((doc) => doc.header.documentType === "powerhouse/billing-statement")
13
+ .forEach((doc) => {
14
+ billingStatements.set(doc.header.id, doc);
15
+ });
16
+ const outdatedWallets = [];
17
+ const tagChangedWallets = [];
18
+ // Check each wallet
19
+ wallets.forEach((wallet) => {
20
+ if (!wallet.billingStatements || wallet.billingStatements.length === 0) {
21
+ return; // No billing statements to sync
22
+ }
23
+ // Get current aggregated totals by category from wallet line items
24
+ const currentCategoryTotals = new Map();
25
+ wallet.lineItems?.forEach((item) => {
26
+ if (item?.group) {
27
+ const currentTotal = currentCategoryTotals.get(item.group) || 0;
28
+ currentCategoryTotals.set(item.group, currentTotal + (item.actuals || 0));
29
+ }
30
+ });
31
+ // Calculate expected aggregated totals by category from billing statements
32
+ const expectedCategoryTotals = new Map();
33
+ const expectedCategoryLabels = new Set();
34
+ wallet.billingStatements.forEach((statementId) => {
35
+ if (!statementId)
36
+ return;
37
+ const statement = billingStatements.get(statementId);
38
+ if (statement?.state?.global?.lineItems) {
39
+ statement.state.global.lineItems.forEach((item) => {
40
+ // Find expense-account tag
41
+ const expenseAccountTag = item.lineItemTag?.find((tag) => tag.dimension === "expense-account");
42
+ if (expenseAccountTag?.label) {
43
+ expectedCategoryLabels.add(expenseAccountTag.label);
44
+ const currentTotal = expectedCategoryTotals.get(expenseAccountTag.label) || 0;
45
+ expectedCategoryTotals.set(expenseAccountTag.label, currentTotal + (item.totalPriceCash || 0));
46
+ }
47
+ });
48
+ }
49
+ });
50
+ // Check if categories have changed
51
+ const currentCategories = new Set(currentCategoryTotals.keys());
52
+ const hasTagChanges = currentCategories.size !== expectedCategoryLabels.size;
53
+ // Check if totals per category have changed
54
+ let hasTotalMismatch = false;
55
+ // We need to check if the aggregated totals match
56
+ // Since wallet stores group IDs but billing statements have labels,
57
+ // we need to sum up all line items regardless of category structure
58
+ const currentTotalActuals = Array.from(currentCategoryTotals.values()).reduce((sum, total) => sum + total, 0);
59
+ const expectedTotalActuals = Array.from(expectedCategoryTotals.values()).reduce((sum, total) => sum + total, 0);
60
+ hasTotalMismatch =
61
+ Math.abs(currentTotalActuals - expectedTotalActuals) > 0.01;
62
+ if (hasTagChanges || hasTotalMismatch) {
63
+ if (wallet.wallet) {
64
+ outdatedWallets.push(wallet.wallet);
65
+ if (hasTagChanges) {
66
+ tagChangedWallets.push(wallet.wallet);
67
+ }
68
+ }
69
+ }
70
+ });
71
+ return {
72
+ needsSync: outdatedWallets.length > 0,
73
+ outdatedWallets,
74
+ tagChangedWallets,
75
+ };
76
+ }, [documents, wallets]);
77
+ return syncStatus;
78
+ }
@@ -0,0 +1,3 @@
1
+ import type { EditorModule } from "document-model";
2
+ export declare const ExpenseReport: EditorModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/expense-report/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,eAAO,MAAM,aAAa,EAAE,YAO3B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { lazy } from "react";
2
+ export const ExpenseReport = {
3
+ Component: lazy(() => import("./editor.js")),
4
+ documentTypes: ["powerhouse/expense-report"],
5
+ config: {
6
+ id: "powerhouse-expense-report-editor",
7
+ name: "Expense Report",
8
+ },
9
+ };
@@ -0,0 +1,4 @@
1
+ export { ServiceSubscriptionsEditor } from "./service-subscriptions-editor/module.js";
2
+ export { BuilderTeamAdmin } from "./builder-team-admin/module.js";
3
+ export { ExpenseReport } from "./expense-report/module.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../editors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ServiceSubscriptionsEditor } from "./service-subscriptions-editor/module.js";
2
+ export { BuilderTeamAdmin } from "./builder-team-admin/module.js";
3
+ export { ExpenseReport } from "./expense-report/module.js";
@@ -0,0 +1,7 @@
1
+ interface AddCategoryModalProps {
2
+ onClose: () => void;
3
+ isDarkMode: boolean;
4
+ }
5
+ export declare function AddCategoryModal({ onClose, isDarkMode, }: AddCategoryModalProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=AddCategoryModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddCategoryModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddCategoryModal.tsx"],"names":[],"mappings":"AAKA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,GACX,EAAE,qBAAqB,2CA4HvB"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { generateId } from "document-model/core";
4
+ import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
5
+ import { addCategory } from "../../../document-models/service-subscriptions/gen/creators.js";
6
+ export function AddCategoryModal({ onClose, isDarkMode, }) {
7
+ const [, dispatch] = useSelectedServiceSubscriptionsDocument();
8
+ const [formData, setFormData] = useState({
9
+ name: "",
10
+ description: "",
11
+ });
12
+ const handleSubmit = (e) => {
13
+ e.preventDefault();
14
+ if (!formData.name) {
15
+ alert("Name is required");
16
+ return;
17
+ }
18
+ dispatch?.(addCategory({
19
+ id: generateId(),
20
+ name: formData.name,
21
+ description: formData.description || undefined,
22
+ }));
23
+ onClose();
24
+ };
25
+ const updateField = (field, value) => {
26
+ setFormData((prev) => ({ ...prev, [field]: value }));
27
+ };
28
+ const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
29
+ ? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
30
+ : "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
31
+ const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
32
+ return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-md rounded-xl border ${isDarkMode
33
+ ? "bg-gray-800 border-gray-700"
34
+ : "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Category" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
35
+ ? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
36
+ : "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Development Tools, Cloud Infrastructure", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Description" }), _jsx("textarea", { className: `${inputClass} resize-y`, placeholder: "Optional description...", value: formData.description, onChange: (e) => updateField("description", e.target.value), rows: 3 })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
37
+ ? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
38
+ : "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Category" })] })] })] }) }));
39
+ }
@@ -0,0 +1,10 @@
1
+ import type { Vendor, Category } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
2
+ interface AddSubscriptionModalProps {
3
+ vendors: Vendor[];
4
+ categories: Category[];
5
+ onClose: () => void;
6
+ isDarkMode: boolean;
7
+ }
8
+ export declare function AddSubscriptionModal({ vendors, categories, onClose, isDarkMode, }: AddSubscriptionModalProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=AddSubscriptionModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddSubscriptionModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddSubscriptionModal.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EAGT,MAAM,yEAAyE,CAAC;AAEjF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,2CAiS3B"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { generateId } from "document-model/core";
4
+ import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
5
+ import { addSubscription } from "../../../document-models/service-subscriptions/gen/creators.js";
6
+ export function AddSubscriptionModal({ vendors, categories, onClose, isDarkMode, }) {
7
+ const [, dispatch] = useSelectedServiceSubscriptionsDocument();
8
+ const [formData, setFormData] = useState({
9
+ name: "",
10
+ vendorId: vendors[0]?.id ?? "",
11
+ categoryId: "",
12
+ billingCycle: "MONTHLY",
13
+ amount: "",
14
+ currency: "USD",
15
+ status: "ACTIVE",
16
+ planName: "",
17
+ totalSeats: "",
18
+ accountEmail: "",
19
+ accountOwner: "",
20
+ loginUrl: "",
21
+ notes: "",
22
+ });
23
+ const handleSubmit = (e) => {
24
+ e.preventDefault();
25
+ if (!formData.name || !formData.vendorId) {
26
+ alert("Name and vendor are required");
27
+ return;
28
+ }
29
+ dispatch?.(addSubscription({
30
+ id: generateId(),
31
+ name: formData.name,
32
+ vendorId: formData.vendorId,
33
+ categoryId: formData.categoryId || undefined,
34
+ billingCycle: formData.billingCycle,
35
+ amount: formData.amount ? parseFloat(formData.amount) : undefined,
36
+ currency: formData.currency || undefined,
37
+ status: formData.status,
38
+ planName: formData.planName || undefined,
39
+ seats: formData.totalSeats
40
+ ? { total: parseInt(formData.totalSeats), assignedMembers: [] }
41
+ : undefined,
42
+ accountEmail: formData.accountEmail || undefined,
43
+ accountOwner: formData.accountOwner || undefined,
44
+ loginUrl: formData.loginUrl || undefined,
45
+ notes: formData.notes || undefined,
46
+ tags: [],
47
+ }));
48
+ onClose();
49
+ };
50
+ const updateField = (field, value) => {
51
+ setFormData((prev) => ({ ...prev, [field]: value }));
52
+ };
53
+ const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
54
+ ? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
55
+ : "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
56
+ const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
57
+ return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-xl border ${isDarkMode
58
+ ? "bg-gray-800 border-gray-700"
59
+ : "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Subscription" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
60
+ ? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
61
+ : "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., GitHub Enterprise", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Vendor *" }), _jsxs("select", { className: inputClass, value: formData.vendorId, onChange: (e) => updateField("vendorId", e.target.value), children: [vendors.length === 0 && (_jsx("option", { value: "", children: "No vendors available" })), vendors.map((v) => (_jsx("option", { value: v.id, children: v.name }, v.id)))] })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Category" }), _jsxs("select", { className: inputClass, value: formData.categoryId, onChange: (e) => updateField("categoryId", e.target.value), children: [_jsx("option", { value: "", children: "None" }), categories.map((c) => (_jsx("option", { value: c.id, children: c.name }, c.id)))] })] })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Status" }), _jsxs("select", { className: inputClass, value: formData.status, onChange: (e) => updateField("status", e.target.value), children: [_jsx("option", { value: "ACTIVE", children: "Active" }), _jsx("option", { value: "TRIAL", children: "Trial" }), _jsx("option", { value: "PENDING", children: "Pending" }), _jsx("option", { value: "PAUSED", children: "Paused" }), _jsx("option", { value: "CANCELLED", children: "Cancelled" }), _jsx("option", { value: "EXPIRED", children: "Expired" })] })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Plan Name" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Pro, Enterprise", value: formData.planName, onChange: (e) => updateField("planName", e.target.value) })] })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Amount" }), _jsx("input", { type: "number", className: inputClass, placeholder: "0.00", value: formData.amount, onChange: (e) => updateField("amount", e.target.value) })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Billing Cycle" }), _jsxs("select", { className: inputClass, value: formData.billingCycle, onChange: (e) => updateField("billingCycle", e.target.value), children: [_jsx("option", { value: "MONTHLY", children: "Monthly" }), _jsx("option", { value: "QUARTERLY", children: "Quarterly" }), _jsx("option", { value: "ANNUAL", children: "Annual" }), _jsx("option", { value: "BIENNIAL", children: "Biennial" }), _jsx("option", { value: "ONE_TIME", children: "One-time" }), _jsx("option", { value: "USAGE_BASED", children: "Usage-based" })] })] })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Total Seats" }), _jsx("input", { type: "number", className: inputClass, placeholder: "Leave empty if not applicable", value: formData.totalSeats, onChange: (e) => updateField("totalSeats", e.target.value) })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Account Owner" }), _jsx("input", { type: "text", className: inputClass, placeholder: "Name", value: formData.accountOwner, onChange: (e) => updateField("accountOwner", e.target.value) })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Account Email" }), _jsx("input", { type: "email", className: inputClass, placeholder: "email@company.com", value: formData.accountEmail, onChange: (e) => updateField("accountEmail", e.target.value) })] })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Login URL" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://...", value: formData.loginUrl, onChange: (e) => updateField("loginUrl", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Notes" }), _jsx("textarea", { className: `${inputClass} resize-y`, placeholder: "Additional notes...", value: formData.notes, onChange: (e) => updateField("notes", e.target.value), rows: 3 })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
62
+ ? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
63
+ : "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Subscription" })] })] })] }) }));
64
+ }
@@ -0,0 +1,7 @@
1
+ interface AddVendorModalProps {
2
+ onClose: () => void;
3
+ isDarkMode: boolean;
4
+ }
5
+ export declare function AddVendorModal({ onClose, isDarkMode }: AddVendorModalProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=AddVendorModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddVendorModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddVendorModal.tsx"],"names":[],"mappings":"AAKA,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAsJ1E"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { generateId } from "document-model/core";
4
+ import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
5
+ import { addVendor } from "../../../document-models/service-subscriptions/gen/creators.js";
6
+ export function AddVendorModal({ onClose, isDarkMode }) {
7
+ const [, dispatch] = useSelectedServiceSubscriptionsDocument();
8
+ const [formData, setFormData] = useState({
9
+ name: "",
10
+ website: "",
11
+ supportEmail: "",
12
+ supportUrl: "",
13
+ });
14
+ const handleSubmit = (e) => {
15
+ e.preventDefault();
16
+ if (!formData.name) {
17
+ alert("Name is required");
18
+ return;
19
+ }
20
+ dispatch?.(addVendor({
21
+ id: generateId(),
22
+ name: formData.name,
23
+ website: formData.website || undefined,
24
+ supportEmail: formData.supportEmail || undefined,
25
+ supportUrl: formData.supportUrl || undefined,
26
+ }));
27
+ onClose();
28
+ };
29
+ const updateField = (field, value) => {
30
+ setFormData((prev) => ({ ...prev, [field]: value }));
31
+ };
32
+ const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
33
+ ? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
34
+ : "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
35
+ const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
36
+ return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-md rounded-xl border ${isDarkMode
37
+ ? "bg-gray-800 border-gray-700"
38
+ : "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Vendor" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
39
+ ? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
40
+ : "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Google, Microsoft, Anthropic", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Website" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://...", value: formData.website, onChange: (e) => updateField("website", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Support Email" }), _jsx("input", { type: "email", className: inputClass, placeholder: "support@vendor.com", value: formData.supportEmail, onChange: (e) => updateField("supportEmail", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Support URL" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://support.vendor.com", value: formData.supportUrl, onChange: (e) => updateField("supportUrl", e.target.value) })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
41
+ ? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
42
+ : "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Vendor" })] })] })] }) }));
43
+ }
@@ -0,0 +1,8 @@
1
+ import type { Category } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
2
+ interface CategoriesListProps {
3
+ categories: Category[];
4
+ isDarkMode: boolean;
5
+ }
6
+ export declare function CategoriesList({ categories, isDarkMode, }: CategoriesListProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=CategoriesList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoriesList.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/CategoriesList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yEAAyE,CAAC;AAExG,UAAU,mBAAmB;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,UAAU,GACX,EAAE,mBAAmB,2CAwCrB"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
3
+ import { deleteCategory } from "../../../document-models/service-subscriptions/gen/creators.js";
4
+ export function CategoriesList({ categories, isDarkMode, }) {
5
+ if (categories.length === 0) {
6
+ return (_jsxs("div", { className: `text-center py-16 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: [_jsx("svg", { className: "w-12 h-12 mx-auto mb-4 opacity-50", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }), _jsx("div", { className: `text-base font-medium mb-2 ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "No categories yet" }), _jsx("p", { children: "Add categories to organize your subscriptions." })] }));
7
+ }
8
+ return (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: categories.map((category) => (_jsx(CategoryCard, { category: category, isDarkMode: isDarkMode }, category.id))) }));
9
+ }
10
+ function CategoryCard({ category, isDarkMode }) {
11
+ const [, dispatch] = useSelectedServiceSubscriptionsDocument();
12
+ const handleDelete = () => {
13
+ if (confirm(`Delete category "${category.name}"?`)) {
14
+ dispatch?.(deleteCategory({ id: category.id }));
15
+ }
16
+ };
17
+ const cardClass = `p-4 rounded-lg border transition-colors ${isDarkMode
18
+ ? "bg-gray-800 border-gray-700 hover:border-indigo-500"
19
+ : "bg-white border-gray-200 hover:border-indigo-500 shadow-sm"}`;
20
+ return (_jsxs("div", { className: cardClass, children: [_jsx("div", { className: "mb-3", children: _jsx("h3", { className: `text-base font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: category.name }) }), category.description && (_jsx("div", { className: "flex flex-col gap-2", children: _jsx("p", { className: `text-sm m-0 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: category.description }) })), _jsx("div", { className: `flex gap-2 mt-3 pt-3 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: _jsx("button", { className: `px-2.5 py-1.5 text-xs rounded-lg transition-colors ${isDarkMode
21
+ ? "text-red-400 hover:bg-red-500/10"
22
+ : "text-red-600 hover:bg-red-500/10"}`, onClick: handleDelete, children: "Delete" }) })] }));
23
+ }
@@ -0,0 +1,3 @@
1
+ /** Displays the name of the selected ServiceSubscriptions document and allows editing it */
2
+ export declare function EditServiceSubscriptionsName(): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=EditName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditName.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/EditName.tsx"],"names":[],"mappings":"AAKA,4FAA4F;AAC5F,wBAAgB,4BAA4B,mDAyE3C"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { setName } from "document-model";
3
+ import { useState } from "react";
4
+ import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
5
+ /** Displays the name of the selected ServiceSubscriptions document and allows editing it */
6
+ export function EditServiceSubscriptionsName() {
7
+ const [serviceSubscriptionsDocument, dispatch] = useSelectedServiceSubscriptionsDocument();
8
+ const [isEditing, setIsEditing] = useState(false);
9
+ if (!serviceSubscriptionsDocument)
10
+ return null;
11
+ const serviceSubscriptionsDocumentName = serviceSubscriptionsDocument.header.name;
12
+ const onClickEditServiceSubscriptionsName = () => {
13
+ setIsEditing(true);
14
+ };
15
+ const onClickCancelEditServiceSubscriptionsName = () => {
16
+ setIsEditing(false);
17
+ };
18
+ const onSubmitSetName = (event) => {
19
+ event.preventDefault();
20
+ const form = event.currentTarget;
21
+ const nameInput = form.elements.namedItem("name");
22
+ const name = nameInput.value;
23
+ if (!name)
24
+ return;
25
+ dispatch(setName(name));
26
+ setIsEditing(false);
27
+ };
28
+ if (isEditing)
29
+ return (_jsxs("form", { className: "flex gap-2 items-center justify-between", onSubmit: onSubmitSetName, children: [_jsx("input", { className: "text-lg font-semibold text-gray-900 p-1", type: "text", name: "name", defaultValue: serviceSubscriptionsDocumentName, autoFocus: true }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { type: "submit", className: "text-sm text-gray-600", children: "Save" }), _jsx("button", { className: "text-sm text-red-800", onClick: onClickCancelEditServiceSubscriptionsName, children: "Cancel" })] })] }));
30
+ return (_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900", children: serviceSubscriptionsDocumentName }), _jsx("button", { className: "text-sm text-gray-600", onClick: onClickEditServiceSubscriptionsName, children: "Edit Name" })] }));
31
+ }
@@ -0,0 +1,8 @@
1
+ import type { ServiceSubscription } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
2
+ interface StatsOverviewProps {
3
+ subscriptions: ServiceSubscription[];
4
+ isDarkMode: boolean;
5
+ }
6
+ export declare function StatsOverview({ subscriptions, isDarkMode, }: StatsOverviewProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=StatsOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsOverview.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/StatsOverview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yEAAyE,CAAC;AAEnH,UAAU,kBAAkB;IAC1B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,UAAU,GACX,EAAE,kBAAkB,2CA0EpB"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function StatsOverview({ subscriptions, isDarkMode, }) {
3
+ const activeCount = subscriptions.filter((s) => s.status === "ACTIVE").length;
4
+ const trialCount = subscriptions.filter((s) => s.status === "TRIAL").length;
5
+ const totalMonthly = subscriptions.reduce((sum, sub) => {
6
+ if (!sub.amount)
7
+ return sum;
8
+ const amount = sub.amount;
9
+ switch (sub.billingCycle) {
10
+ case "MONTHLY":
11
+ return sum + amount;
12
+ case "QUARTERLY":
13
+ return sum + amount / 3;
14
+ case "ANNUAL":
15
+ return sum + amount / 12;
16
+ case "BIENNIAL":
17
+ return sum + amount / 24;
18
+ default:
19
+ return sum;
20
+ }
21
+ }, 0);
22
+ const totalSeats = subscriptions.reduce((sum, sub) => sum + (sub.seats?.total ?? 0), 0);
23
+ const usedSeats = subscriptions.reduce((sum, sub) => sum + (sub.seats?.assignedMembers.length ?? 0), 0);
24
+ const cardClass = `p-4 rounded-lg border ${isDarkMode
25
+ ? "bg-gray-800 border-gray-700"
26
+ : "bg-white border-gray-200 shadow-sm"}`;
27
+ const labelClass = `text-sm mb-2 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
28
+ return (_jsxs("div", { className: "grid grid-cols-4 gap-4 mb-6", children: [_jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Active Subscriptions" }), _jsx("div", { className: "text-3xl font-semibold tracking-tight text-green-500", children: activeCount })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Trial Subscriptions" }), _jsx("div", { className: "text-3xl font-semibold tracking-tight text-amber-500", children: trialCount })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Monthly Cost (est.)" }), _jsxs("div", { className: `text-3xl font-semibold tracking-tight ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: ["$", totalMonthly.toLocaleString(undefined, {
29
+ minimumFractionDigits: 0,
30
+ maximumFractionDigits: 0,
31
+ })] })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Seats Used" }), _jsxs("div", { className: `text-3xl font-semibold tracking-tight ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: [usedSeats, "/", totalSeats] })] })] }));
32
+ }