@withpotter/pages-admin 0.13.0-next.101

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 (1331) hide show
  1. package/dist/admin/_fx/entity-avatar.js +63 -0
  2. package/dist/admin/_fx/entity-avatar.js.map +1 -0
  3. package/dist/admin/_fx/index.js +14 -0
  4. package/dist/admin/_fx/index.js.map +1 -0
  5. package/dist/admin/_fx/motion.js +59 -0
  6. package/dist/admin/_fx/motion.js.map +1 -0
  7. package/dist/admin/_fx/page-transition.js +23 -0
  8. package/dist/admin/_fx/page-transition.js.map +1 -0
  9. package/dist/admin/_fx/tones.js +28 -0
  10. package/dist/admin/_fx/tones.js.map +1 -0
  11. package/dist/admin/_fx.js +1 -0
  12. package/dist/admin/_inbox/nav-badge.js +27 -0
  13. package/dist/admin/_inbox/nav-badge.js.map +1 -0
  14. package/dist/admin/_inbox/nav-badge.module.css +15 -0
  15. package/dist/admin/_inbox/use-admin-inbox.js +118 -0
  16. package/dist/admin/_inbox/use-admin-inbox.js.map +1 -0
  17. package/dist/admin/_money/business-ledger.js +65 -0
  18. package/dist/admin/_money/business-ledger.js.map +1 -0
  19. package/dist/admin/_money/business-picker.js +53 -0
  20. package/dist/admin/_money/business-picker.js.map +1 -0
  21. package/dist/admin/_money/cash-errors.js +42 -0
  22. package/dist/admin/_money/cash-errors.js.map +1 -0
  23. package/dist/admin/_money/cash-postings.js +93 -0
  24. package/dist/admin/_money/cash-postings.js.map +1 -0
  25. package/dist/admin/_money/cash.module.css +128 -0
  26. package/dist/admin/_money/finder-format.js +42 -0
  27. package/dist/admin/_money/finder-format.js.map +1 -0
  28. package/dist/admin/_money/finder-row.js +51 -0
  29. package/dist/admin/_money/finder-row.js.map +1 -0
  30. package/dist/admin/_money/format.js +62 -0
  31. package/dist/admin/_money/format.js.map +1 -0
  32. package/dist/admin/_money/ledger-activity.js +90 -0
  33. package/dist/admin/_money/ledger-activity.js.map +1 -0
  34. package/dist/admin/_money/ledger-balances.js +32 -0
  35. package/dist/admin/_money/ledger-balances.js.map +1 -0
  36. package/dist/admin/_money/ledger-body.js +62 -0
  37. package/dist/admin/_money/ledger-body.js.map +1 -0
  38. package/dist/admin/_money/ledger-holds.js +70 -0
  39. package/dist/admin/_money/ledger-holds.js.map +1 -0
  40. package/dist/admin/_money/ledger-statement.js +120 -0
  41. package/dist/admin/_money/ledger-statement.js.map +1 -0
  42. package/dist/admin/_money/ledger.js +94 -0
  43. package/dist/admin/_money/ledger.js.map +1 -0
  44. package/dist/admin/_money/ledger.module.css +88 -0
  45. package/dist/admin/_money/money-section.js +19 -0
  46. package/dist/admin/_money/money-section.js.map +1 -0
  47. package/dist/admin/_money/open-as-owner.js +32 -0
  48. package/dist/admin/_money/open-as-owner.js.map +1 -0
  49. package/dist/admin/_money/page.module.css +149 -0
  50. package/dist/admin/_money/permissions.js +46 -0
  51. package/dist/admin/_money/permissions.js.map +1 -0
  52. package/dist/admin/_money/proposal-status.js +20 -0
  53. package/dist/admin/_money/proposal-status.js.map +1 -0
  54. package/dist/admin/_money/proposal-store.js +65 -0
  55. package/dist/admin/_money/proposal-store.js.map +1 -0
  56. package/dist/admin/_money/propose-dialog.js +124 -0
  57. package/dist/admin/_money/propose-dialog.js.map +1 -0
  58. package/dist/admin/_money/propose-draft.js +40 -0
  59. package/dist/admin/_money/propose-draft.js.map +1 -0
  60. package/dist/admin/_money/propose-fields.js +113 -0
  61. package/dist/admin/_money/propose-fields.js.map +1 -0
  62. package/dist/admin/_money/propose-steps.js +73 -0
  63. package/dist/admin/_money/propose-steps.js.map +1 -0
  64. package/dist/admin/_money/propose.module.css +105 -0
  65. package/dist/admin/_money/review-dialog.js +149 -0
  66. package/dist/admin/_money/review-dialog.js.map +1 -0
  67. package/dist/admin/_money/review-rules.js +31 -0
  68. package/dist/admin/_money/review-rules.js.map +1 -0
  69. package/dist/admin/_money/save-csv.js +12 -0
  70. package/dist/admin/_money/save-csv.js.map +1 -0
  71. package/dist/admin/_money/skeleton-rows.js +10 -0
  72. package/dist/admin/_money/skeleton-rows.js.map +1 -0
  73. package/dist/admin/_money/statement-export.js +57 -0
  74. package/dist/admin/_money/statement-export.js.map +1 -0
  75. package/dist/admin/_money/tenant-param.js +26 -0
  76. package/dist/admin/_money/tenant-param.js.map +1 -0
  77. package/dist/admin/_money/use-ledger.js +47 -0
  78. package/dist/admin/_money/use-ledger.js.map +1 -0
  79. package/dist/admin/_money/waiting-proposals.js +89 -0
  80. package/dist/admin/_money/waiting-proposals.js.map +1 -0
  81. package/dist/admin/_overview/activation-panel.js +55 -0
  82. package/dist/admin/_overview/activation-panel.js.map +1 -0
  83. package/dist/admin/_overview/attention-groups.js +83 -0
  84. package/dist/admin/_overview/attention-groups.js.map +1 -0
  85. package/dist/admin/_overview/attention-panel.js +58 -0
  86. package/dist/admin/_overview/attention-panel.js.map +1 -0
  87. package/dist/admin/_overview/attention.module.css +109 -0
  88. package/dist/admin/_overview/control-room.js +88 -0
  89. package/dist/admin/_overview/control-room.js.map +1 -0
  90. package/dist/admin/_overview/control-room.module.css +20 -0
  91. package/dist/admin/_overview/figures.module.css +155 -0
  92. package/dist/admin/_overview/kpi-row.js +77 -0
  93. package/dist/admin/_overview/kpi-row.js.map +1 -0
  94. package/dist/admin/_overview/leaders-panel.js +71 -0
  95. package/dist/admin/_overview/leaders-panel.js.map +1 -0
  96. package/dist/admin/_overview/overdue-outstanding.js +37 -0
  97. package/dist/admin/_overview/overdue-outstanding.js.map +1 -0
  98. package/dist/admin/_overview/portfolio-panel.js +69 -0
  99. package/dist/admin/_overview/portfolio-panel.js.map +1 -0
  100. package/dist/admin/_overview/position-panel.js +66 -0
  101. package/dist/admin/_overview/position-panel.js.map +1 -0
  102. package/dist/admin/_overview/position.module.css +52 -0
  103. package/dist/admin/_overview/use-waiting-cases.js +17 -0
  104. package/dist/admin/_overview/use-waiting-cases.js.map +1 -0
  105. package/dist/admin/_pos/action-dialog.js +66 -0
  106. package/dist/admin/_pos/action-dialog.js.map +1 -0
  107. package/dist/admin/_pos/close-shift-dialog.js +62 -0
  108. package/dist/admin/_pos/close-shift-dialog.js.map +1 -0
  109. package/dist/admin/_pos/pos-figures.js +82 -0
  110. package/dist/admin/_pos/pos-figures.js.map +1 -0
  111. package/dist/admin/_pos/pos-money.js +14 -0
  112. package/dist/admin/_pos/pos-money.js.map +1 -0
  113. package/dist/admin/_pos/pos-parts.js +68 -0
  114. package/dist/admin/_pos/pos-parts.js.map +1 -0
  115. package/dist/admin/_pos/pos-rules.js +43 -0
  116. package/dist/admin/_pos/pos-rules.js.map +1 -0
  117. package/dist/admin/_pos/pos-words.js +101 -0
  118. package/dist/admin/_pos/pos-words.js.map +1 -0
  119. package/dist/admin/_pos/pos.module.css +154 -0
  120. package/dist/admin/_pos/shift-row.js +107 -0
  121. package/dist/admin/_pos/shift-row.js.map +1 -0
  122. package/dist/admin/_pos/shifts-table.js +72 -0
  123. package/dist/admin/_pos/shifts-table.js.map +1 -0
  124. package/dist/admin/_pos/terminal-actions.js +104 -0
  125. package/dist/admin/_pos/terminal-actions.js.map +1 -0
  126. package/dist/admin/_pos/use-pos-access.js +20 -0
  127. package/dist/admin/_pos/use-pos-access.js.map +1 -0
  128. package/dist/admin/_pos/use-pos-period.js +39 -0
  129. package/dist/admin/_pos/use-pos-period.js.map +1 -0
  130. package/dist/admin/_pos/use-pos.js +89 -0
  131. package/dist/admin/_pos/use-pos.js.map +1 -0
  132. package/dist/admin/_pos/use-tenant-param.js +20 -0
  133. package/dist/admin/_pos/use-tenant-param.js.map +1 -0
  134. package/dist/admin/_settings/index.js +28 -0
  135. package/dist/admin/_settings/index.js.map +1 -0
  136. package/dist/admin/_settings/live-announcer.js +35 -0
  137. package/dist/admin/_settings/live-announcer.js.map +1 -0
  138. package/dist/admin/_settings/schema.js +82 -0
  139. package/dist/admin/_settings/schema.js.map +1 -0
  140. package/dist/admin/_settings/store.js +82 -0
  141. package/dist/admin/_settings/store.js.map +1 -0
  142. package/dist/admin/_settings/use-apply-preferences.js +38 -0
  143. package/dist/admin/_settings/use-apply-preferences.js.map +1 -0
  144. package/dist/admin/_settings/use-start-page.js +20 -0
  145. package/dist/admin/_settings/use-start-page.js.map +1 -0
  146. package/dist/admin/_settings.js +1 -0
  147. package/dist/admin/_shell/admin-brand.js +15 -0
  148. package/dist/admin/_shell/admin-brand.js.map +1 -0
  149. package/dist/admin/_shell/brand.module.css +147 -0
  150. package/dist/admin/_shell/command-palette.js +103 -0
  151. package/dist/admin/_shell/command-palette.js.map +1 -0
  152. package/dist/admin/_shell/command-palette.module.css +109 -0
  153. package/dist/admin/_shell/frame.module.css +92 -0
  154. package/dist/admin/_shell/inbox-bell.js +74 -0
  155. package/dist/admin/_shell/inbox-bell.js.map +1 -0
  156. package/dist/admin/_shell/inbox.module.css +107 -0
  157. package/dist/admin/_shell/menus.module.css +55 -0
  158. package/dist/admin/_shell/modules-context.js +17 -0
  159. package/dist/admin/_shell/modules-context.js.map +1 -0
  160. package/dist/admin/_shell/nav-config.js +168 -0
  161. package/dist/admin/_shell/nav-config.js.map +1 -0
  162. package/dist/admin/_shell/nav-filter.js +45 -0
  163. package/dist/admin/_shell/nav-filter.js.map +1 -0
  164. package/dist/admin/_shell/nav-fold.js +14 -0
  165. package/dist/admin/_shell/nav-fold.js.map +1 -0
  166. package/dist/admin/_shell/nav-group.js +78 -0
  167. package/dist/admin/_shell/nav-group.js.map +1 -0
  168. package/dist/admin/_shell/nav-modules.js +36 -0
  169. package/dist/admin/_shell/nav-modules.js.map +1 -0
  170. package/dist/admin/_shell/nav-row.js +62 -0
  171. package/dist/admin/_shell/nav-row.js.map +1 -0
  172. package/dist/admin/_shell/seam-toggle.js +26 -0
  173. package/dist/admin/_shell/seam-toggle.js.map +1 -0
  174. package/dist/admin/_shell/section-tabs.js +28 -0
  175. package/dist/admin/_shell/section-tabs.js.map +1 -0
  176. package/dist/admin/_shell/shell-skeleton.js +30 -0
  177. package/dist/admin/_shell/shell-skeleton.js.map +1 -0
  178. package/dist/admin/_shell/shell-skeleton.module.css +57 -0
  179. package/dist/admin/_shell/sidebar-footer.js +85 -0
  180. package/dist/admin/_shell/sidebar-footer.js.map +1 -0
  181. package/dist/admin/_shell/sidebar-footer.module.css +144 -0
  182. package/dist/admin/_shell/sidebar.js +87 -0
  183. package/dist/admin/_shell/sidebar.js.map +1 -0
  184. package/dist/admin/_shell/sidebar.module.css +259 -0
  185. package/dist/admin/_shell/sign-out.js +14 -0
  186. package/dist/admin/_shell/sign-out.js.map +1 -0
  187. package/dist/admin/_shell/system-status-panel.js +100 -0
  188. package/dist/admin/_shell/system-status-panel.js.map +1 -0
  189. package/dist/admin/_shell/system-status-panel.module.css +195 -0
  190. package/dist/admin/_shell/topbar.js +26 -0
  191. package/dist/admin/_shell/topbar.js.map +1 -0
  192. package/dist/admin/_shell/topbar.module.css +84 -0
  193. package/dist/admin/_shell/use-admin-query-defaults.js +18 -0
  194. package/dist/admin/_shell/use-admin-query-defaults.js.map +1 -0
  195. package/dist/admin/_shell/use-fluid-hover.js +62 -0
  196. package/dist/admin/_shell/use-fluid-hover.js.map +1 -0
  197. package/dist/admin/_shell/use-open-groups.js +64 -0
  198. package/dist/admin/_shell/use-open-groups.js.map +1 -0
  199. package/dist/admin/_shell/use-shell-prefs.js +87 -0
  200. package/dist/admin/_shell/use-shell-prefs.js.map +1 -0
  201. package/dist/admin/_shell/user-menu.js +80 -0
  202. package/dist/admin/_shell/user-menu.js.map +1 -0
  203. package/dist/admin/_ui/admin.css +801 -0
  204. package/dist/admin/_ui/chart-colors.js +46 -0
  205. package/dist/admin/_ui/chart-colors.js.map +1 -0
  206. package/dist/admin/_ui/column-picker.js +77 -0
  207. package/dist/admin/_ui/column-picker.js.map +1 -0
  208. package/dist/admin/_ui/country-label.js +42 -0
  209. package/dist/admin/_ui/country-label.js.map +1 -0
  210. package/dist/admin/_ui/country-label.module.css +31 -0
  211. package/dist/admin/_ui/country-text.js +21 -0
  212. package/dist/admin/_ui/country-text.js.map +1 -0
  213. package/dist/admin/_ui/currency-filter-model.js +53 -0
  214. package/dist/admin/_ui/currency-filter-model.js.map +1 -0
  215. package/dist/admin/_ui/currency-filter.js +64 -0
  216. package/dist/admin/_ui/currency-filter.js.map +1 -0
  217. package/dist/admin/_ui/data-table.js +107 -0
  218. package/dist/admin/_ui/data-table.js.map +1 -0
  219. package/dist/admin/_ui/donut-chart.js +193 -0
  220. package/dist/admin/_ui/donut-chart.js.map +1 -0
  221. package/dist/admin/_ui/drawer.js +82 -0
  222. package/dist/admin/_ui/drawer.js.map +1 -0
  223. package/dist/admin/_ui/drawer.module.css +157 -0
  224. package/dist/admin/_ui/empty-state.js +47 -0
  225. package/dist/admin/_ui/empty-state.js.map +1 -0
  226. package/dist/admin/_ui/filter-bar.js +24 -0
  227. package/dist/admin/_ui/filter-bar.js.map +1 -0
  228. package/dist/admin/_ui/filter-dates.js +67 -0
  229. package/dist/admin/_ui/filter-dates.js.map +1 -0
  230. package/dist/admin/_ui/filters.js +93 -0
  231. package/dist/admin/_ui/filters.js.map +1 -0
  232. package/dist/admin/_ui/filters.module.css +88 -0
  233. package/dist/admin/_ui/index.js +120 -0
  234. package/dist/admin/_ui/index.js.map +1 -0
  235. package/dist/admin/_ui/list-card.js +119 -0
  236. package/dist/admin/_ui/list-card.js.map +1 -0
  237. package/dist/admin/_ui/list-card.module.css +96 -0
  238. package/dist/admin/_ui/loading.js +29 -0
  239. package/dist/admin/_ui/loading.js.map +1 -0
  240. package/dist/admin/_ui/money-lines.js +19 -0
  241. package/dist/admin/_ui/money-lines.js.map +1 -0
  242. package/dist/admin/_ui/money-lines.module.css +4 -0
  243. package/dist/admin/_ui/money-view.js +43 -0
  244. package/dist/admin/_ui/money-view.js.map +1 -0
  245. package/dist/admin/_ui/motion.css +22 -0
  246. package/dist/admin/_ui/page-header.js +54 -0
  247. package/dist/admin/_ui/page-header.js.map +1 -0
  248. package/dist/admin/_ui/page-header.module.css +45 -0
  249. package/dist/admin/_ui/page-tabs.js +46 -0
  250. package/dist/admin/_ui/page-tabs.js.map +1 -0
  251. package/dist/admin/_ui/pagination.js +68 -0
  252. package/dist/admin/_ui/pagination.js.map +1 -0
  253. package/dist/admin/_ui/panel.js +38 -0
  254. package/dist/admin/_ui/panel.js.map +1 -0
  255. package/dist/admin/_ui/panel.module.css +87 -0
  256. package/dist/admin/_ui/period-selector.js +81 -0
  257. package/dist/admin/_ui/period-selector.js.map +1 -0
  258. package/dist/admin/_ui/period.js +52 -0
  259. package/dist/admin/_ui/period.js.map +1 -0
  260. package/dist/admin/_ui/period.module.css +43 -0
  261. package/dist/admin/_ui/preferences.css +121 -0
  262. package/dist/admin/_ui/prefs.js +62 -0
  263. package/dist/admin/_ui/prefs.js.map +1 -0
  264. package/dist/admin/_ui/skeleton.js +26 -0
  265. package/dist/admin/_ui/skeleton.js.map +1 -0
  266. package/dist/admin/_ui/sparkline.js +56 -0
  267. package/dist/admin/_ui/sparkline.js.map +1 -0
  268. package/dist/admin/_ui/stat-card.js +85 -0
  269. package/dist/admin/_ui/stat-card.js.map +1 -0
  270. package/dist/admin/_ui/styles.js +74 -0
  271. package/dist/admin/_ui/styles.js.map +1 -0
  272. package/dist/admin/_ui/tint.css +87 -0
  273. package/dist/admin/_ui/trend.js +58 -0
  274. package/dist/admin/_ui/trend.js.map +1 -0
  275. package/dist/admin/_ui/workspace-tab.js +25 -0
  276. package/dist/admin/_ui/workspace-tab.js.map +1 -0
  277. package/dist/admin/_ui.js +1 -0
  278. package/dist/admin/accounts/account-activity.js +64 -0
  279. package/dist/admin/accounts/account-activity.js.map +1 -0
  280. package/dist/admin/accounts/account-activity.module.css +83 -0
  281. package/dist/admin/accounts/account-panel.js +177 -0
  282. package/dist/admin/accounts/account-panel.js.map +1 -0
  283. package/dist/admin/accounts/account-panel.module.css +213 -0
  284. package/dist/admin/accounts/account-row.js +122 -0
  285. package/dist/admin/accounts/account-row.js.map +1 -0
  286. package/dist/admin/accounts/account-sessions.js +70 -0
  287. package/dist/admin/accounts/account-sessions.js.map +1 -0
  288. package/dist/admin/accounts/account-sessions.module.css +55 -0
  289. package/dist/admin/accounts/account-stage-filter.js +29 -0
  290. package/dist/admin/accounts/account-stage-filter.js.map +1 -0
  291. package/dist/admin/accounts/account-stage.js +81 -0
  292. package/dist/admin/accounts/account-stage.js.map +1 -0
  293. package/dist/admin/accounts/account-vitals.js +46 -0
  294. package/dist/admin/accounts/account-vitals.js.map +1 -0
  295. package/dist/admin/accounts/account-workspaces.js +56 -0
  296. package/dist/admin/accounts/account-workspaces.js.map +1 -0
  297. package/dist/admin/accounts/accounts-analytics.js +113 -0
  298. package/dist/admin/accounts/accounts-analytics.js.map +1 -0
  299. package/dist/admin/accounts/accounts-kpis.js +70 -0
  300. package/dist/admin/accounts/accounts-kpis.js.map +1 -0
  301. package/dist/admin/accounts/accounts-table.js +266 -0
  302. package/dist/admin/accounts/accounts-table.js.map +1 -0
  303. package/dist/admin/accounts/accounts-workspace.js +85 -0
  304. package/dist/admin/accounts/accounts-workspace.js.map +1 -0
  305. package/dist/admin/accounts/hint.js +12 -0
  306. package/dist/admin/accounts/hint.js.map +1 -0
  307. package/dist/admin/accounts/owner-session.js +30 -0
  308. package/dist/admin/accounts/owner-session.js.map +1 -0
  309. package/dist/admin/accounts/page.js +11 -0
  310. package/dist/admin/accounts/page.js.map +1 -0
  311. package/dist/admin/accounts/relative-time.js +28 -0
  312. package/dist/admin/accounts/relative-time.js.map +1 -0
  313. package/dist/admin/accounts/rows.module.css +84 -0
  314. package/dist/admin/accounts/top-accounts.js +56 -0
  315. package/dist/admin/accounts/top-accounts.js.map +1 -0
  316. package/dist/admin/accounts/use-account-actions.js +42 -0
  317. package/dist/admin/accounts/use-account-actions.js.map +1 -0
  318. package/dist/admin/accounts/use-account-activity.js +37 -0
  319. package/dist/admin/accounts/use-account-activity.js.map +1 -0
  320. package/dist/admin/admins/access-dialog.js +130 -0
  321. package/dist/admin/admins/access-dialog.js.map +1 -0
  322. package/dist/admin/admins/admin-row.js +74 -0
  323. package/dist/admin/admins/admin-row.js.map +1 -0
  324. package/dist/admin/admins/admins-activity.js +28 -0
  325. package/dist/admin/admins/admins-activity.js.map +1 -0
  326. package/dist/admin/admins/admins-analytics.js +116 -0
  327. package/dist/admin/admins/admins-analytics.js.map +1 -0
  328. package/dist/admin/admins/admins-kpis.js +77 -0
  329. package/dist/admin/admins/admins-kpis.js.map +1 -0
  330. package/dist/admin/admins/admins-table.js +75 -0
  331. package/dist/admin/admins/admins-table.js.map +1 -0
  332. package/dist/admin/admins/admins-workspace.js +109 -0
  333. package/dist/admin/admins/admins-workspace.js.map +1 -0
  334. package/dist/admin/admins/admins.module.css +191 -0
  335. package/dist/admin/admins/invite-dialog.js +134 -0
  336. package/dist/admin/admins/invite-dialog.js.map +1 -0
  337. package/dist/admin/admins/page.js +11 -0
  338. package/dist/admin/admins/page.js.map +1 -0
  339. package/dist/admin/admins/recent-activity.js +38 -0
  340. package/dist/admin/admins/recent-activity.js.map +1 -0
  341. package/dist/admin/admins/recent-activity.module.css +60 -0
  342. package/dist/admin/admins/role-choices.js +27 -0
  343. package/dist/admin/admins/role-choices.js.map +1 -0
  344. package/dist/admin/admins/secret-field.js +60 -0
  345. package/dist/admin/admins/secret-field.js.map +1 -0
  346. package/dist/admin/admins/temp-password-dialog.js +39 -0
  347. package/dist/admin/admins/temp-password-dialog.js.map +1 -0
  348. package/dist/admin/admins/use-admin-actions.js +57 -0
  349. package/dist/admin/admins/use-admin-actions.js.map +1 -0
  350. package/dist/admin/audit/action-meta.js +26 -0
  351. package/dist/admin/audit/action-meta.js.map +1 -0
  352. package/dist/admin/audit/activity-chart.js +117 -0
  353. package/dist/admin/audit/activity-chart.js.map +1 -0
  354. package/dist/admin/audit/activity-chart.module.css +44 -0
  355. package/dist/admin/audit/audit-analytics.js +146 -0
  356. package/dist/admin/audit/audit-analytics.js.map +1 -0
  357. package/dist/admin/audit/audit-filters.js +78 -0
  358. package/dist/admin/audit/audit-filters.js.map +1 -0
  359. package/dist/admin/audit/audit-log.js +132 -0
  360. package/dist/admin/audit/audit-log.js.map +1 -0
  361. package/dist/admin/audit/audit-workspace.js +84 -0
  362. package/dist/admin/audit/audit-workspace.js.map +1 -0
  363. package/dist/admin/audit/audit.module.css +135 -0
  364. package/dist/admin/audit/bar-list.js +27 -0
  365. package/dist/admin/audit/bar-list.js.map +1 -0
  366. package/dist/admin/audit/empty-block.js +13 -0
  367. package/dist/admin/audit/empty-block.js.map +1 -0
  368. package/dist/admin/audit/format.js +22 -0
  369. package/dist/admin/audit/format.js.map +1 -0
  370. package/dist/admin/audit/kpi-brand.module.css +7 -0
  371. package/dist/admin/audit/load-failed.js +20 -0
  372. package/dist/admin/audit/load-failed.js.map +1 -0
  373. package/dist/admin/audit/metric-card.module.css +10 -0
  374. package/dist/admin/audit/page.js +11 -0
  375. package/dist/admin/audit/page.js.map +1 -0
  376. package/dist/admin/audit/page.module.css +12 -0
  377. package/dist/admin/audit/section-header.js +13 -0
  378. package/dist/admin/audit/section-header.js.map +1 -0
  379. package/dist/admin/audit/section-header.module.css +5 -0
  380. package/dist/admin/audit/status-fill.js +14 -0
  381. package/dist/admin/audit/status-fill.js.map +1 -0
  382. package/dist/admin/audit/status-pill.js +52 -0
  383. package/dist/admin/audit/status-pill.js.map +1 -0
  384. package/dist/admin/audit/status-pill.module.css +58 -0
  385. package/dist/admin/audit/tinted.js +17 -0
  386. package/dist/admin/audit/tinted.js.map +1 -0
  387. package/dist/admin/audit/use-range.js +16 -0
  388. package/dist/admin/audit/use-range.js.map +1 -0
  389. package/dist/admin/audit/when.js +14 -0
  390. package/dist/admin/audit/when.js.map +1 -0
  391. package/dist/admin/cash/page.js +184 -0
  392. package/dist/admin/cash/page.js.map +1 -0
  393. package/dist/admin/change-password/page.js +164 -0
  394. package/dist/admin/change-password/page.js.map +1 -0
  395. package/dist/admin/commerce/commerce-console.js +106 -0
  396. package/dist/admin/commerce/commerce-console.js.map +1 -0
  397. package/dist/admin/commerce/commerce-overview.js +102 -0
  398. package/dist/admin/commerce/commerce-overview.js.map +1 -0
  399. package/dist/admin/commerce/console.module.css +63 -0
  400. package/dist/admin/commerce/merchant-meta.js +40 -0
  401. package/dist/admin/commerce/merchant-meta.js.map +1 -0
  402. package/dist/admin/commerce/merchant-picker.js +114 -0
  403. package/dist/admin/commerce/merchant-picker.js.map +1 -0
  404. package/dist/admin/commerce/merchant-view.js +113 -0
  405. package/dist/admin/commerce/merchant-view.js.map +1 -0
  406. package/dist/admin/commerce/overview-kpis.js +100 -0
  407. package/dist/admin/commerce/overview-kpis.js.map +1 -0
  408. package/dist/admin/commerce/overview-services.js +40 -0
  409. package/dist/admin/commerce/overview-services.js.map +1 -0
  410. package/dist/admin/commerce/overview-top-merchants.js +51 -0
  411. package/dist/admin/commerce/overview-top-merchants.js.map +1 -0
  412. package/dist/admin/commerce/overview.module.css +145 -0
  413. package/dist/admin/commerce/page.js +11 -0
  414. package/dist/admin/commerce/page.js.map +1 -0
  415. package/dist/admin/commerce/picker.module.css +98 -0
  416. package/dist/admin/feedback/answer-case-button.js +30 -0
  417. package/dist/admin/feedback/answer-case-button.js.map +1 -0
  418. package/dist/admin/feedback/answers-view.js +87 -0
  419. package/dist/admin/feedback/answers-view.js.map +1 -0
  420. package/dist/admin/feedback/category-label.js +12 -0
  421. package/dist/admin/feedback/category-label.js.map +1 -0
  422. package/dist/admin/feedback/comment-stream.js +62 -0
  423. package/dist/admin/feedback/comment-stream.js.map +1 -0
  424. package/dist/admin/feedback/feedback-access.js +21 -0
  425. package/dist/admin/feedback/feedback-access.js.map +1 -0
  426. package/dist/admin/feedback/feedback-detail-drawer.js +95 -0
  427. package/dist/admin/feedback/feedback-detail-drawer.js.map +1 -0
  428. package/dist/admin/feedback/feedback-drawer-footer.js +60 -0
  429. package/dist/admin/feedback/feedback-drawer-footer.js.map +1 -0
  430. package/dist/admin/feedback/feedback-drawer.module.css +162 -0
  431. package/dist/admin/feedback/feedback-facts.js +84 -0
  432. package/dist/admin/feedback/feedback-facts.js.map +1 -0
  433. package/dist/admin/feedback/feedback-kpis.js +50 -0
  434. package/dist/admin/feedback/feedback-kpis.js.map +1 -0
  435. package/dist/admin/feedback/feedback-options.js +49 -0
  436. package/dist/admin/feedback/feedback-options.js.map +1 -0
  437. package/dist/admin/feedback/feedback-sentiment.js +45 -0
  438. package/dist/admin/feedback/feedback-sentiment.js.map +1 -0
  439. package/dist/admin/feedback/feedback.module.css +136 -0
  440. package/dist/admin/feedback/new-prompt-button.js +13 -0
  441. package/dist/admin/feedback/new-prompt-button.js.map +1 -0
  442. package/dist/admin/feedback/page.js +57 -0
  443. package/dist/admin/feedback/page.js.map +1 -0
  444. package/dist/admin/feedback/prompt-audience-fields.js +63 -0
  445. package/dist/admin/feedback/prompt-audience-fields.js.map +1 -0
  446. package/dist/admin/feedback/prompt-builder.js +85 -0
  447. package/dist/admin/feedback/prompt-builder.js.map +1 -0
  448. package/dist/admin/feedback/prompt-builder.module.css +134 -0
  449. package/dist/admin/feedback/prompt-delivery-fields.js +134 -0
  450. package/dist/admin/feedback/prompt-delivery-fields.js.map +1 -0
  451. package/dist/admin/feedback/prompt-dialog.js +88 -0
  452. package/dist/admin/feedback/prompt-dialog.js.map +1 -0
  453. package/dist/admin/feedback/prompt-dialog.module.css +199 -0
  454. package/dist/admin/feedback/prompt-draft.js +71 -0
  455. package/dist/admin/feedback/prompt-draft.js.map +1 -0
  456. package/dist/admin/feedback/prompt-insights.js +120 -0
  457. package/dist/admin/feedback/prompt-insights.js.map +1 -0
  458. package/dist/admin/feedback/prompt-operations.js +89 -0
  459. package/dist/admin/feedback/prompt-operations.js.map +1 -0
  460. package/dist/admin/feedback/prompt-operations.module.css +128 -0
  461. package/dist/admin/feedback/prompt-preview.js +71 -0
  462. package/dist/admin/feedback/prompt-preview.js.map +1 -0
  463. package/dist/admin/feedback/prompt-preview.module.css +135 -0
  464. package/dist/admin/feedback/prompt-question-fields.js +83 -0
  465. package/dist/admin/feedback/prompt-question-fields.js.map +1 -0
  466. package/dist/admin/feedback/prompt-response-fields.js +103 -0
  467. package/dist/admin/feedback/prompt-response-fields.js.map +1 -0
  468. package/dist/admin/feedback/prompt-review.js +80 -0
  469. package/dist/admin/feedback/prompt-review.js.map +1 -0
  470. package/dist/admin/feedback/prompt-schedule-field.js +67 -0
  471. package/dist/admin/feedback/prompt-schedule-field.js.map +1 -0
  472. package/dist/admin/feedback/prompt-stepper.js +33 -0
  473. package/dist/admin/feedback/prompt-stepper.js.map +1 -0
  474. package/dist/admin/feedback/prompt-summary.module.css +39 -0
  475. package/dist/admin/feedback/prompt-validation.js +48 -0
  476. package/dist/admin/feedback/prompt-validation.js.map +1 -0
  477. package/dist/admin/feedback/prompt-wizard.js +147 -0
  478. package/dist/admin/feedback/prompt-wizard.js.map +1 -0
  479. package/dist/admin/feedback/prompts-table.js +85 -0
  480. package/dist/admin/feedback/prompts-table.js.map +1 -0
  481. package/dist/admin/feedback/prompts-view.js +132 -0
  482. package/dist/admin/feedback/prompts-view.js.map +1 -0
  483. package/dist/admin/feedback/response-card.js +78 -0
  484. package/dist/admin/feedback/response-card.js.map +1 -0
  485. package/dist/admin/feedback/responses-table.js +132 -0
  486. package/dist/admin/feedback/responses-table.js.map +1 -0
  487. package/dist/admin/feedback/responses-view.js +142 -0
  488. package/dist/admin/feedback/responses-view.js.map +1 -0
  489. package/dist/admin/feedback/responses.module.css +147 -0
  490. package/dist/admin/feedback/sentiment-overview.js +103 -0
  491. package/dist/admin/feedback/sentiment-overview.js.map +1 -0
  492. package/dist/admin/feedback/sentiment.module.css +150 -0
  493. package/dist/admin/feedback/use-admin-feedback.js +15 -0
  494. package/dist/admin/feedback/use-admin-feedback.js.map +1 -0
  495. package/dist/admin/feedback/use-admin-prompts.js +15 -0
  496. package/dist/admin/feedback/use-admin-prompts.js.map +1 -0
  497. package/dist/admin/feedback/use-admin-signals.js +22 -0
  498. package/dist/admin/feedback/use-admin-signals.js.map +1 -0
  499. package/dist/admin/feedback/use-open-case.js +53 -0
  500. package/dist/admin/feedback/use-open-case.js.map +1 -0
  501. package/dist/admin/feedback/use-prompt-save.js +59 -0
  502. package/dist/admin/feedback/use-prompt-save.js.map +1 -0
  503. package/dist/admin/feedback/use-steps.js +45 -0
  504. package/dist/admin/feedback/use-steps.js.map +1 -0
  505. package/dist/admin/feedback-signals/_components/comments-panel.js +72 -0
  506. package/dist/admin/feedback-signals/_components/comments-panel.js.map +1 -0
  507. package/dist/admin/feedback-signals/_components/health-panel.js +46 -0
  508. package/dist/admin/feedback-signals/_components/health-panel.js.map +1 -0
  509. package/dist/admin/feedback-signals/_components/messages-panel.js +96 -0
  510. package/dist/admin/feedback-signals/_components/messages-panel.js.map +1 -0
  511. package/dist/admin/feedback-signals/_components/movement.js +27 -0
  512. package/dist/admin/feedback-signals/_components/movement.js.map +1 -0
  513. package/dist/admin/feedback-signals/_components/pick-up.js +67 -0
  514. package/dist/admin/feedback-signals/_components/pick-up.js.map +1 -0
  515. package/dist/admin/feedback-signals/_components/scores-panel.js +68 -0
  516. package/dist/admin/feedback-signals/_components/scores-panel.js.map +1 -0
  517. package/dist/admin/feedback-signals/_components/signals-workspace.js +84 -0
  518. package/dist/admin/feedback-signals/_components/signals-workspace.js.map +1 -0
  519. package/dist/admin/feedback-signals/_components/use-feedback-signals.js +51 -0
  520. package/dist/admin/feedback-signals/_components/use-feedback-signals.js.map +1 -0
  521. package/dist/admin/feedback-signals/page.js +11 -0
  522. package/dist/admin/feedback-signals/page.js.map +1 -0
  523. package/dist/admin/growth-chart-model.js +75 -0
  524. package/dist/admin/growth-chart-model.js.map +1 -0
  525. package/dist/admin/growth-chart-parts.js +186 -0
  526. package/dist/admin/growth-chart-parts.js.map +1 -0
  527. package/dist/admin/growth-chart.js +177 -0
  528. package/dist/admin/growth-chart.js.map +1 -0
  529. package/dist/admin/hooks.js +257 -0
  530. package/dist/admin/hooks.js.map +1 -0
  531. package/dist/admin/layout.js +153 -0
  532. package/dist/admin/layout.js.map +1 -0
  533. package/dist/admin/login/page.js +215 -0
  534. package/dist/admin/login/page.js.map +1 -0
  535. package/dist/admin/newsletters/[id]/page.js +13 -0
  536. package/dist/admin/newsletters/[id]/page.js.map +1 -0
  537. package/dist/admin/newsletters/audience/[contactId]/page.js +12 -0
  538. package/dist/admin/newsletters/audience/[contactId]/page.js.map +1 -0
  539. package/dist/admin/newsletters/audience/audience-list.js +163 -0
  540. package/dist/admin/newsletters/audience/audience-list.js.map +1 -0
  541. package/dist/admin/newsletters/audience/contact-deliveries.js +90 -0
  542. package/dist/admin/newsletters/audience/contact-deliveries.js.map +1 -0
  543. package/dist/admin/newsletters/audience/contact-row.js +63 -0
  544. package/dist/admin/newsletters/audience/contact-row.js.map +1 -0
  545. package/dist/admin/newsletters/audience/contact-screen.js +59 -0
  546. package/dist/admin/newsletters/audience/contact-screen.js.map +1 -0
  547. package/dist/admin/newsletters/audience/contact-summary.js +70 -0
  548. package/dist/admin/newsletters/audience/contact-summary.js.map +1 -0
  549. package/dist/admin/newsletters/audience/contacts.js +99 -0
  550. package/dist/admin/newsletters/audience/contacts.js.map +1 -0
  551. package/dist/admin/newsletters/audience/page.js +11 -0
  552. package/dist/admin/newsletters/audience/page.js.map +1 -0
  553. package/dist/admin/newsletters/audience/status-change.js +53 -0
  554. package/dist/admin/newsletters/audience/status-change.js.map +1 -0
  555. package/dist/admin/newsletters/audience/status-dialog.js +103 -0
  556. package/dist/admin/newsletters/audience/status-dialog.js.map +1 -0
  557. package/dist/admin/newsletters/audience/use-contacts.js +84 -0
  558. package/dist/admin/newsletters/audience/use-contacts.js.map +1 -0
  559. package/dist/admin/newsletters/autosave.js +58 -0
  560. package/dist/admin/newsletters/autosave.js.map +1 -0
  561. package/dist/admin/newsletters/brand-image-field.js +38 -0
  562. package/dist/admin/newsletters/brand-image-field.js.map +1 -0
  563. package/dist/admin/newsletters/composer.js +122 -0
  564. package/dist/admin/newsletters/composer.js.map +1 -0
  565. package/dist/admin/newsletters/content.js +59 -0
  566. package/dist/admin/newsletters/content.js.map +1 -0
  567. package/dist/admin/newsletters/deliveries.js +111 -0
  568. package/dist/admin/newsletters/deliveries.js.map +1 -0
  569. package/dist/admin/newsletters/digest-items.js +91 -0
  570. package/dist/admin/newsletters/digest-items.js.map +1 -0
  571. package/dist/admin/newsletters/editor-fields.js +135 -0
  572. package/dist/admin/newsletters/editor-fields.js.map +1 -0
  573. package/dist/admin/newsletters/format-date.js +11 -0
  574. package/dist/admin/newsletters/format-date.js.map +1 -0
  575. package/dist/admin/newsletters/image-field.js +55 -0
  576. package/dist/admin/newsletters/image-field.js.map +1 -0
  577. package/dist/admin/newsletters/image-picker.js +86 -0
  578. package/dist/admin/newsletters/image-picker.js.map +1 -0
  579. package/dist/admin/newsletters/image-upload.js +37 -0
  580. package/dist/admin/newsletters/image-upload.js.map +1 -0
  581. package/dist/admin/newsletters/labels.js +32 -0
  582. package/dist/admin/newsletters/labels.js.map +1 -0
  583. package/dist/admin/newsletters/layout-picker.js +58 -0
  584. package/dist/admin/newsletters/layout-picker.js.map +1 -0
  585. package/dist/admin/newsletters/layout-schematic.js +46 -0
  586. package/dist/admin/newsletters/layout-schematic.js.map +1 -0
  587. package/dist/admin/newsletters/markdown-field.js +98 -0
  588. package/dist/admin/newsletters/markdown-field.js.map +1 -0
  589. package/dist/admin/newsletters/markdown-insert.js +45 -0
  590. package/dist/admin/newsletters/markdown-insert.js.map +1 -0
  591. package/dist/admin/newsletters/newsletter-row.js +69 -0
  592. package/dist/admin/newsletters/newsletter-row.js.map +1 -0
  593. package/dist/admin/newsletters/newsletter-screen.js +25 -0
  594. package/dist/admin/newsletters/newsletter-screen.js.map +1 -0
  595. package/dist/admin/newsletters/newsletters-list.js +140 -0
  596. package/dist/admin/newsletters/newsletters-list.js.map +1 -0
  597. package/dist/admin/newsletters/not-available.js +7 -0
  598. package/dist/admin/newsletters/not-available.js.map +1 -0
  599. package/dist/admin/newsletters/page.js +11 -0
  600. package/dist/admin/newsletters/page.js.map +1 -0
  601. package/dist/admin/newsletters/preview-pane.js +68 -0
  602. package/dist/admin/newsletters/preview-pane.js.map +1 -0
  603. package/dist/admin/newsletters/problems.js +73 -0
  604. package/dist/admin/newsletters/problems.js.map +1 -0
  605. package/dist/admin/newsletters/recipient-row.js +73 -0
  606. package/dist/admin/newsletters/recipient-row.js.map +1 -0
  607. package/dist/admin/newsletters/recipients-empty.js +21 -0
  608. package/dist/admin/newsletters/recipients-empty.js.map +1 -0
  609. package/dist/admin/newsletters/recipients-selection.js +32 -0
  610. package/dist/admin/newsletters/recipients-selection.js.map +1 -0
  611. package/dist/admin/newsletters/recipients-tab.js +172 -0
  612. package/dist/admin/newsletters/recipients-tab.js.map +1 -0
  613. package/dist/admin/newsletters/record-header.js +28 -0
  614. package/dist/admin/newsletters/record-header.js.map +1 -0
  615. package/dist/admin/newsletters/retry-selection.js +45 -0
  616. package/dist/admin/newsletters/retry-selection.js.map +1 -0
  617. package/dist/admin/newsletters/review-dialog.js +95 -0
  618. package/dist/admin/newsletters/review-dialog.js.map +1 -0
  619. package/dist/admin/newsletters/save-file.js +12 -0
  620. package/dist/admin/newsletters/save-file.js.map +1 -0
  621. package/dist/admin/newsletters/save-indicator.js +28 -0
  622. package/dist/admin/newsletters/save-indicator.js.map +1 -0
  623. package/dist/admin/newsletters/section-tabs.js +26 -0
  624. package/dist/admin/newsletters/section-tabs.js.map +1 -0
  625. package/dist/admin/newsletters/sending.js +36 -0
  626. package/dist/admin/newsletters/sending.js.map +1 -0
  627. package/dist/admin/newsletters/sent-summary.js +77 -0
  628. package/dist/admin/newsletters/sent-summary.js.map +1 -0
  629. package/dist/admin/newsletters/sent-view.js +60 -0
  630. package/dist/admin/newsletters/sent-view.js.map +1 -0
  631. package/dist/admin/newsletters/signature-editor-fields.js +75 -0
  632. package/dist/admin/newsletters/signature-editor-fields.js.map +1 -0
  633. package/dist/admin/newsletters/signature-editor.js +63 -0
  634. package/dist/admin/newsletters/signature-editor.js.map +1 -0
  635. package/dist/admin/newsletters/signature-field.js +44 -0
  636. package/dist/admin/newsletters/signature-field.js.map +1 -0
  637. package/dist/admin/newsletters/signature-preview.js +27 -0
  638. package/dist/admin/newsletters/signature-preview.js.map +1 -0
  639. package/dist/admin/newsletters/signature-row.js +54 -0
  640. package/dist/admin/newsletters/signature-row.js.map +1 -0
  641. package/dist/admin/newsletters/signature-values.js +75 -0
  642. package/dist/admin/newsletters/signature-values.js.map +1 -0
  643. package/dist/admin/newsletters/signatures-dialog.js +98 -0
  644. package/dist/admin/newsletters/signatures-dialog.js.map +1 -0
  645. package/dist/admin/newsletters/signatures.js +34 -0
  646. package/dist/admin/newsletters/signatures.js.map +1 -0
  647. package/dist/admin/newsletters/use-autosave.js +147 -0
  648. package/dist/admin/newsletters/use-autosave.js.map +1 -0
  649. package/dist/admin/newsletters/use-deliveries.js +90 -0
  650. package/dist/admin/newsletters/use-deliveries.js.map +1 -0
  651. package/dist/admin/newsletters/use-newsletter-actions.js +68 -0
  652. package/dist/admin/newsletters/use-newsletter-actions.js.map +1 -0
  653. package/dist/admin/newsletters/use-newsletters.js +83 -0
  654. package/dist/admin/newsletters/use-newsletters.js.map +1 -0
  655. package/dist/admin/newsletters/use-send-actions.js +62 -0
  656. package/dist/admin/newsletters/use-send-actions.js.map +1 -0
  657. package/dist/admin/newsletters/use-signature-preview.js +29 -0
  658. package/dist/admin/newsletters/use-signature-preview.js.map +1 -0
  659. package/dist/admin/newsletters/use-signatures.js +55 -0
  660. package/dist/admin/newsletters/use-signatures.js.map +1 -0
  661. package/dist/admin/page.js +179 -0
  662. package/dist/admin/page.js.map +1 -0
  663. package/dist/admin/payout-providers/add-flow.js +84 -0
  664. package/dist/admin/payout-providers/add-flow.js.map +1 -0
  665. package/dist/admin/payout-providers/attention-list.js +135 -0
  666. package/dist/admin/payout-providers/attention-list.js.map +1 -0
  667. package/dist/admin/payout-providers/connect-step.js +180 -0
  668. package/dist/admin/payout-providers/connect-step.js.map +1 -0
  669. package/dist/admin/payout-providers/editor/auth-section.js +166 -0
  670. package/dist/admin/payout-providers/editor/auth-section.js.map +1 -0
  671. package/dist/admin/payout-providers/editor/call-editor.js +107 -0
  672. package/dist/admin/payout-providers/editor/call-editor.js.map +1 -0
  673. package/dist/admin/payout-providers/editor/condition-editor.js +109 -0
  674. package/dist/admin/payout-providers/editor/condition-editor.js.map +1 -0
  675. package/dist/admin/payout-providers/editor/editor.module.css +123 -0
  676. package/dist/admin/payout-providers/editor/fields.js +144 -0
  677. package/dist/admin/payout-providers/editor/fields.js.map +1 -0
  678. package/dist/admin/payout-providers/editor/flow-editor.js +160 -0
  679. package/dist/admin/payout-providers/editor/flow-editor.js.map +1 -0
  680. package/dist/admin/payout-providers/editor/flow-parts.js +69 -0
  681. package/dist/admin/payout-providers/editor/flow-parts.js.map +1 -0
  682. package/dist/admin/payout-providers/editor/flow-sections.js +147 -0
  683. package/dist/admin/payout-providers/editor/flow-sections.js.map +1 -0
  684. package/dist/admin/payout-providers/editor/rules-editor.js +151 -0
  685. package/dist/admin/payout-providers/editor/rules-editor.js.map +1 -0
  686. package/dist/admin/payout-providers/editor/step-editor.js +157 -0
  687. package/dist/admin/payout-providers/editor/step-editor.js.map +1 -0
  688. package/dist/admin/payout-providers/editor/transfer-section.js +103 -0
  689. package/dist/admin/payout-providers/editor/transfer-section.js.map +1 -0
  690. package/dist/admin/payout-providers/page.js +94 -0
  691. package/dist/admin/payout-providers/page.js.map +1 -0
  692. package/dist/admin/payout-providers/payout-providers.module.css +179 -0
  693. package/dist/admin/payout-providers/pin-step.js +84 -0
  694. package/dist/admin/payout-providers/pin-step.js.map +1 -0
  695. package/dist/admin/payout-providers/provider-detail.js +148 -0
  696. package/dist/admin/payout-providers/provider-detail.js.map +1 -0
  697. package/dist/admin/payout-providers/provider-list.js +37 -0
  698. package/dist/admin/payout-providers/provider-list.js.map +1 -0
  699. package/dist/admin/payout-providers/sections.module.css +151 -0
  700. package/dist/admin/payout-providers/shared.js +34 -0
  701. package/dist/admin/payout-providers/shared.js.map +1 -0
  702. package/dist/admin/payout-providers/status.js +17 -0
  703. package/dist/admin/payout-providers/status.js.map +1 -0
  704. package/dist/admin/payout-providers/step.js +31 -0
  705. package/dist/admin/payout-providers/step.js.map +1 -0
  706. package/dist/admin/payout-providers/test-transfer.js +161 -0
  707. package/dist/admin/payout-providers/test-transfer.js.map +1 -0
  708. package/dist/admin/payout-providers/use-connect.js +108 -0
  709. package/dist/admin/payout-providers/use-connect.js.map +1 -0
  710. package/dist/admin/payout-providers/verify-step.js +57 -0
  711. package/dist/admin/payout-providers/verify-step.js.map +1 -0
  712. package/dist/admin/payout-tiers/_tier-dialog.js +205 -0
  713. package/dist/admin/payout-tiers/_tier-dialog.js.map +1 -0
  714. package/dist/admin/payout-tiers/page.js +11 -0
  715. package/dist/admin/payout-tiers/page.js.map +1 -0
  716. package/dist/admin/payout-tiers/tier-preview-result.js +58 -0
  717. package/dist/admin/payout-tiers/tier-preview-result.js.map +1 -0
  718. package/dist/admin/payout-tiers/tier-preview-tab.js +67 -0
  719. package/dist/admin/payout-tiers/tier-preview-tab.js.map +1 -0
  720. package/dist/admin/payout-tiers/tier-preview.js +41 -0
  721. package/dist/admin/payout-tiers/tier-preview.js.map +1 -0
  722. package/dist/admin/payout-tiers/tiers-table.js +151 -0
  723. package/dist/admin/payout-tiers/tiers-table.js.map +1 -0
  724. package/dist/admin/payout-tiers/tiers-workspace.js +56 -0
  725. package/dist/admin/payout-tiers/tiers-workspace.js.map +1 -0
  726. package/dist/admin/payout-tiers/use-tiers.js +14 -0
  727. package/dist/admin/payout-tiers/use-tiers.js.map +1 -0
  728. package/dist/admin/pos/page.js +11 -0
  729. package/dist/admin/pos/page.js.map +1 -0
  730. package/dist/admin/pos/pos-workspace.js +66 -0
  731. package/dist/admin/pos/pos-workspace.js.map +1 -0
  732. package/dist/admin/pos/shifts-tab.js +111 -0
  733. package/dist/admin/pos/shifts-tab.js.map +1 -0
  734. package/dist/admin/pos/terminal-row.js +94 -0
  735. package/dist/admin/pos/terminal-row.js.map +1 -0
  736. package/dist/admin/pos/terminals/[id]/page.js +12 -0
  737. package/dist/admin/pos/terminals/[id]/page.js.map +1 -0
  738. package/dist/admin/pos/terminals/[id]/terminal-page.js +119 -0
  739. package/dist/admin/pos/terminals/[id]/terminal-page.js.map +1 -0
  740. package/dist/admin/pos/terminals/[id]/terminal-panels.js +58 -0
  741. package/dist/admin/pos/terminals/[id]/terminal-panels.js.map +1 -0
  742. package/dist/admin/pos/terminals/[id]/terminal-people.js +63 -0
  743. package/dist/admin/pos/terminals/[id]/terminal-people.js.map +1 -0
  744. package/dist/admin/pos/terminals/[id]/terminal.module.css +103 -0
  745. package/dist/admin/pos/terminals-tab.js +147 -0
  746. package/dist/admin/pos/terminals-tab.js.map +1 -0
  747. package/dist/admin/pricing/approvals-tab.js +47 -0
  748. package/dist/admin/pricing/approvals-tab.js.map +1 -0
  749. package/dist/admin/pricing/cancel-plan-dialog.js +85 -0
  750. package/dist/admin/pricing/cancel-plan-dialog.js.map +1 -0
  751. package/dist/admin/pricing/change-list.js +9 -0
  752. package/dist/admin/pricing/change-list.js.map +1 -0
  753. package/dist/admin/pricing/change-plan-dialog.js +84 -0
  754. package/dist/admin/pricing/change-plan-dialog.js.map +1 -0
  755. package/dist/admin/pricing/display-preview.js +51 -0
  756. package/dist/admin/pricing/display-preview.js.map +1 -0
  757. package/dist/admin/pricing/display-tab.js +76 -0
  758. package/dist/admin/pricing/display-tab.js.map +1 -0
  759. package/dist/admin/pricing/features-tab.js +48 -0
  760. package/dist/admin/pricing/features-tab.js.map +1 -0
  761. package/dist/admin/pricing/page.js +30 -0
  762. package/dist/admin/pricing/page.js.map +1 -0
  763. package/dist/admin/pricing/plan-approval.js +97 -0
  764. package/dist/admin/pricing/plan-approval.js.map +1 -0
  765. package/dist/admin/pricing/plan-card-product.js +63 -0
  766. package/dist/admin/pricing/plan-card-product.js.map +1 -0
  767. package/dist/admin/pricing/plan-changes.js +54 -0
  768. package/dist/admin/pricing/plan-changes.js.map +1 -0
  769. package/dist/admin/pricing/plan-drawer.js +97 -0
  770. package/dist/admin/pricing/plan-drawer.js.map +1 -0
  771. package/dist/admin/pricing/plan-form-basics.js +59 -0
  772. package/dist/admin/pricing/plan-form-basics.js.map +1 -0
  773. package/dist/admin/pricing/plan-form-dialog.js +103 -0
  774. package/dist/admin/pricing/plan-form-dialog.js.map +1 -0
  775. package/dist/admin/pricing/plan-form-features.js +59 -0
  776. package/dist/admin/pricing/plan-form-features.js.map +1 -0
  777. package/dist/admin/pricing/plan-form-review.js +67 -0
  778. package/dist/admin/pricing/plan-form-review.js.map +1 -0
  779. package/dist/admin/pricing/plan-model.js +91 -0
  780. package/dist/admin/pricing/plan-model.js.map +1 -0
  781. package/dist/admin/pricing/plan-row.js +59 -0
  782. package/dist/admin/pricing/plan-row.js.map +1 -0
  783. package/dist/admin/pricing/plans-tab.js +84 -0
  784. package/dist/admin/pricing/plans-tab.js.map +1 -0
  785. package/dist/admin/pricing/price-form-dialog.js +133 -0
  786. package/dist/admin/pricing/price-form-dialog.js.map +1 -0
  787. package/dist/admin/pricing/price-history.js +25 -0
  788. package/dist/admin/pricing/price-history.js.map +1 -0
  789. package/dist/admin/pricing/price-model.js +47 -0
  790. package/dist/admin/pricing/price-model.js.map +1 -0
  791. package/dist/admin/pricing/price-review.js +104 -0
  792. package/dist/admin/pricing/price-review.js.map +1 -0
  793. package/dist/admin/pricing/price-tab.js +101 -0
  794. package/dist/admin/pricing/price-tab.js.map +1 -0
  795. package/dist/admin/pricing/pricing-tabs.js +28 -0
  796. package/dist/admin/pricing/pricing-tabs.js.map +1 -0
  797. package/dist/admin/pricing/pricing.module.css +188 -0
  798. package/dist/admin/pricing/subscription-events.js +33 -0
  799. package/dist/admin/pricing/subscription-events.js.map +1 -0
  800. package/dist/admin/pricing/subscription-history.js +103 -0
  801. package/dist/admin/pricing/subscription-history.js.map +1 -0
  802. package/dist/admin/pricing/subscription-plan.js +51 -0
  803. package/dist/admin/pricing/subscription-plan.js.map +1 -0
  804. package/dist/admin/pricing/subscription-row.js +70 -0
  805. package/dist/admin/pricing/subscription-row.js.map +1 -0
  806. package/dist/admin/pricing/subscriptions-tab.js +141 -0
  807. package/dist/admin/pricing/subscriptions-tab.js.map +1 -0
  808. package/dist/admin/pricing/use-plans.js +49 -0
  809. package/dist/admin/pricing/use-plans.js.map +1 -0
  810. package/dist/admin/pricing/use-pricing.js +38 -0
  811. package/dist/admin/pricing/use-pricing.js.map +1 -0
  812. package/dist/admin/pricing/use-subscriptions.js +21 -0
  813. package/dist/admin/pricing/use-subscriptions.js.map +1 -0
  814. package/dist/admin/product-insights/all-merchants-view.js +146 -0
  815. package/dist/admin/product-insights/all-merchants-view.js.map +1 -0
  816. package/dist/admin/product-insights/page.js +11 -0
  817. package/dist/admin/product-insights/page.js.map +1 -0
  818. package/dist/admin/product-insights/product-insights-workspace.js +112 -0
  819. package/dist/admin/product-insights/product-insights-workspace.js.map +1 -0
  820. package/dist/admin/product-insights/product-insights.module.css +114 -0
  821. package/dist/admin/product-insights/report-copy.js +69 -0
  822. package/dist/admin/product-insights/report-copy.js.map +1 -0
  823. package/dist/admin/product-insights/report-empty.js +14 -0
  824. package/dist/admin/product-insights/report-empty.js.map +1 -0
  825. package/dist/admin/product-insights/report-kpis.js +54 -0
  826. package/dist/admin/product-insights/report-kpis.js.map +1 -0
  827. package/dist/admin/product-insights/report-panel.js +129 -0
  828. package/dist/admin/product-insights/report-panel.js.map +1 -0
  829. package/dist/admin/product-insights/report-ranking.js +44 -0
  830. package/dist/admin/product-insights/report-ranking.js.map +1 -0
  831. package/dist/admin/product-insights/use-insight-report.js +59 -0
  832. package/dist/admin/product-insights/use-insight-report.js.map +1 -0
  833. package/dist/admin/revenue/channel-panel.js +49 -0
  834. package/dist/admin/revenue/channel-panel.js.map +1 -0
  835. package/dist/admin/revenue/channel-rows.js +17 -0
  836. package/dist/admin/revenue/channel-rows.js.map +1 -0
  837. package/dist/admin/revenue/cohort-panel.js +74 -0
  838. package/dist/admin/revenue/cohort-panel.js.map +1 -0
  839. package/dist/admin/revenue/download-button.js +40 -0
  840. package/dist/admin/revenue/download-button.js.map +1 -0
  841. package/dist/admin/revenue/figure-list.js +19 -0
  842. package/dist/admin/revenue/figure-list.js.map +1 -0
  843. package/dist/admin/revenue/health-panel.js +59 -0
  844. package/dist/admin/revenue/health-panel.js.map +1 -0
  845. package/dist/admin/revenue/ledger-model.js +84 -0
  846. package/dist/admin/revenue/ledger-model.js.map +1 -0
  847. package/dist/admin/revenue/ledger.module.css +101 -0
  848. package/dist/admin/revenue/merchant-payments-view.js +231 -0
  849. package/dist/admin/revenue/merchant-payments-view.js.map +1 -0
  850. package/dist/admin/revenue/method-cards.js +32 -0
  851. package/dist/admin/revenue/method-cards.js.map +1 -0
  852. package/dist/admin/revenue/page.js +11 -0
  853. package/dist/admin/revenue/page.js.map +1 -0
  854. package/dist/admin/revenue/plan-mix-panel.js +62 -0
  855. package/dist/admin/revenue/plan-mix-panel.js.map +1 -0
  856. package/dist/admin/revenue/platform-fees.js +9 -0
  857. package/dist/admin/revenue/platform-fees.js.map +1 -0
  858. package/dist/admin/revenue/quality-panel.js +71 -0
  859. package/dist/admin/revenue/quality-panel.js.map +1 -0
  860. package/dist/admin/revenue/revenue-kpis.js +73 -0
  861. package/dist/admin/revenue/revenue-kpis.js.map +1 -0
  862. package/dist/admin/revenue/revenue-overview.js +132 -0
  863. package/dist/admin/revenue/revenue-overview.js.map +1 -0
  864. package/dist/admin/revenue/revenue-retention.js +31 -0
  865. package/dist/admin/revenue/revenue-retention.js.map +1 -0
  866. package/dist/admin/revenue/revenue-workspace.js +171 -0
  867. package/dist/admin/revenue/revenue-workspace.js.map +1 -0
  868. package/dist/admin/revenue/revenue.module.css +196 -0
  869. package/dist/admin/revenue/subscriptions-panel.js +58 -0
  870. package/dist/admin/revenue/subscriptions-panel.js.map +1 -0
  871. package/dist/admin/revenue/subscriptions-view.js +188 -0
  872. package/dist/admin/revenue/subscriptions-view.js.map +1 -0
  873. package/dist/admin/revenue/top-tenants-panel.js +96 -0
  874. package/dist/admin/revenue/top-tenants-panel.js.map +1 -0
  875. package/dist/admin/reviews/merchant-filter.js +122 -0
  876. package/dist/admin/reviews/merchant-filter.js.map +1 -0
  877. package/dist/admin/reviews/merchant-filter.module.css +113 -0
  878. package/dist/admin/reviews/page.js +124 -0
  879. package/dist/admin/reviews/page.js.map +1 -0
  880. package/dist/admin/reviews/review-row.js +44 -0
  881. package/dist/admin/reviews/review-row.js.map +1 -0
  882. package/dist/admin/reviews/reviews-kpis.js +55 -0
  883. package/dist/admin/reviews/reviews-kpis.js.map +1 -0
  884. package/dist/admin/reviews/reviews.module.css +68 -0
  885. package/dist/admin/reviews/use-admin-reviews.js +22 -0
  886. package/dist/admin/reviews/use-admin-reviews.js.map +1 -0
  887. package/dist/admin/reviews/use-merchant-search.js +32 -0
  888. package/dist/admin/reviews/use-merchant-search.js.map +1 -0
  889. package/dist/admin/roles/more-chip.js +48 -0
  890. package/dist/admin/roles/more-chip.js.map +1 -0
  891. package/dist/admin/roles/more-chip.module.css +70 -0
  892. package/dist/admin/roles/page.js +159 -0
  893. package/dist/admin/roles/page.js.map +1 -0
  894. package/dist/admin/roles/permission-picker.js +71 -0
  895. package/dist/admin/roles/permission-picker.js.map +1 -0
  896. package/dist/admin/roles/permission-picker.module.css +81 -0
  897. package/dist/admin/roles/permissions.js +66 -0
  898. package/dist/admin/roles/permissions.js.map +1 -0
  899. package/dist/admin/roles/role-dialog.js +162 -0
  900. package/dist/admin/roles/role-dialog.js.map +1 -0
  901. package/dist/admin/roles/role-row.js +51 -0
  902. package/dist/admin/roles/role-row.js.map +1 -0
  903. package/dist/admin/roles/roles-kpis.js +45 -0
  904. package/dist/admin/roles/roles-kpis.js.map +1 -0
  905. package/dist/admin/roles/roles.module.css +141 -0
  906. package/dist/admin/sales/activity-log-tab.js +154 -0
  907. package/dist/admin/sales/activity-log-tab.js.map +1 -0
  908. package/dist/admin/sales/bucket.js +29 -0
  909. package/dist/admin/sales/bucket.js.map +1 -0
  910. package/dist/admin/sales/conversion-panel.js +59 -0
  911. package/dist/admin/sales/conversion-panel.js.map +1 -0
  912. package/dist/admin/sales/growth-analysis.js +78 -0
  913. package/dist/admin/sales/growth-analysis.js.map +1 -0
  914. package/dist/admin/sales/leads-tab.js +134 -0
  915. package/dist/admin/sales/leads-tab.js.map +1 -0
  916. package/dist/admin/sales/overview-tab.js +92 -0
  917. package/dist/admin/sales/overview-tab.js.map +1 -0
  918. package/dist/admin/sales/page.js +11 -0
  919. package/dist/admin/sales/page.js.map +1 -0
  920. package/dist/admin/sales/pipeline/add-lead-dialog.js +143 -0
  921. package/dist/admin/sales/pipeline/add-lead-dialog.js.map +1 -0
  922. package/dist/admin/sales/pipeline/lead-card.js +44 -0
  923. package/dist/admin/sales/pipeline/lead-card.js.map +1 -0
  924. package/dist/admin/sales/pipeline/lead-drawer.js +139 -0
  925. package/dist/admin/sales/pipeline/lead-drawer.js.map +1 -0
  926. package/dist/admin/sales/pipeline/lead-timeline.js +34 -0
  927. package/dist/admin/sales/pipeline/lead-timeline.js.map +1 -0
  928. package/dist/admin/sales/pipeline/log-contact-dialog.js +126 -0
  929. package/dist/admin/sales/pipeline/log-contact-dialog.js.map +1 -0
  930. package/dist/admin/sales/pipeline/move-stage-dialog.js +119 -0
  931. package/dist/admin/sales/pipeline/move-stage-dialog.js.map +1 -0
  932. package/dist/admin/sales/pipeline/pipeline-board.js +77 -0
  933. package/dist/admin/sales/pipeline/pipeline-board.js.map +1 -0
  934. package/dist/admin/sales/pipeline/pipeline-filters.js +46 -0
  935. package/dist/admin/sales/pipeline/pipeline-filters.js.map +1 -0
  936. package/dist/admin/sales/pipeline/pipeline.module.css +141 -0
  937. package/dist/admin/sales/report-math.js +17 -0
  938. package/dist/admin/sales/report-math.js.map +1 -0
  939. package/dist/admin/sales/reports-tab.js +147 -0
  940. package/dist/admin/sales/reports-tab.js.map +1 -0
  941. package/dist/admin/sales/sales-kpis.js +69 -0
  942. package/dist/admin/sales/sales-kpis.js.map +1 -0
  943. package/dist/admin/sales/sales-workspace.js +55 -0
  944. package/dist/admin/sales/sales-workspace.js.map +1 -0
  945. package/dist/admin/sales/sales.module.css +52 -0
  946. package/dist/admin/sales/sources-panel.js +19 -0
  947. package/dist/admin/sales/sources-panel.js.map +1 -0
  948. package/dist/admin/sales/stage-meta.js +73 -0
  949. package/dist/admin/sales/stage-meta.js.map +1 -0
  950. package/dist/admin/sales/use-debounced.js +14 -0
  951. package/dist/admin/sales/use-debounced.js.map +1 -0
  952. package/dist/admin/sales/use-sales.js +51 -0
  953. package/dist/admin/sales/use-sales.js.map +1 -0
  954. package/dist/admin/scores/page.js +8 -0
  955. package/dist/admin/scores/page.js.map +1 -0
  956. package/dist/admin/settings/accessibility-tab.js +135 -0
  957. package/dist/admin/settings/accessibility-tab.js.map +1 -0
  958. package/dist/admin/settings/account-tab.js +59 -0
  959. package/dist/admin/settings/account-tab.js.map +1 -0
  960. package/dist/admin/settings/change-password-dialog.js +112 -0
  961. package/dist/admin/settings/change-password-dialog.js.map +1 -0
  962. package/dist/admin/settings/general-tab.js +143 -0
  963. package/dist/admin/settings/general-tab.js.map +1 -0
  964. package/dist/admin/settings/notifications-tab.js +155 -0
  965. package/dist/admin/settings/notifications-tab.js.map +1 -0
  966. package/dist/admin/settings/page.js +11 -0
  967. package/dist/admin/settings/page.js.map +1 -0
  968. package/dist/admin/settings/profile-card.js +35 -0
  969. package/dist/admin/settings/profile-card.js.map +1 -0
  970. package/dist/admin/settings/setting-row.js +85 -0
  971. package/dist/admin/settings/setting-row.js.map +1 -0
  972. package/dist/admin/settings/settings-workspace.js +47 -0
  973. package/dist/admin/settings/settings-workspace.js.map +1 -0
  974. package/dist/admin/settings/settings.module.css +162 -0
  975. package/dist/admin/settings/shortcut-list.js +42 -0
  976. package/dist/admin/settings/shortcut-list.js.map +1 -0
  977. package/dist/admin/settings/shortcuts-tab.js +42 -0
  978. package/dist/admin/settings/shortcuts-tab.js.map +1 -0
  979. package/dist/admin/settings/use-inbox-on.js +11 -0
  980. package/dist/admin/settings/use-inbox-on.js.map +1 -0
  981. package/dist/admin/settings/use-save.js +35 -0
  982. package/dist/admin/settings/use-save.js.map +1 -0
  983. package/dist/admin/support/case-field-selects.js +125 -0
  984. package/dist/admin/support/case-field-selects.js.map +1 -0
  985. package/dist/admin/support/case-header-controls.js +98 -0
  986. package/dist/admin/support/case-header-controls.js.map +1 -0
  987. package/dist/admin/support/case-origin.js +26 -0
  988. package/dist/admin/support/case-origin.js.map +1 -0
  989. package/dist/admin/support/case-pills.js +41 -0
  990. package/dist/admin/support/case-pills.js.map +1 -0
  991. package/dist/admin/support/case-pills.module.css +36 -0
  992. package/dist/admin/support/case-row-menu.js +77 -0
  993. package/dist/admin/support/case-row-menu.js.map +1 -0
  994. package/dist/admin/support/case-row.js +70 -0
  995. package/dist/admin/support/case-row.js.map +1 -0
  996. package/dist/admin/support/case-timeline.js +82 -0
  997. package/dist/admin/support/case-timeline.js.map +1 -0
  998. package/dist/admin/support/cases-tab.js +55 -0
  999. package/dist/admin/support/cases-tab.js.map +1 -0
  1000. package/dist/admin/support/composer-aids.js +29 -0
  1001. package/dist/admin/support/composer-aids.js.map +1 -0
  1002. package/dist/admin/support/composer-assist.js +32 -0
  1003. package/dist/admin/support/composer-assist.js.map +1 -0
  1004. package/dist/admin/support/composer-assist.module.css +23 -0
  1005. package/dist/admin/support/composer-footer.js +56 -0
  1006. package/dist/admin/support/composer-footer.js.map +1 -0
  1007. package/dist/admin/support/composer-header.js +44 -0
  1008. package/dist/admin/support/composer-header.js.map +1 -0
  1009. package/dist/admin/support/composer-keys.js +25 -0
  1010. package/dist/admin/support/composer-keys.js.map +1 -0
  1011. package/dist/admin/support/composer-toolbar.js +69 -0
  1012. package/dist/admin/support/composer-toolbar.js.map +1 -0
  1013. package/dist/admin/support/inbox-address.js +36 -0
  1014. package/dist/admin/support/inbox-address.js.map +1 -0
  1015. package/dist/admin/support/inbox-header.js +19 -0
  1016. package/dist/admin/support/inbox-header.js.map +1 -0
  1017. package/dist/admin/support/inbox-header.module.css +28 -0
  1018. package/dist/admin/support/kbd.js +9 -0
  1019. package/dist/admin/support/kbd.js.map +1 -0
  1020. package/dist/admin/support/kbd.module.css +19 -0
  1021. package/dist/admin/support/page.js +95 -0
  1022. package/dist/admin/support/page.js.map +1 -0
  1023. package/dist/admin/support/queue-card.js +46 -0
  1024. package/dist/admin/support/queue-card.js.map +1 -0
  1025. package/dist/admin/support/queue-card.module.css +88 -0
  1026. package/dist/admin/support/queue-filters.js +119 -0
  1027. package/dist/admin/support/queue-filters.js.map +1 -0
  1028. package/dist/admin/support/reply-picker-body.js +122 -0
  1029. package/dist/admin/support/reply-picker-body.js.map +1 -0
  1030. package/dist/admin/support/reply-picker.js +55 -0
  1031. package/dist/admin/support/reply-picker.js.map +1 -0
  1032. package/dist/admin/support/reply-picker.module.css +152 -0
  1033. package/dist/admin/support/saved-replies/library-categories.js +48 -0
  1034. package/dist/admin/support/saved-replies/library-categories.js.map +1 -0
  1035. package/dist/admin/support/saved-replies/library.js +121 -0
  1036. package/dist/admin/support/saved-replies/library.js.map +1 -0
  1037. package/dist/admin/support/saved-replies/library.module.css +157 -0
  1038. package/dist/admin/support/saved-replies/page.js +16 -0
  1039. package/dist/admin/support/saved-replies/page.js.map +1 -0
  1040. package/dist/admin/support/saved-replies/placeholders.js +51 -0
  1041. package/dist/admin/support/saved-replies/placeholders.js.map +1 -0
  1042. package/dist/admin/support/saved-replies/reply-fields.js +102 -0
  1043. package/dist/admin/support/saved-replies/reply-fields.js.map +1 -0
  1044. package/dist/admin/support/saved-replies/reply-list.js +60 -0
  1045. package/dist/admin/support/saved-replies/reply-list.js.map +1 -0
  1046. package/dist/admin/support/saved-replies/reply-list.module.css +74 -0
  1047. package/dist/admin/support/saved-replies/reply-meta.js +78 -0
  1048. package/dist/admin/support/saved-replies/reply-meta.js.map +1 -0
  1049. package/dist/admin/support/saved-replies/reply-preview.js +48 -0
  1050. package/dist/admin/support/saved-replies/reply-preview.js.map +1 -0
  1051. package/dist/admin/support/saved-replies/save-reply-dialog.js +66 -0
  1052. package/dist/admin/support/saved-replies/save-reply-dialog.js.map +1 -0
  1053. package/dist/admin/support/saved-replies/saved-replies-kpis.js +55 -0
  1054. package/dist/admin/support/saved-replies/saved-replies-kpis.js.map +1 -0
  1055. package/dist/admin/support/saved-replies/saved-replies-tab.js +22 -0
  1056. package/dist/admin/support/saved-replies/saved-replies-tab.js.map +1 -0
  1057. package/dist/admin/support/saved-replies/saved-replies.module.css +95 -0
  1058. package/dist/admin/support/saved-replies/saved-reply-editor.js +55 -0
  1059. package/dist/admin/support/saved-replies/saved-reply-editor.js.map +1 -0
  1060. package/dist/admin/support/saved-replies/use-saved-replies.js +40 -0
  1061. package/dist/admin/support/saved-replies/use-saved-replies.js.map +1 -0
  1062. package/dist/admin/support/suggestion-card.js +70 -0
  1063. package/dist/admin/support/suggestion-card.js.map +1 -0
  1064. package/dist/admin/support/suggestion-card.module.css +72 -0
  1065. package/dist/admin/support/support-case-detail.js +16 -0
  1066. package/dist/admin/support/support-case-detail.js.map +1 -0
  1067. package/dist/admin/support/support-case-identity.js +80 -0
  1068. package/dist/admin/support/support-case-identity.js.map +1 -0
  1069. package/dist/admin/support/support-case-table.js +89 -0
  1070. package/dist/admin/support/support-case-table.js.map +1 -0
  1071. package/dist/admin/support/support-case-thread.js +64 -0
  1072. package/dist/admin/support/support-case-thread.js.map +1 -0
  1073. package/dist/admin/support/support-case.module.css +178 -0
  1074. package/dist/admin/support/support-composer.js +171 -0
  1075. package/dist/admin/support/support-composer.js.map +1 -0
  1076. package/dist/admin/support/support-kpis.js +106 -0
  1077. package/dist/admin/support/support-kpis.js.map +1 -0
  1078. package/dist/admin/support/support-options.js +87 -0
  1079. package/dist/admin/support/support-options.js.map +1 -0
  1080. package/dist/admin/support/support-queue.module.css +82 -0
  1081. package/dist/admin/support/support-thread.module.css +174 -0
  1082. package/dist/admin/support/support-trend.js +59 -0
  1083. package/dist/admin/support/support-trend.js.map +1 -0
  1084. package/dist/admin/support/support-views.js +79 -0
  1085. package/dist/admin/support/support-views.js.map +1 -0
  1086. package/dist/admin/support/support-views.module.css +80 -0
  1087. package/dist/admin/support/support.module.css +98 -0
  1088. package/dist/admin/support/thread-attachment.js +54 -0
  1089. package/dist/admin/support/thread-attachment.js.map +1 -0
  1090. package/dist/admin/support/thread-bubble.js +46 -0
  1091. package/dist/admin/support/thread-bubble.js.map +1 -0
  1092. package/dist/admin/support/thread-event.module.css +35 -0
  1093. package/dist/admin/support/use-admin-support.js +90 -0
  1094. package/dist/admin/support/use-admin-support.js.map +1 -0
  1095. package/dist/admin/support/use-case-activity.js +68 -0
  1096. package/dist/admin/support/use-case-activity.js.map +1 -0
  1097. package/dist/admin/support/use-close-case.js +26 -0
  1098. package/dist/admin/support/use-close-case.js.map +1 -0
  1099. package/dist/admin/support/use-composer-assist.js +114 -0
  1100. package/dist/admin/support/use-composer-assist.js.map +1 -0
  1101. package/dist/admin/support/use-queue-cases.js +17 -0
  1102. package/dist/admin/support/use-queue-cases.js.map +1 -0
  1103. package/dist/admin/support/use-send-reply.js +73 -0
  1104. package/dist/admin/support/use-send-reply.js.map +1 -0
  1105. package/dist/admin/support/use-support-insights.js +53 -0
  1106. package/dist/admin/support/use-support-insights.js.map +1 -0
  1107. package/dist/admin/support/use-view-counts.js +36 -0
  1108. package/dist/admin/support/use-view-counts.js.map +1 -0
  1109. package/dist/admin/support/workspace/action-bar.js +69 -0
  1110. package/dist/admin/support/workspace/action-bar.js.map +1 -0
  1111. package/dist/admin/support/workspace/action-bar.module.css +85 -0
  1112. package/dist/admin/support/workspace/case-card.js +58 -0
  1113. package/dist/admin/support/workspace/case-card.js.map +1 -0
  1114. package/dist/admin/support/workspace/case-facts.js +41 -0
  1115. package/dist/admin/support/workspace/case-facts.js.map +1 -0
  1116. package/dist/admin/support/workspace/case-list-pane.js +126 -0
  1117. package/dist/admin/support/workspace/case-list-pane.js.map +1 -0
  1118. package/dist/admin/support/workspace/case-properties.js +91 -0
  1119. package/dist/admin/support/workspace/case-properties.js.map +1 -0
  1120. package/dist/admin/support/workspace/conversation-header.js +128 -0
  1121. package/dist/admin/support/workspace/conversation-header.js.map +1 -0
  1122. package/dist/admin/support/workspace/conversation-pane.js +90 -0
  1123. package/dist/admin/support/workspace/conversation-pane.js.map +1 -0
  1124. package/dist/admin/support/workspace/conversation.module.css +191 -0
  1125. package/dist/admin/support/workspace/details-pane.js +99 -0
  1126. package/dist/admin/support/workspace/details-pane.js.map +1 -0
  1127. package/dist/admin/support/workspace/details.module.css +137 -0
  1128. package/dist/admin/support/workspace/list.module.css +193 -0
  1129. package/dist/admin/support/workspace/merchant-card.js +58 -0
  1130. package/dist/admin/support/workspace/merchant-card.js.map +1 -0
  1131. package/dist/admin/support/workspace/merchant.module.css +97 -0
  1132. package/dist/admin/support/workspace/related-cases.js +51 -0
  1133. package/dist/admin/support/workspace/related-cases.js.map +1 -0
  1134. package/dist/admin/support/workspace/sort-cases.js +16 -0
  1135. package/dist/admin/support/workspace/sort-cases.js.map +1 -0
  1136. package/dist/admin/support/workspace/status-banner.js +101 -0
  1137. package/dist/admin/support/workspace/status-banner.js.map +1 -0
  1138. package/dist/admin/support/workspace/step-case.js +9 -0
  1139. package/dist/admin/support/workspace/step-case.js.map +1 -0
  1140. package/dist/admin/support/workspace/support-workspace.js +127 -0
  1141. package/dist/admin/support/workspace/support-workspace.js.map +1 -0
  1142. package/dist/admin/support/workspace/use-media.js +17 -0
  1143. package/dist/admin/support/workspace/use-media.js.map +1 -0
  1144. package/dist/admin/support/workspace/use-workspace-keys.js +46 -0
  1145. package/dist/admin/support/workspace/use-workspace-keys.js.map +1 -0
  1146. package/dist/admin/support/workspace/workspace.module.css +89 -0
  1147. package/dist/admin/tenants/[id]/account-officer-dialog.js +58 -0
  1148. package/dist/admin/tenants/[id]/account-officer-dialog.js.map +1 -0
  1149. package/dist/admin/tenants/[id]/account-officer.js +59 -0
  1150. package/dist/admin/tenants/[id]/account-officer.js.map +1 -0
  1151. package/dist/admin/tenants/[id]/commerce/best-sellers.js +56 -0
  1152. package/dist/admin/tenants/[id]/commerce/best-sellers.js.map +1 -0
  1153. package/dist/admin/tenants/[id]/commerce/commerce-flow.js +84 -0
  1154. package/dist/admin/tenants/[id]/commerce/commerce-flow.js.map +1 -0
  1155. package/dist/admin/tenants/[id]/commerce/drawer.module.css +89 -0
  1156. package/dist/admin/tenants/[id]/commerce/flow.module.css +110 -0
  1157. package/dist/admin/tenants/[id]/commerce/format.js +74 -0
  1158. package/dist/admin/tenants/[id]/commerce/format.js.map +1 -0
  1159. package/dist/admin/tenants/[id]/commerce/health.module.css +144 -0
  1160. package/dist/admin/tenants/[id]/commerce/index.js +5 -0
  1161. package/dist/admin/tenants/[id]/commerce/index.js.map +1 -0
  1162. package/dist/admin/tenants/[id]/commerce/inventory-health.js +82 -0
  1163. package/dist/admin/tenants/[id]/commerce/inventory-health.js.map +1 -0
  1164. package/dist/admin/tenants/[id]/commerce/item-card.js +37 -0
  1165. package/dist/admin/tenants/[id]/commerce/item-card.js.map +1 -0
  1166. package/dist/admin/tenants/[id]/commerce/items-gallery.js +155 -0
  1167. package/dist/admin/tenants/[id]/commerce/items-gallery.js.map +1 -0
  1168. package/dist/admin/tenants/[id]/commerce/items-table.js +49 -0
  1169. package/dist/admin/tenants/[id]/commerce/items-table.js.map +1 -0
  1170. package/dist/admin/tenants/[id]/commerce/items.module.css +125 -0
  1171. package/dist/admin/tenants/[id]/commerce/layout.module.css +27 -0
  1172. package/dist/admin/tenants/[id]/commerce/merchant-commerce.js +103 -0
  1173. package/dist/admin/tenants/[id]/commerce/merchant-commerce.js.map +1 -0
  1174. package/dist/admin/tenants/[id]/commerce/money-panel.js +52 -0
  1175. package/dist/admin/tenants/[id]/commerce/money-panel.js.map +1 -0
  1176. package/dist/admin/tenants/[id]/commerce/money.module.css +122 -0
  1177. package/dist/admin/tenants/[id]/commerce/order-drawer.js +65 -0
  1178. package/dist/admin/tenants/[id]/commerce/order-drawer.js.map +1 -0
  1179. package/dist/admin/tenants/[id]/commerce/order-pipeline.js +50 -0
  1180. package/dist/admin/tenants/[id]/commerce/order-pipeline.js.map +1 -0
  1181. package/dist/admin/tenants/[id]/commerce/orders.module.css +154 -0
  1182. package/dist/admin/tenants/[id]/commerce/owner-card.js +55 -0
  1183. package/dist/admin/tenants/[id]/commerce/owner-card.js.map +1 -0
  1184. package/dist/admin/tenants/[id]/commerce/pill.module.css +47 -0
  1185. package/dist/admin/tenants/[id]/commerce/recent-orders.js +98 -0
  1186. package/dist/admin/tenants/[id]/commerce/recent-orders.js.map +1 -0
  1187. package/dist/admin/tenants/[id]/commerce/shell.module.css +64 -0
  1188. package/dist/admin/tenants/[id]/commerce/status-pill.js +19 -0
  1189. package/dist/admin/tenants/[id]/commerce/status-pill.js.map +1 -0
  1190. package/dist/admin/tenants/[id]/commerce.js +1 -0
  1191. package/dist/admin/tenants/[id]/copy-text.js +30 -0
  1192. package/dist/admin/tenants/[id]/copy-text.js.map +1 -0
  1193. package/dist/admin/tenants/[id]/merchant-ledger.js +47 -0
  1194. package/dist/admin/tenants/[id]/merchant-ledger.js.map +1 -0
  1195. package/dist/admin/tenants/[id]/message-merchant-button.js +38 -0
  1196. package/dist/admin/tenants/[id]/message-merchant-button.js.map +1 -0
  1197. package/dist/admin/tenants/[id]/message-merchant-dialog.js +96 -0
  1198. package/dist/admin/tenants/[id]/message-merchant-dialog.js.map +1 -0
  1199. package/dist/admin/tenants/[id]/page.js +2308 -0
  1200. package/dist/admin/tenants/[id]/page.js.map +1 -0
  1201. package/dist/admin/tenants/[id]/subaccounts-panel.js +40 -0
  1202. package/dist/admin/tenants/[id]/subaccounts-panel.js.map +1 -0
  1203. package/dist/admin/tenants/[id]/tenant-activity-feed.js +92 -0
  1204. package/dist/admin/tenants/[id]/tenant-activity-feed.js.map +1 -0
  1205. package/dist/admin/tenants/[id]/tenant-activity.module.css +94 -0
  1206. package/dist/admin/tenants/[id]/tenant-attention.js +93 -0
  1207. package/dist/admin/tenants/[id]/tenant-attention.js.map +1 -0
  1208. package/dist/admin/tenants/[id]/tenant-header.js +125 -0
  1209. package/dist/admin/tenants/[id]/tenant-header.js.map +1 -0
  1210. package/dist/admin/tenants/[id]/tenant-invites.js +49 -0
  1211. package/dist/admin/tenants/[id]/tenant-invites.js.map +1 -0
  1212. package/dist/admin/tenants/[id]/tenant-layout.module.css +106 -0
  1213. package/dist/admin/tenants/[id]/tenant-overview.js +182 -0
  1214. package/dist/admin/tenants/[id]/tenant-overview.js.map +1 -0
  1215. package/dist/admin/tenants/[id]/tenant-overview.module.css +151 -0
  1216. package/dist/admin/tenants/[id]/tenant-people-panel.js +109 -0
  1217. package/dist/admin/tenants/[id]/tenant-people-panel.js.map +1 -0
  1218. package/dist/admin/tenants/[id]/tenant-people.module.css +121 -0
  1219. package/dist/admin/tenants/[id]/tenant-pos.js +101 -0
  1220. package/dist/admin/tenants/[id]/tenant-pos.js.map +1 -0
  1221. package/dist/admin/tenants/[id]/tenant-sidebar.js +115 -0
  1222. package/dist/admin/tenants/[id]/tenant-sidebar.js.map +1 -0
  1223. package/dist/admin/tenants/[id]/tenant-sidebar.module.css +53 -0
  1224. package/dist/admin/tenants/[id]/tenant-support.js +37 -0
  1225. package/dist/admin/tenants/[id]/tenant-support.js.map +1 -0
  1226. package/dist/admin/tenants/[id]/tenant-tabs.js +22 -0
  1227. package/dist/admin/tenants/[id]/tenant-tabs.js.map +1 -0
  1228. package/dist/admin/tenants/[id]/tenant-wallet-card.js +53 -0
  1229. package/dist/admin/tenants/[id]/tenant-wallet-card.js.map +1 -0
  1230. package/dist/admin/tenants/[id]/use-set-account-officer.js +31 -0
  1231. package/dist/admin/tenants/[id]/use-set-account-officer.js.map +1 -0
  1232. package/dist/admin/tenants/[id]/use-tenant-wallet.js +23 -0
  1233. package/dist/admin/tenants/[id]/use-tenant-wallet.js.map +1 -0
  1234. package/dist/admin/tenants/[id]/verification/business-records.js +70 -0
  1235. package/dist/admin/tenants/[id]/verification/business-records.js.map +1 -0
  1236. package/dist/admin/tenants/[id]/verification/case-checks.js +81 -0
  1237. package/dist/admin/tenants/[id]/verification/case-checks.js.map +1 -0
  1238. package/dist/admin/tenants/[id]/verification/case-events.js +44 -0
  1239. package/dist/admin/tenants/[id]/verification/case-events.js.map +1 -0
  1240. package/dist/admin/tenants/[id]/verification/case-form-dialog.js +58 -0
  1241. package/dist/admin/tenants/[id]/verification/case-form-dialog.js.map +1 -0
  1242. package/dist/admin/tenants/[id]/verification/case-history.js +27 -0
  1243. package/dist/admin/tenants/[id]/verification/case-history.js.map +1 -0
  1244. package/dist/admin/tenants/[id]/verification/case-rules.js +72 -0
  1245. package/dist/admin/tenants/[id]/verification/case-rules.js.map +1 -0
  1246. package/dist/admin/tenants/[id]/verification/case-status.js +47 -0
  1247. package/dist/admin/tenants/[id]/verification/case-status.js.map +1 -0
  1248. package/dist/admin/tenants/[id]/verification/case-words.js +104 -0
  1249. package/dist/admin/tenants/[id]/verification/case-words.js.map +1 -0
  1250. package/dist/admin/tenants/[id]/verification/decision-bar.js +59 -0
  1251. package/dist/admin/tenants/[id]/verification/decision-bar.js.map +1 -0
  1252. package/dist/admin/tenants/[id]/verification/decision-dialogs.js +152 -0
  1253. package/dist/admin/tenants/[id]/verification/decision-dialogs.js.map +1 -0
  1254. package/dist/admin/tenants/[id]/verification/document-file.js +78 -0
  1255. package/dist/admin/tenants/[id]/verification/document-file.js.map +1 -0
  1256. package/dist/admin/tenants/[id]/verification/document-view.js +28 -0
  1257. package/dist/admin/tenants/[id]/verification/document-view.js.map +1 -0
  1258. package/dist/admin/tenants/[id]/verification/document-viewer.js +46 -0
  1259. package/dist/admin/tenants/[id]/verification/document-viewer.js.map +1 -0
  1260. package/dist/admin/tenants/[id]/verification/document-viewer.module.css +98 -0
  1261. package/dist/admin/tenants/[id]/verification/person-card.js +111 -0
  1262. package/dist/admin/tenants/[id]/verification/person-card.js.map +1 -0
  1263. package/dist/admin/tenants/[id]/verification/reveal-number.js +48 -0
  1264. package/dist/admin/tenants/[id]/verification/reveal-number.js.map +1 -0
  1265. package/dist/admin/tenants/[id]/verification/reverse-dialog.js +52 -0
  1266. package/dist/admin/tenants/[id]/verification/reverse-dialog.js.map +1 -0
  1267. package/dist/admin/tenants/[id]/verification/sent-files.js +33 -0
  1268. package/dist/admin/tenants/[id]/verification/sent-files.js.map +1 -0
  1269. package/dist/admin/tenants/[id]/verification/tenant-verification.js +103 -0
  1270. package/dist/admin/tenants/[id]/verification/tenant-verification.js.map +1 -0
  1271. package/dist/admin/tenants/[id]/verification/use-case.js +57 -0
  1272. package/dist/admin/tenants/[id]/verification/use-case.js.map +1 -0
  1273. package/dist/admin/tenants/[id]/verification/verification.module.css +168 -0
  1274. package/dist/admin/tenants/account-officer-action.js +8 -0
  1275. package/dist/admin/tenants/account-officer-action.js.map +1 -0
  1276. package/dist/admin/tenants/account-officer-filter.js +43 -0
  1277. package/dist/admin/tenants/account-officer-filter.js.map +1 -0
  1278. package/dist/admin/tenants/account-officer-options.js +15 -0
  1279. package/dist/admin/tenants/account-officer-options.js.map +1 -0
  1280. package/dist/admin/tenants/country-filter.js +53 -0
  1281. package/dist/admin/tenants/country-filter.js.map +1 -0
  1282. package/dist/admin/tenants/country-options.js +22 -0
  1283. package/dist/admin/tenants/country-options.js.map +1 -0
  1284. package/dist/admin/tenants/message-merchant.js +61 -0
  1285. package/dist/admin/tenants/message-merchant.js.map +1 -0
  1286. package/dist/admin/tenants/page.js +11 -0
  1287. package/dist/admin/tenants/page.js.map +1 -0
  1288. package/dist/admin/tenants/tenant-list-row.js +169 -0
  1289. package/dist/admin/tenants/tenant-list-row.js.map +1 -0
  1290. package/dist/admin/tenants/tenants-analytics.js +119 -0
  1291. package/dist/admin/tenants/tenants-analytics.js.map +1 -0
  1292. package/dist/admin/tenants/tenants-kpis.js +98 -0
  1293. package/dist/admin/tenants/tenants-kpis.js.map +1 -0
  1294. package/dist/admin/tenants/tenants-logo.js +8 -0
  1295. package/dist/admin/tenants/tenants-logo.js.map +1 -0
  1296. package/dist/admin/tenants/tenants-table.js +135 -0
  1297. package/dist/admin/tenants/tenants-table.js.map +1 -0
  1298. package/dist/admin/tenants/tenants-workspace.js +98 -0
  1299. package/dist/admin/tenants/tenants-workspace.js.map +1 -0
  1300. package/dist/admin/till-requests/decision-dialog.js +59 -0
  1301. package/dist/admin/till-requests/decision-dialog.js.map +1 -0
  1302. package/dist/admin/till-requests/page.js +124 -0
  1303. package/dist/admin/till-requests/page.js.map +1 -0
  1304. package/dist/admin/till-requests/till-request-row.js +72 -0
  1305. package/dist/admin/till-requests/till-request-row.js.map +1 -0
  1306. package/dist/admin/verification/page.js +11 -0
  1307. package/dist/admin/verification/page.js.map +1 -0
  1308. package/dist/admin/verification/preview-dialog.js +111 -0
  1309. package/dist/admin/verification/preview-dialog.js.map +1 -0
  1310. package/dist/admin/verification/reject-dialog.js +94 -0
  1311. package/dist/admin/verification/reject-dialog.js.map +1 -0
  1312. package/dist/admin/verification/review-queue.js +124 -0
  1313. package/dist/admin/verification/review-queue.js.map +1 -0
  1314. package/dist/admin/verification/review-row.js +55 -0
  1315. package/dist/admin/verification/review-row.js.map +1 -0
  1316. package/dist/admin/verification/review.js +69 -0
  1317. package/dist/admin/verification/review.js.map +1 -0
  1318. package/dist/admin/verification/use-review.js +26 -0
  1319. package/dist/admin/verification/use-review.js.map +1 -0
  1320. package/dist/admin/verification/verification-page.js +35 -0
  1321. package/dist/admin/verification/verification-page.js.map +1 -0
  1322. package/dist/admin/verification/verification.module.css +30 -0
  1323. package/dist/admin/verification/waiting-cases.js +94 -0
  1324. package/dist/admin/verification/waiting-cases.js.map +1 -0
  1325. package/dist/admin/wallets/page.js +11 -0
  1326. package/dist/admin/wallets/page.js.map +1 -0
  1327. package/dist/admin/wallets/wallets-workspace.js +37 -0
  1328. package/dist/admin/wallets/wallets-workspace.js.map +1 -0
  1329. package/dist/index.js +1 -0
  1330. package/dist/index.js.map +1 -0
  1331. package/package.json +56 -0
