@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,456 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Button, TextInput } from "@powerhousedao/document-engineering";
4
+ import { Plus, Trash2, Pencil, Check, X, Copy, CheckCheck, RefreshCw, } from "lucide-react";
5
+ import { actions } from "../../../document-models/expense-report/index.js";
6
+ import { generateId } from "document-model/core";
7
+ import { useWalletSync } from "../hooks/useWalletSync.js";
8
+ import { useSyncWallet } from "../hooks/useSyncWallet.js";
9
+ import { addDocument, dispatchActions, useDocumentsInSelectedDrive, useSelectedDrive, setSelectedNode, useDocumentById, } from "@powerhousedao/reactor-browser";
10
+ import { actions as accountTransactionsActions } from "../../../document-models/expense-report/index.js";
11
+ export function WalletsTable({ wallets, groups, onAddBillingStatement, periodStart, periodEnd, dispatch, }) {
12
+ const [selectedAccountId, setSelectedAccountId] = useState("");
13
+ const [walletError, setWalletError] = useState("");
14
+ const [editingWallet, setEditingWallet] = useState(null);
15
+ const [editingName, setEditingName] = useState("");
16
+ const [copiedWallet, setCopiedWallet] = useState(null);
17
+ const [syncingWallet, setSyncingWallet] = useState(null);
18
+ const [addingWallet, setAddingWallet] = useState(false);
19
+ // State for handling newly created transaction documents
20
+ const [pendingTxDoc, setPendingTxDoc] = useState(null);
21
+ // Track if we're currently processing to prevent duplicate runs
22
+ const [isProcessing, setIsProcessing] = useState(false);
23
+ // Progress state for Add Txns operation
24
+ const [txProgress, setTxProgress] = useState({
25
+ show: false,
26
+ step: "",
27
+ current: 0,
28
+ total: 5,
29
+ details: "",
30
+ });
31
+ // Get drive and documents for account/transactions document management
32
+ const [selectedDrive] = useSelectedDrive();
33
+ const allDocuments = useDocumentsInSelectedDrive();
34
+ // Load the pending transaction document if one exists
35
+ const [pendingDocument, pendingDocDispatch] = useDocumentById(pendingTxDoc?.documentId || null);
36
+ // Get available Account documents from the drive
37
+ const availableAccounts = allDocuments?.filter((doc) => doc.header.documentType === "powerhouse/accounts") || [];
38
+ // Extract all account entries from all Accounts documents
39
+ const accountEntries = availableAccounts.flatMap((doc) => {
40
+ const accounts = doc.state?.global?.accounts || [];
41
+ return accounts.map((acc) => ({
42
+ ...acc,
43
+ accountsDocumentId: doc.header.id, // Store which Accounts document this came from
44
+ }));
45
+ });
46
+ // Check sync status
47
+ const { needsSync, outdatedWallets, tagChangedWallets } = useWalletSync(wallets);
48
+ const { syncWallet } = useSyncWallet();
49
+ // Handle fetching and adding transactions when a new document is created
50
+ useEffect(() => {
51
+ // Check if we have pending work and all required resources
52
+ if (!pendingTxDoc ||
53
+ !pendingDocument ||
54
+ !pendingDocDispatch ||
55
+ isProcessing) {
56
+ return;
57
+ }
58
+ // Mark as processing and save current pending doc
59
+ setIsProcessing(true);
60
+ const currentPendingDoc = pendingTxDoc;
61
+ const fetchAndAddTransactions = async () => {
62
+ console.log("[WalletsTable] Processing pending transaction document:", currentPendingDoc.documentId);
63
+ try {
64
+ // Step 1: Set account info in the transaction document
65
+ setTxProgress({
66
+ show: true,
67
+ step: "Initializing",
68
+ current: 1,
69
+ total: 5,
70
+ details: "Setting up transaction document...",
71
+ });
72
+ // Add small delay to ensure document is fully initialized
73
+ await new Promise((resolve) => setTimeout(resolve, 300));
74
+ console.log("[WalletsTable] Document state before setAccount:", {
75
+ documentId: pendingDocument?.header?.id,
76
+ hasState: !!pendingDocument?.state,
77
+ hasGlobal: !!pendingDocument?.state?.global,
78
+ });
79
+ const setAccountAction = accountTransactionsActions.updateWallet({
80
+ address: currentPendingDoc.accountEntry.account,
81
+ name: currentPendingDoc.accountEntry.name,
82
+ });
83
+ console.log("[WalletsTable] Dispatching setAccount action:", setAccountAction);
84
+ pendingDocDispatch(setAccountAction);
85
+ // Wait a bit for the action to be processed
86
+ await new Promise((resolve) => setTimeout(resolve, 200));
87
+ console.log("[WalletsTable] Account info set - checking document state:", {
88
+ account: pendingDocument?.state?.global?.account,
89
+ });
90
+ // Step 2: Fetch transactions from Alchemy
91
+ setTxProgress({
92
+ show: true,
93
+ step: "Fetching Transactions",
94
+ current: 2,
95
+ total: 5,
96
+ details: "Retrieving blockchain transactions from Alchemy...",
97
+ });
98
+ console.log("[WalletsTable] Fetching transactions from Alchemy for:", currentPendingDoc.accountEntry.account);
99
+ // Step 4: Update the Accounts document with the transaction document ID
100
+ setTxProgress({
101
+ show: true,
102
+ step: "Linking Documents",
103
+ current: 4,
104
+ total: 5,
105
+ details: "Updating account references...",
106
+ });
107
+ console.log("[WalletsTable] Updating account in Accounts document:", {
108
+ accountId: currentPendingDoc.accountEntry.id,
109
+ accountsDocId: currentPendingDoc.accountsDocId,
110
+ transactionsDocId: currentPendingDoc.documentId,
111
+ });
112
+ await dispatchActions([
113
+ accountTransactionsActions.updateWallet({
114
+ address: currentPendingDoc.accountEntry.account,
115
+ accountTransactionsDocumentId: currentPendingDoc.documentId,
116
+ }),
117
+ ], currentPendingDoc.accountsDocId);
118
+ console.log("[WalletsTable] Successfully updated account with transactions ID");
119
+ // Step 5: Link the transaction document to the wallet in ExpenseReport
120
+ setTxProgress({
121
+ show: true,
122
+ step: "Finalizing",
123
+ current: 5,
124
+ total: 5,
125
+ details: "Linking to expense report...",
126
+ });
127
+ dispatch(actions.updateWallet({
128
+ address: currentPendingDoc.walletAddress,
129
+ accountTransactionsDocumentId: currentPendingDoc.documentId,
130
+ }));
131
+ console.log("[WalletsTable] Successfully linked to wallet");
132
+ // Success! Close modal after a brief delay
133
+ setTimeout(() => {
134
+ setTxProgress({
135
+ show: false,
136
+ step: "",
137
+ current: 0,
138
+ total: 5,
139
+ details: "",
140
+ });
141
+ }, 1500);
142
+ }
143
+ catch (error) {
144
+ console.error("[WalletsTable] Error processing pending transaction document:", error);
145
+ setTxProgress({
146
+ show: false,
147
+ step: "",
148
+ current: 0,
149
+ total: 5,
150
+ details: "",
151
+ });
152
+ alert(`Failed to fetch transactions: ${error instanceof Error ? error.message : "Unknown error"}`);
153
+ }
154
+ finally {
155
+ // Always clear processing state and pending doc
156
+ setPendingTxDoc(null);
157
+ setIsProcessing(false);
158
+ }
159
+ };
160
+ fetchAndAddTransactions();
161
+ }, [pendingTxDoc, pendingDocument, pendingDocDispatch, isProcessing]);
162
+ const handleAddWallet = async () => {
163
+ if (!selectedAccountId) {
164
+ setWalletError("Please select an account");
165
+ return;
166
+ }
167
+ // Find the selected account from accountEntries
168
+ const selectedAccount = accountEntries.find((acc) => acc.id === selectedAccountId);
169
+ if (!selectedAccount) {
170
+ setWalletError("Selected account not found");
171
+ return;
172
+ }
173
+ // Check if wallet already exists
174
+ const walletExists = wallets.some((w) => w.wallet === selectedAccount.account);
175
+ if (walletExists) {
176
+ setWalletError("This account is already added to the report");
177
+ return;
178
+ }
179
+ setAddingWallet(true);
180
+ setWalletError("");
181
+ try {
182
+ // Add the wallet to the expense report
183
+ dispatch(actions.addWallet({
184
+ wallet: selectedAccount.account,
185
+ name: selectedAccount.name || undefined,
186
+ }));
187
+ // Immediately update with the linked document IDs
188
+ dispatch(actions.updateWallet({
189
+ address: selectedAccount.account,
190
+ accountDocumentId: selectedAccount.accountsDocumentId || undefined,
191
+ accountTransactionsDocumentId: selectedAccount.accountTransactionsId || undefined,
192
+ }));
193
+ // Clear selection
194
+ setSelectedAccountId("");
195
+ }
196
+ catch (error) {
197
+ console.error("Error adding wallet:", error);
198
+ setWalletError("Failed to add wallet. Please try again.");
199
+ }
200
+ finally {
201
+ setAddingWallet(false);
202
+ }
203
+ };
204
+ const handleAddTransactions = async (wallet) => {
205
+ if (!wallet.wallet) {
206
+ return;
207
+ }
208
+ // Check if transactions document already exists
209
+ if (wallet.accountTransactionsDocumentId) {
210
+ return;
211
+ }
212
+ if (!selectedDrive?.header?.id) {
213
+ alert("No drive selected");
214
+ return;
215
+ }
216
+ try {
217
+ // Show initial progress
218
+ setTxProgress({
219
+ show: true,
220
+ step: "Preparing",
221
+ current: 0,
222
+ total: 5,
223
+ details: "Checking for existing documents...",
224
+ });
225
+ // Find or create AccountTransactions document for this wallet
226
+ const existingTxDoc = allDocuments?.find((doc) => doc.header.documentType === "powerhouse/account-transactions" &&
227
+ doc.state?.global?.account?.account === wallet.wallet);
228
+ if (existingTxDoc) {
229
+ // Link existing document
230
+ dispatch(actions.updateWallet({
231
+ address: wallet.wallet,
232
+ accountTransactionsDocumentId: existingTxDoc.header.id,
233
+ }));
234
+ setTxProgress({
235
+ show: false,
236
+ step: "",
237
+ current: 0,
238
+ total: 5,
239
+ details: "",
240
+ });
241
+ return;
242
+ }
243
+ // Step 1: Find or create an Accounts document
244
+ setTxProgress({
245
+ show: true,
246
+ step: "Preparing",
247
+ current: 0,
248
+ total: 5,
249
+ details: "Setting up accounts...",
250
+ });
251
+ const accountsDoc = allDocuments?.find((doc) => doc.header.documentType === "powerhouse/accounts");
252
+ let accountsDocId;
253
+ let existingAccounts = [];
254
+ if (!accountsDoc) {
255
+ console.log("[WalletsTable] Creating new Accounts document");
256
+ const accountsNode = await addDocument(selectedDrive.header.id, "Accounts", "powerhouse/accounts", undefined, undefined, undefined, "powerhouse-accounts-editor");
257
+ if (!accountsNode?.id) {
258
+ throw new Error("Failed to create Accounts document");
259
+ }
260
+ accountsDocId = accountsNode.id;
261
+ }
262
+ else {
263
+ accountsDocId = accountsDoc.header.id;
264
+ existingAccounts = accountsDoc.state?.global?.accounts || [];
265
+ }
266
+ // Step 2: Find or create an AccountEntry for this wallet
267
+ const accountEntry = existingAccounts.find((acc) => acc.account === wallet.wallet);
268
+ if (!accountEntry) {
269
+ console.log("[WalletsTable] Creating new account entry for wallet:", wallet.wallet);
270
+ const newAccountId = generateId();
271
+ const newAccountName = wallet.name || wallet.wallet.substring(0, 10);
272
+ // Add the account to the Accounts document
273
+ console.log("[WalletsTable] Adding new account to Accounts document:", newAccountId);
274
+ await dispatchActions([], accountsDocId);
275
+ console.log("[WalletsTable] Account added successfully");
276
+ // Create accountEntry reference
277
+ // Give a small delay to ensure the account is persisted
278
+ await new Promise((resolve) => setTimeout(resolve, 100));
279
+ }
280
+ // Step 3: Create the AccountTransactions document
281
+ setTxProgress({
282
+ show: true,
283
+ step: "Preparing",
284
+ current: 0,
285
+ total: 5,
286
+ details: "Creating transaction document...",
287
+ });
288
+ console.log("[WalletsTable] Creating AccountTransactions document");
289
+ const createdNode = await addDocument(selectedDrive.header.id, "powerhouse/account-transactions", "powerhouse-account-transactions-editor");
290
+ if (!createdNode?.id) {
291
+ throw new Error("Failed to create AccountTransactions document");
292
+ }
293
+ console.log("[WalletsTable] AccountTransactions document created:", createdNode.id);
294
+ // Step 4: Set up pending state to let useEffect handle the rest
295
+ setPendingTxDoc({
296
+ documentId: createdNode.id,
297
+ accountEntry,
298
+ accountsDocId,
299
+ walletAddress: wallet.wallet,
300
+ });
301
+ }
302
+ catch (error) {
303
+ console.error("[WalletsTable] Error adding transactions:", error);
304
+ setTxProgress({
305
+ show: false,
306
+ step: "",
307
+ current: 0,
308
+ total: 5,
309
+ details: "",
310
+ });
311
+ alert(`Failed to add transactions document: ${error instanceof Error ? error.message : "Unknown error"}`);
312
+ }
313
+ };
314
+ const handleStartEditName = (wallet) => {
315
+ setEditingWallet(wallet.wallet || null);
316
+ setEditingName(wallet.name || "");
317
+ };
318
+ const handleSaveEditName = (walletAddress) => {
319
+ const wallet = wallets.find((w) => w.wallet === walletAddress);
320
+ const trimmedName = editingName.trim();
321
+ // Only update if the name has changed
322
+ if (trimmedName && wallet && trimmedName !== (wallet.name || "")) {
323
+ dispatch(actions.updateWallet({
324
+ address: walletAddress,
325
+ name: trimmedName,
326
+ }));
327
+ }
328
+ setEditingWallet(null);
329
+ setEditingName("");
330
+ };
331
+ const handleCancelEditName = () => {
332
+ setEditingWallet(null);
333
+ setEditingName("");
334
+ };
335
+ const handleCopyAddress = (address) => {
336
+ navigator.clipboard.writeText(address);
337
+ setCopiedWallet(address);
338
+ setTimeout(() => setCopiedWallet(null), 2000);
339
+ };
340
+ const formatAddress = (address) => {
341
+ if (!address || address.length < 11)
342
+ return address;
343
+ return `${address.substring(0, 6)}...${address.substring(address.length - 5)}`;
344
+ };
345
+ const handleSyncWallet = async (wallet) => {
346
+ if (!wallet.wallet) {
347
+ return;
348
+ }
349
+ // Validate period dates before syncing
350
+ if (!periodStart || !periodEnd) {
351
+ alert("Please set the period start and end dates before syncing wallet transactions.");
352
+ return;
353
+ }
354
+ setSyncingWallet(wallet.wallet);
355
+ try {
356
+ // Get existing line items (don't remove them, we'll update instead)
357
+ const existingLineItems = (wallet.lineItems || []).filter((item) => item !== null && item !== undefined);
358
+ // Get billing statement IDs
359
+ const billingStatementIds = (wallet.billingStatements || []).filter((id) => id !== null && id !== undefined);
360
+ // Sync wallet with all new parameters
361
+ syncWallet(wallet.wallet, existingLineItems, billingStatementIds, groups, wallets, wallet.accountTransactionsDocumentId, periodStart, periodEnd, dispatch);
362
+ // Small delay to show sync animation
363
+ setTimeout(() => {
364
+ setSyncingWallet(null);
365
+ }, 500);
366
+ }
367
+ catch (error) {
368
+ console.error("Error syncing wallet:", error);
369
+ alert(error instanceof Error ? error.message : "Error syncing wallet");
370
+ setSyncingWallet(null);
371
+ }
372
+ };
373
+ const handleRemoveWallet = (walletAddress) => {
374
+ dispatch(actions.removeWallet({
375
+ wallet: walletAddress,
376
+ }));
377
+ };
378
+ // Calculate totals for a wallet
379
+ const calculateWalletTotals = (wallet) => {
380
+ const lineItems = wallet.lineItems || [];
381
+ return {
382
+ budget: lineItems.reduce((sum, item) => sum + (item?.budget || 0), 0),
383
+ forecast: lineItems.reduce((sum, item) => sum + (item?.forecast || 0), 0),
384
+ actuals: lineItems.reduce((sum, item) => sum + (item?.actuals || 0), 0),
385
+ difference: lineItems.reduce((sum, item) => {
386
+ const budget = item?.budget || 0;
387
+ const actuals = item?.actuals || 0;
388
+ return sum + (actuals - budget);
389
+ }, 0),
390
+ payments: lineItems.reduce((sum, item) => sum + (item?.payments || 0), 0),
391
+ };
392
+ };
393
+ const formatCurrency = (value) => {
394
+ return new Intl.NumberFormat("en-US", {
395
+ style: "currency",
396
+ currency: "USD",
397
+ minimumFractionDigits: 2,
398
+ }).format(value);
399
+ };
400
+ return (_jsxs("div", { className: "space-y-4", children: [wallets.length > 0 ? (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-800", children: _jsxs("tr", { children: [_jsx("th", { className: "px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Wallet" }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Monthly Budget" }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Forecast" }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: _jsxs("div", { className: "flex items-center justify-end gap-2", children: [needsSync && (_jsx("button", { onClick: () => {
401
+ // Sync all outdated wallets
402
+ [...tagChangedWallets, ...outdatedWallets].forEach((walletAddress) => {
403
+ const wallet = wallets.find((w) => w.wallet === walletAddress);
404
+ if (wallet) {
405
+ handleSyncWallet(wallet);
406
+ }
407
+ });
408
+ }, disabled: syncingWallet !== null, className: `inline-flex items-center justify-center w-8 h-8 rounded-md transition-colors ${tagChangedWallets.length > 0
409
+ ? "text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 hover:bg-red-100 dark:hover:bg-red-900/30 animate-pulse"
410
+ : "text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 hover:bg-amber-100 dark:hover:bg-amber-900/30 animate-pulse"} disabled:opacity-50 disabled:cursor-not-allowed`, title: tagChangedWallets.length > 0
411
+ ? "ALERT: Tags have changed in billing statements - sync all wallets!"
412
+ : "Sync all wallets with latest billing statements", children: _jsx(RefreshCw, { size: 16, className: syncingWallet !== null ? "animate-spin" : "" }) })), _jsx("span", { children: "Actuals" })] }) }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Difference" }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Payments" }), _jsx("th", { className: "px-6 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Actions" })] }) }), _jsx("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: wallets.map((wallet) => {
413
+ const totals = calculateWalletTotals(wallet);
414
+ return (_jsxs("tr", { className: "hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors", children: [_jsx("td", { className: "px-6 py-4 whitespace-nowrap", children: editingWallet === wallet.wallet ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(TextInput, { value: editingName, onChange: (e) => setEditingName(e.target.value), placeholder: "Enter wallet name", className: "flex-1", onKeyDown: (e) => {
415
+ if (e.key === "Enter") {
416
+ handleSaveEditName(wallet.wallet || "");
417
+ }
418
+ else if (e.key === "Escape") {
419
+ handleCancelEditName();
420
+ }
421
+ }, autoFocus: true }), _jsx("button", { onClick: () => handleSaveEditName(wallet.wallet || ""), className: "inline-flex items-center justify-center w-7 h-7 text-green-600 dark:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/20 rounded-md transition-colors", title: "Save", children: _jsx(Check, { size: 14 }) }), _jsx("button", { onClick: handleCancelEditName, className: "inline-flex items-center justify-center w-7 h-7 text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-900/20 rounded-md transition-colors", title: "Cancel", children: _jsx(X, { size: 14 }) })] })) : (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-white", children: wallet.name || "Unnamed Wallet" }), _jsx("button", { onClick: () => handleStartEditName(wallet), className: "inline-flex items-center justify-center w-6 h-6 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-md transition-colors", title: "Edit name", children: _jsx(Pencil, { size: 12 }) }), _jsxs("button", { onClick: () => handleCopyAddress(wallet.wallet || ""), className: "inline-flex items-center gap-1 px-2 py-1 text-xs text-gray-500 dark:text-gray-400 font-mono hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors", title: `Copy address: ${wallet.wallet}`, children: [formatAddress(wallet.wallet || ""), copiedWallet === wallet.wallet ? (_jsx(CheckCheck, { size: 12, className: "text-green-500" })) : (_jsx(Copy, { size: 12 }))] })] })) }), _jsx("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: formatCurrency(totals.budget) }), _jsx("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: formatCurrency(totals.forecast) }), _jsx("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm", children: totals.actuals === 0 &&
422
+ (!wallet.billingStatements ||
423
+ wallet.billingStatements.length === 0) ? (
424
+ // When actuals is 0 and no billing statements, only show the Add Bills button
425
+ _jsx("div", { className: "flex items-center justify-end", children: _jsxs("button", { onClick: () => onAddBillingStatement(wallet.wallet || ""), className: "inline-flex items-center gap-1 px-3 py-1 text-sm font-medium text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 bg-blue-50 dark:bg-blue-900/20 hover:bg-blue-100 dark:hover:bg-blue-900/30 rounded-md transition-colors", title: "Add billing statement for this wallet", children: [_jsx(Plus, { size: 16 }), _jsx("span", { children: "Add Bills" })] }) })) : (
426
+ // When actuals is not 0 or has billing statements, show compact buttons + value horizontally
427
+ _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("button", { onClick: () => onAddBillingStatement(wallet.wallet || ""), className: "inline-flex items-center justify-center w-8 h-8 text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 bg-blue-50 dark:bg-blue-900/20 hover:bg-blue-100 dark:hover:bg-blue-900/30 rounded-md transition-colors", title: "Add billing statement for this wallet", children: _jsx(Plus, { size: 16 }) }), ((wallet.billingStatements &&
428
+ wallet.billingStatements.length > 0) ||
429
+ wallet.accountTransactionsDocumentId) && (_jsx("button", { onClick: () => handleSyncWallet(wallet), disabled: syncingWallet === wallet.wallet, className: `inline-flex items-center justify-center w-8 h-8 rounded-md transition-colors ${tagChangedWallets.includes(wallet.wallet || "")
430
+ ? "text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 hover:bg-red-100 dark:hover:bg-red-900/30 animate-pulse"
431
+ : outdatedWallets.includes(wallet.wallet || "")
432
+ ? "text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 hover:bg-amber-100 dark:hover:bg-amber-900/30 animate-pulse"
433
+ : "text-gray-600 dark:text-gray-400 bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700"} disabled:opacity-50 disabled:cursor-not-allowed`, title: tagChangedWallets.includes(wallet.wallet || "")
434
+ ? "ALERT: Tags have changed - sync required!"
435
+ : outdatedWallets.includes(wallet.wallet || "")
436
+ ? "Sync needed - billing statements updated"
437
+ : wallet.accountTransactionsDocumentId
438
+ ? "Sync wallet with billing statements and transactions"
439
+ : "Sync with latest billing statements", children: _jsx(RefreshCw, { size: 16, className: syncingWallet === wallet.wallet
440
+ ? "animate-spin"
441
+ : "" }) })), _jsx("span", { className: "text-sm font-medium text-gray-900 dark:text-white", children: formatCurrency(totals.actuals) })] })) }), _jsx("td", { className: `px-6 py-4 whitespace-nowrap text-right text-sm font-medium ${totals.difference > 0
442
+ ? "text-red-600 dark:text-red-400"
443
+ : totals.difference < 0
444
+ ? "text-green-600 dark:text-green-400"
445
+ : "text-gray-900 dark:text-white"}`, children: formatCurrency(totals.difference) }), _jsx("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm", children: wallet.accountTransactionsDocumentId ? (
446
+ // Show clickable document snippet card when transactions document is linked
447
+ _jsx("button", { onClick: () => setSelectedNode(wallet.accountTransactionsDocumentId), className: "w-full bg-green-50 dark:bg-green-900/20 hover:bg-green-100 dark:hover:bg-green-900/30 border border-green-200 dark:border-green-800 rounded-lg p-2 transition-colors text-left", children: _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("svg", { className: "w-4 h-4 text-green-600 dark:text-green-400 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("span", { className: "text-xs font-medium text-green-900 dark:text-green-100 block", children: "Transactions" }), _jsx("span", { className: "text-xs text-green-600 dark:text-green-400", children: formatCurrency(totals.payments) })] })] }), _jsx("svg", { className: "w-4 h-4 text-green-600 dark:text-green-400 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })] }) })) : (
448
+ // Show Add Txns button when no transactions document is linked
449
+ _jsx("div", { className: "flex items-center justify-end", children: _jsxs("button", { onClick: () => handleAddTransactions(wallet), className: "inline-flex items-center gap-1 px-3 py-1 text-sm font-medium text-green-600 dark:text-green-400 hover:text-green-800 dark:hover:text-green-300 bg-green-50 dark:bg-green-900/20 hover:bg-green-100 dark:hover:bg-green-900/30 rounded-md transition-colors", title: "Add transactions document for this wallet", children: [_jsx(Plus, { size: 16 }), _jsx("span", { children: "Add Txns" })] }) })) }), _jsx("td", { className: "px-6 py-4 whitespace-nowrap text-right text-sm", children: _jsx("div", { className: "flex items-center justify-end gap-2", children: _jsx("button", { onClick: () => handleRemoveWallet(wallet.wallet || ""), className: "inline-flex items-center justify-center w-8 h-8 text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20 rounded-md transition-colors", title: "Remove wallet", children: _jsx(Trash2, { size: 16 }) }) }) })] }, wallet.wallet));
450
+ }) })] }) })) : (_jsx("div", { className: "text-center py-12 text-gray-500 dark:text-gray-400", children: _jsx("p", { className: "text-sm", children: "No wallets added yet. Add a wallet to get started." }) })), _jsxs("div", { className: "flex items-end gap-3 pt-4 border-t border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "flex-1 relative", children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: "Select Account" }), _jsxs("select", { value: selectedAccountId, onChange: (e) => {
451
+ setSelectedAccountId(e.target.value);
452
+ setWalletError(""); // Clear error when selecting
453
+ }, className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500", children: [_jsx("option", { value: "", children: "-- Select an account --" }), accountEntries.map((acc) => (_jsxs("option", { value: acc.id, children: [acc.name, " (", acc.account?.substring(0, 10), "...", acc.account?.substring(acc.account.length - 4), ")"] }, acc.id)))] }), walletError && (_jsx("div", { className: "absolute left-0 right-0 top-full mt-1 px-3 py-2 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-md shadow-lg z-10", children: _jsx("p", { className: "text-sm text-red-600 dark:text-red-400", children: walletError }) }))] }), _jsx(Button, { onClick: handleAddWallet, disabled: !selectedAccountId || addingWallet, children: addingWallet ? "Adding..." : "Add Account" })] }), txProgress.show && (_jsx("div", { className: "fixed bottom-4 right-4 z-50 transition-all duration-300 ease-out", children: _jsx("div", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-2xl border border-gray-200 dark:border-gray-700 p-4 w-80", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(RefreshCw, { size: 20, className: "animate-spin text-blue-600 dark:text-blue-500 flex-shrink-0" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h4", { className: "text-sm font-semibold text-gray-900 dark:text-white truncate", children: txProgress.step }), _jsxs("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Step ", txProgress.current, " of ", txProgress.total] })] })] }), _jsx("div", { className: "w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1.5", children: _jsx("div", { className: "bg-blue-600 dark:bg-blue-500 h-1.5 rounded-full transition-all duration-300 ease-in-out", style: {
454
+ width: `${(txProgress.current / txProgress.total) * 100}%`,
455
+ } }) }), _jsx("p", { className: "text-xs text-gray-600 dark:text-gray-400", children: txProgress.details })] }) }) }))] }));
456
+ }
@@ -0,0 +1,3 @@
1
+ import type { PHDocumentEditorConfig } from "@powerhousedao/reactor-browser";
2
+ export declare const editorConfig: PHDocumentEditorConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../editors/expense-report/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,eAAO,MAAM,YAAY,EAAE,sBAE1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const editorConfig = {
2
+ isExternalControlsEnabled: false,
3
+ };
@@ -0,0 +1,2 @@
1
+ export default function Editor(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../editors/expense-report/editor.tsx"],"names":[],"mappings":"AAsBA,MAAM,CAAC,OAAO,UAAU,MAAM,4CAqQ7B"}
@@ -0,0 +1,107 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { useSelectedExpenseReportDocument } from "../../document-models/expense-report/hooks.js";
4
+ import { actions, } from "../../document-models/expense-report/index.js";
5
+ import { DatePicker, Icon, Button } from "@powerhousedao/document-engineering";
6
+ import { WalletsTable } from "./components/WalletsTable.js";
7
+ import { AggregatedExpensesTable } from "./components/AggregatedExpensesTable.js";
8
+ import { AddBillingStatementModal } from "./components/AddBillingStatementModal.js";
9
+ import { ExpenseReportPDF } from "./components/ExpenseReportPDF.js";
10
+ import { pdf } from "@react-pdf/renderer";
11
+ import { PDFViewer } from "@react-pdf/renderer";
12
+ import { DocumentToolbar } from "@powerhousedao/design-system/connect";
13
+ import { setSelectedNode, useParentFolderForSelectedNode, } from "@powerhousedao/reactor-browser";
14
+ import { useSyncWallet } from "./hooks/useSyncWallet.js";
15
+ import { RefreshCw } from "lucide-react";
16
+ export default function Editor() {
17
+ const [document, dispatch] = useSelectedExpenseReportDocument();
18
+ const [selectedWallet, setSelectedWallet] = useState(null);
19
+ const [isModalOpen, setIsModalOpen] = useState(false);
20
+ const [isSyncingAll, setIsSyncingAll] = useState(false);
21
+ const [periodStart, setPeriodStart] = useState(document?.state.global.periodStart || "");
22
+ const [periodEnd, setPeriodEnd] = useState(document?.state.global.periodEnd || "");
23
+ const { wallets, groups } = document?.state.global || {
24
+ wallets: [],
25
+ groups: [],
26
+ };
27
+ const { syncWallet } = useSyncWallet();
28
+ // Handle period date changes
29
+ const handlePeriodStartChange = (e) => {
30
+ const value = e.target.value;
31
+ setPeriodStart(value);
32
+ if (value) {
33
+ dispatch?.(actions.setPeriodStart({ periodStart: value }));
34
+ }
35
+ };
36
+ const handlePeriodEndChange = (e) => {
37
+ const value = e.target.value;
38
+ setPeriodEnd(value);
39
+ if (value) {
40
+ dispatch?.(actions.setPeriodEnd({ periodEnd: value }));
41
+ }
42
+ };
43
+ // Handle wallet selection for adding billing statements
44
+ const handleAddBillingStatement = (walletAddress) => {
45
+ setSelectedWallet(walletAddress);
46
+ setIsModalOpen(true);
47
+ };
48
+ // Handle closing modal
49
+ const handleCloseModal = () => {
50
+ setIsModalOpen(false);
51
+ setSelectedWallet(null);
52
+ };
53
+ // Handle sync all wallets
54
+ const handleSyncAllWallets = () => {
55
+ if (!periodStart || !periodEnd) {
56
+ alert("Please set the period start and end dates before syncing wallet transactions.");
57
+ return;
58
+ }
59
+ setIsSyncingAll(true);
60
+ // Sync all wallets that have either billing statements or transactions
61
+ wallets.forEach((wallet) => {
62
+ if (wallet.wallet &&
63
+ ((wallet.billingStatements && wallet.billingStatements.length > 0) ||
64
+ wallet.accountTransactionsDocumentId)) {
65
+ syncWallet(wallet.wallet, (wallet.lineItems || []).filter((item) => item !== null), (wallet.billingStatements || []).filter((id) => id !== null), groups, wallets, wallet.accountTransactionsDocumentId, periodStart, periodEnd, dispatch);
66
+ }
67
+ });
68
+ setIsSyncingAll(false);
69
+ };
70
+ // Handle PDF export
71
+ const handleExportPDF = async () => {
72
+ try {
73
+ const blob = await pdf(_jsx(ExpenseReportPDF, { periodStart: periodStart, periodEnd: periodEnd, wallets: wallets, groups: groups })).toBlob();
74
+ // Create download link
75
+ const url = URL.createObjectURL(blob);
76
+ const link = window.document.createElement("a");
77
+ link.href = url;
78
+ // Generate filename with period
79
+ const filename = periodStart
80
+ ? `expense-report-${new Date(periodStart).toISOString().split("T")[0]}.pdf`
81
+ : "expense-report.pdf";
82
+ link.download = filename;
83
+ link.click();
84
+ // Cleanup
85
+ URL.revokeObjectURL(url);
86
+ }
87
+ catch (error) {
88
+ console.error("Error generating PDF:", error);
89
+ }
90
+ };
91
+ // Format period title for the breakdown section
92
+ const breakdownTitle = useMemo(() => {
93
+ if (!periodStart)
94
+ return "Breakdown";
95
+ const date = new Date(periodStart);
96
+ const month = date.toLocaleDateString("en-US", { month: "short" });
97
+ const year = date.getFullYear();
98
+ return `${month} ${year} Breakdown`;
99
+ }, [periodStart]);
100
+ // Get the parent folder node for the currently selected node
101
+ const parentFolder = useParentFolderForSelectedNode();
102
+ // Set the selected node to the parent folder node (close the editor)
103
+ function handleClose() {
104
+ setSelectedNode(parentFolder?.id);
105
+ }
106
+ return (_jsxs("div", { children: [_jsx(DocumentToolbar, { document: document, onClose: handleClose }), _jsxs("div", { className: "ph-default-styles flex flex-col h-full w-full bg-gray-50 dark:bg-gray-900", children: [_jsx("div", { className: "flex-1 overflow-auto px-8 py-6", children: _jsxs("div", { className: "max-w-7xl mx-auto space-y-8", children: [_jsx("section", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700", children: _jsx("div", { className: "px-6 py-6", children: _jsxs("div", { className: "relative", children: [_jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-3xl font-bold text-gray-900 dark:text-white mb-4", children: "Expense Report" }), _jsx("div", { className: "flex items-center justify-center gap-4 text-sm text-gray-600 dark:text-gray-400", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: "Period:" }), _jsx(DatePicker, { name: "periodStart", value: periodStart, onChange: handlePeriodStartChange, className: "bg-white" }), _jsx("span", { children: "to" }), _jsx(DatePicker, { name: "periodEnd", value: periodEnd, onChange: handlePeriodEndChange, className: "bg-white" })] }) })] }), _jsxs(Button, { variant: "ghost", onClick: handleExportPDF, className: "absolute top-0 right-0 flex items-center gap-2", children: [_jsx(Icon, { name: "ExportPdf", size: 18 }), "Export to PDF"] })] }) }) }), _jsxs("section", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700", children: [_jsxs("div", { className: "px-6 py-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [_jsx("h2", { className: "text-xl font-semibold text-gray-900 dark:text-white", children: "Wallets" }), _jsxs(Button, { variant: "ghost", onClick: handleSyncAllWallets, disabled: isSyncingAll, className: "flex items-center gap-2", children: [_jsx(RefreshCw, { size: 16, className: isSyncingAll ? "animate-spin" : "" }), _jsx("span", { children: isSyncingAll ? "Syncing..." : "Sync All" })] })] }), _jsx("div", { className: "p-6", children: _jsx(WalletsTable, { wallets: wallets, groups: groups, onAddBillingStatement: handleAddBillingStatement, periodStart: periodStart, periodEnd: periodEnd, dispatch: dispatch }) })] }), wallets.length > 0 && (_jsxs("section", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700", children: [_jsx("div", { className: "px-6 py-4 border-b border-gray-200 dark:border-gray-700", children: _jsx("h2", { className: "text-xl font-semibold text-gray-900 dark:text-white", children: breakdownTitle }) }), _jsx("div", { className: "p-6", children: _jsx(AggregatedExpensesTable, { wallets: wallets, groups: groups, periodStart: periodStart, periodEnd: periodEnd, dispatch: dispatch }) })] }))] }) }), isModalOpen && selectedWallet && (_jsx(AddBillingStatementModal, { isOpen: isModalOpen, onClose: handleCloseModal, walletAddress: selectedWallet, dispatch: dispatch, groups: groups }))] })] }));
107
+ }
@@ -0,0 +1,5 @@
1
+ import type { LineItemGroup, LineItem, Wallet } from "../../../document-models/expense-report/gen/types.js";
2
+ export declare function useSyncWallet(): {
3
+ syncWallet: (walletAddress: string, existingLineItems: LineItem[], billingStatementIds: string[], groups: LineItemGroup[], allWallets: Wallet[], accountTransactionsDocumentId: string | null | undefined, periodStart: string | null | undefined, periodEnd: string | null | undefined, dispatch: any) => void;
4
+ };
5
+ //# sourceMappingURL=useSyncWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSyncWallet.d.ts","sourceRoot":"","sources":["../../../../editors/expense-report/hooks/useSyncWallet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,MAAM,EACP,MAAM,sDAAsD,CAAC;AAkB9D,wBAAgB,aAAa;gCAIV,MAAM,qBACF,QAAQ,EAAE,uBACR,MAAM,EAAE,UACrB,aAAa,EAAE,cACX,MAAM,EAAE,iCACW,MAAM,GAAG,IAAI,GAAG,SAAS,eAC3C,MAAM,GAAG,IAAI,GAAG,SAAS,aAC3B,MAAM,GAAG,IAAI,GAAG,SAAS,YAC1B,GAAG;EAuMhB"}