@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,72 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Card, EmptyNote, TranscriptPlayer } from "@withpotter/ui-kit";
4
+ import { PickUp } from "./pick-up";
5
+ function CommentsPanel({ rows }) {
6
+ return /* @__PURE__ */ jsxs(Card, { padding: "none", children: [
7
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--border-subtle)] px-4 py-3", children: [
8
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-[var(--text-primary)]", children: "What they said" }),
9
+ rows.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums text-[var(--text-tertiary)]", children: rows.length })
10
+ ] }),
11
+ !rows.length ? /* @__PURE__ */ jsx(EmptyNote, { className: "px-4 py-6 text-center", children: "Comments and voice notes merchants add to a score show here." }) : /* @__PURE__ */ jsx("ul", { className: "max-h-[var(--adm-panel-h)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain", children: rows.map((row) => /* @__PURE__ */ jsxs("li", { className: "flex flex-col gap-2 px-4 py-3", children: [
12
+ row.comment && /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-[var(--text-primary)]", children: row.comment }),
13
+ row.audioUrl && /* @__PURE__ */ jsx(
14
+ TranscriptPlayer,
15
+ {
16
+ url: row.audioUrl,
17
+ seconds: row.audioSeconds ?? 0,
18
+ transcript: row.transcript,
19
+ className: "max-w-md"
20
+ }
21
+ ),
22
+ row.business && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline gap-x-2 gap-y-0.5", children: [
23
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-[var(--text-primary)]", children: row.business.name }),
24
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--text-tertiary)]", children: row.business.slug }),
25
+ row.business.model.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--text-tertiary)]", children: row.business.model.join(" \xB7 ") }),
26
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-[var(--text-tertiary)]", children: [
27
+ "since ",
28
+ new Date(row.business.since).toLocaleDateString()
29
+ ] })
30
+ ] }),
31
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-tertiary)]", children: [
32
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums text-[var(--text-secondary)]", children: row.kind === "thumb" ? row.score > 0 ? "Thumbs up" : "Thumbs down" : row.score }),
33
+ /* @__PURE__ */ jsx("span", { children: row.promptKey }),
34
+ row.audioSeconds != null && /* @__PURE__ */ jsxs("span", { children: [
35
+ row.audioSeconds,
36
+ "s clip"
37
+ ] }),
38
+ !row.business && row.context?.tenantSlug && /* @__PURE__ */ jsx("span", { children: row.context.tenantSlug }),
39
+ row.context?.userEmail && /* @__PURE__ */ jsx("span", { children: row.context.userEmail }),
40
+ /* @__PURE__ */ jsx("span", { children: new Date(row.createdAt).toLocaleDateString() }),
41
+ (row.context?.route || row.context?.pageUrl) && /* @__PURE__ */ jsx("span", { className: "truncate", children: row.context.route ?? stripOrigin(row.context.pageUrl) }),
42
+ row.context?.viewport && /* @__PURE__ */ jsx("span", { children: row.context.viewport }),
43
+ row.context?.theme && /* @__PURE__ */ jsx("span", { children: row.context.theme }),
44
+ row.context?.timeZone && /* @__PURE__ */ jsx("span", { children: row.context.timeZone }),
45
+ row.context?.posthogSessionId && /* @__PURE__ */ jsxs("span", { title: row.context.posthogSessionId, children: [
46
+ "session ",
47
+ row.context.posthogSessionId.slice(0, 8)
48
+ ] }),
49
+ /* @__PURE__ */ jsx(
50
+ PickUp,
51
+ {
52
+ id: row.id,
53
+ kind: "signal",
54
+ caseId: row.serviceCaseId,
55
+ canOpen: Boolean(row.business)
56
+ }
57
+ )
58
+ ] })
59
+ ] }, row.id)) })
60
+ ] });
61
+ }
62
+ function stripOrigin(url) {
63
+ try {
64
+ return new URL(url).pathname;
65
+ } catch {
66
+ return url;
67
+ }
68
+ }
69
+ export {
70
+ CommentsPanel
71
+ };
72
+ //# sourceMappingURL=comments-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/comments-panel.tsx"],"sourcesContent":["'use client';\n\nimport { Card, EmptyNote, TranscriptPlayer } from '@withpotter/ui-kit';\nimport { PickUp } from './pick-up';\nimport type { FeedbackSignalComment } from '@withpotter/lib/api';\n\n/**\n * The sentences.\n *\n * THE MOST VALUABLE PANEL ON THE SCREEN, and the one that would have been left\n * out if this were built from the summary endpoint alone. An average tells you\n * something moved; only these tell you what to do about it, and nobody has\n * ever fixed anything from a mean.\n *\n * Each one carries the PAGE it was written on. \"The import mapping is the\n * fiddly bit\" is worth something on its own and worth much more attached to\n * the screen it was typed on — that pairing is the whole reason the signal\n * stores a pageUrl.\n *\n * AND EACH ONE CAN BE PICKED UP. Reading a complaint and doing nothing visible\n * about it is the version of this panel that teaches merchants not to bother:\n * the whole product already refuses to let a thumbs-down only tally, and this\n * end was the exception. \"Start a case\" opens one in that merchant's own\n * inbox, carrying their words and their score, so the answer becomes a\n * conversation in the place they already reply. The server remembers which\n * case a signal became, so the row then shows the case instead of the button.\n */\nexport function CommentsPanel({ rows }: { rows: FeedbackSignalComment[] }) {\n return (\n <Card padding=\"none\">\n <div className=\"flex items-center gap-2 border-b border-[var(--border-subtle)] px-4 py-3\">\n <p className=\"text-sm font-semibold text-[var(--text-primary)]\">\n What they said\n </p>\n {rows.length > 0 && (\n <span className=\"text-xs tabular-nums text-[var(--text-tertiary)]\">\n {rows.length}\n </span>\n )}\n </div>\n\n {!rows.length ? (\n <EmptyNote className=\"px-4 py-6 text-center\">\n Comments and voice notes merchants add to a score show here.\n </EmptyNote>\n ) : (\n <ul className=\"max-h-[var(--adm-panel-h)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain\">\n {rows.map((row) => (\n <li key={row.id} className=\"flex flex-col gap-2 px-4 py-3\">\n {row.comment && (\n <p className=\"text-sm leading-relaxed text-[var(--text-primary)]\">\n {row.comment}\n </p>\n )}\n\n {/* A SPOKEN ANSWER IS AN ANSWER, so it is played here rather than\n linked. Most of these will arrive from a phone, where typing a\n sentence between two other jobs is the thing that does not\n happen — so this panel would be reading a biased half of the\n feedback if a clip were anything less than first-class.\n\n `preload=\"none\"`: a hundred clips must not fetch a hundred\n files to draw a list nobody has pressed play on yet. */}\n {row.audioUrl && (\n <TranscriptPlayer\n url={row.audioUrl}\n seconds={row.audioSeconds ?? 0}\n transcript={row.transcript}\n className=\"max-w-md\"\n />\n )}\n {/* WHO SAID IT, on its own line and first.\n This panel used to open each row with the score and put a\n tenant slug three items along — a string like\n `tura-bodywork` that nobody in the room reads as a business,\n with nothing to say whether it is a shop, a clinic or a hall.\n The business is resolved by the api now, so a rename cannot\n strand it. */}\n {row.business && (\n <div className=\"flex flex-wrap items-baseline gap-x-2 gap-y-0.5\">\n <span className=\"text-sm font-medium text-[var(--text-primary)]\">\n {row.business.name}\n </span>\n <span className=\"text-xs text-[var(--text-tertiary)]\">\n {row.business.slug}\n </span>\n {row.business.model.length > 0 && (\n <span className=\"text-xs text-[var(--text-tertiary)]\">\n {row.business.model.join(' · ')}\n </span>\n )}\n <span className=\"text-xs text-[var(--text-tertiary)]\">\n since {new Date(row.business.since).toLocaleDateString()}\n </span>\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-tertiary)]\">\n <span className=\"tabular-nums text-[var(--text-secondary)]\">\n {row.kind === 'thumb'\n ? row.score > 0\n ? 'Thumbs up'\n : 'Thumbs down'\n : row.score}\n </span>\n <span>{row.promptKey}</span>\n {row.audioSeconds != null && (\n <span>{row.audioSeconds}s clip</span>\n )}\n {/* The slug only where the business could not be resolved —\n an answer left outside a workspace, or one whose business\n has since been deleted. */}\n {!row.business && row.context?.tenantSlug && (\n <span>{row.context.tenantSlug}</span>\n )}\n {row.context?.userEmail && <span>{row.context.userEmail}</span>}\n <span>{new Date(row.createdAt).toLocaleDateString()}</span>\n {/* The route pattern where we have it: four hundred\n complaints about the order screen group under\n `/dashboard/orders/[id]`, where four hundred order ids\n group under nothing. */}\n {(row.context?.route || row.context?.pageUrl) && (\n <span className=\"truncate\">\n {row.context.route ?? stripOrigin(row.context.pageUrl!)}\n </span>\n )}\n {row.context?.viewport && <span>{row.context.viewport}</span>}\n {row.context?.theme && <span>{row.context.theme}</span>}\n {row.context?.timeZone && <span>{row.context.timeZone}</span>}\n {row.context?.posthogSessionId && (\n <span title={row.context.posthogSessionId}>\n session {row.context.posthogSessionId.slice(0, 8)}\n </span>\n )}\n\n {/* The action sits on the row's own footer rather than in a\n corner: it belongs to this sentence, and a panel-level\n button would have to ask which one. */}\n <PickUp\n id={row.id}\n kind=\"signal\"\n caseId={row.serviceCaseId}\n canOpen={Boolean(row.business)}\n />\n </div>\n </li>\n ))}\n </ul>\n )}\n </Card>\n );\n}\n\n/** The host is the same on every row and only costs width. */\nfunction stripOrigin(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n return url;\n }\n}\n"],"mappings":";AA8BM,SACE,KADF;AA5BN,SAAS,MAAM,WAAW,wBAAwB;AAClD,SAAS,cAAc;AAwBhB,SAAS,cAAc,EAAE,KAAK,GAAsC;AACzE,SACE,qBAAC,QAAK,SAAQ,QACZ;AAAA,yBAAC,SAAI,WAAU,4EACb;AAAA,0BAAC,OAAE,WAAU,oDAAmD,4BAEhE;AAAA,MACC,KAAK,SAAS,KACb,oBAAC,UAAK,WAAU,oDACb,eAAK,QACR;AAAA,OAEJ;AAAA,IAEC,CAAC,KAAK,SACL,oBAAC,aAAU,WAAU,yBAAwB,0EAE7C,IAEA,oBAAC,QAAG,WAAU,wGACX,eAAK,IAAI,CAAC,QACT,qBAAC,QAAgB,WAAU,iCACxB;AAAA,UAAI,WACH,oBAAC,OAAE,WAAU,sDACV,cAAI,SACP;AAAA,MAWD,IAAI,YACH;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,IAAI;AAAA,UACT,SAAS,IAAI,gBAAgB;AAAA,UAC7B,YAAY,IAAI;AAAA,UAChB,WAAU;AAAA;AAAA,MACZ;AAAA,MASD,IAAI,YACH,qBAAC,SAAI,WAAU,mDACb;AAAA,4BAAC,UAAK,WAAU,kDACb,cAAI,SAAS,MAChB;AAAA,QACA,oBAAC,UAAK,WAAU,uCACb,cAAI,SAAS,MAChB;AAAA,QACC,IAAI,SAAS,MAAM,SAAS,KAC3B,oBAAC,UAAK,WAAU,uCACb,cAAI,SAAS,MAAM,KAAK,QAAK,GAChC;AAAA,QAEF,qBAAC,UAAK,WAAU,uCAAsC;AAAA;AAAA,UAC7C,IAAI,KAAK,IAAI,SAAS,KAAK,EAAE,mBAAmB;AAAA,WACzD;AAAA,SACF;AAAA,MAGF,qBAAC,SAAI,WAAU,mFACb;AAAA,4BAAC,UAAK,WAAU,6CACb,cAAI,SAAS,UACV,IAAI,QAAQ,IACV,cACA,gBACF,IAAI,OACV;AAAA,QACA,oBAAC,UAAM,cAAI,WAAU;AAAA,QACpB,IAAI,gBAAgB,QACnB,qBAAC,UAAM;AAAA,cAAI;AAAA,UAAa;AAAA,WAAM;AAAA,QAK/B,CAAC,IAAI,YAAY,IAAI,SAAS,cAC7B,oBAAC,UAAM,cAAI,QAAQ,YAAW;AAAA,QAE/B,IAAI,SAAS,aAAa,oBAAC,UAAM,cAAI,QAAQ,WAAU;AAAA,QACxD,oBAAC,UAAM,cAAI,KAAK,IAAI,SAAS,EAAE,mBAAmB,GAAE;AAAA,SAKlD,IAAI,SAAS,SAAS,IAAI,SAAS,YACnC,oBAAC,UAAK,WAAU,YACb,cAAI,QAAQ,SAAS,YAAY,IAAI,QAAQ,OAAQ,GACxD;AAAA,QAED,IAAI,SAAS,YAAY,oBAAC,UAAM,cAAI,QAAQ,UAAS;AAAA,QACrD,IAAI,SAAS,SAAS,oBAAC,UAAM,cAAI,QAAQ,OAAM;AAAA,QAC/C,IAAI,SAAS,YAAY,oBAAC,UAAM,cAAI,QAAQ,UAAS;AAAA,QACrD,IAAI,SAAS,oBACZ,qBAAC,UAAK,OAAO,IAAI,QAAQ,kBAAkB;AAAA;AAAA,UAChC,IAAI,QAAQ,iBAAiB,MAAM,GAAG,CAAC;AAAA,WAClD;AAAA,QAMF;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,IAAI;AAAA,YACR,MAAK;AAAA,YACL,QAAQ,IAAI;AAAA,YACZ,SAAS,QAAQ,IAAI,QAAQ;AAAA;AAAA,QAC/B;AAAA,SACF;AAAA,SAhGO,IAAI,EAiGb,CACD,GACH;AAAA,KAEJ;AAEJ;AAGA,SAAS,YAAY,KAAqB;AACxC,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Card, Badge } from "@withpotter/ui-kit";
4
+ function HealthPanel({ rows }) {
5
+ if (!rows.length) return null;
6
+ return /* @__PURE__ */ jsxs(Card, { padding: "none", children: [
7
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--border-subtle)] px-4 py-3", children: [
8
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-[var(--text-primary)]", children: "Shown, and answered" }),
9
+ /* @__PURE__ */ jsx("span", { className: "text-xs tabular-nums text-[var(--text-tertiary)]", children: rows.length })
10
+ ] }),
11
+ /* @__PURE__ */ jsx("div", { className: "max-h-[var(--adm-panel-h)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain", children: rows.map((row) => {
12
+ const met = row.people || 1;
13
+ const rate = Math.round(row.answered / met * 100);
14
+ const neglected = row.people >= 5 && rate < 34;
15
+ return /* @__PURE__ */ jsxs(
16
+ "div",
17
+ {
18
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 px-4 py-3",
19
+ children: [
20
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-[var(--text-primary)]", children: row.promptKey }),
21
+ /* @__PURE__ */ jsxs("span", { className: "text-xs tabular-nums text-[var(--text-secondary)]", children: [
22
+ row.answered,
23
+ " of ",
24
+ row.people,
25
+ " answered (",
26
+ rate,
27
+ "%)"
28
+ ] }),
29
+ /* @__PURE__ */ jsxs("span", { className: "text-xs tabular-nums text-[var(--text-tertiary)]", children: [
30
+ row.dismissed,
31
+ " closed \xB7 ",
32
+ row.waiting,
33
+ " waiting"
34
+ ] }),
35
+ neglected && /* @__PURE__ */ jsx(Badge, { variant: "primary", children: "Asked at a bad moment" })
36
+ ]
37
+ },
38
+ row.promptKey
39
+ );
40
+ }) })
41
+ ] });
42
+ }
43
+ export {
44
+ HealthPanel
45
+ };
46
+ //# sourceMappingURL=health-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/health-panel.tsx"],"sourcesContent":["'use client';\n\nimport { Card, Badge } from '@withpotter/ui-kit';\nimport type { FeedbackPromptHealth } from '@withpotter/lib/api';\n\n/**\n * Shown versus answered — which prompts are in the wrong place.\n *\n * THIS IS THE PANEL THE SCORES CANNOT REPLACE, and the reason `seen_count`\n * exists at all. A prompt with a lovely average that forty people closed\n * unread is not a lovely prompt; it is a prompt two people liked and thirty-\n * eight people swatted. In the scores those two look identical to a prompt\n * everybody answered, because the scores can only see the answers.\n *\n * A low answer rate is not a verdict on the question. It is nearly always a\n * verdict on WHERE it was asked — which is why the row says \"asked at a bad\n * moment\" rather than \"bad question\".\n */\nexport function HealthPanel({ rows }: { rows: FeedbackPromptHealth[] }) {\n if (!rows.length) return null;\n\n return (\n <Card padding=\"none\">\n <div className=\"flex items-center gap-2 border-b border-[var(--border-subtle)] px-4 py-3\">\n <p className=\"text-sm font-semibold text-[var(--text-primary)]\">\n Shown, and answered\n </p>\n <span className=\"text-xs tabular-nums text-[var(--text-tertiary)]\">\n {rows.length}\n </span>\n </div>\n <div className=\"max-h-[var(--adm-panel-h)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain\">\n {rows.map((row) => {\n const met = row.people || 1;\n const rate = Math.round((row.answered / met) * 100);\n // Below a third, and seen by enough people for that to mean\n // anything rather than being two early testers.\n const neglected = row.people >= 5 && rate < 34;\n return (\n <div\n key={row.promptKey}\n className=\"flex flex-wrap items-center gap-x-4 gap-y-1 px-4 py-3\"\n >\n <span className=\"min-w-0 flex-1 truncate text-sm text-[var(--text-primary)]\">\n {row.promptKey}\n </span>\n <span className=\"text-xs tabular-nums text-[var(--text-secondary)]\">\n {row.answered} of {row.people} answered ({rate}%)\n </span>\n <span className=\"text-xs tabular-nums text-[var(--text-tertiary)]\">\n {row.dismissed} closed · {row.waiting} waiting\n </span>\n {/* `Badge`, not `StatusBadge`. This is not the state of a\n record — it is a reading WE take of a row, and the shared\n status map has no business learning a value that exists only\n on this screen. The adoption rule is about statuses that\n belong in the map; this one does not. */}\n {neglected && (\n <Badge variant=\"primary\">Asked at a bad moment</Badge>\n )}\n </div>\n );\n })}\n </div>\n </Card>\n );\n}\n"],"mappings":";AAuBM,SACE,KADF;AArBN,SAAS,MAAM,aAAa;AAgBrB,SAAS,YAAY,EAAE,KAAK,GAAqC;AACtE,MAAI,CAAC,KAAK,OAAQ,QAAO;AAEzB,SACE,qBAAC,QAAK,SAAQ,QACZ;AAAA,yBAAC,SAAI,WAAU,4EACb;AAAA,0BAAC,OAAE,WAAU,oDAAmD,iCAEhE;AAAA,MACA,oBAAC,UAAK,WAAU,oDACb,eAAK,QACR;AAAA,OACF;AAAA,IACA,oBAAC,SAAI,WAAU,wGACZ,eAAK,IAAI,CAAC,QAAQ;AACjB,YAAM,MAAM,IAAI,UAAU;AAC1B,YAAM,OAAO,KAAK,MAAO,IAAI,WAAW,MAAO,GAAG;AAGlD,YAAM,YAAY,IAAI,UAAU,KAAK,OAAO;AAC5C,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAEV;AAAA,gCAAC,UAAK,WAAU,8DACb,cAAI,WACP;AAAA,YACA,qBAAC,UAAK,WAAU,qDACb;AAAA,kBAAI;AAAA,cAAS;AAAA,cAAK,IAAI;AAAA,cAAO;AAAA,cAAY;AAAA,cAAK;AAAA,eACjD;AAAA,YACA,qBAAC,UAAK,WAAU,oDACb;AAAA,kBAAI;AAAA,cAAU;AAAA,cAAW,IAAI;AAAA,cAAQ;AAAA,eACxC;AAAA,YAMC,aACC,oBAAC,SAAM,SAAQ,WAAU,mCAAqB;AAAA;AAAA;AAAA,QAlB3C,IAAI;AAAA,MAoBX;AAAA,IAEJ,CAAC,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,96 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Card, EmptyNote, TranscriptPlayer } from "@withpotter/ui-kit";
4
+ import { PickUp } from "./pick-up";
5
+ function MessagesPanel({
6
+ rows,
7
+ limit,
8
+ loading
9
+ }) {
10
+ if (loading) return null;
11
+ return /* @__PURE__ */ jsxs(Card, { padding: "none", children: [
12
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-[var(--border-subtle)] px-4 py-3", children: [
13
+ /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-2 text-sm font-semibold text-[var(--text-primary)]", children: [
14
+ "What they sent",
15
+ rows.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-xs font-normal tabular-nums text-[var(--text-tertiary)]", children: rows.length })
16
+ ] }),
17
+ rows.length >= limit && // Said rather than paginated: this list is read, not worked through,
18
+ // and a page of controls under it would imply otherwise. It stops
19
+ // being honest at exactly the point it fills up, so it says so.
20
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-[var(--text-tertiary)]", children: [
21
+ "Latest ",
22
+ limit,
23
+ ". Narrow the window to see further back."
24
+ ] })
25
+ ] }),
26
+ !rows.length ? /* @__PURE__ */ jsx(EmptyNote, { className: "px-4 py-6 text-center", children: "Bug reports, questions and voice notes from the help sheet land here." }) : /* @__PURE__ */ jsx("ul", { className: "max-h-[calc(var(--adm-panel-h)*1.5)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain", children: rows.map((row) => /* @__PURE__ */ jsxs("li", { className: "flex flex-col gap-2 px-4 py-3", children: [
27
+ row.business ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline gap-x-2 gap-y-0.5", children: [
28
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-[var(--text-primary)]", children: row.business.name }),
29
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--text-tertiary)]", children: row.business.slug }),
30
+ row.business.model.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--text-tertiary)]", children: row.business.model.join(" \xB7 ") })
31
+ ] }) : /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--text-tertiary)]", children: "Sent from outside a workspace" }),
32
+ /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap text-sm text-[var(--text-primary)]", children: row.description?.trim() || (row.audioUrl ? "Spoken \u2014 see the clip below." : "\u2014") }),
33
+ row.audioUrl && /* @__PURE__ */ jsx(
34
+ TranscriptPlayer,
35
+ {
36
+ url: row.audioUrl,
37
+ seconds: row.audioSeconds ?? 0,
38
+ transcript: row.transcript,
39
+ className: "max-w-md"
40
+ }
41
+ ),
42
+ row.screenshotUrl && /* @__PURE__ */ jsx("a", { href: row.screenshotUrl, target: "_blank", rel: "noreferrer", children: /* @__PURE__ */ jsx(
43
+ "img",
44
+ {
45
+ src: row.screenshotUrl,
46
+ alt: "Screenshot they attached",
47
+ className: "max-h-40 rounded-lg border border-line"
48
+ }
49
+ ) }),
50
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-tertiary)]", children: [
51
+ /* @__PURE__ */ jsx("span", { className: "text-[var(--text-secondary)]", children: row.category }),
52
+ row.area && /* @__PURE__ */ jsx("span", { className: "text-[var(--text-secondary)]", children: row.area }),
53
+ /* @__PURE__ */ jsx("span", { children: row.status }),
54
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: row.route ?? stripOrigin(row.pageUrl) }),
55
+ row.browser?.platform && /* @__PURE__ */ jsx("span", { children: row.browser.platform }),
56
+ row.browser?.viewportWidth != null && /* @__PURE__ */ jsxs("span", { children: [
57
+ row.browser.viewportWidth,
58
+ "\xD7",
59
+ row.browser.viewportHeight
60
+ ] }),
61
+ /* @__PURE__ */ jsx("span", { children: new Date(row.createdAt).toLocaleDateString() }),
62
+ row.githubIssueUrl && /* @__PURE__ */ jsx(
63
+ "a",
64
+ {
65
+ href: row.githubIssueUrl,
66
+ target: "_blank",
67
+ rel: "noreferrer",
68
+ className: "text-[var(--accent-primary)] hover:underline",
69
+ children: "issue"
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx(
73
+ PickUp,
74
+ {
75
+ id: row.id,
76
+ kind: "message",
77
+ caseId: row.serviceCaseId,
78
+ canOpen: Boolean(row.business)
79
+ }
80
+ )
81
+ ] })
82
+ ] }, row.id)) })
83
+ ] });
84
+ }
85
+ function stripOrigin(url) {
86
+ try {
87
+ const parsed = new URL(url);
88
+ return parsed.pathname + parsed.search;
89
+ } catch {
90
+ return url;
91
+ }
92
+ }
93
+ export {
94
+ MessagesPanel
95
+ };
96
+ //# sourceMappingURL=messages-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/messages-panel.tsx"],"sourcesContent":["'use client';\n\nimport { Card, EmptyNote, TranscriptPlayer } from '@withpotter/ui-kit';\nimport { PickUp } from './pick-up';\nimport type { AdminFeedbackMessage } from '@withpotter/lib/api';\n\n/**\n * What merchants SENT us, as opposed to what they scored.\n *\n * THIS SCREEN HAD SCORES AND NOTHING ELSE, which made it a dashboard about\n * feedback rather than a place you read it. A message from the help sheet — the\n * sentence somebody typed at midnight, the screenshot of the thing that would\n * not work, the clip they recorded because typing it out was too much — went to\n * a GitHub issue and an email and never appeared here. John: *\"on the admin the\n * voice note doesnt play the recording\"*. It could not: there was nothing on\n * this side to play it.\n *\n * THE CLIP PLAYS, AND IT ALSO LINKS. An `<audio>` element that cannot fetch its\n * source renders as a dead grey bar with no explanation, and a voice note is\n * exactly the kind of file that lives behind a URL that can expire. The link\n * beside it is the fallback that always works, and it is why this does not\n * quietly become the second place a recording cannot be heard.\n *\n * EVERY ROW CAN BECOME A CONVERSATION, the same way a score can. Reading a\n * complaint and doing nothing visible about it is what teaches merchants that\n * writing to us is pointless.\n */\nexport function MessagesPanel({\n rows,\n limit,\n loading,\n}: {\n rows: AdminFeedbackMessage[];\n /** What we asked for, so a full page can say it may not be all of it. */\n limit: number;\n loading?: boolean;\n}) {\n if (loading) return null;\n\n return (\n <Card padding=\"none\">\n <div className=\"flex items-center justify-between gap-3 border-b border-[var(--border-subtle)] px-4 py-3\">\n <p className=\"flex items-center gap-2 text-sm font-semibold text-[var(--text-primary)]\">\n What they sent\n {rows.length > 0 && (\n <span className=\"text-xs font-normal tabular-nums text-[var(--text-tertiary)]\">\n {rows.length}\n </span>\n )}\n </p>\n {rows.length >= limit && (\n // Said rather than paginated: this list is read, not worked through,\n // and a page of controls under it would imply otherwise. It stops\n // being honest at exactly the point it fills up, so it says so.\n <p className=\"text-xs text-[var(--text-tertiary)]\">\n Latest {limit}. Narrow the window to see further back.\n </p>\n )}\n </div>\n\n {!rows.length ? (\n <EmptyNote className=\"px-4 py-6 text-center\">\n Bug reports, questions and voice notes from the help sheet land here.\n </EmptyNote>\n ) : (\n <ul className=\"max-h-[calc(var(--adm-panel-h)*1.5)] divide-y divide-[var(--border-subtle)] overflow-y-auto overscroll-contain\">\n {rows.map((row) => (\n <li key={row.id} className=\"flex flex-col gap-2 px-4 py-3\">\n {row.business ? (\n <div className=\"flex flex-wrap items-baseline gap-x-2 gap-y-0.5\">\n <span className=\"text-sm font-medium text-[var(--text-primary)]\">\n {row.business.name}\n </span>\n <span className=\"text-xs text-[var(--text-tertiary)]\">\n {row.business.slug}\n </span>\n {row.business.model.length > 0 && (\n <span className=\"text-xs text-[var(--text-tertiary)]\">\n {row.business.model.join(' · ')}\n </span>\n )}\n </div>\n ) : (\n <p className=\"text-xs text-[var(--text-tertiary)]\">\n Sent from outside a workspace\n </p>\n )}\n\n {/* The words, or an honest stand-in. A voice note with no text\n used to render as an empty row with a player under it. */}\n <p className=\"whitespace-pre-wrap text-sm text-[var(--text-primary)]\">\n {row.description?.trim() ||\n (row.audioUrl ? 'Spoken — see the clip below.' : '—')}\n </p>\n\n {/* The player the merchant recorded into, not the browser's\n grey bar — and it carries its own \"open\" link, so a clip\n behind an expired URL still has a way through. */}\n {row.audioUrl && (\n <TranscriptPlayer\n url={row.audioUrl}\n seconds={row.audioSeconds ?? 0}\n transcript={row.transcript}\n className=\"max-w-md\"\n />\n )}\n\n {row.screenshotUrl && (\n <a href={row.screenshotUrl} target=\"_blank\" rel=\"noreferrer\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={row.screenshotUrl}\n alt=\"Screenshot they attached\"\n className=\"max-h-40 rounded-lg border border-line\"\n />\n </a>\n )}\n\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-[var(--text-tertiary)]\">\n <span className=\"text-[var(--text-secondary)]\">\n {row.category}\n </span>\n {/* The part of the product, in the merchant's own word — the\n first thing anybody triaging wants and the one thing a\n URL cannot tell them, since our own nav renames screens\n per business. */}\n {row.area && (\n <span className=\"text-[var(--text-secondary)]\">\n {row.area}\n </span>\n )}\n <span>{row.status}</span>\n <span className=\"truncate\">\n {row.route ?? stripOrigin(row.pageUrl)}\n </span>\n {row.browser?.platform && <span>{row.browser.platform}</span>}\n {row.browser?.viewportWidth != null && (\n <span>\n {row.browser.viewportWidth}×{row.browser.viewportHeight}\n </span>\n )}\n <span>{new Date(row.createdAt).toLocaleDateString()}</span>\n {row.githubIssueUrl && (\n <a\n href={row.githubIssueUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-[var(--accent-primary)] hover:underline\"\n >\n issue\n </a>\n )}\n\n <PickUp\n id={row.id}\n kind=\"message\"\n caseId={row.serviceCaseId}\n canOpen={Boolean(row.business)}\n />\n </div>\n </li>\n ))}\n </ul>\n )}\n </Card>\n );\n}\n\n/** The host is the same on every row and only costs width. */\nfunction stripOrigin(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.pathname + parsed.search;\n } catch {\n return url;\n }\n}\n"],"mappings":";AA0CQ,SAGI,KAHJ;AAxCR,SAAS,MAAM,WAAW,wBAAwB;AAClD,SAAS,cAAc;AAwBhB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,QAAS,QAAO;AAEpB,SACE,qBAAC,QAAK,SAAQ,QACZ;AAAA,yBAAC,SAAI,WAAU,4FACb;AAAA,2BAAC,OAAE,WAAU,4EAA2E;AAAA;AAAA,QAErF,KAAK,SAAS,KACb,oBAAC,UAAK,WAAU,gEACb,eAAK,QACR;AAAA,SAEJ;AAAA,MACC,KAAK,UAAU;AAAA;AAAA;AAAA,MAId,qBAAC,OAAE,WAAU,uCAAsC;AAAA;AAAA,QACzC;AAAA,QAAM;AAAA,SAChB;AAAA,OAEJ;AAAA,IAEC,CAAC,KAAK,SACL,oBAAC,aAAU,WAAU,yBAAwB,mFAE7C,IAEA,oBAAC,QAAG,WAAU,kHACX,eAAK,IAAI,CAAC,QACT,qBAAC,QAAgB,WAAU,iCACxB;AAAA,UAAI,WACH,qBAAC,SAAI,WAAU,mDACb;AAAA,4BAAC,UAAK,WAAU,kDACb,cAAI,SAAS,MAChB;AAAA,QACA,oBAAC,UAAK,WAAU,uCACb,cAAI,SAAS,MAChB;AAAA,QACC,IAAI,SAAS,MAAM,SAAS,KAC3B,oBAAC,UAAK,WAAU,uCACb,cAAI,SAAS,MAAM,KAAK,QAAK,GAChC;AAAA,SAEJ,IAEA,oBAAC,OAAE,WAAU,uCAAsC,2CAEnD;AAAA,MAKF,oBAAC,OAAE,WAAU,0DACV,cAAI,aAAa,KAAK,MACpB,IAAI,WAAW,sCAAiC,WACrD;AAAA,MAKC,IAAI,YACH;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,IAAI;AAAA,UACT,SAAS,IAAI,gBAAgB;AAAA,UAC7B,YAAY,IAAI;AAAA,UAChB,WAAU;AAAA;AAAA,MACZ;AAAA,MAGD,IAAI,iBACH,oBAAC,OAAE,MAAM,IAAI,eAAe,QAAO,UAAS,KAAI,cAE9C;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,IAAI;AAAA,UACT,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MAGF,qBAAC,SAAI,WAAU,mFACb;AAAA,4BAAC,UAAK,WAAU,gCACb,cAAI,UACP;AAAA,QAKC,IAAI,QACH,oBAAC,UAAK,WAAU,gCACb,cAAI,MACP;AAAA,QAEF,oBAAC,UAAM,cAAI,QAAO;AAAA,QAClB,oBAAC,UAAK,WAAU,YACb,cAAI,SAAS,YAAY,IAAI,OAAO,GACvC;AAAA,QACC,IAAI,SAAS,YAAY,oBAAC,UAAM,cAAI,QAAQ,UAAS;AAAA,QACrD,IAAI,SAAS,iBAAiB,QAC7B,qBAAC,UACE;AAAA,cAAI,QAAQ;AAAA,UAAc;AAAA,UAAE,IAAI,QAAQ;AAAA,WAC3C;AAAA,QAEF,oBAAC,UAAM,cAAI,KAAK,IAAI,SAAS,EAAE,mBAAmB,GAAE;AAAA,QACnD,IAAI,kBACH;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,IAAI;AAAA,YACV,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,IAAI;AAAA,YACR,MAAK;AAAA,YACL,QAAQ,IAAI;AAAA,YACZ,SAAS,QAAQ,IAAI,QAAQ;AAAA;AAAA,QAC/B;AAAA,SACF;AAAA,SA5FO,IAAI,EA6Fb,CACD,GACH;AAAA,KAEJ;AAEJ;AAGA,SAAS,YAAY,KAAqB;AACxC,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,WAAO,OAAO,WAAW,OAAO;AAAA,EAClC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,27 @@
1
+ function key(row) {
2
+ return `${row.promptKey}::${row.kind}`;
3
+ }
4
+ function headline(row) {
5
+ return row.nps ?? row.average;
6
+ }
7
+ function movements(current, wider) {
8
+ const wide = new Map(wider.map((row) => [key(row), row]));
9
+ const out = /* @__PURE__ */ new Map();
10
+ for (const row of current) {
11
+ const both = wide.get(key(row));
12
+ if (!both) continue;
13
+ const previousResponses = both.responses - row.responses;
14
+ if (previousResponses < 2) continue;
15
+ const previous = (headline(both) * both.responses - headline(row) * row.responses) / previousResponses;
16
+ out.set(key(row), {
17
+ delta: Math.round((headline(row) - previous) * 10) / 10,
18
+ previousResponses
19
+ });
20
+ }
21
+ return out;
22
+ }
23
+ export {
24
+ key as movementKey,
25
+ movements
26
+ };
27
+ //# sourceMappingURL=movement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/movement.ts"],"sourcesContent":["import type { FeedbackSignalSummaryRow } from '@withpotter/lib/api';\n\n/**\n * Whether a score MOVED, worked out from two windows rather than a new endpoint.\n *\n * A score with no previous period cannot answer the only question that\n * justifies collecting it: did the thing we changed change anything. Every\n * panel here was an all-time-within-the-window figure, so \"CES 4.2\" read the\n * same whether the import had got twice as easy or twice as hard.\n *\n * THE ARITHMETIC IS EXACT, WHICH IS WHY THIS NEEDS NO API WORK. The summary is\n * already windowed by `days`, and a mean carries its own count, so a window\n * twice as wide contains the current period plus the one before it and the\n * earlier half can be recovered:\n *\n * previous answers = wide.responses - current.responses\n * previous mean = (wide.average × wide.responses\n * - current.average × current.responses) / previous\n *\n * NPS recombines the same way and this is not obvious: it is\n * (promoters - detractors) / n × 100, so `nps × n / 100` is a COUNT, and counts\n * subtract. Doing it any other way — averaging two NPS figures — would be\n * wrong, quietly, and only on the metric the whole thing is named after.\n *\n * What it cannot do is show a shape. Two points are a direction, not a trend,\n * and a real sparkline needs the api to bucket. This answers \"up or down since\n * last time\", which is the question being asked in the room.\n */\nexport interface Movement {\n /** Change in the headline figure. Positive means the number went up. */\n delta: number;\n /** How many answers the earlier window rests on. */\n previousResponses: number;\n}\n\n/** Keyed the way the panel is: one row per prompt AND kind. */\nfunction key(row: FeedbackSignalSummaryRow) {\n return `${row.promptKey}::${row.kind}`;\n}\n\n/** The figure a card shows: NPS where there is one, otherwise the mean. */\nfunction headline(row: FeedbackSignalSummaryRow) {\n return row.nps ?? row.average;\n}\n\nexport function movements(\n current: FeedbackSignalSummaryRow[],\n wider: FeedbackSignalSummaryRow[],\n): Map<string, Movement> {\n const wide = new Map(wider.map((row) => [key(row), row]));\n const out = new Map<string, Movement>();\n\n for (const row of current) {\n const both = wide.get(key(row));\n if (!both) continue;\n const previousResponses = both.responses - row.responses;\n // One answer is not a period. A single earlier response would render a\n // swing of several points that means nothing, and a card that shouts on\n // one answer teaches everyone to ignore the arrow.\n if (previousResponses < 2) continue;\n\n const previous =\n (headline(both) * both.responses - headline(row) * row.responses) /\n previousResponses;\n\n out.set(key(row), {\n delta: Math.round((headline(row) - previous) * 10) / 10,\n previousResponses,\n });\n }\n\n return out;\n}\n\nexport { key as movementKey };\n"],"mappings":"AAoCA,SAAS,IAAI,KAA+B;AAC1C,SAAO,GAAG,IAAI,SAAS,KAAK,IAAI,IAAI;AACtC;AAGA,SAAS,SAAS,KAA+B;AAC/C,SAAO,IAAI,OAAO,IAAI;AACxB;AAEO,SAAS,UACd,SACA,OACuB;AACvB,QAAM,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACxD,QAAM,MAAM,oBAAI,IAAsB;AAEtC,aAAW,OAAO,SAAS;AACzB,UAAM,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC;AAC9B,QAAI,CAAC,KAAM;AACX,UAAM,oBAAoB,KAAK,YAAY,IAAI;AAI/C,QAAI,oBAAoB,EAAG;AAE3B,UAAM,YACH,SAAS,IAAI,IAAI,KAAK,YAAY,SAAS,GAAG,IAAI,IAAI,aACvD;AAEF,QAAI,IAAI,IAAI,GAAG,GAAG;AAAA,MAChB,OAAO,KAAK,OAAO,SAAS,GAAG,IAAI,YAAY,EAAE,IAAI;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import Link from "next/link";
5
+ import { AnimatePresence, motion } from "motion/react";
6
+ import { Button } from "@withpotter/ui-kit";
7
+ import { adminFeedbackApi } from "@withpotter/lib/api";
8
+ import { SPRING } from "../../_fx";
9
+ import { useModuleOn } from "../../_shell/modules-context";
10
+ function PickUp(props) {
11
+ return useModuleOn("feedbackCases") ? /* @__PURE__ */ jsx(PickUpControl, { ...props }) : null;
12
+ }
13
+ function PickUpControl({ id, kind, caseId, canOpen }) {
14
+ const [opened, setOpened] = useState(caseId);
15
+ const [busy, setBusy] = useState(false);
16
+ const pickUp = async () => {
17
+ setBusy(true);
18
+ try {
19
+ const { caseId: made } = kind === "signal" ? await adminFeedbackApi.openCase(id) : await adminFeedbackApi.openCaseFromMessage(id);
20
+ setOpened(made);
21
+ } catch {
22
+ } finally {
23
+ setBusy(false);
24
+ }
25
+ };
26
+ return /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: opened ? /* @__PURE__ */ jsx(
27
+ motion.span,
28
+ {
29
+ initial: { opacity: 0, y: 4 },
30
+ animate: { opacity: 1, y: 0 },
31
+ exit: { opacity: 0, y: -4 },
32
+ transition: SPRING.fast,
33
+ children: /* @__PURE__ */ jsx(
34
+ Link,
35
+ {
36
+ href: `/admin/support?case=${opened}`,
37
+ className: "text-[var(--accent-primary)] hover:underline",
38
+ children: "Picked up"
39
+ }
40
+ )
41
+ },
42
+ "open"
43
+ ) : canOpen ? /* @__PURE__ */ jsx(
44
+ motion.span,
45
+ {
46
+ initial: { opacity: 0 },
47
+ animate: { opacity: 1 },
48
+ exit: { opacity: 0, y: -4 },
49
+ transition: SPRING.fast,
50
+ children: /* @__PURE__ */ jsx(
51
+ Button,
52
+ {
53
+ variant: "ghost",
54
+ size: "sm",
55
+ disabled: busy,
56
+ onClick: () => void pickUp(),
57
+ children: busy ? "Opening\u2026" : "Start a case"
58
+ }
59
+ )
60
+ },
61
+ "idle"
62
+ ) : /* @__PURE__ */ jsx("span", { children: "No workspace to open a case on" }, "none") });
63
+ }
64
+ export {
65
+ PickUp
66
+ };
67
+ //# sourceMappingURL=pick-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/pick-up.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport Link from 'next/link';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Button } from '@withpotter/ui-kit';\nimport { adminFeedbackApi } from '@withpotter/lib/api';\nimport { SPRING } from '../../_fx';\nimport { useModuleOn } from '../../_shell/modules-context';\n\ntype PickUpProps = {\n id: string;\n /** Which list this came from — the two have different endpoints. */\n kind: 'signal' | 'message';\n /** Already picked up, from the server. */\n caseId: string | null;\n /** False where there is no workspace behind it: the server refuses those. */\n canOpen: boolean;\n};\n\n/** Nothing where the engine cannot open a case (no support package). */\nexport function PickUp(props: PickUpProps) {\n return useModuleOn('feedbackCases') ? <PickUpControl {...props} /> : null;\n}\n\n/**\n * Turning one piece of feedback into a conversation, written once.\n *\n * IT WAS WRITTEN TWICE — the same three states, the same busy flag, the same\n * swallowed error, once in the comments panel and once in the messages panel —\n * and the two had already begun to differ in what they said when there was no\n * workspace to open a case on. Two copies of a control that performs a\n * side-effect is how the console ends up doing the same thing differently\n * depending on which list you found the complaint in.\n *\n * AND IT MOVES. The old copies swapped \"Start a case\" for \"Picked up\" between\n * one frame and the next, which is the one thing the house rule about motion\n * exists to stop: a state change nobody saw happen reads as a page that\n * reloaded, not as an act that worked. It crossfades on a short spring now,\n * just long enough to notice that the thing you pressed did something.\n */\nfunction PickUpControl({ id, kind, caseId, canOpen }: PickUpProps) {\n const [opened, setOpened] = useState<string | null>(caseId);\n const [busy, setBusy] = useState(false);\n\n const pickUp = async () => {\n setBusy(true);\n try {\n const { caseId: made } =\n kind === 'signal'\n ? await adminFeedbackApi.openCase(id)\n : await adminFeedbackApi.openCaseFromMessage(id);\n setOpened(made);\n } catch {\n // The row is untouched and the button comes back. Nothing is lost by a\n // failure here, so nothing needs to be said about it.\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <AnimatePresence mode=\"wait\" initial={false}>\n {opened ? (\n <motion.span\n key=\"open\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={SPRING.fast}\n >\n <Link\n href={`/admin/support?case=${opened}`}\n className=\"text-[var(--accent-primary)] hover:underline\"\n >\n Picked up\n </Link>\n </motion.span>\n ) : canOpen ? (\n <motion.span\n key=\"idle\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0, y: -4 }}\n transition={SPRING.fast}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={busy}\n onClick={() => void pickUp()}\n >\n {busy ? 'Opening…' : 'Start a case'}\n </Button>\n </motion.span>\n ) : (\n <span key=\"none\">No workspace to open a case on</span>\n )}\n </AnimatePresence>\n );\n}\n"],"mappings":";AAsBwC;AApBxC,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,SAAS,iBAAiB,cAAc;AACxC,SAAS,cAAc;AACvB,SAAS,wBAAwB;AACjC,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAarB,SAAS,OAAO,OAAoB;AACzC,SAAO,YAAY,eAAe,IAAI,oBAAC,iBAAe,GAAG,OAAO,IAAK;AACvE;AAkBA,SAAS,cAAc,EAAE,IAAI,MAAM,QAAQ,QAAQ,GAAgB;AACjE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAwB,MAAM;AAC1D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AAEtC,QAAM,SAAS,YAAY;AACzB,YAAQ,IAAI;AACZ,QAAI;AACF,YAAM,EAAE,QAAQ,KAAK,IACnB,SAAS,WACL,MAAM,iBAAiB,SAAS,EAAE,IAClC,MAAM,iBAAiB,oBAAoB,EAAE;AACnD,gBAAU,IAAI;AAAA,IAChB,QAAQ;AAAA,IAGR,UAAE;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAEA,SACE,oBAAC,mBAAgB,MAAK,QAAO,SAAS,OACnC,mBACC;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MAEC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC1B,YAAY,OAAO;AAAA,MAEnB;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,uBAAuB,MAAM;AAAA,UACnC,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA;AAAA,IAXI;AAAA,EAYN,IACE,UACF;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MAEC,SAAS,EAAE,SAAS,EAAE;AAAA,MACtB,SAAS,EAAE,SAAS,EAAE;AAAA,MACtB,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC1B,YAAY,OAAO;AAAA,MAEnB;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU;AAAA,UACV,SAAS,MAAM,KAAK,OAAO;AAAA,UAE1B,iBAAO,kBAAa;AAAA;AAAA,MACvB;AAAA;AAAA,IAbI;AAAA,EAcN,IAEA,oBAAC,UAAgB,8CAAP,MAAqC,GAEnD;AAEJ;","names":[]}
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Card, EmptyNote } from "@withpotter/ui-kit";
4
+ import { movementKey } from "./movement";
5
+ const KIND_LABEL = {
6
+ nps: "NPS",
7
+ csat: "Satisfaction",
8
+ ces: "Effort",
9
+ thumb: "Thumbs",
10
+ star: "Stars"
11
+ };
12
+ function ScoresPanel({
13
+ rows,
14
+ moved,
15
+ days,
16
+ loading
17
+ }) {
18
+ if (loading) return null;
19
+ if (!rows.length) {
20
+ return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(EmptyNote, { className: "text-center", children: "Scores land here as merchants answer prompts across the product." }) });
21
+ }
22
+ return /* @__PURE__ */ jsx("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3", children: rows.map((row) => {
23
+ const isNps = row.nps !== null;
24
+ const inverted = row.kind === "ces";
25
+ return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
26
+ /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-[var(--text-tertiary)]", children: row.promptKey }),
27
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
28
+ /* @__PURE__ */ jsx("span", { className: "text-2xl font-medium tabular-nums text-[var(--text-primary)]", children: isNps ? row.nps : row.average }),
29
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-[var(--text-secondary)]", children: [
30
+ isNps ? "NPS" : KIND_LABEL[row.kind] ?? row.kind,
31
+ inverted ? " \xB7 lower is better" : ""
32
+ ] })
33
+ ] }),
34
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-[var(--text-tertiary)]", children: [
35
+ row.responses,
36
+ " ",
37
+ row.responses === 1 ? "answer" : "answers",
38
+ row.commented > 0 && `, ${row.commented} with a comment`
39
+ ] }),
40
+ (() => {
41
+ const move = moved?.get(movementKey(row));
42
+ if (!move || move.delta === 0) return null;
43
+ const better = inverted ? move.delta < 0 : move.delta > 0;
44
+ return /* @__PURE__ */ jsxs(
45
+ "p",
46
+ {
47
+ className: `flex items-center gap-1 text-xs ${better ? "text-[var(--brand-600)]" : "text-[var(--error)]"}`,
48
+ children: [
49
+ move.delta > 0 ? "+" : "",
50
+ move.delta,
51
+ /* @__PURE__ */ jsxs("span", { className: "text-[var(--text-tertiary)]", children: [
52
+ "on the previous",
53
+ days ? ` ${days} days` : " period",
54
+ " (",
55
+ move.previousResponses,
56
+ ")"
57
+ ] })
58
+ ]
59
+ }
60
+ );
61
+ })()
62
+ ] }) }, `${row.promptKey}-${row.kind}`);
63
+ }) });
64
+ }
65
+ export {
66
+ ScoresPanel
67
+ };
68
+ //# sourceMappingURL=scores-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/scores-panel.tsx"],"sourcesContent":["'use client';\n\nimport { Card, EmptyNote } from '@withpotter/ui-kit';\nimport type { FeedbackSignalSummaryRow } from '@withpotter/lib/api';\nimport { movementKey, type Movement } from './movement';\n\nconst KIND_LABEL: Record<string, string> = {\n nps: 'NPS',\n csat: 'Satisfaction',\n ces: 'Effort',\n thumb: 'Thumbs',\n star: 'Stars',\n};\n\n/**\n * What each prompt scored.\n *\n * NPS GETS ITS OWN NUMBER AND NOTHING ELSE DOES. Promoters-minus-detractors is\n * a -100..100 reading of a 0..10 recommendation question and is meaningless\n * applied to a 1..5 satisfaction mean, so the server returns null for every\n * other kind and this shows the mean instead. One column that silently changed\n * meaning by row would be worse than two.\n *\n * EFFORT IS INVERTED and says so, because 2.1 out of 7 is a GOOD effort score\n * and reads as a terrible one next to a satisfaction 4.6. Nothing else on this\n * screen has to carry a caveat; this one does, so it wears it.\n */\nexport function ScoresPanel({\n rows,\n moved,\n days,\n loading,\n}: {\n rows: FeedbackSignalSummaryRow[];\n /** How each figure changed against the window before it. */\n moved?: Map<string, Movement>;\n /** The window being shown, so the movement line can name the one before. */\n days?: number;\n loading?: boolean;\n}) {\n if (loading) return null;\n\n if (!rows.length) {\n return (\n <Card>\n <EmptyNote className=\"text-center\">\n Scores land here as merchants answer prompts across the product.\n </EmptyNote>\n </Card>\n );\n }\n\n return (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {rows.map((row) => {\n const isNps = row.nps !== null;\n const inverted = row.kind === 'ces';\n return (\n <Card key={`${row.promptKey}-${row.kind}`}>\n <div className=\"flex flex-col gap-1\">\n <p className=\"truncate text-xs text-[var(--text-tertiary)]\">\n {row.promptKey}\n </p>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl font-medium tabular-nums text-[var(--text-primary)]\">\n {isNps ? row.nps : row.average}\n </span>\n <span className=\"text-xs text-[var(--text-secondary)]\">\n {isNps ? 'NPS' : (KIND_LABEL[row.kind] ?? row.kind)}\n {inverted ? ' · lower is better' : ''}\n </span>\n </div>\n <p className=\"text-xs text-[var(--text-tertiary)]\">\n {row.responses} {row.responses === 1 ? 'answer' : 'answers'}\n {row.commented > 0 && `, ${row.commented} with a comment`}\n </p>\n {/* WHICH WAY IT WENT, coloured by whether it is good news.\n Effort is the one scale where down is the good news, so a\n plus on a CES card is coloured as the bad news it is. */}\n {(() => {\n const move = moved?.get(movementKey(row));\n if (!move || move.delta === 0) return null;\n const better = inverted ? move.delta < 0 : move.delta > 0;\n return (\n <p\n className={`flex items-center gap-1 text-xs ${\n better ? 'text-[var(--brand-600)]' : 'text-[var(--error)]'\n }`}\n >\n {move.delta > 0 ? '+' : ''}\n {move.delta}\n <span className=\"text-[var(--text-tertiary)]\">\n on the previous{days ? ` ${days} days` : ' period'} (\n {move.previousResponses})\n </span>\n </p>\n );\n })()}\n </div>\n </Card>\n );\n })}\n </div>\n );\n}\n"],"mappings":";AA6CQ,cAsBQ,YAtBR;AA3CR,SAAS,MAAM,iBAAiB;AAEhC,SAAS,mBAAkC;AAE3C,MAAM,aAAqC;AAAA,EACzC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AACR;AAeO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,MAAI,QAAS,QAAO;AAEpB,MAAI,CAAC,KAAK,QAAQ;AAChB,WACE,oBAAC,QACC,8BAAC,aAAU,WAAU,eAAc,8EAEnC,GACF;AAAA,EAEJ;AAEA,SACE,oBAAC,SAAI,WAAU,4CACZ,eAAK,IAAI,CAAC,QAAQ;AACjB,UAAM,QAAQ,IAAI,QAAQ;AAC1B,UAAM,WAAW,IAAI,SAAS;AAC9B,WACE,oBAAC,QACC,+BAAC,SAAI,WAAU,uBACb;AAAA,0BAAC,OAAE,WAAU,gDACV,cAAI,WACP;AAAA,MACA,qBAAC,SAAI,WAAU,6BACb;AAAA,4BAAC,UAAK,WAAU,gEACb,kBAAQ,IAAI,MAAM,IAAI,SACzB;AAAA,QACA,qBAAC,UAAK,WAAU,wCACb;AAAA,kBAAQ,QAAS,WAAW,IAAI,IAAI,KAAK,IAAI;AAAA,UAC7C,WAAW,0BAAuB;AAAA,WACrC;AAAA,SACF;AAAA,MACA,qBAAC,OAAE,WAAU,uCACV;AAAA,YAAI;AAAA,QAAU;AAAA,QAAE,IAAI,cAAc,IAAI,WAAW;AAAA,QACjD,IAAI,YAAY,KAAK,KAAK,IAAI,SAAS;AAAA,SAC1C;AAAA,OAIE,MAAM;AACN,cAAM,OAAO,OAAO,IAAI,YAAY,GAAG,CAAC;AACxC,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG,QAAO;AACtC,cAAM,SAAS,WAAW,KAAK,QAAQ,IAAI,KAAK,QAAQ;AACxD,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,mCACT,SAAS,4BAA4B,qBACvC;AAAA,YAEC;AAAA,mBAAK,QAAQ,IAAI,MAAM;AAAA,cACvB,KAAK;AAAA,cACN,qBAAC,UAAK,WAAU,+BAA8B;AAAA;AAAA,gBAC5B,OAAO,IAAI,IAAI,UAAU;AAAA,gBAAU;AAAA,gBAClD,KAAK;AAAA,gBAAkB;AAAA,iBAC1B;AAAA;AAAA;AAAA,QACF;AAAA,MAEJ,GAAG;AAAA,OACL,KAxCS,GAAG,IAAI,SAAS,IAAI,IAAI,IAAI,EAyCvC;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Banner, Button } from "@withpotter/ui-kit";
5
+ import { PageTabs, useTabParam } from "../../_ui";
6
+ import { SectionHeader } from "../../audit/section-header";
7
+ import { CommentsPanel } from "./comments-panel";
8
+ import { HealthPanel } from "./health-panel";
9
+ import { MessagesPanel } from "./messages-panel";
10
+ import { movements } from "./movement";
11
+ import { ScoresPanel } from "./scores-panel";
12
+ import { MESSAGE_LIMIT, useFeedbackSignals } from "./use-feedback-signals";
13
+ const TABS = [
14
+ { id: "scores", label: "Scores" },
15
+ { id: "messages", label: "What they sent" },
16
+ { id: "health", label: "Prompt health" }
17
+ ];
18
+ const KEYS = TABS.map((t) => t.id);
19
+ const WINDOWS = [30, 90, 365];
20
+ function SignalsWorkspace() {
21
+ const [days, setDays] = useState(90);
22
+ const [tab, setTab] = useTabParam(KEYS);
23
+ const data = useFeedbackSignals(days);
24
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
25
+ /* @__PURE__ */ jsx(
26
+ SectionHeader,
27
+ {
28
+ title: "Feedback",
29
+ description: "Every score and comment merchants have left.",
30
+ actions: /* @__PURE__ */ jsx("div", { role: "group", "aria-label": "Time period", className: "adm-segments", children: WINDOWS.map((n) => /* @__PURE__ */ jsx(
31
+ "button",
32
+ {
33
+ type: "button",
34
+ className: "adm-segment",
35
+ "aria-pressed": days === n,
36
+ onClick: () => setDays(n),
37
+ children: n === 365 ? "1 year" : `${n} days`
38
+ },
39
+ n
40
+ )) })
41
+ }
42
+ ),
43
+ /* @__PURE__ */ jsx(PageTabs, { tabs: TABS, active: tab, onChange: setTab }),
44
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 pb-10", children: [
45
+ !data.loading && data.failed.length > 0 && /* @__PURE__ */ jsxs(
46
+ Banner,
47
+ {
48
+ tone: "error",
49
+ title: "Some of this did not load",
50
+ action: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: data.reload, children: "Retry" }),
51
+ children: [
52
+ data.failed.join(", "),
53
+ " could not be read, so those panels are empty because we could not ask \u2014 not because nothing is there."
54
+ ]
55
+ }
56
+ ),
57
+ tab === "scores" && /* @__PURE__ */ jsxs(Fragment, { children: [
58
+ /* @__PURE__ */ jsx(
59
+ ScoresPanel,
60
+ {
61
+ rows: data.summary,
62
+ moved: movements(data.summary, data.wider),
63
+ days,
64
+ loading: data.loading
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsx(CommentsPanel, { rows: data.comments })
68
+ ] }),
69
+ tab === "health" && /* @__PURE__ */ jsx(HealthPanel, { rows: data.health }),
70
+ tab === "messages" && /* @__PURE__ */ jsx(
71
+ MessagesPanel,
72
+ {
73
+ rows: data.messages,
74
+ limit: MESSAGE_LIMIT,
75
+ loading: data.loading
76
+ }
77
+ )
78
+ ] })
79
+ ] });
80
+ }
81
+ export {
82
+ SignalsWorkspace
83
+ };
84
+ //# sourceMappingURL=signals-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/admin/feedback-signals/_components/signals-workspace.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Banner, Button } from '@withpotter/ui-kit';\nimport { PageTabs, useTabParam } from '../../_ui';\nimport { SectionHeader } from '../../audit/section-header';\nimport { CommentsPanel } from './comments-panel';\nimport { HealthPanel } from './health-panel';\nimport { MessagesPanel } from './messages-panel';\nimport { movements } from './movement';\nimport { ScoresPanel } from './scores-panel';\nimport { MESSAGE_LIMIT, useFeedbackSignals } from './use-feedback-signals';\n\n/*\n * FOUR PANELS WAS A SCROLL, NOT A SCREEN. Scores, health, comments and\n * messages stacked down one page is unusable at four hundred rows, so they\n * are tabs under the header (`?tab=`, linkable). Scores keeps its comments: a\n * number and the sentences behind it are one thought.\n */\nconst TABS = [\n { id: 'scores', label: 'Scores' },\n { id: 'messages', label: 'What they sent' },\n { id: 'health', label: 'Prompt health' },\n] as const;\nconst KEYS = TABS.map((t) => t.id);\n\n/** The feedback API reads a trailing window in days, capped at a year. */\nconst WINDOWS = [30, 90, 365] as const;\n\nexport function SignalsWorkspace() {\n const [days, setDays] = useState(90);\n const [tab, setTab] = useTabParam(KEYS);\n const data = useFeedbackSignals(days);\n\n return (\n <>\n <SectionHeader\n title=\"Feedback\"\n description=\"Every score and comment merchants have left.\"\n actions={\n <div role=\"group\" aria-label=\"Time period\" className=\"adm-segments\">\n {WINDOWS.map((n) => (\n <button\n key={n}\n type=\"button\"\n className=\"adm-segment\"\n aria-pressed={days === n}\n onClick={() => setDays(n)}\n >\n {n === 365 ? '1 year' : `${n} days`}\n </button>\n ))}\n </div>\n }\n />\n <PageTabs tabs={TABS} active={tab} onChange={setTab} />\n\n <div className=\"flex flex-col gap-4 pb-10\">\n {/* THE READ THAT DID NOT ANSWER, named, above whichever tab is open:\n a failed read empties the panel you are not looking at as readily\n as the one you are, and \"Nothing sent yet\" under a broken request\n is the console telling a lie in the product's own voice. */}\n {!data.loading && data.failed.length > 0 && (\n <Banner\n tone=\"error\"\n title=\"Some of this did not load\"\n action={\n <Button size=\"sm\" variant=\"secondary\" onClick={data.reload}>\n Retry\n </Button>\n }\n >\n {data.failed.join(', ')} could not be read, so those panels are\n empty because we could not ask — not because nothing is there.\n </Banner>\n )}\n {tab === 'scores' && (\n <>\n <ScoresPanel\n rows={data.summary}\n moved={movements(data.summary, data.wider)}\n days={days}\n loading={data.loading}\n />\n <CommentsPanel rows={data.comments} />\n </>\n )}\n {tab === 'health' && <HealthPanel rows={data.health} />}\n {tab === 'messages' && (\n <MessagesPanel\n rows={data.messages}\n limit={MESSAGE_LIMIT}\n loading={data.loading}\n />\n )}\n </div>\n </>\n );\n}\n"],"mappings":";AA0Cc,SAmCJ,UAnCI,KAqBJ,YArBI;AAxCd,SAAS,gBAAgB;AACzB,SAAS,QAAQ,cAAc;AAC/B,SAAS,UAAU,mBAAmB;AACtC,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,eAAe,0BAA0B;AAQlD,MAAM,OAAO;AAAA,EACX,EAAE,IAAI,UAAU,OAAO,SAAS;AAAA,EAChC,EAAE,IAAI,YAAY,OAAO,iBAAiB;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,gBAAgB;AACzC;AACA,MAAM,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE;AAGjC,MAAM,UAAU,CAAC,IAAI,IAAI,GAAG;AAErB,SAAS,mBAAmB;AACjC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE;AACnC,QAAM,CAAC,KAAK,MAAM,IAAI,YAAY,IAAI;AACtC,QAAM,OAAO,mBAAmB,IAAI;AAEpC,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,aAAY;AAAA,QACZ,SACE,oBAAC,SAAI,MAAK,SAAQ,cAAW,eAAc,WAAU,gBAClD,kBAAQ,IAAI,CAAC,MACZ;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,gBAAc,SAAS;AAAA,YACvB,SAAS,MAAM,QAAQ,CAAC;AAAA,YAEvB,gBAAM,MAAM,WAAW,GAAG,CAAC;AAAA;AAAA,UANvB;AAAA,QAOP,CACD,GACH;AAAA;AAAA,IAEJ;AAAA,IACA,oBAAC,YAAS,MAAM,MAAM,QAAQ,KAAK,UAAU,QAAQ;AAAA,IAErD,qBAAC,SAAI,WAAU,6BAKZ;AAAA,OAAC,KAAK,WAAW,KAAK,OAAO,SAAS,KACrC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAM;AAAA,UACN,QACE,oBAAC,UAAO,MAAK,MAAK,SAAQ,aAAY,SAAS,KAAK,QAAQ,mBAE5D;AAAA,UAGD;AAAA,iBAAK,OAAO,KAAK,IAAI;AAAA,YAAE;AAAA;AAAA;AAAA,MAE1B;AAAA,MAED,QAAQ,YACP,iCACE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,KAAK;AAAA,YACX,OAAO,UAAU,KAAK,SAAS,KAAK,KAAK;AAAA,YACzC;AAAA,YACA,SAAS,KAAK;AAAA;AAAA,QAChB;AAAA,QACA,oBAAC,iBAAc,MAAM,KAAK,UAAU;AAAA,SACtC;AAAA,MAED,QAAQ,YAAY,oBAAC,eAAY,MAAM,KAAK,QAAQ;AAAA,MACpD,QAAQ,cACP;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,OAAO;AAAA,UACP,SAAS,KAAK;AAAA;AAAA,MAChB;AAAA,OAEJ;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { adminFeedbackApi } from "@withpotter/lib/api";
4
+ const MESSAGE_LIMIT = 100;
5
+ async function readAll(days) {
6
+ const [s, wide, c, h, m] = await Promise.allSettled([
7
+ adminFeedbackApi.summary(days),
8
+ adminFeedbackApi.summary(days * 2),
9
+ adminFeedbackApi.comments(days),
10
+ adminFeedbackApi.promptHealth(),
11
+ adminFeedbackApi.messages(days, MESSAGE_LIMIT)
12
+ ]);
13
+ const list = (r) => r.status === "fulfilled" && Array.isArray(r.value) ? r.value : [];
14
+ const failed = [
15
+ [s, "scores"],
16
+ [wide, "scores"],
17
+ [c, "comments"],
18
+ [h, "prompt health"],
19
+ [m, "messages"]
20
+ ].filter(([r]) => r.status === "rejected").map(([, name]) => name).filter((name, i, all) => all.indexOf(name) === i);
21
+ return {
22
+ summary: list(s),
23
+ wider: list(wide),
24
+ comments: list(c),
25
+ health: list(h),
26
+ messages: list(m),
27
+ failed
28
+ };
29
+ }
30
+ function useFeedbackSignals(days) {
31
+ const query = useQuery({
32
+ queryKey: ["platform-admin", "feedback-signals", days],
33
+ queryFn: () => readAll(days)
34
+ });
35
+ const data = query.data;
36
+ return {
37
+ summary: data?.summary ?? [],
38
+ wider: data?.wider ?? [],
39
+ comments: data?.comments ?? [],
40
+ messages: data?.messages ?? [],
41
+ health: data?.health ?? [],
42
+ failed: data?.failed ?? [],
43
+ loading: query.isLoading,
44
+ reload: () => void query.refetch()
45
+ };
46
+ }
47
+ export {
48
+ MESSAGE_LIMIT,
49
+ useFeedbackSignals
50
+ };
51
+ //# sourceMappingURL=use-feedback-signals.js.map