@@ -0,0 +1,2308 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { use, useState, useMemo } from "react";
4
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
5
+ import { Badge } from "@withpotter/ui-kit";
6
+ import {
7
+ platformAdminApi
8
+ } from "@withpotter/lib/admin-api";
9
+ import { SubaccountsPanel } from "./subaccounts-panel";
10
+ import { ActivityColumns } from "./tenant-activity-feed";
11
+ import { TenantHeader, tenantTabs } from "./tenant-header";
12
+ import { useAdminModules } from "../../_shell/modules-context";
13
+ import { moduleOn } from "../../_shell/nav-modules";
14
+ import { TenantOverview } from "./tenant-overview";
15
+ import { TenantPeoplePanel } from "./tenant-people-panel";
16
+ import { TenantWalletCard } from "./tenant-wallet-card";
17
+ import { useTenantWallet } from "./use-tenant-wallet";
18
+ import { LedgerCurrencyFilter, MerchantLedger } from "./merchant-ledger";
19
+ import { TenantSupport } from "./tenant-support";
20
+ import { TenantVerification } from "./verification/tenant-verification";
21
+ import { TenantPos } from "./tenant-pos";
22
+ import { MerchantCommerce } from "./commerce";
23
+ import {
24
+ usePlatformTenant,
25
+ useTenantAnalytics,
26
+ useTenantFinance,
27
+ useTenantTransactions,
28
+ useTenantCustomers,
29
+ useTenantProducts,
30
+ useTenantProductInsights,
31
+ useTenantCustomerInsights,
32
+ useTenantInvoices,
33
+ useTenantLoyalty,
34
+ useTenantDiscounts,
35
+ useTenantSettlements,
36
+ useTenantSubscriptions
37
+ } from "../../hooks";
38
+ import {
39
+ tableStyles,
40
+ AdmLoading,
41
+ Filters,
42
+ FilterSearch,
43
+ FilterSelect as AdmFilterSelect,
44
+ PeriodSelector,
45
+ customRange,
46
+ periodPhrase,
47
+ rangeFromKey,
48
+ usePersistedDateRange,
49
+ useTabParam,
50
+ CurrencyFilter,
51
+ byCurrency,
52
+ currenciesIn,
53
+ useCurrencyParam,
54
+ MoneyLines,
55
+ PICK_CURRENCY,
56
+ focusCurrency,
57
+ rowFor,
58
+ shownRows
59
+ } from "../../_ui";
60
+ import { GrowthChart } from "../../growth-chart";
61
+ function moneyCur(n, currency) {
62
+ try {
63
+ return new Intl.NumberFormat("en-US", {
64
+ style: "currency",
65
+ currencyDisplay: "narrowSymbol",
66
+ currency,
67
+ maximumFractionDigits: 0
68
+ }).format(n);
69
+ } catch {
70
+ return `${currency} ${n.toFixed(0)}`;
71
+ }
72
+ }
73
+ function sharedCurrency(rows) {
74
+ const codes = new Set(rows.map((r) => r.currency));
75
+ return codes.size === 1 ? [...codes][0] || null : null;
76
+ }
77
+ function num(n) {
78
+ return new Intl.NumberFormat("en-US").format(n ?? 0);
79
+ }
80
+ function pct(n) {
81
+ return `${(n ?? 0).toFixed(1)}%`;
82
+ }
83
+ function duration(seconds) {
84
+ if (!seconds || seconds < 1) return "0s";
85
+ const m = Math.floor(seconds / 60);
86
+ const s = Math.round(seconds % 60);
87
+ return m > 0 ? `${m}m ${s}s` : `${s}s`;
88
+ }
89
+ function compactDate(s) {
90
+ if (!s) return "\u2014";
91
+ const d = new Date(s);
92
+ if (Number.isNaN(d.getTime())) return "\u2014";
93
+ return d.toLocaleDateString(void 0, {
94
+ month: "short",
95
+ day: "numeric",
96
+ year: "numeric"
97
+ });
98
+ }
99
+ function SegToggle({
100
+ value,
101
+ options,
102
+ onChange
103
+ }) {
104
+ return /* @__PURE__ */ jsx("div", { role: "group", className: "adm-segments", children: options.map((opt) => /* @__PURE__ */ jsx(
105
+ "button",
106
+ {
107
+ type: "button",
108
+ className: "adm-segment",
109
+ onClick: () => onChange(opt.key),
110
+ "aria-pressed": opt.key === value,
111
+ children: opt.label
112
+ },
113
+ opt.key
114
+ )) });
115
+ }
116
+ const SUBTABS = {
117
+ wallet: [
118
+ { key: "money", label: "Money health" },
119
+ { key: "finance", label: "Balances & finance" }
120
+ ],
121
+ payments: [
122
+ { key: "invoices", label: "Invoices" },
123
+ { key: "subscriptions", label: "Subscriptions" }
124
+ ],
125
+ withdrawals: [{ key: "settlements", label: "Payouts & bank accounts" }],
126
+ commerce: [
127
+ { key: "commerce", label: "Commerce" },
128
+ { key: "analytics", label: "Sales" },
129
+ { key: "customers", label: "Customers" },
130
+ { key: "products", label: "Products" },
131
+ { key: "discounts", label: "Discounts" },
132
+ { key: "loyalty", label: "Loyalty" }
133
+ ]
134
+ };
135
+ function TenantDetailPage({
136
+ params
137
+ }) {
138
+ const { id } = use(params);
139
+ const modules = useAdminModules();
140
+ const tabKeys = useMemo(
141
+ () => tenantTabs(modules).map((t) => t.key),
142
+ [modules]
143
+ );
144
+ const [tab, setTab] = useTabParam(tabKeys);
145
+ const walletLedger = moduleOn(modules, "wallets");
146
+ const [sub, setSub] = useState({
147
+ wallet: walletLedger ? "money" : "finance",
148
+ payments: "invoices",
149
+ withdrawals: "settlements",
150
+ commerce: "commerce"
151
+ });
152
+ const { rangeKey, setRangeKey, customStart, customEnd, onCustomChange } = usePersistedDateRange();
153
+ const range = useMemo(
154
+ () => rangeKey === "custom" ? customRange(customStart, customEnd) : rangeFromKey(rangeKey),
155
+ [rangeKey, customStart, customEnd]
156
+ );
157
+ const [shown, setShown] = useCurrencyParam();
158
+ const { data, isLoading, isError } = usePlatformTenant(id, {
159
+ startDate: range.startDate,
160
+ endDate: range.endDate
161
+ });
162
+ const { wallet, walletNote } = useTenantWallet(
163
+ id,
164
+ walletLedger,
165
+ data?.wallet
166
+ );
167
+ const queryClient = useQueryClient();
168
+ const statusMutation = useMutation({
169
+ mutationFn: (status) => platformAdminApi.setTenantStatus(id, status),
170
+ onSuccess: () => {
171
+ queryClient.invalidateQueries({
172
+ queryKey: ["platform-admin", "tenant", id]
173
+ });
174
+ queryClient.invalidateQueries({
175
+ queryKey: ["platform-admin", "tenants"]
176
+ });
177
+ }
178
+ });
179
+ if (isError) {
180
+ return /* @__PURE__ */ jsx("p", { style: { color: "var(--error)" }, children: "Failed to load tenant." });
181
+ }
182
+ if (isLoading || !data) return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading tenant\u2026" });
183
+ const view = { ...data, wallet };
184
+ const currency = data.currency ?? "NGN";
185
+ const currencyControl = /* @__PURE__ */ jsx(
186
+ CurrencyFilter,
187
+ {
188
+ value: shown,
189
+ onChange: setShown,
190
+ currencies: currenciesIn(
191
+ data.currencies,
192
+ view.wallet?.balances.map((b) => b.currency),
193
+ data.recentOrders.map((o) => o.currency)
194
+ )
195
+ }
196
+ );
197
+ const group = tab in SUBTABS ? tab : null;
198
+ const current = group ? sub[group] : null;
199
+ const periodControl = /* @__PURE__ */ jsx(
200
+ PeriodSelector,
201
+ {
202
+ value: rangeKey,
203
+ onChange: setRangeKey,
204
+ customStart,
205
+ customEnd,
206
+ onCustomChange
207
+ }
208
+ );
209
+ return /* @__PURE__ */ jsxs("div", { children: [
210
+ /* @__PURE__ */ jsx(
211
+ TenantHeader,
212
+ {
213
+ data,
214
+ tab,
215
+ onTab: setTab,
216
+ onStatus: (status) => statusMutation.mutate(status),
217
+ statusPending: statusMutation.isPending
218
+ }
219
+ ),
220
+ tab === "overview" && /* @__PURE__ */ jsx(
221
+ TenantOverview,
222
+ {
223
+ data: view,
224
+ walletNote,
225
+ periodLabel: periodPhrase(range),
226
+ periodControl,
227
+ recentOrders: /* @__PURE__ */ jsx(
228
+ ActivityTable,
229
+ {
230
+ orders: byCurrency(data.recentOrders, shown, (o) => o.currency),
231
+ isLoading: false,
232
+ empty: shown ? `No recent ${shown} orders.` : void 0
233
+ }
234
+ ),
235
+ onTab: setTab,
236
+ currency: shown,
237
+ currencyControl
238
+ }
239
+ ),
240
+ tab === "overview" && /* @__PURE__ */ jsx("div", { id: "tenant-team", style: { marginTop: "var(--adm-gap)" }, children: /* @__PURE__ */ jsx(TenantPeoplePanel, { data }) }),
241
+ tab === "verification" && /* @__PURE__ */ jsx(TenantVerification, { tenantId: id }),
242
+ tab === "support" && /* @__PURE__ */ jsx(TenantSupport, { tenantId: id }),
243
+ tab === "pos" && /* @__PURE__ */ jsx(TenantPos, { tenantId: id }),
244
+ tab === "audit" && /* @__PURE__ */ jsx(ActivityColumns, { entries: data.activity ?? [] }),
245
+ group && current && /* @__PURE__ */ jsxs(Fragment, { children: [
246
+ /* @__PURE__ */ jsxs(
247
+ "div",
248
+ {
249
+ style: {
250
+ display: "flex",
251
+ flexWrap: "wrap",
252
+ justifyContent: "space-between",
253
+ gap: 12,
254
+ marginBottom: 16
255
+ },
256
+ children: [
257
+ SUBTABS[group].filter((o) => walletLedger || o.key !== "money").length > 1 ? /* @__PURE__ */ jsx(
258
+ SegToggle,
259
+ {
260
+ value: current,
261
+ options: SUBTABS[group].filter(
262
+ (o) => walletLedger || o.key !== "money"
263
+ ),
264
+ onChange: (key) => setSub((s) => ({ ...s, [group]: key }))
265
+ }
266
+ ) : /* @__PURE__ */ jsx("span", {}),
267
+ /* @__PURE__ */ jsxs("div", { className: "adm-toolbar", children: [
268
+ group === "wallet" && current !== "money" && currencyControl,
269
+ current === "money" ? /* @__PURE__ */ jsx(
270
+ LedgerCurrencyFilter,
271
+ {
272
+ tenantId: id,
273
+ value: shown,
274
+ onChange: setShown
275
+ }
276
+ ) : periodControl
277
+ ] })
278
+ ]
279
+ }
280
+ ),
281
+ group === "wallet" && current !== "money" && /* @__PURE__ */ jsx(
282
+ TenantWalletCard,
283
+ {
284
+ data: view,
285
+ currency: shown,
286
+ walletNote
287
+ }
288
+ ),
289
+ current === "money" && /* @__PURE__ */ jsx(
290
+ MerchantLedger,
291
+ {
292
+ tenantId: id,
293
+ business: data.businessName,
294
+ currency: shown,
295
+ onCurrency: setShown
296
+ }
297
+ ),
298
+ current === "settlements" && /* @__PURE__ */ jsx(SettlementsTab, { id, range }),
299
+ current === "finance" && /* @__PURE__ */ jsx(FinanceTab, { id, range, currency: shown }),
300
+ current === "commerce" && /* @__PURE__ */ jsx(MerchantCommerce, { tenantId: id, currency, range }),
301
+ current === "analytics" && /* @__PURE__ */ jsx(AnalyticsTab, { id, range }),
302
+ current === "customers" && /* @__PURE__ */ jsx(CustomersTab, { id, currency, range }),
303
+ current === "products" && /* @__PURE__ */ jsx(ProductsTab, { id, currency, range }),
304
+ current === "discounts" && /* @__PURE__ */ jsx(DiscountsTab, { id }),
305
+ current === "loyalty" && /* @__PURE__ */ jsx(LoyaltyTab, { id }),
306
+ current === "invoices" && /* @__PURE__ */ jsx(InvoicesTab, { id }),
307
+ current === "subscriptions" && /* @__PURE__ */ jsx(SubscriptionsTab, { id })
308
+ ] })
309
+ ] });
310
+ }
311
+ function HintLabel({ label, hint }) {
312
+ if (!hint) return /* @__PURE__ */ jsx(Fragment, { children: label });
313
+ return /* @__PURE__ */ jsxs("span", { className: "adm-hint", tabIndex: 0, role: "note", "aria-label": hint, children: [
314
+ label,
315
+ /* @__PURE__ */ jsx("span", { className: "adm-hint-bubble", role: "tooltip", children: hint })
316
+ ] });
317
+ }
318
+ function StatsListPanel({ items }) {
319
+ return /* @__PURE__ */ jsx("div", { className: "adm-panel", style: { padding: "4px 0" }, children: items.map((s, i) => /* @__PURE__ */ jsxs(
320
+ "div",
321
+ {
322
+ style: {
323
+ display: "flex",
324
+ alignItems: "center",
325
+ justifyContent: "space-between",
326
+ gap: 12,
327
+ padding: "12px 16px",
328
+ borderBottom: i < items.length - 1 ? "1px solid var(--border-subtle)" : "none"
329
+ },
330
+ children: [
331
+ /* @__PURE__ */ jsx(
332
+ "span",
333
+ {
334
+ style: {
335
+ display: "inline-flex",
336
+ alignItems: "center",
337
+ gap: 10,
338
+ fontSize: 13,
339
+ color: "var(--text-secondary)"
340
+ },
341
+ children: /* @__PURE__ */ jsx(HintLabel, { label: s.label, hint: s.hint })
342
+ }
343
+ ),
344
+ /* @__PURE__ */ jsx(
345
+ "span",
346
+ {
347
+ style: {
348
+ fontSize: 18,
349
+ fontWeight: 600,
350
+ color: "var(--text-primary)"
351
+ },
352
+ children: s.value
353
+ }
354
+ )
355
+ ]
356
+ },
357
+ s.label
358
+ )) });
359
+ }
360
+ function SubDataLayout({
361
+ summary,
362
+ detail
363
+ }) {
364
+ return /* @__PURE__ */ jsxs(
365
+ "div",
366
+ {
367
+ style: {
368
+ display: "grid",
369
+ gridTemplateColumns: "minmax(0, 300px) minmax(0, 1fr)",
370
+ gap: 16,
371
+ alignItems: "start"
372
+ },
373
+ children: [
374
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: summary }),
375
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: detail })
376
+ ]
377
+ }
378
+ );
379
+ }
380
+ function AnalyticsTab({ id, range }) {
381
+ const { data, isLoading, isError } = useTenantAnalytics(id, {
382
+ startDate: range.startDate,
383
+ endDate: range.endDate
384
+ });
385
+ const [srcTab, setSrcTab] = useState("traffic");
386
+ const [crTab, setCrTab] = useState("customers");
387
+ if (isError) {
388
+ return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load analytics for this tenant." });
389
+ }
390
+ if (isLoading || !data) {
391
+ return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading analytics\u2026" });
392
+ }
393
+ const a = data;
394
+ const series = a.visitorsTimeSeries?.length ? a.visitorsTimeSeries : a.sessionsTimeSeries;
395
+ const statItems = [
396
+ {
397
+ label: "Page views",
398
+ value: num(a.overview.totalPageViews),
399
+ hint: "Total number of pages loaded across the storefront in the selected period. One visitor can generate many page views."
400
+ },
401
+ {
402
+ label: "Unique visitors",
403
+ value: num(a.overview.uniqueVisitors),
404
+ hint: "Distinct people who visited the storefront, de-duplicated by device. Reloads and repeat visits in the period count once."
405
+ },
406
+ {
407
+ label: "Sessions",
408
+ value: num(a.overview.totalSessions),
409
+ hint: "Number of browsing sessions. A session is a continuous visit that ends after ~30 minutes of inactivity."
410
+ },
411
+ {
412
+ label: "Avg session",
413
+ value: duration(a.overview.averageSessionDuration),
414
+ hint: "Average time a visitor spends per session. Longer sessions usually indicate more engaged shoppers."
415
+ },
416
+ {
417
+ label: "Bounce rate",
418
+ value: pct(a.overview.bounceRate),
419
+ hint: "Share of sessions that left after viewing a single page without interacting. Lower is better."
420
+ },
421
+ {
422
+ label: "Conversion",
423
+ value: pct(a.sales.conversionRate),
424
+ hint: "Percentage of sessions that resulted in a completed purchase. The core measure of storefront effectiveness."
425
+ }
426
+ ];
427
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
428
+ /* @__PURE__ */ jsxs(
429
+ "div",
430
+ {
431
+ style: {
432
+ display: "grid",
433
+ gridTemplateColumns: "minmax(0, 300px) minmax(0, 1fr)",
434
+ gap: 16,
435
+ alignItems: "start"
436
+ },
437
+ children: [
438
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: [
439
+ /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
440
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
441
+ /* @__PURE__ */ jsxs(
442
+ "div",
443
+ {
444
+ style: {
445
+ display: "flex",
446
+ alignItems: "center",
447
+ justifyContent: "space-between",
448
+ marginBottom: 12
449
+ },
450
+ children: [
451
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { marginBottom: 0 }, children: "Channels" }),
452
+ /* @__PURE__ */ jsx(
453
+ SegToggle,
454
+ {
455
+ value: srcTab,
456
+ onChange: setSrcTab,
457
+ options: [
458
+ { key: "traffic", label: "Traffic" },
459
+ { key: "devices", label: "Devices" }
460
+ ]
461
+ }
462
+ )
463
+ ]
464
+ }
465
+ ),
466
+ srcTab === "traffic" ? a.trafficSources?.length ? a.trafficSources.map((s) => /* @__PURE__ */ jsx(
467
+ BarRow,
468
+ {
469
+ label: s.source || "direct",
470
+ value: `${num(s.sessions)} \xB7 ${pct(s.percentage)}`,
471
+ fraction: s.percentage / 100,
472
+ hint: `Sessions arriving via ${s.source || "direct"} \u2014 ${pct(s.percentage)} of all traffic in this window.`
473
+ },
474
+ s.source
475
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No source data." }) : a.devices?.length ? a.devices.map((d) => /* @__PURE__ */ jsx(
476
+ BarRow,
477
+ {
478
+ label: d.device,
479
+ value: `${num(d.sessions)} \xB7 ${pct(d.percentage)}`,
480
+ fraction: d.percentage / 100,
481
+ hint: `Sessions on ${d.device} devices \u2014 ${pct(d.percentage)} of all traffic in this window.`
482
+ },
483
+ d.device
484
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No device data." })
485
+ ] }),
486
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
487
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Conversion funnel" }),
488
+ /* @__PURE__ */ jsx(
489
+ FunnelBar,
490
+ {
491
+ label: "Product views",
492
+ value: a.funnel.productViews,
493
+ max: a.funnel.productViews,
494
+ hint: "Number of times shoppers viewed a product page \u2014 the top of the purchase funnel."
495
+ }
496
+ ),
497
+ /* @__PURE__ */ jsx(
498
+ FunnelBar,
499
+ {
500
+ label: "Add to cart",
501
+ value: a.funnel.addToCart,
502
+ max: a.funnel.productViews,
503
+ rate: a.funnel.viewToCartRate,
504
+ hint: "Sessions that added an item to cart. The percentage is the view-to-cart conversion rate."
505
+ }
506
+ ),
507
+ /* @__PURE__ */ jsx(
508
+ FunnelBar,
509
+ {
510
+ label: "Checkout",
511
+ value: a.funnel.checkoutStart,
512
+ max: a.funnel.productViews,
513
+ rate: a.funnel.cartToCheckoutRate,
514
+ hint: "Sessions that started checkout. The percentage is the cart-to-checkout conversion rate."
515
+ }
516
+ ),
517
+ /* @__PURE__ */ jsx(
518
+ FunnelBar,
519
+ {
520
+ label: "Purchase",
521
+ value: a.funnel.purchase,
522
+ max: a.funnel.productViews,
523
+ rate: a.funnel.checkoutToPurchaseRate,
524
+ hint: "Sessions that completed a purchase. The percentage is the checkout-to-purchase conversion rate.",
525
+ last: true
526
+ }
527
+ )
528
+ ] })
529
+ ] }),
530
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: [
531
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
532
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Visitors trend" }),
533
+ series?.length ? /* @__PURE__ */ jsx(
534
+ GrowthChart,
535
+ {
536
+ data: series.map((p) => ({ date: p.date, count: p.value }))
537
+ }
538
+ ) : /* @__PURE__ */ jsx(EmptyInline, { children: "No traffic recorded in this window." })
539
+ ] }),
540
+ /* @__PURE__ */ jsx("div", { children: a.topPages?.length ? /* @__PURE__ */ jsxs("div", { className: "adm-table-card", children: [
541
+ /* @__PURE__ */ jsx(
542
+ "div",
543
+ {
544
+ className: "adm-panel-title",
545
+ style: { margin: 0, padding: "16px 20px 12px" },
546
+ children: "Top pages"
547
+ }
548
+ ),
549
+ /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
550
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
551
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Page" }),
552
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Views" }),
553
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Unique visitors" })
554
+ ] }) }),
555
+ /* @__PURE__ */ jsx("tbody", { children: a.topPages.slice(0, 12).map((p) => /* @__PURE__ */ jsxs("tr", { children: [
556
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: p.pageUrl || "/" }),
557
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: num(p.views) }),
558
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: num(p.uniqueVisitors) })
559
+ ] }, p.pageUrl)) })
560
+ ] })
561
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
562
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Top pages" }),
563
+ /* @__PURE__ */ jsx(EmptyInline, { children: "No page views recorded yet." })
564
+ ] }) }),
565
+ /* @__PURE__ */ jsxs(
566
+ "div",
567
+ {
568
+ style: {
569
+ display: "grid",
570
+ gridTemplateColumns: "1fr 1fr",
571
+ gap: 16,
572
+ alignItems: "stretch"
573
+ },
574
+ children: [
575
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
576
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Orders" }),
577
+ /* @__PURE__ */ jsx(KeyRow, { label: "Total", value: num(a.orderStats.total) }),
578
+ /* @__PURE__ */ jsx(KeyRow, { label: "Completed", value: num(a.orderStats.completed) }),
579
+ /* @__PURE__ */ jsx(KeyRow, { label: "Processing", value: num(a.orderStats.processing) }),
580
+ /* @__PURE__ */ jsx(KeyRow, { label: "Pending", value: num(a.orderStats.pending) }),
581
+ /* @__PURE__ */ jsx(
582
+ KeyRow,
583
+ {
584
+ label: "Refunded",
585
+ value: num(a.orderStats.refunded),
586
+ last: true
587
+ }
588
+ )
589
+ ] }),
590
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
591
+ /* @__PURE__ */ jsxs(
592
+ "div",
593
+ {
594
+ style: {
595
+ display: "flex",
596
+ alignItems: "center",
597
+ justifyContent: "space-between",
598
+ marginBottom: 12
599
+ },
600
+ children: [
601
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { marginBottom: 0 }, children: crTab === "customers" ? "Customers" : "Reviews" }),
602
+ /* @__PURE__ */ jsx(
603
+ SegToggle,
604
+ {
605
+ value: crTab,
606
+ onChange: setCrTab,
607
+ options: [
608
+ { key: "customers", label: "Customers" },
609
+ { key: "reviews", label: "Reviews" }
610
+ ]
611
+ }
612
+ )
613
+ ]
614
+ }
615
+ ),
616
+ crTab === "customers" ? /* @__PURE__ */ jsxs(Fragment, { children: [
617
+ /* @__PURE__ */ jsx(
618
+ KeyRow,
619
+ {
620
+ label: "Total",
621
+ value: num(a.customerStats.totalCustomers)
622
+ }
623
+ ),
624
+ /* @__PURE__ */ jsx(
625
+ KeyRow,
626
+ {
627
+ label: "Registered",
628
+ value: num(a.customerStats.registered)
629
+ }
630
+ ),
631
+ /* @__PURE__ */ jsx(
632
+ KeyRow,
633
+ {
634
+ label: "Subscribers",
635
+ value: num(a.customerStats.subscribers)
636
+ }
637
+ ),
638
+ /* @__PURE__ */ jsx(KeyRow, { label: "Leads", value: num(a.customerStats.leads) }),
639
+ /* @__PURE__ */ jsx(
640
+ KeyRow,
641
+ {
642
+ label: "Guests",
643
+ value: num(a.customerStats.guests),
644
+ last: true
645
+ }
646
+ )
647
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
648
+ /* @__PURE__ */ jsx(
649
+ KeyRow,
650
+ {
651
+ label: "Average rating",
652
+ value: `${a.reviewStats.averageRating.toFixed(1)} \u2605`
653
+ }
654
+ ),
655
+ /* @__PURE__ */ jsx(
656
+ KeyRow,
657
+ {
658
+ label: "Approved",
659
+ value: num(a.reviewStats.totalApproved)
660
+ }
661
+ ),
662
+ /* @__PURE__ */ jsx(
663
+ KeyRow,
664
+ {
665
+ label: "Pending",
666
+ value: num(a.reviewStats.pendingCount)
667
+ }
668
+ ),
669
+ /* @__PURE__ */ jsx(
670
+ KeyRow,
671
+ {
672
+ label: "Response rate",
673
+ value: pct(a.reviewStats.responseRate),
674
+ last: true
675
+ }
676
+ )
677
+ ] })
678
+ ] })
679
+ ]
680
+ }
681
+ )
682
+ ] })
683
+ ]
684
+ }
685
+ ),
686
+ a.clientErrors?.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginTop: 16 }, children: [
687
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { marginBottom: 12 }, children: "Client errors" }),
688
+ /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
689
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
690
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Message" }),
691
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Page" }),
692
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Count" }),
693
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Last seen" })
694
+ ] }) }),
695
+ /* @__PURE__ */ jsx("tbody", { children: a.clientErrors.slice(0, 10).map((e, i) => /* @__PURE__ */ jsxs("tr", { children: [
696
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: e.message }),
697
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: e.pageUrl || "/" }),
698
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: num(e.count) }),
699
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: new Date(e.lastSeen).toLocaleDateString() })
700
+ ] }, `${e.pageUrl}-${i}`)) })
701
+ ] }) })
702
+ ] })
703
+ ] });
704
+ }
705
+ function FinanceTab({
706
+ id,
707
+ range,
708
+ currency
709
+ }) {
710
+ const { data, isLoading, isError } = useTenantFinance(id, {
711
+ startDate: range.startDate,
712
+ endDate: range.endDate
713
+ });
714
+ const [txnSearch, setTxnSearch] = useState("");
715
+ const [txnType, setTxnType] = useState("");
716
+ const { data: txns } = useTenantTransactions(id, {
717
+ limit: 15,
718
+ search: txnSearch || void 0,
719
+ type: txnType || void 0
720
+ });
721
+ if (isError) {
722
+ return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load finance data for this tenant." });
723
+ }
724
+ if (isLoading || !data) {
725
+ return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading finance\u2026" });
726
+ }
727
+ const f = data;
728
+ const rows = f.summary.byCurrency;
729
+ const focus = focusCurrency(f.summary.currencies ?? [], currency);
730
+ const breakdown = rowFor(f.revenueByType?.byCurrency, focus)?.breakdown;
731
+ const trend = rowFor(f.chart?.byCurrency, focus)?.data;
732
+ const shown = shownRows(rows, currency);
733
+ const count = (pick, all) => rows && currency ? shown.reduce((n, r) => n + pick(r), 0) : all;
734
+ const lines = (amount) => /* @__PURE__ */ jsx(MoneyLines, { rows, currency, amount });
735
+ const statItems = [
736
+ {
737
+ label: "Total revenue",
738
+ value: lines((r) => r.totalRevenue),
739
+ hint: "Gross money collected from all successful transactions in this window, before platform and processing fees."
740
+ },
741
+ {
742
+ label: "Fees",
743
+ value: lines((r) => r.totalFees),
744
+ hint: "Total platform and payment-processing fees deducted from gross revenue over this window."
745
+ },
746
+ {
747
+ label: "Net revenue",
748
+ value: lines((r) => r.netRevenue),
749
+ hint: "What the tenant actually keeps: total revenue minus all fees. This is the amount eligible for payout."
750
+ },
751
+ {
752
+ label: "Transactions",
753
+ value: num(count((r) => r.transactionCount, f.summary.transactionCount)),
754
+ hint: "Count of all payment attempts in this window, including successful, pending, failed and refunded ones."
755
+ },
756
+ {
757
+ label: "Avg value",
758
+ value: lines((r) => r.averageTransactionValue),
759
+ hint: "Average amount per successful transaction (total revenue \xF7 successful transactions)."
760
+ },
761
+ {
762
+ label: "Successful",
763
+ value: num(count((r) => r.successfulCount, f.summary.successfulCount)),
764
+ hint: "Number of transactions that were fully captured and paid in this window."
765
+ }
766
+ ];
767
+ return /* @__PURE__ */ jsx(
768
+ SubDataLayout,
769
+ {
770
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [
771
+ /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
772
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
773
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Transaction status" }),
774
+ /* @__PURE__ */ jsx(
775
+ KeyRow,
776
+ {
777
+ label: "Successful",
778
+ value: num(f.summary.successfulCount),
779
+ hint: "Payments captured in full \u2014 money has been received."
780
+ }
781
+ ),
782
+ /* @__PURE__ */ jsx(
783
+ KeyRow,
784
+ {
785
+ label: "Pending",
786
+ value: num(f.summary.pendingCount),
787
+ hint: "Payments initiated but not yet confirmed by the processor."
788
+ }
789
+ ),
790
+ /* @__PURE__ */ jsx(
791
+ KeyRow,
792
+ {
793
+ label: "Failed",
794
+ value: num(f.summary.failedCount),
795
+ hint: "Payment attempts that were declined or errored and collected no money."
796
+ }
797
+ ),
798
+ /* @__PURE__ */ jsx(
799
+ KeyRow,
800
+ {
801
+ label: "Refunded",
802
+ value: num(f.summary.refundedCount),
803
+ hint: "Previously successful payments that were later returned to the customer.",
804
+ last: true
805
+ }
806
+ )
807
+ ] }),
808
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
809
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel-title", children: [
810
+ "Revenue by type",
811
+ focus ? ` \xB7 ${focus}` : ""
812
+ ] }),
813
+ !focus && f.summary.currencies?.length ? /* @__PURE__ */ jsx(EmptyInline, { children: PICK_CURRENCY }) : breakdown?.length ? breakdown.map((b) => /* @__PURE__ */ jsx(
814
+ BarRow,
815
+ {
816
+ label: b.type,
817
+ value: `${moneyCur(b.total, focus ?? "")} \xB7 ${pct(b.percentage)}`,
818
+ fraction: b.percentage / 100,
819
+ hint: `Revenue from ${b.type} sources \u2014 ${pct(b.percentage)} of total revenue in this window.`
820
+ },
821
+ b.type
822
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No revenue breakdown." })
823
+ ] })
824
+ ] }),
825
+ detail: /* @__PURE__ */ jsxs(Fragment, { children: [
826
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
827
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel-title", children: [
828
+ "Revenue trend",
829
+ focus ? ` \xB7 ${focus}` : ""
830
+ ] }),
831
+ !focus && f.summary.currencies?.length ? /* @__PURE__ */ jsx(EmptyInline, { children: PICK_CURRENCY }) : trend?.length ? /* @__PURE__ */ jsx(
832
+ GrowthChart,
833
+ {
834
+ data: trend.map((p) => ({
835
+ date: p.date,
836
+ count: p.total
837
+ }))
838
+ }
839
+ ) : /* @__PURE__ */ jsx(EmptyInline, { children: "No revenue in this window." })
840
+ ] }),
841
+ /* @__PURE__ */ jsxs("div", { children: [
842
+ /* @__PURE__ */ jsxs(
843
+ "div",
844
+ {
845
+ style: {
846
+ display: "flex",
847
+ alignItems: "center",
848
+ justifyContent: "space-between",
849
+ gap: 12,
850
+ marginBottom: 12,
851
+ flexWrap: "wrap"
852
+ },
853
+ children: [
854
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { margin: 0 }, children: "Transactions" }),
855
+ /* @__PURE__ */ jsxs(Filters, { label: "Filter transactions", children: [
856
+ /* @__PURE__ */ jsx(
857
+ SearchInput,
858
+ {
859
+ value: txnSearch,
860
+ onChange: setTxnSearch,
861
+ placeholder: "Search reference / customer\u2026"
862
+ }
863
+ ),
864
+ /* @__PURE__ */ jsx(
865
+ FilterSelect,
866
+ {
867
+ value: txnType,
868
+ onChange: setTxnType,
869
+ options: [
870
+ { value: "", label: "All sources" },
871
+ { value: "order", label: "Order" },
872
+ { value: "invoice", label: "Invoice" },
873
+ { value: "booking", label: "Booking" },
874
+ { value: "membership", label: "Membership" },
875
+ { value: "subscription", label: "Subscription" },
876
+ { value: "deposit", label: "Deposit" },
877
+ { value: "tip", label: "Tip" },
878
+ { value: "refund", label: "Refund" },
879
+ { value: "payout", label: "Payout" }
880
+ ]
881
+ }
882
+ )
883
+ ] })
884
+ ]
885
+ }
886
+ ),
887
+ /* @__PURE__ */ jsx(
888
+ TransactionsTable,
889
+ {
890
+ rows: txns?.transactions ?? f.recentTransactions
891
+ }
892
+ )
893
+ ] })
894
+ ] })
895
+ }
896
+ );
897
+ }
898
+ function SpenderList({
899
+ rows,
900
+ currency
901
+ }) {
902
+ const max = Math.max(...rows.map((r) => r.totalSpent), 1);
903
+ return /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
904
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Top spenders" }),
905
+ rows.length === 0 ? /* @__PURE__ */ jsx(
906
+ "div",
907
+ {
908
+ style: {
909
+ color: "var(--text-tertiary)",
910
+ fontSize: 13,
911
+ padding: "8px 0"
912
+ },
913
+ children: "No paying customers yet."
914
+ }
915
+ ) : rows.map((r) => /* @__PURE__ */ jsxs("div", { style: { padding: "9px 0" }, children: [
916
+ /* @__PURE__ */ jsxs(
917
+ "div",
918
+ {
919
+ style: {
920
+ display: "flex",
921
+ justifyContent: "space-between",
922
+ gap: 12,
923
+ fontSize: 13,
924
+ marginBottom: 6
925
+ },
926
+ children: [
927
+ /* @__PURE__ */ jsx(
928
+ "span",
929
+ {
930
+ style: {
931
+ fontWeight: 500,
932
+ whiteSpace: "nowrap",
933
+ overflow: "hidden",
934
+ textOverflow: "ellipsis"
935
+ },
936
+ children: r.name ?? r.email
937
+ }
938
+ ),
939
+ /* @__PURE__ */ jsxs(
940
+ "span",
941
+ {
942
+ style: { color: "var(--text-secondary)", whiteSpace: "nowrap" },
943
+ children: [
944
+ moneyCur(r.totalSpent, currency),
945
+ " \xB7 ",
946
+ num(r.totalOrders),
947
+ " orders"
948
+ ]
949
+ }
950
+ )
951
+ ]
952
+ }
953
+ ),
954
+ /* @__PURE__ */ jsx(
955
+ "div",
956
+ {
957
+ style: {
958
+ height: 6,
959
+ borderRadius: 4,
960
+ background: "var(--border-subtle)",
961
+ overflow: "hidden"
962
+ },
963
+ children: /* @__PURE__ */ jsx(
964
+ "div",
965
+ {
966
+ style: {
967
+ width: `${Math.max(2, r.totalSpent / max * 100)}%`,
968
+ height: "100%",
969
+ borderRadius: 4,
970
+ background: "var(--accent-primary)"
971
+ }
972
+ }
973
+ )
974
+ }
975
+ )
976
+ ] }, r.id))
977
+ ] });
978
+ }
979
+ function CustomersTab({
980
+ id,
981
+ currency,
982
+ range
983
+ }) {
984
+ const [search, setSearch] = useState("");
985
+ const [type, setType] = useState("");
986
+ const { data, isLoading, isError } = useTenantCustomers(id, {
987
+ search: search || void 0,
988
+ type: type || void 0,
989
+ limit: 50
990
+ });
991
+ const { data: insights } = useTenantCustomerInsights(id, {
992
+ startDate: range.startDate
993
+ });
994
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load customers." });
995
+ const rows = data?.members ?? [];
996
+ const cur = insights?.currency ?? currency;
997
+ const statItems = insights ? [
998
+ {
999
+ label: "Customers",
1000
+ value: num(insights.totalCustomers),
1001
+ hint: "All-time count of customer records for this tenant, including registered, subscribers, leads and guests."
1002
+ },
1003
+ {
1004
+ label: "New \xB7 30 days",
1005
+ value: num(insights.newCustomers30d),
1006
+ hint: "Customers who first appeared in the last 30 days. This is a fixed 30-day metric and does not follow the range selector."
1007
+ },
1008
+ {
1009
+ label: "Paying",
1010
+ value: num(insights.payingCustomers),
1011
+ hint: "Customers who have completed at least one paid order. The rest are leads, subscribers or guests."
1012
+ },
1013
+ {
1014
+ label: "Lifetime value",
1015
+ value: moneyCur(insights.lifetimeValue, cur),
1016
+ hint: "Total amount paying customers have spent over their entire history with this tenant (all-time, not windowed)."
1017
+ },
1018
+ {
1019
+ label: "Avg order value",
1020
+ value: moneyCur(insights.avgOrderValue, cur),
1021
+ hint: "Average amount per paid order across all customers (lifetime spend \xF7 total paid orders)."
1022
+ },
1023
+ {
1024
+ label: "Repeat rate",
1025
+ value: pct(insights.repeatRate),
1026
+ hint: "Share of paying customers who have placed more than one order. Higher means stronger retention."
1027
+ }
1028
+ ] : [];
1029
+ return /* @__PURE__ */ jsx(
1030
+ SubDataLayout,
1031
+ {
1032
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [
1033
+ insights && /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
1034
+ insights && /* @__PURE__ */ jsxs(Fragment, { children: [
1035
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1036
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Acquisition source" }),
1037
+ insights.bySource.length ? insights.bySource.map((s) => /* @__PURE__ */ jsx(
1038
+ BarRow,
1039
+ {
1040
+ label: s.label,
1041
+ value: num(s.count),
1042
+ fraction: insights.totalCustomers > 0 ? s.count / insights.totalCustomers : 0,
1043
+ hint: `Customers first attributed to ${s.label}. Bar width is this source's share of all customers.`
1044
+ },
1045
+ s.label
1046
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No source data yet." })
1047
+ ] }),
1048
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1049
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Segments" }),
1050
+ insights.byType.length ? insights.byType.map((s) => /* @__PURE__ */ jsx(
1051
+ BarRow,
1052
+ {
1053
+ label: s.label,
1054
+ value: num(s.count),
1055
+ fraction: insights.totalCustomers > 0 ? s.count / insights.totalCustomers : 0,
1056
+ hint: `Number of ${s.label} customers. Bar width is this segment's share of the total customer base.`
1057
+ },
1058
+ s.label
1059
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No segment data yet." })
1060
+ ] }),
1061
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1062
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Retention" }),
1063
+ /* @__PURE__ */ jsx(
1064
+ KeyRow,
1065
+ {
1066
+ label: "Repeat customers",
1067
+ value: num(insights.repeatCustomers),
1068
+ hint: "Customers who have placed more than one paid order."
1069
+ }
1070
+ ),
1071
+ /* @__PURE__ */ jsx(
1072
+ KeyRow,
1073
+ {
1074
+ label: "Dormant \xB7 60d+",
1075
+ value: num(insights.dormantCustomers),
1076
+ hint: "Paying customers with no order in the last 60 days \u2014 candidates for win-back campaigns."
1077
+ }
1078
+ ),
1079
+ /* @__PURE__ */ jsx(
1080
+ KeyRow,
1081
+ {
1082
+ label: "Avg orders / customer",
1083
+ value: insights.avgOrdersPerCustomer.toFixed(1),
1084
+ hint: "Average number of paid orders per paying customer over their lifetime."
1085
+ }
1086
+ ),
1087
+ /* @__PURE__ */ jsx(
1088
+ KeyRow,
1089
+ {
1090
+ label: "Marketing opt-in",
1091
+ value: pct(insights.marketingOptInRate),
1092
+ hint: "Share of customers who consented to marketing communications.",
1093
+ last: true
1094
+ }
1095
+ )
1096
+ ] })
1097
+ ] })
1098
+ ] }),
1099
+ detail: /* @__PURE__ */ jsxs(Fragment, { children: [
1100
+ insights && /* @__PURE__ */ jsxs(Fragment, { children: [
1101
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1102
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel-title", children: [
1103
+ "New customers \xB7 ",
1104
+ periodPhrase(range)
1105
+ ] }),
1106
+ /* @__PURE__ */ jsx(
1107
+ GrowthChart,
1108
+ {
1109
+ data: insights.signupsSeries,
1110
+ emptyLabel: "No new customers in the selected period"
1111
+ }
1112
+ )
1113
+ ] }),
1114
+ /* @__PURE__ */ jsx(SpenderList, { rows: insights.topSpenders, currency: cur })
1115
+ ] }),
1116
+ /* @__PURE__ */ jsx(
1117
+ PanelToolbar,
1118
+ {
1119
+ search,
1120
+ onSearch: setSearch,
1121
+ searchPlaceholder: "Search name / email\u2026",
1122
+ filter: {
1123
+ value: type,
1124
+ onChange: setType,
1125
+ options: [
1126
+ { value: "", label: "All types" },
1127
+ { value: "registered", label: "Registered" },
1128
+ { value: "subscriber", label: "Subscriber" },
1129
+ { value: "lead", label: "Lead" },
1130
+ { value: "guest", label: "Guest" }
1131
+ ]
1132
+ }
1133
+ }
1134
+ ),
1135
+ isLoading ? /* @__PURE__ */ jsx(AdmLoading, { label: "Loading customers\u2026" }) : rows.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No customers match this view." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1136
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1137
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Customer" }),
1138
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Type" }),
1139
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
1140
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Orders" }),
1141
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Spent" }),
1142
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Last order" })
1143
+ ] }) }),
1144
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((c) => /* @__PURE__ */ jsxs("tr", { children: [
1145
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
1146
+ /* @__PURE__ */ jsx("div", { style: { fontWeight: 600 }, children: c.name ?? "\u2014" }),
1147
+ /* @__PURE__ */ jsx(
1148
+ "div",
1149
+ {
1150
+ style: {
1151
+ color: "var(--text-tertiary)",
1152
+ fontSize: 12
1153
+ },
1154
+ children: c.email
1155
+ }
1156
+ )
1157
+ ] }),
1158
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx("span", { style: { textTransform: "capitalize" }, children: c.type }) }),
1159
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
1160
+ Badge,
1161
+ {
1162
+ variant: c.status === "active" ? "success" : "secondary",
1163
+ children: c.status
1164
+ }
1165
+ ) }),
1166
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: num(c.totalOrders) }),
1167
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(c.totalSpent, currency) }),
1168
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: c.lastOrderAt ? new Date(c.lastOrderAt).toLocaleDateString() : "\u2014" })
1169
+ ] }, c.id)) })
1170
+ ] }) })
1171
+ ] })
1172
+ }
1173
+ );
1174
+ }
1175
+ const PRODUCT_TYPE_LABELS = {
1176
+ product: "Products",
1177
+ event: "Events",
1178
+ booking: "Bookings",
1179
+ subscription: "Subscriptions",
1180
+ membership: "Memberships",
1181
+ "digital-file": "Digital files"
1182
+ };
1183
+ function SellerList({
1184
+ title,
1185
+ rows,
1186
+ currency,
1187
+ emptyLabel
1188
+ }) {
1189
+ const max = Math.max(...rows.map((r) => r.units), 1);
1190
+ return /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1191
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: title }),
1192
+ rows.length === 0 ? /* @__PURE__ */ jsx(
1193
+ "div",
1194
+ {
1195
+ style: {
1196
+ color: "var(--text-tertiary)",
1197
+ fontSize: 13,
1198
+ padding: "8px 0"
1199
+ },
1200
+ children: emptyLabel
1201
+ }
1202
+ ) : rows.map((r) => /* @__PURE__ */ jsxs("div", { style: { padding: "9px 0" }, children: [
1203
+ /* @__PURE__ */ jsxs(
1204
+ "div",
1205
+ {
1206
+ style: {
1207
+ display: "flex",
1208
+ justifyContent: "space-between",
1209
+ gap: 12,
1210
+ fontSize: 13,
1211
+ marginBottom: 6
1212
+ },
1213
+ children: [
1214
+ /* @__PURE__ */ jsx(
1215
+ "span",
1216
+ {
1217
+ style: {
1218
+ fontWeight: 500,
1219
+ whiteSpace: "nowrap",
1220
+ overflow: "hidden",
1221
+ textOverflow: "ellipsis"
1222
+ },
1223
+ children: r.title
1224
+ }
1225
+ ),
1226
+ /* @__PURE__ */ jsxs(
1227
+ "span",
1228
+ {
1229
+ style: { color: "var(--text-secondary)", whiteSpace: "nowrap" },
1230
+ children: [
1231
+ num(r.units),
1232
+ " sold \xB7 ",
1233
+ moneyCur(r.revenue, currency)
1234
+ ]
1235
+ }
1236
+ )
1237
+ ]
1238
+ }
1239
+ ),
1240
+ /* @__PURE__ */ jsx(
1241
+ "div",
1242
+ {
1243
+ style: {
1244
+ height: 6,
1245
+ borderRadius: 4,
1246
+ background: "var(--border-subtle)",
1247
+ overflow: "hidden"
1248
+ },
1249
+ children: /* @__PURE__ */ jsx(
1250
+ "div",
1251
+ {
1252
+ style: {
1253
+ width: `${Math.max(2, r.units / max * 100)}%`,
1254
+ height: "100%",
1255
+ borderRadius: 4,
1256
+ background: "var(--accent-primary)"
1257
+ }
1258
+ }
1259
+ )
1260
+ }
1261
+ )
1262
+ ] }, r.id))
1263
+ ] });
1264
+ }
1265
+ function ProductsTab({
1266
+ id,
1267
+ currency,
1268
+ range
1269
+ }) {
1270
+ const [search, setSearch] = useState("");
1271
+ const [type, setType] = useState("");
1272
+ const { data, isLoading, isError } = useTenantProducts(id, {
1273
+ search: search || void 0,
1274
+ type: type || void 0
1275
+ });
1276
+ const { data: insights } = useTenantProductInsights(id, {
1277
+ startDate: range.startDate
1278
+ });
1279
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load catalog." });
1280
+ const items = data?.items ?? [];
1281
+ const cur = insights?.currency ?? currency;
1282
+ const statItems = insights ? [
1283
+ {
1284
+ label: "Catalog items",
1285
+ value: num(insights.totalProducts),
1286
+ hint: "Total number of products, events, bookings and other sellable items in the catalog."
1287
+ },
1288
+ {
1289
+ label: "Active",
1290
+ value: num(insights.activeProducts),
1291
+ hint: "Items currently published and available for purchase on the storefront."
1292
+ },
1293
+ {
1294
+ label: "Catalog value",
1295
+ value: moneyCur(insights.catalogValue, cur),
1296
+ hint: "Combined list price of every catalog item \u2014 the total retail value on offer, not inventory on hand."
1297
+ },
1298
+ {
1299
+ label: "Inventory value",
1300
+ value: moneyCur(insights.inventoryValue, cur),
1301
+ hint: "Retail value of stock currently on hand (price \xD7 quantity in stock) for trackable items."
1302
+ },
1303
+ {
1304
+ label: "Units sold",
1305
+ value: num(insights.totalUnitsSold),
1306
+ hint: "Total quantity sold across paid orders in the selected period."
1307
+ },
1308
+ {
1309
+ label: "Avg price",
1310
+ value: moneyCur(insights.avgPrice, cur),
1311
+ hint: "Average list price across all catalog items."
1312
+ }
1313
+ ] : [
1314
+ {
1315
+ label: "Catalog items",
1316
+ value: num(data?.stats.total ?? 0),
1317
+ hint: "Total number of items in the catalog."
1318
+ },
1319
+ {
1320
+ label: "Active",
1321
+ value: num(data?.stats.active ?? 0),
1322
+ hint: "Items currently published and available for purchase."
1323
+ },
1324
+ {
1325
+ label: "Featured",
1326
+ value: num(data?.stats.featured ?? 0),
1327
+ hint: "Items flagged as featured and given prominent placement on the storefront."
1328
+ },
1329
+ {
1330
+ label: "Low stock",
1331
+ value: num(data?.stats.lowStock ?? 0),
1332
+ hint: "Items at or below their low-stock threshold and at risk of selling out."
1333
+ },
1334
+ {
1335
+ label: "Out of stock",
1336
+ value: num(data?.stats.outOfStock ?? 0),
1337
+ hint: "Items with zero inventory that cannot currently be purchased."
1338
+ }
1339
+ ];
1340
+ return /* @__PURE__ */ jsx(
1341
+ SubDataLayout,
1342
+ {
1343
+ summary: /* @__PURE__ */ jsxs(Fragment, { children: [
1344
+ /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
1345
+ insights && /* @__PURE__ */ jsxs(Fragment, { children: [
1346
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1347
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Inventory health" }),
1348
+ /* @__PURE__ */ jsx(
1349
+ KeyRow,
1350
+ {
1351
+ label: "Featured",
1352
+ value: num(insights.featuredProducts),
1353
+ hint: "Items flagged as featured for prominent storefront placement."
1354
+ }
1355
+ ),
1356
+ /* @__PURE__ */ jsx(
1357
+ KeyRow,
1358
+ {
1359
+ label: "Low stock",
1360
+ value: num(insights.lowStock),
1361
+ hint: "Items at or below their low-stock threshold and at risk of selling out."
1362
+ }
1363
+ ),
1364
+ /* @__PURE__ */ jsx(
1365
+ KeyRow,
1366
+ {
1367
+ label: "Out of stock",
1368
+ value: num(insights.outOfStock),
1369
+ hint: "Items with zero inventory that cannot currently be purchased."
1370
+ }
1371
+ ),
1372
+ /* @__PURE__ */ jsx(
1373
+ KeyRow,
1374
+ {
1375
+ label: "At-risk value",
1376
+ value: moneyCur(insights.inventoryAtRiskValue, cur),
1377
+ hint: "Retail value of low- and out-of-stock items \u2014 potential sales at risk from stockouts.",
1378
+ last: true
1379
+ }
1380
+ )
1381
+ ] }),
1382
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1383
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Category mix" }),
1384
+ insights.categories.length ? insights.categories.map((c) => /* @__PURE__ */ jsx(
1385
+ BarRow,
1386
+ {
1387
+ label: c.category,
1388
+ value: `${num(c.count)} \xB7 ${moneyCur(c.value, cur)}`,
1389
+ fraction: insights.catalogValue > 0 ? c.value / insights.catalogValue : 0,
1390
+ hint: `${num(c.count)} items in ${c.category}. Bar width is this category's share of total catalog value.`
1391
+ },
1392
+ c.category
1393
+ )) : /* @__PURE__ */ jsx(EmptyInline, { children: "No categories yet." })
1394
+ ] }),
1395
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1396
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Featured performance" }),
1397
+ /* @__PURE__ */ jsx(
1398
+ KeyRow,
1399
+ {
1400
+ label: "Featured items",
1401
+ value: num(insights.featuredProducts),
1402
+ hint: "Number of items currently flagged as featured."
1403
+ }
1404
+ ),
1405
+ /* @__PURE__ */ jsx(
1406
+ KeyRow,
1407
+ {
1408
+ label: "Featured units sold",
1409
+ value: num(insights.featuredSellThrough.featuredUnits),
1410
+ hint: "Units sold from featured items in the selected period \u2014 measures whether featuring drives sales."
1411
+ }
1412
+ ),
1413
+ /* @__PURE__ */ jsx(
1414
+ KeyRow,
1415
+ {
1416
+ label: "Non-featured units",
1417
+ value: num(insights.featuredSellThrough.nonFeaturedUnits),
1418
+ hint: "Units sold from items that were not featured, for comparison.",
1419
+ last: true
1420
+ }
1421
+ )
1422
+ ] }),
1423
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1424
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Catalog snapshot" }),
1425
+ /* @__PURE__ */ jsx(
1426
+ KeyRow,
1427
+ {
1428
+ label: "Catalog sold",
1429
+ value: pct(insights.pctEverSold),
1430
+ hint: "Share of catalog items that have sold at least one unit, ever."
1431
+ }
1432
+ ),
1433
+ /* @__PURE__ */ jsx(
1434
+ KeyRow,
1435
+ {
1436
+ label: "Never sold",
1437
+ value: num(insights.deadStock),
1438
+ hint: "Items that have never recorded a sale \u2014 dead stock to review or retire."
1439
+ }
1440
+ ),
1441
+ /* @__PURE__ */ jsx(
1442
+ KeyRow,
1443
+ {
1444
+ label: "Newest",
1445
+ value: insights.newestProduct?.title ?? "\u2014",
1446
+ hint: "The most recently created catalog item."
1447
+ }
1448
+ ),
1449
+ /* @__PURE__ */ jsx(
1450
+ KeyRow,
1451
+ {
1452
+ label: "Last updated",
1453
+ value: compactDate(
1454
+ insights.lastUpdatedProduct?.updatedAt ?? null
1455
+ ),
1456
+ hint: "When any catalog item was last edited \u2014 a signal of how actively the catalog is maintained.",
1457
+ last: true
1458
+ }
1459
+ )
1460
+ ] })
1461
+ ] })
1462
+ ] }),
1463
+ detail: /* @__PURE__ */ jsxs(Fragment, { children: [
1464
+ insights && /* @__PURE__ */ jsxs(Fragment, { children: [
1465
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1466
+ /* @__PURE__ */ jsxs("div", { className: "adm-panel-title", children: [
1467
+ "Units sold \xB7 ",
1468
+ periodPhrase(range)
1469
+ ] }),
1470
+ /* @__PURE__ */ jsx(
1471
+ GrowthChart,
1472
+ {
1473
+ data: insights.unitsSeries,
1474
+ emptyLabel: "No sales in the selected period"
1475
+ }
1476
+ )
1477
+ ] }),
1478
+ /* @__PURE__ */ jsxs(
1479
+ "div",
1480
+ {
1481
+ style: {
1482
+ display: "grid",
1483
+ gridTemplateColumns: "repeat(auto-fit, minmax(280px, 1fr))",
1484
+ gap: 16
1485
+ },
1486
+ children: [
1487
+ /* @__PURE__ */ jsx(
1488
+ SellerList,
1489
+ {
1490
+ title: "Best sellers",
1491
+ rows: insights.bestSellers,
1492
+ currency: cur,
1493
+ emptyLabel: "No paid sales yet."
1494
+ }
1495
+ ),
1496
+ /* @__PURE__ */ jsx(
1497
+ SellerList,
1498
+ {
1499
+ title: "Slowest movers",
1500
+ rows: insights.worstSellers,
1501
+ currency: cur,
1502
+ emptyLabel: "No paid sales yet."
1503
+ }
1504
+ )
1505
+ ]
1506
+ }
1507
+ )
1508
+ ] }),
1509
+ /* @__PURE__ */ jsx(
1510
+ PanelToolbar,
1511
+ {
1512
+ search,
1513
+ onSearch: setSearch,
1514
+ searchPlaceholder: "Search title\u2026",
1515
+ filter: {
1516
+ value: type,
1517
+ onChange: setType,
1518
+ options: [
1519
+ { value: "", label: "All types" },
1520
+ { value: "product", label: "Products" },
1521
+ { value: "event", label: "Events" },
1522
+ { value: "booking", label: "Bookings" },
1523
+ { value: "subscription", label: "Subscriptions" },
1524
+ { value: "membership", label: "Memberships" },
1525
+ { value: "digital-file", label: "Digital files" }
1526
+ ]
1527
+ }
1528
+ }
1529
+ ),
1530
+ isLoading ? /* @__PURE__ */ jsx(AdmLoading, { label: "Loading catalog\u2026" }) : items.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No catalog items match this view." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1531
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1532
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Title" }),
1533
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Type" }),
1534
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Price" }),
1535
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Inventory" }),
1536
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" })
1537
+ ] }) }),
1538
+ /* @__PURE__ */ jsx("tbody", { children: items.map((p) => /* @__PURE__ */ jsxs("tr", { children: [
1539
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
1540
+ /* @__PURE__ */ jsx("div", { style: { fontWeight: 600 }, children: p.title }),
1541
+ p.category && /* @__PURE__ */ jsx(
1542
+ "div",
1543
+ {
1544
+ style: {
1545
+ color: "var(--text-tertiary)",
1546
+ fontSize: 12
1547
+ },
1548
+ children: p.category
1549
+ }
1550
+ )
1551
+ ] }),
1552
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: PRODUCT_TYPE_LABELS[p.type] ?? p.type }),
1553
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: p.price != null ? moneyCur(p.price, p.currency ?? currency) : "\u2014" }),
1554
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: p.trackInventory ? num((p.quantity ?? 0) - (p.reserved ?? 0)) : "\u221E" }),
1555
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(Badge, { variant: p.isActive ? "success" : "secondary", children: p.isActive ? "active" : "inactive" }) })
1556
+ ] }, p.id)) })
1557
+ ] }) })
1558
+ ] })
1559
+ }
1560
+ );
1561
+ }
1562
+ function InvoicesTab({ id }) {
1563
+ const [search, setSearch] = useState("");
1564
+ const [status, setStatus] = useState("");
1565
+ const { data, isLoading, isError } = useTenantInvoices(id, {
1566
+ search: search || void 0,
1567
+ status: status || void 0,
1568
+ limit: 50
1569
+ });
1570
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load invoices." });
1571
+ const rows = data?.invoices ?? [];
1572
+ const s = data?.stats;
1573
+ const invoiceCurrency = sharedCurrency(rows) ?? "NGN";
1574
+ const invoiceMoney = (n) => moneyCur(n, invoiceCurrency);
1575
+ const statItems = [
1576
+ {
1577
+ label: "Revenue",
1578
+ value: invoiceMoney(s?.totalRevenue ?? 0),
1579
+ hint: "Total amount collected from invoices that have been paid."
1580
+ },
1581
+ {
1582
+ label: "Outstanding",
1583
+ value: invoiceMoney(s?.totalOutstanding ?? 0),
1584
+ hint: "Amount still owed across sent and overdue invoices that have not been paid."
1585
+ },
1586
+ {
1587
+ label: "Paid",
1588
+ value: num(s?.paid ?? 0),
1589
+ hint: "Number of invoices settled in full."
1590
+ },
1591
+ {
1592
+ label: "Sent",
1593
+ value: num(s?.sent ?? 0),
1594
+ hint: "Invoices issued to customers and awaiting payment."
1595
+ },
1596
+ {
1597
+ label: "Overdue",
1598
+ value: num(s?.overdue ?? 0),
1599
+ hint: "Sent invoices past their due date and still unpaid."
1600
+ }
1601
+ ];
1602
+ return /* @__PURE__ */ jsx(
1603
+ SubDataLayout,
1604
+ {
1605
+ summary: /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
1606
+ detail: /* @__PURE__ */ jsxs(Fragment, { children: [
1607
+ /* @__PURE__ */ jsx(
1608
+ PanelToolbar,
1609
+ {
1610
+ search,
1611
+ onSearch: setSearch,
1612
+ searchPlaceholder: "Search invoice / customer\u2026",
1613
+ filter: {
1614
+ value: status,
1615
+ onChange: setStatus,
1616
+ options: [
1617
+ { value: "", label: "All statuses" },
1618
+ { value: "draft", label: "Draft" },
1619
+ { value: "sent", label: "Sent" },
1620
+ { value: "paid", label: "Paid" },
1621
+ { value: "overdue", label: "Overdue" },
1622
+ { value: "cancelled", label: "Cancelled" }
1623
+ ]
1624
+ }
1625
+ }
1626
+ ),
1627
+ isLoading ? /* @__PURE__ */ jsx(AdmLoading, { label: "Loading invoices\u2026" }) : rows.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No invoices match this view." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1628
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1629
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Invoice" }),
1630
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Customer" }),
1631
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Total" }),
1632
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Due" }),
1633
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
1634
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Created" })
1635
+ ] }) }),
1636
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((inv) => /* @__PURE__ */ jsxs("tr", { children: [
1637
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
1638
+ "#",
1639
+ inv.invoiceNumber
1640
+ ] }),
1641
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: inv.customerName ?? inv.customerEmail ?? "\u2014" }),
1642
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(inv.total, inv.currency) }),
1643
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(inv.amountDue, inv.currency) }),
1644
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
1645
+ Badge,
1646
+ {
1647
+ variant: inv.status === "paid" ? "success" : inv.status === "overdue" ? "secondary" : "info",
1648
+ children: inv.status
1649
+ }
1650
+ ) }),
1651
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: new Date(inv.createdAt).toLocaleDateString() })
1652
+ ] }, inv.id)) })
1653
+ ] }) })
1654
+ ] })
1655
+ }
1656
+ );
1657
+ }
1658
+ function LoyaltyTab({ id }) {
1659
+ const { data, isLoading, isError } = useTenantLoyalty(id);
1660
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load loyalty program." });
1661
+ if (isLoading || !data) return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading loyalty\u2026" });
1662
+ const { program, stats } = data;
1663
+ const statItems = [
1664
+ {
1665
+ label: "Members",
1666
+ value: num(stats.totalMembers),
1667
+ hint: "Total customers enrolled in the loyalty program."
1668
+ },
1669
+ {
1670
+ label: "Active members",
1671
+ value: num(stats.activeMembers),
1672
+ hint: "Members who have earned or redeemed points recently."
1673
+ },
1674
+ {
1675
+ label: "Points issued",
1676
+ value: num(stats.totalPointsIssued),
1677
+ hint: "All loyalty points ever awarded to members."
1678
+ },
1679
+ {
1680
+ label: "Points redeemed",
1681
+ value: num(stats.totalPointsRedeemed),
1682
+ hint: "Points members have spent on rewards. The difference from issued points is the outstanding liability."
1683
+ }
1684
+ ];
1685
+ return /* @__PURE__ */ jsx(
1686
+ SubDataLayout,
1687
+ {
1688
+ summary: /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
1689
+ detail: /* @__PURE__ */ jsxs("div", { className: "adm-panel", children: [
1690
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", children: "Program" }),
1691
+ program ? /* @__PURE__ */ jsxs(Fragment, { children: [
1692
+ /* @__PURE__ */ jsx(
1693
+ KeyRow,
1694
+ {
1695
+ label: "Name",
1696
+ value: program.name,
1697
+ hint: "The customer-facing name of the loyalty program."
1698
+ }
1699
+ ),
1700
+ /* @__PURE__ */ jsx(
1701
+ KeyRow,
1702
+ {
1703
+ label: "Points unit",
1704
+ value: program.pointsName,
1705
+ hint: "What members' points are called (e.g. points, stars, coins)."
1706
+ }
1707
+ ),
1708
+ /* @__PURE__ */ jsx(
1709
+ KeyRow,
1710
+ {
1711
+ label: "Earn rate",
1712
+ value: `${program.pointsPerCurrency} pts / unit`,
1713
+ hint: "How many points a member earns per unit of currency spent."
1714
+ }
1715
+ ),
1716
+ /* @__PURE__ */ jsx(
1717
+ KeyRow,
1718
+ {
1719
+ label: "Redeem rate",
1720
+ value: `${program.currencyPerPoint} / pt`,
1721
+ hint: "How much each point is worth when redeemed against a purchase."
1722
+ }
1723
+ ),
1724
+ /* @__PURE__ */ jsx(
1725
+ KeyRow,
1726
+ {
1727
+ label: "Status",
1728
+ value: program.isActive ? "active" : "inactive",
1729
+ hint: "Whether the program is currently running and accruing points.",
1730
+ last: true
1731
+ }
1732
+ )
1733
+ ] }) : /* @__PURE__ */ jsx(EmptyInline, { children: "No loyalty program configured for this tenant." })
1734
+ ] })
1735
+ }
1736
+ );
1737
+ }
1738
+ function DiscountsTab({ id }) {
1739
+ const [search, setSearch] = useState("");
1740
+ const [status, setStatus] = useState("");
1741
+ const { data, isLoading, isError } = useTenantDiscounts(id, {
1742
+ search: search || void 0,
1743
+ status: status || void 0,
1744
+ limit: 50
1745
+ });
1746
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load discounts." });
1747
+ const rows = data?.discounts ?? [];
1748
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1749
+ /* @__PURE__ */ jsx(
1750
+ PanelToolbar,
1751
+ {
1752
+ search,
1753
+ onSearch: setSearch,
1754
+ searchPlaceholder: "Search code / name\u2026",
1755
+ filter: {
1756
+ value: status,
1757
+ onChange: setStatus,
1758
+ options: [
1759
+ { value: "", label: "All statuses" },
1760
+ { value: "active", label: "Active" },
1761
+ { value: "scheduled", label: "Scheduled" },
1762
+ { value: "expired", label: "Expired" },
1763
+ { value: "disabled", label: "Disabled" }
1764
+ ]
1765
+ }
1766
+ }
1767
+ ),
1768
+ isLoading ? /* @__PURE__ */ jsx(AdmLoading, { label: "Loading discounts\u2026" }) : rows.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No discounts match this view." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1769
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1770
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Code" }),
1771
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Name" }),
1772
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Value" }),
1773
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Usage" }),
1774
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" })
1775
+ ] }) }),
1776
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((d) => /* @__PURE__ */ jsxs("tr", { children: [
1777
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: d.code }),
1778
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: d.name }),
1779
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: d.discountType === "percentage" ? `${d.value}%` : moneyCur(d.value, "NGN") }),
1780
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cellMuted, children: [
1781
+ num(d.usageCount),
1782
+ d.usageLimit ? ` / ${num(d.usageLimit)}` : ""
1783
+ ] }),
1784
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
1785
+ Badge,
1786
+ {
1787
+ variant: d.isExpired ? "secondary" : d.isValid ? "success" : "info",
1788
+ children: d.status
1789
+ }
1790
+ ) })
1791
+ ] }, d.id)) })
1792
+ ] }) })
1793
+ ] });
1794
+ }
1795
+ function SettlementsTab({ id, range }) {
1796
+ const { data, isLoading, isError } = useTenantSettlements(id, {
1797
+ limit: 25,
1798
+ startDate: range.startDate,
1799
+ endDate: range.endDate
1800
+ });
1801
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load settlements." });
1802
+ if (isLoading || !data) return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading settlements\u2026" });
1803
+ const sum = data.summary;
1804
+ const cur = sum.currency || "NGN";
1805
+ const banks = data.bankAccounts ?? [];
1806
+ const rows = data.settlements ?? [];
1807
+ const statItems = [
1808
+ {
1809
+ label: "Settled",
1810
+ value: moneyCur(sum.totalSettled, cur),
1811
+ hint: "Total amount successfully paid out to the tenant\u2019s bank account in this window."
1812
+ },
1813
+ {
1814
+ label: "Pending",
1815
+ value: moneyCur(sum.totalPending, cur),
1816
+ hint: "Payouts initiated but not yet confirmed as deposited."
1817
+ },
1818
+ {
1819
+ label: "Failed",
1820
+ value: moneyCur(sum.totalFailed, cur),
1821
+ hint: "Payouts that could not be completed \u2014 usually a bank or account issue to investigate."
1822
+ },
1823
+ {
1824
+ label: "Platform fees",
1825
+ value: moneyCur(sum.platformFeesCollected, cur),
1826
+ hint: "Fees Box retained from this tenant\u2019s settlements over the window."
1827
+ },
1828
+ {
1829
+ label: "Payouts",
1830
+ value: num(sum.count),
1831
+ hint: "Number of settlement payouts in this window."
1832
+ }
1833
+ ];
1834
+ return /* @__PURE__ */ jsx(
1835
+ SubDataLayout,
1836
+ {
1837
+ summary: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }) }),
1838
+ detail: /* @__PURE__ */ jsxs("div", { children: [
1839
+ /* @__PURE__ */ jsx(SubaccountsPanel, { banks }),
1840
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { marginBottom: 12 }, children: "Settlements" }),
1841
+ rows.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No settlements yet for this tenant." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1842
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1843
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Gross" }),
1844
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Fees" }),
1845
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Net" }),
1846
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Destination" }),
1847
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
1848
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Settled" })
1849
+ ] }) }),
1850
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((st) => /* @__PURE__ */ jsxs("tr", { children: [
1851
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(st.grossAmount, st.currency) }),
1852
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: moneyCur(st.paystackFee + st.platformFee, st.currency) }),
1853
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(st.netAmount, st.currency) }),
1854
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: st.bankAccount ? `${st.bankAccount.bankName} \u2022\u2022\u2022\u2022${st.bankAccount.accountNumber.slice(-4)}` : "\u2014" }),
1855
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
1856
+ Badge,
1857
+ {
1858
+ variant: st.status === "completed" || st.status === "success" ? "success" : st.status === "failed" ? "secondary" : "info",
1859
+ children: st.status
1860
+ }
1861
+ ) }),
1862
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: st.settledAt ? new Date(st.settledAt).toLocaleDateString() : "\u2014" })
1863
+ ] }, st.id)) })
1864
+ ] }) })
1865
+ ] })
1866
+ }
1867
+ );
1868
+ }
1869
+ function subStatusVariant(status) {
1870
+ switch (status) {
1871
+ case "active":
1872
+ return "success";
1873
+ case "non_renewing":
1874
+ return "info";
1875
+ case "attention":
1876
+ return "warning";
1877
+ default:
1878
+ return "secondary";
1879
+ }
1880
+ }
1881
+ function subStatusLabel(status) {
1882
+ return status === "non_renewing" ? "non-renewing" : status;
1883
+ }
1884
+ function SubscriptionsTab({ id }) {
1885
+ const [status, setStatus] = useState("");
1886
+ const { data, isLoading, isError } = useTenantSubscriptions(id, {
1887
+ status: status || void 0,
1888
+ limit: 50
1889
+ });
1890
+ if (isError) return /* @__PURE__ */ jsx(EmptyPanel, { children: "Failed to load subscriptions." });
1891
+ if (isLoading || !data) return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading subscriptions\u2026" });
1892
+ const stats = data.stats;
1893
+ const rows = data.subscriptions ?? [];
1894
+ const mrrCurrency = rows[0]?.currency || "NGN";
1895
+ const statItems = [
1896
+ {
1897
+ label: "Active",
1898
+ value: num(stats.totalActive),
1899
+ hint: "Subscriptions currently active and billing on schedule."
1900
+ },
1901
+ {
1902
+ label: "Non-renewing",
1903
+ value: num(stats.totalNonRenewing),
1904
+ hint: "Active subscriptions set to end at the current period \u2014 they will not renew."
1905
+ },
1906
+ {
1907
+ label: "Cancelled",
1908
+ value: num(stats.totalCancelled),
1909
+ hint: "Subscriptions that have been cancelled or have completed their term."
1910
+ },
1911
+ {
1912
+ label: "MRR",
1913
+ value: moneyCur(stats.monthlyRecurringRevenue, mrrCurrency),
1914
+ hint: "Monthly recurring revenue \u2014 active subscription amounts normalised to a monthly value."
1915
+ }
1916
+ ];
1917
+ return /* @__PURE__ */ jsx(
1918
+ SubDataLayout,
1919
+ {
1920
+ summary: /* @__PURE__ */ jsx(StatsListPanel, { items: statItems }),
1921
+ detail: /* @__PURE__ */ jsxs("div", { children: [
1922
+ /* @__PURE__ */ jsx(
1923
+ PanelToolbar,
1924
+ {
1925
+ filter: {
1926
+ value: status,
1927
+ onChange: setStatus,
1928
+ options: [
1929
+ { value: "", label: "All statuses" },
1930
+ { value: "active", label: "Active" },
1931
+ { value: "non_renewing", label: "Non-renewing" },
1932
+ { value: "attention", label: "Attention" },
1933
+ { value: "cancelled", label: "Cancelled" },
1934
+ { value: "completed", label: "Completed" }
1935
+ ]
1936
+ }
1937
+ }
1938
+ ),
1939
+ rows.length === 0 ? /* @__PURE__ */ jsx(EmptyPanel, { children: "No subscriptions match this view." }) : /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
1940
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
1941
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Customer" }),
1942
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Plan" }),
1943
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Amount" }),
1944
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
1945
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Next payment" }),
1946
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Payments" })
1947
+ ] }) }),
1948
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((s) => /* @__PURE__ */ jsxs("tr", { children: [
1949
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: s.customer?.name || s.customerEmail }),
1950
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: s.plan?.name ?? "\u2014" }),
1951
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
1952
+ moneyCur(s.amount, s.currency),
1953
+ s.plan?.interval ? /* @__PURE__ */ jsxs(
1954
+ "span",
1955
+ {
1956
+ style: {
1957
+ color: "var(--text-tertiary)",
1958
+ fontSize: 12
1959
+ },
1960
+ children: [
1961
+ " ",
1962
+ "/ ",
1963
+ s.plan.interval
1964
+ ]
1965
+ }
1966
+ ) : null
1967
+ ] }),
1968
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(Badge, { variant: subStatusVariant(s.status), children: subStatusLabel(s.status) }) }),
1969
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: compactDate(s.nextPaymentDate ?? s.currentPeriodEnd) }),
1970
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: num(s.paymentsCount) })
1971
+ ] }, s.id)) })
1972
+ ] }) })
1973
+ ] })
1974
+ }
1975
+ );
1976
+ }
1977
+ function SearchInput({
1978
+ value,
1979
+ onChange,
1980
+ placeholder
1981
+ }) {
1982
+ return /* @__PURE__ */ jsx(FilterSearch, { value, onChange, placeholder });
1983
+ }
1984
+ function FilterSelect({
1985
+ value,
1986
+ onChange,
1987
+ options
1988
+ }) {
1989
+ return /* @__PURE__ */ jsx(
1990
+ AdmFilterSelect,
1991
+ {
1992
+ label: "Filter",
1993
+ value,
1994
+ onChange,
1995
+ options
1996
+ }
1997
+ );
1998
+ }
1999
+ function PanelToolbar({
2000
+ title,
2001
+ search,
2002
+ onSearch,
2003
+ searchPlaceholder,
2004
+ filter
2005
+ }) {
2006
+ return /* @__PURE__ */ jsx(
2007
+ "div",
2008
+ {
2009
+ style: {
2010
+ display: "flex",
2011
+ alignItems: "center",
2012
+ justifyContent: "space-between",
2013
+ gap: 12,
2014
+ marginBottom: 12,
2015
+ flexWrap: "wrap"
2016
+ },
2017
+ children: title ? /* @__PURE__ */ jsxs(Fragment, { children: [
2018
+ /* @__PURE__ */ jsx("div", { className: "adm-panel-title", style: { margin: 0 }, children: title }),
2019
+ /* @__PURE__ */ jsxs(Filters, { label: "Filter", children: [
2020
+ onSearch && /* @__PURE__ */ jsx(
2021
+ SearchInput,
2022
+ {
2023
+ value: search ?? "",
2024
+ onChange: onSearch,
2025
+ placeholder: searchPlaceholder
2026
+ }
2027
+ ),
2028
+ filter && /* @__PURE__ */ jsx(
2029
+ FilterSelect,
2030
+ {
2031
+ value: filter.value,
2032
+ onChange: filter.onChange,
2033
+ options: filter.options
2034
+ }
2035
+ )
2036
+ ] })
2037
+ ] }) : /* @__PURE__ */ jsxs(Filters, { label: "Filter", children: [
2038
+ onSearch && /* @__PURE__ */ jsx(
2039
+ SearchInput,
2040
+ {
2041
+ value: search ?? "",
2042
+ onChange: onSearch,
2043
+ placeholder: searchPlaceholder
2044
+ }
2045
+ ),
2046
+ filter && /* @__PURE__ */ jsx(
2047
+ FilterSelect,
2048
+ {
2049
+ value: filter.value,
2050
+ onChange: filter.onChange,
2051
+ options: filter.options
2052
+ }
2053
+ )
2054
+ ] })
2055
+ }
2056
+ );
2057
+ }
2058
+ function KeyRow({
2059
+ label,
2060
+ value,
2061
+ hint,
2062
+ last
2063
+ }) {
2064
+ return /* @__PURE__ */ jsxs(
2065
+ "div",
2066
+ {
2067
+ style: {
2068
+ display: "flex",
2069
+ justifyContent: "space-between",
2070
+ alignItems: "baseline",
2071
+ gap: 16,
2072
+ padding: "10px 0",
2073
+ borderBottom: last ? "none" : "1px solid var(--border-subtle)"
2074
+ },
2075
+ children: [
2076
+ /* @__PURE__ */ jsx(
2077
+ "span",
2078
+ {
2079
+ style: {
2080
+ color: "var(--text-secondary)",
2081
+ fontSize: 13.5,
2082
+ flexShrink: 0
2083
+ },
2084
+ children: /* @__PURE__ */ jsx(HintLabel, { label, hint })
2085
+ }
2086
+ ),
2087
+ /* @__PURE__ */ jsx(
2088
+ "span",
2089
+ {
2090
+ style: {
2091
+ fontWeight: 600,
2092
+ fontSize: 14,
2093
+ textAlign: "right",
2094
+ minWidth: 0
2095
+ },
2096
+ children: value
2097
+ }
2098
+ )
2099
+ ]
2100
+ }
2101
+ );
2102
+ }
2103
+ function BarRow({
2104
+ label,
2105
+ value,
2106
+ fraction,
2107
+ hint
2108
+ }) {
2109
+ const w = Math.max(0, Math.min(1, fraction)) * 100;
2110
+ return /* @__PURE__ */ jsxs("div", { style: { padding: "9px 0" }, children: [
2111
+ /* @__PURE__ */ jsxs(
2112
+ "div",
2113
+ {
2114
+ style: {
2115
+ display: "flex",
2116
+ justifyContent: "space-between",
2117
+ fontSize: 13,
2118
+ marginBottom: 6
2119
+ },
2120
+ children: [
2121
+ /* @__PURE__ */ jsx("span", { style: { textTransform: "capitalize" }, children: /* @__PURE__ */ jsx(HintLabel, { label, hint }) }),
2122
+ /* @__PURE__ */ jsx("span", { style: { color: "var(--text-secondary)" }, children: value })
2123
+ ]
2124
+ }
2125
+ ),
2126
+ /* @__PURE__ */ jsx(
2127
+ "div",
2128
+ {
2129
+ style: {
2130
+ height: 6,
2131
+ borderRadius: 4,
2132
+ background: "var(--border-subtle)",
2133
+ overflow: "hidden"
2134
+ },
2135
+ children: /* @__PURE__ */ jsx(
2136
+ "div",
2137
+ {
2138
+ style: {
2139
+ width: `${w}%`,
2140
+ height: "100%",
2141
+ borderRadius: 4,
2142
+ background: "var(--accent-primary)"
2143
+ }
2144
+ }
2145
+ )
2146
+ }
2147
+ )
2148
+ ] });
2149
+ }
2150
+ function FunnelBar({
2151
+ label,
2152
+ value,
2153
+ max,
2154
+ rate,
2155
+ hint,
2156
+ last
2157
+ }) {
2158
+ const w = max > 0 ? Math.max(2, value / max * 100) : 0;
2159
+ return /* @__PURE__ */ jsxs("div", { style: { padding: last ? "9px 0 0" : "9px 0" }, children: [
2160
+ /* @__PURE__ */ jsxs(
2161
+ "div",
2162
+ {
2163
+ style: {
2164
+ display: "flex",
2165
+ justifyContent: "space-between",
2166
+ fontSize: 13,
2167
+ marginBottom: 6
2168
+ },
2169
+ children: [
2170
+ /* @__PURE__ */ jsx("span", { style: { display: "inline-flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(HintLabel, { label, hint }) }),
2171
+ /* @__PURE__ */ jsxs("span", { style: { color: "var(--text-secondary)" }, children: [
2172
+ num(value),
2173
+ rate !== void 0 ? ` \xB7 ${pct(rate)}` : ""
2174
+ ] })
2175
+ ]
2176
+ }
2177
+ ),
2178
+ /* @__PURE__ */ jsx(
2179
+ "div",
2180
+ {
2181
+ style: {
2182
+ height: 8,
2183
+ borderRadius: 4,
2184
+ background: "var(--border-subtle)",
2185
+ overflow: "hidden"
2186
+ },
2187
+ children: /* @__PURE__ */ jsx(
2188
+ "div",
2189
+ {
2190
+ style: {
2191
+ width: `${w}%`,
2192
+ height: "100%",
2193
+ borderRadius: 4,
2194
+ background: "var(--accent-primary)"
2195
+ }
2196
+ }
2197
+ )
2198
+ }
2199
+ )
2200
+ ] });
2201
+ }
2202
+ function EmptyPanel({ children }) {
2203
+ return /* @__PURE__ */ jsx(
2204
+ "div",
2205
+ {
2206
+ className: "adm-panel",
2207
+ style: { color: "var(--text-tertiary)", fontSize: 13 },
2208
+ children
2209
+ }
2210
+ );
2211
+ }
2212
+ function EmptyInline({ children }) {
2213
+ return /* @__PURE__ */ jsx(
2214
+ "div",
2215
+ {
2216
+ style: {
2217
+ color: "var(--text-tertiary)",
2218
+ fontSize: 13,
2219
+ padding: "24px 0",
2220
+ textAlign: "center"
2221
+ },
2222
+ children
2223
+ }
2224
+ );
2225
+ }
2226
+ function ActivityTable({
2227
+ orders,
2228
+ isLoading,
2229
+ empty = "No orders yet for this tenant."
2230
+ }) {
2231
+ if (isLoading) {
2232
+ return /* @__PURE__ */ jsx(AdmLoading, { label: "Loading activity\u2026" });
2233
+ }
2234
+ if (!orders || orders.length === 0) {
2235
+ return /* @__PURE__ */ jsx(EmptyPanel, { children: empty });
2236
+ }
2237
+ return /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
2238
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
2239
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Order" }),
2240
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Customer" }),
2241
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Total" }),
2242
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Payment" }),
2243
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Paid by" }),
2244
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
2245
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Date" })
2246
+ ] }) }),
2247
+ /* @__PURE__ */ jsx("tbody", { children: orders.map((o) => /* @__PURE__ */ jsxs("tr", { children: [
2248
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
2249
+ "#",
2250
+ o.orderNumber
2251
+ ] }),
2252
+ /* @__PURE__ */ jsxs("td", { style: tableStyles.cell, children: [
2253
+ o.customerName ?? o.customerEmail,
2254
+ o.customerName ? /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "var(--text-tertiary)" }, children: [o.customerEmail, o.customerPhone].filter(Boolean).join(" \xB7 ") }) : null
2255
+ ] }),
2256
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(o.total, o.currency) }),
2257
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
2258
+ Badge,
2259
+ {
2260
+ variant: o.paymentStatus === "paid" ? "success" : "secondary",
2261
+ children: o.paymentStatus
2262
+ }
2263
+ ) }),
2264
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: o.paymentMethod ?? /* @__PURE__ */ jsx("span", { style: { color: "var(--text-tertiary)" }, children: "Not recorded" }) }),
2265
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
2266
+ Badge,
2267
+ {
2268
+ variant: o.status === "cancelled" || o.status === "refunded" ? "secondary" : "info",
2269
+ children: o.status
2270
+ }
2271
+ ) }),
2272
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: new Date(o.createdAt).toLocaleDateString() })
2273
+ ] }, o.id)) })
2274
+ ] }) });
2275
+ }
2276
+ function TransactionsTable({ rows }) {
2277
+ if (!rows || rows.length === 0) {
2278
+ return /* @__PURE__ */ jsx(EmptyPanel, { children: "No transactions yet for this tenant." });
2279
+ }
2280
+ return /* @__PURE__ */ jsx("div", { className: "adm-table-card", children: /* @__PURE__ */ jsxs("table", { style: tableStyles.table, children: [
2281
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: tableStyles.headRow, children: [
2282
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Reference" }),
2283
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Type" }),
2284
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Customer" }),
2285
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Amount" }),
2286
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Status" }),
2287
+ /* @__PURE__ */ jsx("th", { style: tableStyles.th, children: "Date" })
2288
+ ] }) }),
2289
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((t) => /* @__PURE__ */ jsxs("tr", { children: [
2290
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: t.reference }),
2291
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx("span", { style: { textTransform: "capitalize" }, children: t.type }) }),
2292
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: t.customer?.name ?? t.customer?.email ?? "\u2014" }),
2293
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: moneyCur(t.amount, t.currency) }),
2294
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cell, children: /* @__PURE__ */ jsx(
2295
+ Badge,
2296
+ {
2297
+ variant: t.status === "success" ? "success" : t.status === "failed" || t.status === "refunded" || t.status === "partially_refunded" ? "secondary" : "info",
2298
+ children: t.status
2299
+ }
2300
+ ) }),
2301
+ /* @__PURE__ */ jsx("td", { style: tableStyles.cellMuted, children: new Date(t.createdAt).toLocaleDateString() })
2302
+ ] }, t.id)) })
2303
+ ] }) });
2304
+ }
2305
+ export {
2306
+ TenantDetailPage as default
2307
+ };
2308
+ //# sourceMappingURL=page.js.map