@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.
- package/dist/admin/_fx/entity-avatar.js +63 -0
- package/dist/admin/_fx/entity-avatar.js.map +1 -0
- package/dist/admin/_fx/index.js +14 -0
- package/dist/admin/_fx/index.js.map +1 -0
- package/dist/admin/_fx/motion.js +59 -0
- package/dist/admin/_fx/motion.js.map +1 -0
- package/dist/admin/_fx/page-transition.js +23 -0
- package/dist/admin/_fx/page-transition.js.map +1 -0
- package/dist/admin/_fx/tones.js +28 -0
- package/dist/admin/_fx/tones.js.map +1 -0
- package/dist/admin/_fx.js +1 -0
- package/dist/admin/_inbox/nav-badge.js +27 -0
- package/dist/admin/_inbox/nav-badge.js.map +1 -0
- package/dist/admin/_inbox/nav-badge.module.css +15 -0
- package/dist/admin/_inbox/use-admin-inbox.js +118 -0
- package/dist/admin/_inbox/use-admin-inbox.js.map +1 -0
- package/dist/admin/_money/business-ledger.js +65 -0
- package/dist/admin/_money/business-ledger.js.map +1 -0
- package/dist/admin/_money/business-picker.js +53 -0
- package/dist/admin/_money/business-picker.js.map +1 -0
- package/dist/admin/_money/cash-errors.js +42 -0
- package/dist/admin/_money/cash-errors.js.map +1 -0
- package/dist/admin/_money/cash-postings.js +93 -0
- package/dist/admin/_money/cash-postings.js.map +1 -0
- package/dist/admin/_money/cash.module.css +128 -0
- package/dist/admin/_money/finder-format.js +42 -0
- package/dist/admin/_money/finder-format.js.map +1 -0
- package/dist/admin/_money/finder-row.js +51 -0
- package/dist/admin/_money/finder-row.js.map +1 -0
- package/dist/admin/_money/format.js +62 -0
- package/dist/admin/_money/format.js.map +1 -0
- package/dist/admin/_money/ledger-activity.js +90 -0
- package/dist/admin/_money/ledger-activity.js.map +1 -0
- package/dist/admin/_money/ledger-balances.js +32 -0
- package/dist/admin/_money/ledger-balances.js.map +1 -0
- package/dist/admin/_money/ledger-body.js +62 -0
- package/dist/admin/_money/ledger-body.js.map +1 -0
- package/dist/admin/_money/ledger-holds.js +70 -0
- package/dist/admin/_money/ledger-holds.js.map +1 -0
- package/dist/admin/_money/ledger-statement.js +120 -0
- package/dist/admin/_money/ledger-statement.js.map +1 -0
- package/dist/admin/_money/ledger.js +94 -0
- package/dist/admin/_money/ledger.js.map +1 -0
- package/dist/admin/_money/ledger.module.css +88 -0
- package/dist/admin/_money/money-section.js +19 -0
- package/dist/admin/_money/money-section.js.map +1 -0
- package/dist/admin/_money/open-as-owner.js +32 -0
- package/dist/admin/_money/open-as-owner.js.map +1 -0
- package/dist/admin/_money/page.module.css +149 -0
- package/dist/admin/_money/permissions.js +46 -0
- package/dist/admin/_money/permissions.js.map +1 -0
- package/dist/admin/_money/proposal-status.js +20 -0
- package/dist/admin/_money/proposal-status.js.map +1 -0
- package/dist/admin/_money/proposal-store.js +65 -0
- package/dist/admin/_money/proposal-store.js.map +1 -0
- package/dist/admin/_money/propose-dialog.js +124 -0
- package/dist/admin/_money/propose-dialog.js.map +1 -0
- package/dist/admin/_money/propose-draft.js +40 -0
- package/dist/admin/_money/propose-draft.js.map +1 -0
- package/dist/admin/_money/propose-fields.js +113 -0
- package/dist/admin/_money/propose-fields.js.map +1 -0
- package/dist/admin/_money/propose-steps.js +73 -0
- package/dist/admin/_money/propose-steps.js.map +1 -0
- package/dist/admin/_money/propose.module.css +105 -0
- package/dist/admin/_money/review-dialog.js +149 -0
- package/dist/admin/_money/review-dialog.js.map +1 -0
- package/dist/admin/_money/review-rules.js +31 -0
- package/dist/admin/_money/review-rules.js.map +1 -0
- package/dist/admin/_money/save-csv.js +12 -0
- package/dist/admin/_money/save-csv.js.map +1 -0
- package/dist/admin/_money/skeleton-rows.js +10 -0
- package/dist/admin/_money/skeleton-rows.js.map +1 -0
- package/dist/admin/_money/statement-export.js +57 -0
- package/dist/admin/_money/statement-export.js.map +1 -0
- package/dist/admin/_money/tenant-param.js +26 -0
- package/dist/admin/_money/tenant-param.js.map +1 -0
- package/dist/admin/_money/use-ledger.js +47 -0
- package/dist/admin/_money/use-ledger.js.map +1 -0
- package/dist/admin/_money/waiting-proposals.js +89 -0
- package/dist/admin/_money/waiting-proposals.js.map +1 -0
- package/dist/admin/_overview/activation-panel.js +55 -0
- package/dist/admin/_overview/activation-panel.js.map +1 -0
- package/dist/admin/_overview/attention-groups.js +83 -0
- package/dist/admin/_overview/attention-groups.js.map +1 -0
- package/dist/admin/_overview/attention-panel.js +58 -0
- package/dist/admin/_overview/attention-panel.js.map +1 -0
- package/dist/admin/_overview/attention.module.css +109 -0
- package/dist/admin/_overview/control-room.js +88 -0
- package/dist/admin/_overview/control-room.js.map +1 -0
- package/dist/admin/_overview/control-room.module.css +20 -0
- package/dist/admin/_overview/figures.module.css +155 -0
- package/dist/admin/_overview/kpi-row.js +77 -0
- package/dist/admin/_overview/kpi-row.js.map +1 -0
- package/dist/admin/_overview/leaders-panel.js +71 -0
- package/dist/admin/_overview/leaders-panel.js.map +1 -0
- package/dist/admin/_overview/overdue-outstanding.js +37 -0
- package/dist/admin/_overview/overdue-outstanding.js.map +1 -0
- package/dist/admin/_overview/portfolio-panel.js +69 -0
- package/dist/admin/_overview/portfolio-panel.js.map +1 -0
- package/dist/admin/_overview/position-panel.js +66 -0
- package/dist/admin/_overview/position-panel.js.map +1 -0
- package/dist/admin/_overview/position.module.css +52 -0
- package/dist/admin/_overview/use-waiting-cases.js +17 -0
- package/dist/admin/_overview/use-waiting-cases.js.map +1 -0
- package/dist/admin/_pos/action-dialog.js +66 -0
- package/dist/admin/_pos/action-dialog.js.map +1 -0
- package/dist/admin/_pos/close-shift-dialog.js +62 -0
- package/dist/admin/_pos/close-shift-dialog.js.map +1 -0
- package/dist/admin/_pos/pos-figures.js +82 -0
- package/dist/admin/_pos/pos-figures.js.map +1 -0
- package/dist/admin/_pos/pos-money.js +14 -0
- package/dist/admin/_pos/pos-money.js.map +1 -0
- package/dist/admin/_pos/pos-parts.js +68 -0
- package/dist/admin/_pos/pos-parts.js.map +1 -0
- package/dist/admin/_pos/pos-rules.js +43 -0
- package/dist/admin/_pos/pos-rules.js.map +1 -0
- package/dist/admin/_pos/pos-words.js +101 -0
- package/dist/admin/_pos/pos-words.js.map +1 -0
- package/dist/admin/_pos/pos.module.css +154 -0
- package/dist/admin/_pos/shift-row.js +107 -0
- package/dist/admin/_pos/shift-row.js.map +1 -0
- package/dist/admin/_pos/shifts-table.js +72 -0
- package/dist/admin/_pos/shifts-table.js.map +1 -0
- package/dist/admin/_pos/terminal-actions.js +104 -0
- package/dist/admin/_pos/terminal-actions.js.map +1 -0
- package/dist/admin/_pos/use-pos-access.js +20 -0
- package/dist/admin/_pos/use-pos-access.js.map +1 -0
- package/dist/admin/_pos/use-pos-period.js +39 -0
- package/dist/admin/_pos/use-pos-period.js.map +1 -0
- package/dist/admin/_pos/use-pos.js +89 -0
- package/dist/admin/_pos/use-pos.js.map +1 -0
- package/dist/admin/_pos/use-tenant-param.js +20 -0
- package/dist/admin/_pos/use-tenant-param.js.map +1 -0
- package/dist/admin/_settings/index.js +28 -0
- package/dist/admin/_settings/index.js.map +1 -0
- package/dist/admin/_settings/live-announcer.js +35 -0
- package/dist/admin/_settings/live-announcer.js.map +1 -0
- package/dist/admin/_settings/schema.js +82 -0
- package/dist/admin/_settings/schema.js.map +1 -0
- package/dist/admin/_settings/store.js +82 -0
- package/dist/admin/_settings/store.js.map +1 -0
- package/dist/admin/_settings/use-apply-preferences.js +38 -0
- package/dist/admin/_settings/use-apply-preferences.js.map +1 -0
- package/dist/admin/_settings/use-start-page.js +20 -0
- package/dist/admin/_settings/use-start-page.js.map +1 -0
- package/dist/admin/_settings.js +1 -0
- package/dist/admin/_shell/admin-brand.js +15 -0
- package/dist/admin/_shell/admin-brand.js.map +1 -0
- package/dist/admin/_shell/brand.module.css +147 -0
- package/dist/admin/_shell/command-palette.js +103 -0
- package/dist/admin/_shell/command-palette.js.map +1 -0
- package/dist/admin/_shell/command-palette.module.css +109 -0
- package/dist/admin/_shell/frame.module.css +92 -0
- package/dist/admin/_shell/inbox-bell.js +74 -0
- package/dist/admin/_shell/inbox-bell.js.map +1 -0
- package/dist/admin/_shell/inbox.module.css +107 -0
- package/dist/admin/_shell/menus.module.css +55 -0
- package/dist/admin/_shell/modules-context.js +17 -0
- package/dist/admin/_shell/modules-context.js.map +1 -0
- package/dist/admin/_shell/nav-config.js +168 -0
- package/dist/admin/_shell/nav-config.js.map +1 -0
- package/dist/admin/_shell/nav-filter.js +45 -0
- package/dist/admin/_shell/nav-filter.js.map +1 -0
- package/dist/admin/_shell/nav-fold.js +14 -0
- package/dist/admin/_shell/nav-fold.js.map +1 -0
- package/dist/admin/_shell/nav-group.js +78 -0
- package/dist/admin/_shell/nav-group.js.map +1 -0
- package/dist/admin/_shell/nav-modules.js +36 -0
- package/dist/admin/_shell/nav-modules.js.map +1 -0
- package/dist/admin/_shell/nav-row.js +62 -0
- package/dist/admin/_shell/nav-row.js.map +1 -0
- package/dist/admin/_shell/seam-toggle.js +26 -0
- package/dist/admin/_shell/seam-toggle.js.map +1 -0
- package/dist/admin/_shell/section-tabs.js +28 -0
- package/dist/admin/_shell/section-tabs.js.map +1 -0
- package/dist/admin/_shell/shell-skeleton.js +30 -0
- package/dist/admin/_shell/shell-skeleton.js.map +1 -0
- package/dist/admin/_shell/shell-skeleton.module.css +57 -0
- package/dist/admin/_shell/sidebar-footer.js +85 -0
- package/dist/admin/_shell/sidebar-footer.js.map +1 -0
- package/dist/admin/_shell/sidebar-footer.module.css +144 -0
- package/dist/admin/_shell/sidebar.js +87 -0
- package/dist/admin/_shell/sidebar.js.map +1 -0
- package/dist/admin/_shell/sidebar.module.css +259 -0
- package/dist/admin/_shell/sign-out.js +14 -0
- package/dist/admin/_shell/sign-out.js.map +1 -0
- package/dist/admin/_shell/system-status-panel.js +100 -0
- package/dist/admin/_shell/system-status-panel.js.map +1 -0
- package/dist/admin/_shell/system-status-panel.module.css +195 -0
- package/dist/admin/_shell/topbar.js +26 -0
- package/dist/admin/_shell/topbar.js.map +1 -0
- package/dist/admin/_shell/topbar.module.css +84 -0
- package/dist/admin/_shell/use-admin-query-defaults.js +18 -0
- package/dist/admin/_shell/use-admin-query-defaults.js.map +1 -0
- package/dist/admin/_shell/use-fluid-hover.js +62 -0
- package/dist/admin/_shell/use-fluid-hover.js.map +1 -0
- package/dist/admin/_shell/use-open-groups.js +64 -0
- package/dist/admin/_shell/use-open-groups.js.map +1 -0
- package/dist/admin/_shell/use-shell-prefs.js +87 -0
- package/dist/admin/_shell/use-shell-prefs.js.map +1 -0
- package/dist/admin/_shell/user-menu.js +80 -0
- package/dist/admin/_shell/user-menu.js.map +1 -0
- package/dist/admin/_ui/admin.css +801 -0
- package/dist/admin/_ui/chart-colors.js +46 -0
- package/dist/admin/_ui/chart-colors.js.map +1 -0
- package/dist/admin/_ui/column-picker.js +77 -0
- package/dist/admin/_ui/column-picker.js.map +1 -0
- package/dist/admin/_ui/country-label.js +42 -0
- package/dist/admin/_ui/country-label.js.map +1 -0
- package/dist/admin/_ui/country-label.module.css +31 -0
- package/dist/admin/_ui/country-text.js +21 -0
- package/dist/admin/_ui/country-text.js.map +1 -0
- package/dist/admin/_ui/currency-filter-model.js +53 -0
- package/dist/admin/_ui/currency-filter-model.js.map +1 -0
- package/dist/admin/_ui/currency-filter.js +64 -0
- package/dist/admin/_ui/currency-filter.js.map +1 -0
- package/dist/admin/_ui/data-table.js +107 -0
- package/dist/admin/_ui/data-table.js.map +1 -0
- package/dist/admin/_ui/donut-chart.js +193 -0
- package/dist/admin/_ui/donut-chart.js.map +1 -0
- package/dist/admin/_ui/drawer.js +82 -0
- package/dist/admin/_ui/drawer.js.map +1 -0
- package/dist/admin/_ui/drawer.module.css +157 -0
- package/dist/admin/_ui/empty-state.js +47 -0
- package/dist/admin/_ui/empty-state.js.map +1 -0
- package/dist/admin/_ui/filter-bar.js +24 -0
- package/dist/admin/_ui/filter-bar.js.map +1 -0
- package/dist/admin/_ui/filter-dates.js +67 -0
- package/dist/admin/_ui/filter-dates.js.map +1 -0
- package/dist/admin/_ui/filters.js +93 -0
- package/dist/admin/_ui/filters.js.map +1 -0
- package/dist/admin/_ui/filters.module.css +88 -0
- package/dist/admin/_ui/index.js +120 -0
- package/dist/admin/_ui/index.js.map +1 -0
- package/dist/admin/_ui/list-card.js +119 -0
- package/dist/admin/_ui/list-card.js.map +1 -0
- package/dist/admin/_ui/list-card.module.css +96 -0
- package/dist/admin/_ui/loading.js +29 -0
- package/dist/admin/_ui/loading.js.map +1 -0
- package/dist/admin/_ui/money-lines.js +19 -0
- package/dist/admin/_ui/money-lines.js.map +1 -0
- package/dist/admin/_ui/money-lines.module.css +4 -0
- package/dist/admin/_ui/money-view.js +43 -0
- package/dist/admin/_ui/money-view.js.map +1 -0
- package/dist/admin/_ui/motion.css +22 -0
- package/dist/admin/_ui/page-header.js +54 -0
- package/dist/admin/_ui/page-header.js.map +1 -0
- package/dist/admin/_ui/page-header.module.css +45 -0
- package/dist/admin/_ui/page-tabs.js +46 -0
- package/dist/admin/_ui/page-tabs.js.map +1 -0
- package/dist/admin/_ui/pagination.js +68 -0
- package/dist/admin/_ui/pagination.js.map +1 -0
- package/dist/admin/_ui/panel.js +38 -0
- package/dist/admin/_ui/panel.js.map +1 -0
- package/dist/admin/_ui/panel.module.css +87 -0
- package/dist/admin/_ui/period-selector.js +81 -0
- package/dist/admin/_ui/period-selector.js.map +1 -0
- package/dist/admin/_ui/period.js +52 -0
- package/dist/admin/_ui/period.js.map +1 -0
- package/dist/admin/_ui/period.module.css +43 -0
- package/dist/admin/_ui/preferences.css +121 -0
- package/dist/admin/_ui/prefs.js +62 -0
- package/dist/admin/_ui/prefs.js.map +1 -0
- package/dist/admin/_ui/skeleton.js +26 -0
- package/dist/admin/_ui/skeleton.js.map +1 -0
- package/dist/admin/_ui/sparkline.js +56 -0
- package/dist/admin/_ui/sparkline.js.map +1 -0
- package/dist/admin/_ui/stat-card.js +85 -0
- package/dist/admin/_ui/stat-card.js.map +1 -0
- package/dist/admin/_ui/styles.js +74 -0
- package/dist/admin/_ui/styles.js.map +1 -0
- package/dist/admin/_ui/tint.css +87 -0
- package/dist/admin/_ui/trend.js +58 -0
- package/dist/admin/_ui/trend.js.map +1 -0
- package/dist/admin/_ui/workspace-tab.js +25 -0
- package/dist/admin/_ui/workspace-tab.js.map +1 -0
- package/dist/admin/_ui.js +1 -0
- package/dist/admin/accounts/account-activity.js +64 -0
- package/dist/admin/accounts/account-activity.js.map +1 -0
- package/dist/admin/accounts/account-activity.module.css +83 -0
- package/dist/admin/accounts/account-panel.js +177 -0
- package/dist/admin/accounts/account-panel.js.map +1 -0
- package/dist/admin/accounts/account-panel.module.css +213 -0
- package/dist/admin/accounts/account-row.js +122 -0
- package/dist/admin/accounts/account-row.js.map +1 -0
- package/dist/admin/accounts/account-sessions.js +70 -0
- package/dist/admin/accounts/account-sessions.js.map +1 -0
- package/dist/admin/accounts/account-sessions.module.css +55 -0
- package/dist/admin/accounts/account-stage-filter.js +29 -0
- package/dist/admin/accounts/account-stage-filter.js.map +1 -0
- package/dist/admin/accounts/account-stage.js +81 -0
- package/dist/admin/accounts/account-stage.js.map +1 -0
- package/dist/admin/accounts/account-vitals.js +46 -0
- package/dist/admin/accounts/account-vitals.js.map +1 -0
- package/dist/admin/accounts/account-workspaces.js +56 -0
- package/dist/admin/accounts/account-workspaces.js.map +1 -0
- package/dist/admin/accounts/accounts-analytics.js +113 -0
- package/dist/admin/accounts/accounts-analytics.js.map +1 -0
- package/dist/admin/accounts/accounts-kpis.js +70 -0
- package/dist/admin/accounts/accounts-kpis.js.map +1 -0
- package/dist/admin/accounts/accounts-table.js +266 -0
- package/dist/admin/accounts/accounts-table.js.map +1 -0
- package/dist/admin/accounts/accounts-workspace.js +85 -0
- package/dist/admin/accounts/accounts-workspace.js.map +1 -0
- package/dist/admin/accounts/hint.js +12 -0
- package/dist/admin/accounts/hint.js.map +1 -0
- package/dist/admin/accounts/owner-session.js +30 -0
- package/dist/admin/accounts/owner-session.js.map +1 -0
- package/dist/admin/accounts/page.js +11 -0
- package/dist/admin/accounts/page.js.map +1 -0
- package/dist/admin/accounts/relative-time.js +28 -0
- package/dist/admin/accounts/relative-time.js.map +1 -0
- package/dist/admin/accounts/rows.module.css +84 -0
- package/dist/admin/accounts/top-accounts.js +56 -0
- package/dist/admin/accounts/top-accounts.js.map +1 -0
- package/dist/admin/accounts/use-account-actions.js +42 -0
- package/dist/admin/accounts/use-account-actions.js.map +1 -0
- package/dist/admin/accounts/use-account-activity.js +37 -0
- package/dist/admin/accounts/use-account-activity.js.map +1 -0
- package/dist/admin/admins/access-dialog.js +130 -0
- package/dist/admin/admins/access-dialog.js.map +1 -0
- package/dist/admin/admins/admin-row.js +74 -0
- package/dist/admin/admins/admin-row.js.map +1 -0
- package/dist/admin/admins/admins-activity.js +28 -0
- package/dist/admin/admins/admins-activity.js.map +1 -0
- package/dist/admin/admins/admins-analytics.js +116 -0
- package/dist/admin/admins/admins-analytics.js.map +1 -0
- package/dist/admin/admins/admins-kpis.js +77 -0
- package/dist/admin/admins/admins-kpis.js.map +1 -0
- package/dist/admin/admins/admins-table.js +75 -0
- package/dist/admin/admins/admins-table.js.map +1 -0
- package/dist/admin/admins/admins-workspace.js +109 -0
- package/dist/admin/admins/admins-workspace.js.map +1 -0
- package/dist/admin/admins/admins.module.css +191 -0
- package/dist/admin/admins/invite-dialog.js +134 -0
- package/dist/admin/admins/invite-dialog.js.map +1 -0
- package/dist/admin/admins/page.js +11 -0
- package/dist/admin/admins/page.js.map +1 -0
- package/dist/admin/admins/recent-activity.js +38 -0
- package/dist/admin/admins/recent-activity.js.map +1 -0
- package/dist/admin/admins/recent-activity.module.css +60 -0
- package/dist/admin/admins/role-choices.js +27 -0
- package/dist/admin/admins/role-choices.js.map +1 -0
- package/dist/admin/admins/secret-field.js +60 -0
- package/dist/admin/admins/secret-field.js.map +1 -0
- package/dist/admin/admins/temp-password-dialog.js +39 -0
- package/dist/admin/admins/temp-password-dialog.js.map +1 -0
- package/dist/admin/admins/use-admin-actions.js +57 -0
- package/dist/admin/admins/use-admin-actions.js.map +1 -0
- package/dist/admin/audit/action-meta.js +26 -0
- package/dist/admin/audit/action-meta.js.map +1 -0
- package/dist/admin/audit/activity-chart.js +117 -0
- package/dist/admin/audit/activity-chart.js.map +1 -0
- package/dist/admin/audit/activity-chart.module.css +44 -0
- package/dist/admin/audit/audit-analytics.js +146 -0
- package/dist/admin/audit/audit-analytics.js.map +1 -0
- package/dist/admin/audit/audit-filters.js +78 -0
- package/dist/admin/audit/audit-filters.js.map +1 -0
- package/dist/admin/audit/audit-log.js +132 -0
- package/dist/admin/audit/audit-log.js.map +1 -0
- package/dist/admin/audit/audit-workspace.js +84 -0
- package/dist/admin/audit/audit-workspace.js.map +1 -0
- package/dist/admin/audit/audit.module.css +135 -0
- package/dist/admin/audit/bar-list.js +27 -0
- package/dist/admin/audit/bar-list.js.map +1 -0
- package/dist/admin/audit/empty-block.js +13 -0
- package/dist/admin/audit/empty-block.js.map +1 -0
- package/dist/admin/audit/format.js +22 -0
- package/dist/admin/audit/format.js.map +1 -0
- package/dist/admin/audit/kpi-brand.module.css +7 -0
- package/dist/admin/audit/load-failed.js +20 -0
- package/dist/admin/audit/load-failed.js.map +1 -0
- package/dist/admin/audit/metric-card.module.css +10 -0
- package/dist/admin/audit/page.js +11 -0
- package/dist/admin/audit/page.js.map +1 -0
- package/dist/admin/audit/page.module.css +12 -0
- package/dist/admin/audit/section-header.js +13 -0
- package/dist/admin/audit/section-header.js.map +1 -0
- package/dist/admin/audit/section-header.module.css +5 -0
- package/dist/admin/audit/status-fill.js +14 -0
- package/dist/admin/audit/status-fill.js.map +1 -0
- package/dist/admin/audit/status-pill.js +52 -0
- package/dist/admin/audit/status-pill.js.map +1 -0
- package/dist/admin/audit/status-pill.module.css +58 -0
- package/dist/admin/audit/tinted.js +17 -0
- package/dist/admin/audit/tinted.js.map +1 -0
- package/dist/admin/audit/use-range.js +16 -0
- package/dist/admin/audit/use-range.js.map +1 -0
- package/dist/admin/audit/when.js +14 -0
- package/dist/admin/audit/when.js.map +1 -0
- package/dist/admin/cash/page.js +184 -0
- package/dist/admin/cash/page.js.map +1 -0
- package/dist/admin/change-password/page.js +164 -0
- package/dist/admin/change-password/page.js.map +1 -0
- package/dist/admin/commerce/commerce-console.js +106 -0
- package/dist/admin/commerce/commerce-console.js.map +1 -0
- package/dist/admin/commerce/commerce-overview.js +102 -0
- package/dist/admin/commerce/commerce-overview.js.map +1 -0
- package/dist/admin/commerce/console.module.css +63 -0
- package/dist/admin/commerce/merchant-meta.js +40 -0
- package/dist/admin/commerce/merchant-meta.js.map +1 -0
- package/dist/admin/commerce/merchant-picker.js +114 -0
- package/dist/admin/commerce/merchant-picker.js.map +1 -0
- package/dist/admin/commerce/merchant-view.js +113 -0
- package/dist/admin/commerce/merchant-view.js.map +1 -0
- package/dist/admin/commerce/overview-kpis.js +100 -0
- package/dist/admin/commerce/overview-kpis.js.map +1 -0
- package/dist/admin/commerce/overview-services.js +40 -0
- package/dist/admin/commerce/overview-services.js.map +1 -0
- package/dist/admin/commerce/overview-top-merchants.js +51 -0
- package/dist/admin/commerce/overview-top-merchants.js.map +1 -0
- package/dist/admin/commerce/overview.module.css +145 -0
- package/dist/admin/commerce/page.js +11 -0
- package/dist/admin/commerce/page.js.map +1 -0
- package/dist/admin/commerce/picker.module.css +98 -0
- package/dist/admin/feedback/answer-case-button.js +30 -0
- package/dist/admin/feedback/answer-case-button.js.map +1 -0
- package/dist/admin/feedback/answers-view.js +87 -0
- package/dist/admin/feedback/answers-view.js.map +1 -0
- package/dist/admin/feedback/category-label.js +12 -0
- package/dist/admin/feedback/category-label.js.map +1 -0
- package/dist/admin/feedback/comment-stream.js +62 -0
- package/dist/admin/feedback/comment-stream.js.map +1 -0
- package/dist/admin/feedback/feedback-access.js +21 -0
- package/dist/admin/feedback/feedback-access.js.map +1 -0
- package/dist/admin/feedback/feedback-detail-drawer.js +95 -0
- package/dist/admin/feedback/feedback-detail-drawer.js.map +1 -0
- package/dist/admin/feedback/feedback-drawer-footer.js +60 -0
- package/dist/admin/feedback/feedback-drawer-footer.js.map +1 -0
- package/dist/admin/feedback/feedback-drawer.module.css +162 -0
- package/dist/admin/feedback/feedback-facts.js +84 -0
- package/dist/admin/feedback/feedback-facts.js.map +1 -0
- package/dist/admin/feedback/feedback-kpis.js +50 -0
- package/dist/admin/feedback/feedback-kpis.js.map +1 -0
- package/dist/admin/feedback/feedback-options.js +49 -0
- package/dist/admin/feedback/feedback-options.js.map +1 -0
- package/dist/admin/feedback/feedback-sentiment.js +45 -0
- package/dist/admin/feedback/feedback-sentiment.js.map +1 -0
- package/dist/admin/feedback/feedback.module.css +136 -0
- package/dist/admin/feedback/new-prompt-button.js +13 -0
- package/dist/admin/feedback/new-prompt-button.js.map +1 -0
- package/dist/admin/feedback/page.js +57 -0
- package/dist/admin/feedback/page.js.map +1 -0
- package/dist/admin/feedback/prompt-audience-fields.js +63 -0
- package/dist/admin/feedback/prompt-audience-fields.js.map +1 -0
- package/dist/admin/feedback/prompt-builder.js +85 -0
- package/dist/admin/feedback/prompt-builder.js.map +1 -0
- package/dist/admin/feedback/prompt-builder.module.css +134 -0
- package/dist/admin/feedback/prompt-delivery-fields.js +134 -0
- package/dist/admin/feedback/prompt-delivery-fields.js.map +1 -0
- package/dist/admin/feedback/prompt-dialog.js +88 -0
- package/dist/admin/feedback/prompt-dialog.js.map +1 -0
- package/dist/admin/feedback/prompt-dialog.module.css +199 -0
- package/dist/admin/feedback/prompt-draft.js +71 -0
- package/dist/admin/feedback/prompt-draft.js.map +1 -0
- package/dist/admin/feedback/prompt-insights.js +120 -0
- package/dist/admin/feedback/prompt-insights.js.map +1 -0
- package/dist/admin/feedback/prompt-operations.js +89 -0
- package/dist/admin/feedback/prompt-operations.js.map +1 -0
- package/dist/admin/feedback/prompt-operations.module.css +128 -0
- package/dist/admin/feedback/prompt-preview.js +71 -0
- package/dist/admin/feedback/prompt-preview.js.map +1 -0
- package/dist/admin/feedback/prompt-preview.module.css +135 -0
- package/dist/admin/feedback/prompt-question-fields.js +83 -0
- package/dist/admin/feedback/prompt-question-fields.js.map +1 -0
- package/dist/admin/feedback/prompt-response-fields.js +103 -0
- package/dist/admin/feedback/prompt-response-fields.js.map +1 -0
- package/dist/admin/feedback/prompt-review.js +80 -0
- package/dist/admin/feedback/prompt-review.js.map +1 -0
- package/dist/admin/feedback/prompt-schedule-field.js +67 -0
- package/dist/admin/feedback/prompt-schedule-field.js.map +1 -0
- package/dist/admin/feedback/prompt-stepper.js +33 -0
- package/dist/admin/feedback/prompt-stepper.js.map +1 -0
- package/dist/admin/feedback/prompt-summary.module.css +39 -0
- package/dist/admin/feedback/prompt-validation.js +48 -0
- package/dist/admin/feedback/prompt-validation.js.map +1 -0
- package/dist/admin/feedback/prompt-wizard.js +147 -0
- package/dist/admin/feedback/prompt-wizard.js.map +1 -0
- package/dist/admin/feedback/prompts-table.js +85 -0
- package/dist/admin/feedback/prompts-table.js.map +1 -0
- package/dist/admin/feedback/prompts-view.js +132 -0
- package/dist/admin/feedback/prompts-view.js.map +1 -0
- package/dist/admin/feedback/response-card.js +78 -0
- package/dist/admin/feedback/response-card.js.map +1 -0
- package/dist/admin/feedback/responses-table.js +132 -0
- package/dist/admin/feedback/responses-table.js.map +1 -0
- package/dist/admin/feedback/responses-view.js +142 -0
- package/dist/admin/feedback/responses-view.js.map +1 -0
- package/dist/admin/feedback/responses.module.css +147 -0
- package/dist/admin/feedback/sentiment-overview.js +103 -0
- package/dist/admin/feedback/sentiment-overview.js.map +1 -0
- package/dist/admin/feedback/sentiment.module.css +150 -0
- package/dist/admin/feedback/use-admin-feedback.js +15 -0
- package/dist/admin/feedback/use-admin-feedback.js.map +1 -0
- package/dist/admin/feedback/use-admin-prompts.js +15 -0
- package/dist/admin/feedback/use-admin-prompts.js.map +1 -0
- package/dist/admin/feedback/use-admin-signals.js +22 -0
- package/dist/admin/feedback/use-admin-signals.js.map +1 -0
- package/dist/admin/feedback/use-open-case.js +53 -0
- package/dist/admin/feedback/use-open-case.js.map +1 -0
- package/dist/admin/feedback/use-prompt-save.js +59 -0
- package/dist/admin/feedback/use-prompt-save.js.map +1 -0
- package/dist/admin/feedback/use-steps.js +45 -0
- package/dist/admin/feedback/use-steps.js.map +1 -0
- package/dist/admin/feedback-signals/_components/comments-panel.js +72 -0
- package/dist/admin/feedback-signals/_components/comments-panel.js.map +1 -0
- package/dist/admin/feedback-signals/_components/health-panel.js +46 -0
- package/dist/admin/feedback-signals/_components/health-panel.js.map +1 -0
- package/dist/admin/feedback-signals/_components/messages-panel.js +96 -0
- package/dist/admin/feedback-signals/_components/messages-panel.js.map +1 -0
- package/dist/admin/feedback-signals/_components/movement.js +27 -0
- package/dist/admin/feedback-signals/_components/movement.js.map +1 -0
- package/dist/admin/feedback-signals/_components/pick-up.js +67 -0
- package/dist/admin/feedback-signals/_components/pick-up.js.map +1 -0
- package/dist/admin/feedback-signals/_components/scores-panel.js +68 -0
- package/dist/admin/feedback-signals/_components/scores-panel.js.map +1 -0
- package/dist/admin/feedback-signals/_components/signals-workspace.js +84 -0
- package/dist/admin/feedback-signals/_components/signals-workspace.js.map +1 -0
- package/dist/admin/feedback-signals/_components/use-feedback-signals.js +51 -0
- package/dist/admin/feedback-signals/_components/use-feedback-signals.js.map +1 -0
- package/dist/admin/feedback-signals/page.js +11 -0
- package/dist/admin/feedback-signals/page.js.map +1 -0
- package/dist/admin/growth-chart-model.js +75 -0
- package/dist/admin/growth-chart-model.js.map +1 -0
- package/dist/admin/growth-chart-parts.js +186 -0
- package/dist/admin/growth-chart-parts.js.map +1 -0
- package/dist/admin/growth-chart.js +177 -0
- package/dist/admin/growth-chart.js.map +1 -0
- package/dist/admin/hooks.js +257 -0
- package/dist/admin/hooks.js.map +1 -0
- package/dist/admin/layout.js +153 -0
- package/dist/admin/layout.js.map +1 -0
- package/dist/admin/login/page.js +215 -0
- package/dist/admin/login/page.js.map +1 -0
- package/dist/admin/newsletters/[id]/page.js +13 -0
- package/dist/admin/newsletters/[id]/page.js.map +1 -0
- package/dist/admin/newsletters/audience/[contactId]/page.js +12 -0
- package/dist/admin/newsletters/audience/[contactId]/page.js.map +1 -0
- package/dist/admin/newsletters/audience/audience-list.js +163 -0
- package/dist/admin/newsletters/audience/audience-list.js.map +1 -0
- package/dist/admin/newsletters/audience/contact-deliveries.js +90 -0
- package/dist/admin/newsletters/audience/contact-deliveries.js.map +1 -0
- package/dist/admin/newsletters/audience/contact-row.js +63 -0
- package/dist/admin/newsletters/audience/contact-row.js.map +1 -0
- package/dist/admin/newsletters/audience/contact-screen.js +59 -0
- package/dist/admin/newsletters/audience/contact-screen.js.map +1 -0
- package/dist/admin/newsletters/audience/contact-summary.js +70 -0
- package/dist/admin/newsletters/audience/contact-summary.js.map +1 -0
- package/dist/admin/newsletters/audience/contacts.js +99 -0
- package/dist/admin/newsletters/audience/contacts.js.map +1 -0
- package/dist/admin/newsletters/audience/page.js +11 -0
- package/dist/admin/newsletters/audience/page.js.map +1 -0
- package/dist/admin/newsletters/audience/status-change.js +53 -0
- package/dist/admin/newsletters/audience/status-change.js.map +1 -0
- package/dist/admin/newsletters/audience/status-dialog.js +103 -0
- package/dist/admin/newsletters/audience/status-dialog.js.map +1 -0
- package/dist/admin/newsletters/audience/use-contacts.js +84 -0
- package/dist/admin/newsletters/audience/use-contacts.js.map +1 -0
- package/dist/admin/newsletters/autosave.js +58 -0
- package/dist/admin/newsletters/autosave.js.map +1 -0
- package/dist/admin/newsletters/brand-image-field.js +38 -0
- package/dist/admin/newsletters/brand-image-field.js.map +1 -0
- package/dist/admin/newsletters/composer.js +122 -0
- package/dist/admin/newsletters/composer.js.map +1 -0
- package/dist/admin/newsletters/content.js +59 -0
- package/dist/admin/newsletters/content.js.map +1 -0
- package/dist/admin/newsletters/deliveries.js +111 -0
- package/dist/admin/newsletters/deliveries.js.map +1 -0
- package/dist/admin/newsletters/digest-items.js +91 -0
- package/dist/admin/newsletters/digest-items.js.map +1 -0
- package/dist/admin/newsletters/editor-fields.js +135 -0
- package/dist/admin/newsletters/editor-fields.js.map +1 -0
- package/dist/admin/newsletters/format-date.js +11 -0
- package/dist/admin/newsletters/format-date.js.map +1 -0
- package/dist/admin/newsletters/image-field.js +55 -0
- package/dist/admin/newsletters/image-field.js.map +1 -0
- package/dist/admin/newsletters/image-picker.js +86 -0
- package/dist/admin/newsletters/image-picker.js.map +1 -0
- package/dist/admin/newsletters/image-upload.js +37 -0
- package/dist/admin/newsletters/image-upload.js.map +1 -0
- package/dist/admin/newsletters/labels.js +32 -0
- package/dist/admin/newsletters/labels.js.map +1 -0
- package/dist/admin/newsletters/layout-picker.js +58 -0
- package/dist/admin/newsletters/layout-picker.js.map +1 -0
- package/dist/admin/newsletters/layout-schematic.js +46 -0
- package/dist/admin/newsletters/layout-schematic.js.map +1 -0
- package/dist/admin/newsletters/markdown-field.js +98 -0
- package/dist/admin/newsletters/markdown-field.js.map +1 -0
- package/dist/admin/newsletters/markdown-insert.js +45 -0
- package/dist/admin/newsletters/markdown-insert.js.map +1 -0
- package/dist/admin/newsletters/newsletter-row.js +69 -0
- package/dist/admin/newsletters/newsletter-row.js.map +1 -0
- package/dist/admin/newsletters/newsletter-screen.js +25 -0
- package/dist/admin/newsletters/newsletter-screen.js.map +1 -0
- package/dist/admin/newsletters/newsletters-list.js +140 -0
- package/dist/admin/newsletters/newsletters-list.js.map +1 -0
- package/dist/admin/newsletters/not-available.js +7 -0
- package/dist/admin/newsletters/not-available.js.map +1 -0
- package/dist/admin/newsletters/page.js +11 -0
- package/dist/admin/newsletters/page.js.map +1 -0
- package/dist/admin/newsletters/preview-pane.js +68 -0
- package/dist/admin/newsletters/preview-pane.js.map +1 -0
- package/dist/admin/newsletters/problems.js +73 -0
- package/dist/admin/newsletters/problems.js.map +1 -0
- package/dist/admin/newsletters/recipient-row.js +73 -0
- package/dist/admin/newsletters/recipient-row.js.map +1 -0
- package/dist/admin/newsletters/recipients-empty.js +21 -0
- package/dist/admin/newsletters/recipients-empty.js.map +1 -0
- package/dist/admin/newsletters/recipients-selection.js +32 -0
- package/dist/admin/newsletters/recipients-selection.js.map +1 -0
- package/dist/admin/newsletters/recipients-tab.js +172 -0
- package/dist/admin/newsletters/recipients-tab.js.map +1 -0
- package/dist/admin/newsletters/record-header.js +28 -0
- package/dist/admin/newsletters/record-header.js.map +1 -0
- package/dist/admin/newsletters/retry-selection.js +45 -0
- package/dist/admin/newsletters/retry-selection.js.map +1 -0
- package/dist/admin/newsletters/review-dialog.js +95 -0
- package/dist/admin/newsletters/review-dialog.js.map +1 -0
- package/dist/admin/newsletters/save-file.js +12 -0
- package/dist/admin/newsletters/save-file.js.map +1 -0
- package/dist/admin/newsletters/save-indicator.js +28 -0
- package/dist/admin/newsletters/save-indicator.js.map +1 -0
- package/dist/admin/newsletters/section-tabs.js +26 -0
- package/dist/admin/newsletters/section-tabs.js.map +1 -0
- package/dist/admin/newsletters/sending.js +36 -0
- package/dist/admin/newsletters/sending.js.map +1 -0
- package/dist/admin/newsletters/sent-summary.js +77 -0
- package/dist/admin/newsletters/sent-summary.js.map +1 -0
- package/dist/admin/newsletters/sent-view.js +60 -0
- package/dist/admin/newsletters/sent-view.js.map +1 -0
- package/dist/admin/newsletters/signature-editor-fields.js +75 -0
- package/dist/admin/newsletters/signature-editor-fields.js.map +1 -0
- package/dist/admin/newsletters/signature-editor.js +63 -0
- package/dist/admin/newsletters/signature-editor.js.map +1 -0
- package/dist/admin/newsletters/signature-field.js +44 -0
- package/dist/admin/newsletters/signature-field.js.map +1 -0
- package/dist/admin/newsletters/signature-preview.js +27 -0
- package/dist/admin/newsletters/signature-preview.js.map +1 -0
- package/dist/admin/newsletters/signature-row.js +54 -0
- package/dist/admin/newsletters/signature-row.js.map +1 -0
- package/dist/admin/newsletters/signature-values.js +75 -0
- package/dist/admin/newsletters/signature-values.js.map +1 -0
- package/dist/admin/newsletters/signatures-dialog.js +98 -0
- package/dist/admin/newsletters/signatures-dialog.js.map +1 -0
- package/dist/admin/newsletters/signatures.js +34 -0
- package/dist/admin/newsletters/signatures.js.map +1 -0
- package/dist/admin/newsletters/use-autosave.js +147 -0
- package/dist/admin/newsletters/use-autosave.js.map +1 -0
- package/dist/admin/newsletters/use-deliveries.js +90 -0
- package/dist/admin/newsletters/use-deliveries.js.map +1 -0
- package/dist/admin/newsletters/use-newsletter-actions.js +68 -0
- package/dist/admin/newsletters/use-newsletter-actions.js.map +1 -0
- package/dist/admin/newsletters/use-newsletters.js +83 -0
- package/dist/admin/newsletters/use-newsletters.js.map +1 -0
- package/dist/admin/newsletters/use-send-actions.js +62 -0
- package/dist/admin/newsletters/use-send-actions.js.map +1 -0
- package/dist/admin/newsletters/use-signature-preview.js +29 -0
- package/dist/admin/newsletters/use-signature-preview.js.map +1 -0
- package/dist/admin/newsletters/use-signatures.js +55 -0
- package/dist/admin/newsletters/use-signatures.js.map +1 -0
- package/dist/admin/page.js +179 -0
- package/dist/admin/page.js.map +1 -0
- package/dist/admin/payout-providers/add-flow.js +84 -0
- package/dist/admin/payout-providers/add-flow.js.map +1 -0
- package/dist/admin/payout-providers/attention-list.js +135 -0
- package/dist/admin/payout-providers/attention-list.js.map +1 -0
- package/dist/admin/payout-providers/connect-step.js +180 -0
- package/dist/admin/payout-providers/connect-step.js.map +1 -0
- package/dist/admin/payout-providers/editor/auth-section.js +166 -0
- package/dist/admin/payout-providers/editor/auth-section.js.map +1 -0
- package/dist/admin/payout-providers/editor/call-editor.js +107 -0
- package/dist/admin/payout-providers/editor/call-editor.js.map +1 -0
- package/dist/admin/payout-providers/editor/condition-editor.js +109 -0
- package/dist/admin/payout-providers/editor/condition-editor.js.map +1 -0
- package/dist/admin/payout-providers/editor/editor.module.css +123 -0
- package/dist/admin/payout-providers/editor/fields.js +144 -0
- package/dist/admin/payout-providers/editor/fields.js.map +1 -0
- package/dist/admin/payout-providers/editor/flow-editor.js +160 -0
- package/dist/admin/payout-providers/editor/flow-editor.js.map +1 -0
- package/dist/admin/payout-providers/editor/flow-parts.js +69 -0
- package/dist/admin/payout-providers/editor/flow-parts.js.map +1 -0
- package/dist/admin/payout-providers/editor/flow-sections.js +147 -0
- package/dist/admin/payout-providers/editor/flow-sections.js.map +1 -0
- package/dist/admin/payout-providers/editor/rules-editor.js +151 -0
- package/dist/admin/payout-providers/editor/rules-editor.js.map +1 -0
- package/dist/admin/payout-providers/editor/step-editor.js +157 -0
- package/dist/admin/payout-providers/editor/step-editor.js.map +1 -0
- package/dist/admin/payout-providers/editor/transfer-section.js +103 -0
- package/dist/admin/payout-providers/editor/transfer-section.js.map +1 -0
- package/dist/admin/payout-providers/page.js +94 -0
- package/dist/admin/payout-providers/page.js.map +1 -0
- package/dist/admin/payout-providers/payout-providers.module.css +179 -0
- package/dist/admin/payout-providers/pin-step.js +84 -0
- package/dist/admin/payout-providers/pin-step.js.map +1 -0
- package/dist/admin/payout-providers/provider-detail.js +148 -0
- package/dist/admin/payout-providers/provider-detail.js.map +1 -0
- package/dist/admin/payout-providers/provider-list.js +37 -0
- package/dist/admin/payout-providers/provider-list.js.map +1 -0
- package/dist/admin/payout-providers/sections.module.css +151 -0
- package/dist/admin/payout-providers/shared.js +34 -0
- package/dist/admin/payout-providers/shared.js.map +1 -0
- package/dist/admin/payout-providers/status.js +17 -0
- package/dist/admin/payout-providers/status.js.map +1 -0
- package/dist/admin/payout-providers/step.js +31 -0
- package/dist/admin/payout-providers/step.js.map +1 -0
- package/dist/admin/payout-providers/test-transfer.js +161 -0
- package/dist/admin/payout-providers/test-transfer.js.map +1 -0
- package/dist/admin/payout-providers/use-connect.js +108 -0
- package/dist/admin/payout-providers/use-connect.js.map +1 -0
- package/dist/admin/payout-providers/verify-step.js +57 -0
- package/dist/admin/payout-providers/verify-step.js.map +1 -0
- package/dist/admin/payout-tiers/_tier-dialog.js +205 -0
- package/dist/admin/payout-tiers/_tier-dialog.js.map +1 -0
- package/dist/admin/payout-tiers/page.js +11 -0
- package/dist/admin/payout-tiers/page.js.map +1 -0
- package/dist/admin/payout-tiers/tier-preview-result.js +58 -0
- package/dist/admin/payout-tiers/tier-preview-result.js.map +1 -0
- package/dist/admin/payout-tiers/tier-preview-tab.js +67 -0
- package/dist/admin/payout-tiers/tier-preview-tab.js.map +1 -0
- package/dist/admin/payout-tiers/tier-preview.js +41 -0
- package/dist/admin/payout-tiers/tier-preview.js.map +1 -0
- package/dist/admin/payout-tiers/tiers-table.js +151 -0
- package/dist/admin/payout-tiers/tiers-table.js.map +1 -0
- package/dist/admin/payout-tiers/tiers-workspace.js +56 -0
- package/dist/admin/payout-tiers/tiers-workspace.js.map +1 -0
- package/dist/admin/payout-tiers/use-tiers.js +14 -0
- package/dist/admin/payout-tiers/use-tiers.js.map +1 -0
- package/dist/admin/pos/page.js +11 -0
- package/dist/admin/pos/page.js.map +1 -0
- package/dist/admin/pos/pos-workspace.js +66 -0
- package/dist/admin/pos/pos-workspace.js.map +1 -0
- package/dist/admin/pos/shifts-tab.js +111 -0
- package/dist/admin/pos/shifts-tab.js.map +1 -0
- package/dist/admin/pos/terminal-row.js +94 -0
- package/dist/admin/pos/terminal-row.js.map +1 -0
- package/dist/admin/pos/terminals/[id]/page.js +12 -0
- package/dist/admin/pos/terminals/[id]/page.js.map +1 -0
- package/dist/admin/pos/terminals/[id]/terminal-page.js +119 -0
- package/dist/admin/pos/terminals/[id]/terminal-page.js.map +1 -0
- package/dist/admin/pos/terminals/[id]/terminal-panels.js +58 -0
- package/dist/admin/pos/terminals/[id]/terminal-panels.js.map +1 -0
- package/dist/admin/pos/terminals/[id]/terminal-people.js +63 -0
- package/dist/admin/pos/terminals/[id]/terminal-people.js.map +1 -0
- package/dist/admin/pos/terminals/[id]/terminal.module.css +103 -0
- package/dist/admin/pos/terminals-tab.js +147 -0
- package/dist/admin/pos/terminals-tab.js.map +1 -0
- package/dist/admin/pricing/approvals-tab.js +47 -0
- package/dist/admin/pricing/approvals-tab.js.map +1 -0
- package/dist/admin/pricing/cancel-plan-dialog.js +85 -0
- package/dist/admin/pricing/cancel-plan-dialog.js.map +1 -0
- package/dist/admin/pricing/change-list.js +9 -0
- package/dist/admin/pricing/change-list.js.map +1 -0
- package/dist/admin/pricing/change-plan-dialog.js +84 -0
- package/dist/admin/pricing/change-plan-dialog.js.map +1 -0
- package/dist/admin/pricing/display-preview.js +51 -0
- package/dist/admin/pricing/display-preview.js.map +1 -0
- package/dist/admin/pricing/display-tab.js +76 -0
- package/dist/admin/pricing/display-tab.js.map +1 -0
- package/dist/admin/pricing/features-tab.js +48 -0
- package/dist/admin/pricing/features-tab.js.map +1 -0
- package/dist/admin/pricing/page.js +30 -0
- package/dist/admin/pricing/page.js.map +1 -0
- package/dist/admin/pricing/plan-approval.js +97 -0
- package/dist/admin/pricing/plan-approval.js.map +1 -0
- package/dist/admin/pricing/plan-card-product.js +63 -0
- package/dist/admin/pricing/plan-card-product.js.map +1 -0
- package/dist/admin/pricing/plan-changes.js +54 -0
- package/dist/admin/pricing/plan-changes.js.map +1 -0
- package/dist/admin/pricing/plan-drawer.js +97 -0
- package/dist/admin/pricing/plan-drawer.js.map +1 -0
- package/dist/admin/pricing/plan-form-basics.js +59 -0
- package/dist/admin/pricing/plan-form-basics.js.map +1 -0
- package/dist/admin/pricing/plan-form-dialog.js +103 -0
- package/dist/admin/pricing/plan-form-dialog.js.map +1 -0
- package/dist/admin/pricing/plan-form-features.js +59 -0
- package/dist/admin/pricing/plan-form-features.js.map +1 -0
- package/dist/admin/pricing/plan-form-review.js +67 -0
- package/dist/admin/pricing/plan-form-review.js.map +1 -0
- package/dist/admin/pricing/plan-model.js +91 -0
- package/dist/admin/pricing/plan-model.js.map +1 -0
- package/dist/admin/pricing/plan-row.js +59 -0
- package/dist/admin/pricing/plan-row.js.map +1 -0
- package/dist/admin/pricing/plans-tab.js +84 -0
- package/dist/admin/pricing/plans-tab.js.map +1 -0
- package/dist/admin/pricing/price-form-dialog.js +133 -0
- package/dist/admin/pricing/price-form-dialog.js.map +1 -0
- package/dist/admin/pricing/price-history.js +25 -0
- package/dist/admin/pricing/price-history.js.map +1 -0
- package/dist/admin/pricing/price-model.js +47 -0
- package/dist/admin/pricing/price-model.js.map +1 -0
- package/dist/admin/pricing/price-review.js +104 -0
- package/dist/admin/pricing/price-review.js.map +1 -0
- package/dist/admin/pricing/price-tab.js +101 -0
- package/dist/admin/pricing/price-tab.js.map +1 -0
- package/dist/admin/pricing/pricing-tabs.js +28 -0
- package/dist/admin/pricing/pricing-tabs.js.map +1 -0
- package/dist/admin/pricing/pricing.module.css +188 -0
- package/dist/admin/pricing/subscription-events.js +33 -0
- package/dist/admin/pricing/subscription-events.js.map +1 -0
- package/dist/admin/pricing/subscription-history.js +103 -0
- package/dist/admin/pricing/subscription-history.js.map +1 -0
- package/dist/admin/pricing/subscription-plan.js +51 -0
- package/dist/admin/pricing/subscription-plan.js.map +1 -0
- package/dist/admin/pricing/subscription-row.js +70 -0
- package/dist/admin/pricing/subscription-row.js.map +1 -0
- package/dist/admin/pricing/subscriptions-tab.js +141 -0
- package/dist/admin/pricing/subscriptions-tab.js.map +1 -0
- package/dist/admin/pricing/use-plans.js +49 -0
- package/dist/admin/pricing/use-plans.js.map +1 -0
- package/dist/admin/pricing/use-pricing.js +38 -0
- package/dist/admin/pricing/use-pricing.js.map +1 -0
- package/dist/admin/pricing/use-subscriptions.js +21 -0
- package/dist/admin/pricing/use-subscriptions.js.map +1 -0
- package/dist/admin/product-insights/all-merchants-view.js +146 -0
- package/dist/admin/product-insights/all-merchants-view.js.map +1 -0
- package/dist/admin/product-insights/page.js +11 -0
- package/dist/admin/product-insights/page.js.map +1 -0
- package/dist/admin/product-insights/product-insights-workspace.js +112 -0
- package/dist/admin/product-insights/product-insights-workspace.js.map +1 -0
- package/dist/admin/product-insights/product-insights.module.css +114 -0
- package/dist/admin/product-insights/report-copy.js +69 -0
- package/dist/admin/product-insights/report-copy.js.map +1 -0
- package/dist/admin/product-insights/report-empty.js +14 -0
- package/dist/admin/product-insights/report-empty.js.map +1 -0
- package/dist/admin/product-insights/report-kpis.js +54 -0
- package/dist/admin/product-insights/report-kpis.js.map +1 -0
- package/dist/admin/product-insights/report-panel.js +129 -0
- package/dist/admin/product-insights/report-panel.js.map +1 -0
- package/dist/admin/product-insights/report-ranking.js +44 -0
- package/dist/admin/product-insights/report-ranking.js.map +1 -0
- package/dist/admin/product-insights/use-insight-report.js +59 -0
- package/dist/admin/product-insights/use-insight-report.js.map +1 -0
- package/dist/admin/revenue/channel-panel.js +49 -0
- package/dist/admin/revenue/channel-panel.js.map +1 -0
- package/dist/admin/revenue/channel-rows.js +17 -0
- package/dist/admin/revenue/channel-rows.js.map +1 -0
- package/dist/admin/revenue/cohort-panel.js +74 -0
- package/dist/admin/revenue/cohort-panel.js.map +1 -0
- package/dist/admin/revenue/download-button.js +40 -0
- package/dist/admin/revenue/download-button.js.map +1 -0
- package/dist/admin/revenue/figure-list.js +19 -0
- package/dist/admin/revenue/figure-list.js.map +1 -0
- package/dist/admin/revenue/health-panel.js +59 -0
- package/dist/admin/revenue/health-panel.js.map +1 -0
- package/dist/admin/revenue/ledger-model.js +84 -0
- package/dist/admin/revenue/ledger-model.js.map +1 -0
- package/dist/admin/revenue/ledger.module.css +101 -0
- package/dist/admin/revenue/merchant-payments-view.js +231 -0
- package/dist/admin/revenue/merchant-payments-view.js.map +1 -0
- package/dist/admin/revenue/method-cards.js +32 -0
- package/dist/admin/revenue/method-cards.js.map +1 -0
- package/dist/admin/revenue/page.js +11 -0
- package/dist/admin/revenue/page.js.map +1 -0
- package/dist/admin/revenue/plan-mix-panel.js +62 -0
- package/dist/admin/revenue/plan-mix-panel.js.map +1 -0
- package/dist/admin/revenue/platform-fees.js +9 -0
- package/dist/admin/revenue/platform-fees.js.map +1 -0
- package/dist/admin/revenue/quality-panel.js +71 -0
- package/dist/admin/revenue/quality-panel.js.map +1 -0
- package/dist/admin/revenue/revenue-kpis.js +73 -0
- package/dist/admin/revenue/revenue-kpis.js.map +1 -0
- package/dist/admin/revenue/revenue-overview.js +132 -0
- package/dist/admin/revenue/revenue-overview.js.map +1 -0
- package/dist/admin/revenue/revenue-retention.js +31 -0
- package/dist/admin/revenue/revenue-retention.js.map +1 -0
- package/dist/admin/revenue/revenue-workspace.js +171 -0
- package/dist/admin/revenue/revenue-workspace.js.map +1 -0
- package/dist/admin/revenue/revenue.module.css +196 -0
- package/dist/admin/revenue/subscriptions-panel.js +58 -0
- package/dist/admin/revenue/subscriptions-panel.js.map +1 -0
- package/dist/admin/revenue/subscriptions-view.js +188 -0
- package/dist/admin/revenue/subscriptions-view.js.map +1 -0
- package/dist/admin/revenue/top-tenants-panel.js +96 -0
- package/dist/admin/revenue/top-tenants-panel.js.map +1 -0
- package/dist/admin/reviews/merchant-filter.js +122 -0
- package/dist/admin/reviews/merchant-filter.js.map +1 -0
- package/dist/admin/reviews/merchant-filter.module.css +113 -0
- package/dist/admin/reviews/page.js +124 -0
- package/dist/admin/reviews/page.js.map +1 -0
- package/dist/admin/reviews/review-row.js +44 -0
- package/dist/admin/reviews/review-row.js.map +1 -0
- package/dist/admin/reviews/reviews-kpis.js +55 -0
- package/dist/admin/reviews/reviews-kpis.js.map +1 -0
- package/dist/admin/reviews/reviews.module.css +68 -0
- package/dist/admin/reviews/use-admin-reviews.js +22 -0
- package/dist/admin/reviews/use-admin-reviews.js.map +1 -0
- package/dist/admin/reviews/use-merchant-search.js +32 -0
- package/dist/admin/reviews/use-merchant-search.js.map +1 -0
- package/dist/admin/roles/more-chip.js +48 -0
- package/dist/admin/roles/more-chip.js.map +1 -0
- package/dist/admin/roles/more-chip.module.css +70 -0
- package/dist/admin/roles/page.js +159 -0
- package/dist/admin/roles/page.js.map +1 -0
- package/dist/admin/roles/permission-picker.js +71 -0
- package/dist/admin/roles/permission-picker.js.map +1 -0
- package/dist/admin/roles/permission-picker.module.css +81 -0
- package/dist/admin/roles/permissions.js +66 -0
- package/dist/admin/roles/permissions.js.map +1 -0
- package/dist/admin/roles/role-dialog.js +162 -0
- package/dist/admin/roles/role-dialog.js.map +1 -0
- package/dist/admin/roles/role-row.js +51 -0
- package/dist/admin/roles/role-row.js.map +1 -0
- package/dist/admin/roles/roles-kpis.js +45 -0
- package/dist/admin/roles/roles-kpis.js.map +1 -0
- package/dist/admin/roles/roles.module.css +141 -0
- package/dist/admin/sales/activity-log-tab.js +154 -0
- package/dist/admin/sales/activity-log-tab.js.map +1 -0
- package/dist/admin/sales/bucket.js +29 -0
- package/dist/admin/sales/bucket.js.map +1 -0
- package/dist/admin/sales/conversion-panel.js +59 -0
- package/dist/admin/sales/conversion-panel.js.map +1 -0
- package/dist/admin/sales/growth-analysis.js +78 -0
- package/dist/admin/sales/growth-analysis.js.map +1 -0
- package/dist/admin/sales/leads-tab.js +134 -0
- package/dist/admin/sales/leads-tab.js.map +1 -0
- package/dist/admin/sales/overview-tab.js +92 -0
- package/dist/admin/sales/overview-tab.js.map +1 -0
- package/dist/admin/sales/page.js +11 -0
- package/dist/admin/sales/page.js.map +1 -0
- package/dist/admin/sales/pipeline/add-lead-dialog.js +143 -0
- package/dist/admin/sales/pipeline/add-lead-dialog.js.map +1 -0
- package/dist/admin/sales/pipeline/lead-card.js +44 -0
- package/dist/admin/sales/pipeline/lead-card.js.map +1 -0
- package/dist/admin/sales/pipeline/lead-drawer.js +139 -0
- package/dist/admin/sales/pipeline/lead-drawer.js.map +1 -0
- package/dist/admin/sales/pipeline/lead-timeline.js +34 -0
- package/dist/admin/sales/pipeline/lead-timeline.js.map +1 -0
- package/dist/admin/sales/pipeline/log-contact-dialog.js +126 -0
- package/dist/admin/sales/pipeline/log-contact-dialog.js.map +1 -0
- package/dist/admin/sales/pipeline/move-stage-dialog.js +119 -0
- package/dist/admin/sales/pipeline/move-stage-dialog.js.map +1 -0
- package/dist/admin/sales/pipeline/pipeline-board.js +77 -0
- package/dist/admin/sales/pipeline/pipeline-board.js.map +1 -0
- package/dist/admin/sales/pipeline/pipeline-filters.js +46 -0
- package/dist/admin/sales/pipeline/pipeline-filters.js.map +1 -0
- package/dist/admin/sales/pipeline/pipeline.module.css +141 -0
- package/dist/admin/sales/report-math.js +17 -0
- package/dist/admin/sales/report-math.js.map +1 -0
- package/dist/admin/sales/reports-tab.js +147 -0
- package/dist/admin/sales/reports-tab.js.map +1 -0
- package/dist/admin/sales/sales-kpis.js +69 -0
- package/dist/admin/sales/sales-kpis.js.map +1 -0
- package/dist/admin/sales/sales-workspace.js +55 -0
- package/dist/admin/sales/sales-workspace.js.map +1 -0
- package/dist/admin/sales/sales.module.css +52 -0
- package/dist/admin/sales/sources-panel.js +19 -0
- package/dist/admin/sales/sources-panel.js.map +1 -0
- package/dist/admin/sales/stage-meta.js +73 -0
- package/dist/admin/sales/stage-meta.js.map +1 -0
- package/dist/admin/sales/use-debounced.js +14 -0
- package/dist/admin/sales/use-debounced.js.map +1 -0
- package/dist/admin/sales/use-sales.js +51 -0
- package/dist/admin/sales/use-sales.js.map +1 -0
- package/dist/admin/scores/page.js +8 -0
- package/dist/admin/scores/page.js.map +1 -0
- package/dist/admin/settings/accessibility-tab.js +135 -0
- package/dist/admin/settings/accessibility-tab.js.map +1 -0
- package/dist/admin/settings/account-tab.js +59 -0
- package/dist/admin/settings/account-tab.js.map +1 -0
- package/dist/admin/settings/change-password-dialog.js +112 -0
- package/dist/admin/settings/change-password-dialog.js.map +1 -0
- package/dist/admin/settings/general-tab.js +143 -0
- package/dist/admin/settings/general-tab.js.map +1 -0
- package/dist/admin/settings/notifications-tab.js +155 -0
- package/dist/admin/settings/notifications-tab.js.map +1 -0
- package/dist/admin/settings/page.js +11 -0
- package/dist/admin/settings/page.js.map +1 -0
- package/dist/admin/settings/profile-card.js +35 -0
- package/dist/admin/settings/profile-card.js.map +1 -0
- package/dist/admin/settings/setting-row.js +85 -0
- package/dist/admin/settings/setting-row.js.map +1 -0
- package/dist/admin/settings/settings-workspace.js +47 -0
- package/dist/admin/settings/settings-workspace.js.map +1 -0
- package/dist/admin/settings/settings.module.css +162 -0
- package/dist/admin/settings/shortcut-list.js +42 -0
- package/dist/admin/settings/shortcut-list.js.map +1 -0
- package/dist/admin/settings/shortcuts-tab.js +42 -0
- package/dist/admin/settings/shortcuts-tab.js.map +1 -0
- package/dist/admin/settings/use-inbox-on.js +11 -0
- package/dist/admin/settings/use-inbox-on.js.map +1 -0
- package/dist/admin/settings/use-save.js +35 -0
- package/dist/admin/settings/use-save.js.map +1 -0
- package/dist/admin/support/case-field-selects.js +125 -0
- package/dist/admin/support/case-field-selects.js.map +1 -0
- package/dist/admin/support/case-header-controls.js +98 -0
- package/dist/admin/support/case-header-controls.js.map +1 -0
- package/dist/admin/support/case-origin.js +26 -0
- package/dist/admin/support/case-origin.js.map +1 -0
- package/dist/admin/support/case-pills.js +41 -0
- package/dist/admin/support/case-pills.js.map +1 -0
- package/dist/admin/support/case-pills.module.css +36 -0
- package/dist/admin/support/case-row-menu.js +77 -0
- package/dist/admin/support/case-row-menu.js.map +1 -0
- package/dist/admin/support/case-row.js +70 -0
- package/dist/admin/support/case-row.js.map +1 -0
- package/dist/admin/support/case-timeline.js +82 -0
- package/dist/admin/support/case-timeline.js.map +1 -0
- package/dist/admin/support/cases-tab.js +55 -0
- package/dist/admin/support/cases-tab.js.map +1 -0
- package/dist/admin/support/composer-aids.js +29 -0
- package/dist/admin/support/composer-aids.js.map +1 -0
- package/dist/admin/support/composer-assist.js +32 -0
- package/dist/admin/support/composer-assist.js.map +1 -0
- package/dist/admin/support/composer-assist.module.css +23 -0
- package/dist/admin/support/composer-footer.js +56 -0
- package/dist/admin/support/composer-footer.js.map +1 -0
- package/dist/admin/support/composer-header.js +44 -0
- package/dist/admin/support/composer-header.js.map +1 -0
- package/dist/admin/support/composer-keys.js +25 -0
- package/dist/admin/support/composer-keys.js.map +1 -0
- package/dist/admin/support/composer-toolbar.js +69 -0
- package/dist/admin/support/composer-toolbar.js.map +1 -0
- package/dist/admin/support/inbox-address.js +36 -0
- package/dist/admin/support/inbox-address.js.map +1 -0
- package/dist/admin/support/inbox-header.js +19 -0
- package/dist/admin/support/inbox-header.js.map +1 -0
- package/dist/admin/support/inbox-header.module.css +28 -0
- package/dist/admin/support/kbd.js +9 -0
- package/dist/admin/support/kbd.js.map +1 -0
- package/dist/admin/support/kbd.module.css +19 -0
- package/dist/admin/support/page.js +95 -0
- package/dist/admin/support/page.js.map +1 -0
- package/dist/admin/support/queue-card.js +46 -0
- package/dist/admin/support/queue-card.js.map +1 -0
- package/dist/admin/support/queue-card.module.css +88 -0
- package/dist/admin/support/queue-filters.js +119 -0
- package/dist/admin/support/queue-filters.js.map +1 -0
- package/dist/admin/support/reply-picker-body.js +122 -0
- package/dist/admin/support/reply-picker-body.js.map +1 -0
- package/dist/admin/support/reply-picker.js +55 -0
- package/dist/admin/support/reply-picker.js.map +1 -0
- package/dist/admin/support/reply-picker.module.css +152 -0
- package/dist/admin/support/saved-replies/library-categories.js +48 -0
- package/dist/admin/support/saved-replies/library-categories.js.map +1 -0
- package/dist/admin/support/saved-replies/library.js +121 -0
- package/dist/admin/support/saved-replies/library.js.map +1 -0
- package/dist/admin/support/saved-replies/library.module.css +157 -0
- package/dist/admin/support/saved-replies/page.js +16 -0
- package/dist/admin/support/saved-replies/page.js.map +1 -0
- package/dist/admin/support/saved-replies/placeholders.js +51 -0
- package/dist/admin/support/saved-replies/placeholders.js.map +1 -0
- package/dist/admin/support/saved-replies/reply-fields.js +102 -0
- package/dist/admin/support/saved-replies/reply-fields.js.map +1 -0
- package/dist/admin/support/saved-replies/reply-list.js +60 -0
- package/dist/admin/support/saved-replies/reply-list.js.map +1 -0
- package/dist/admin/support/saved-replies/reply-list.module.css +74 -0
- package/dist/admin/support/saved-replies/reply-meta.js +78 -0
- package/dist/admin/support/saved-replies/reply-meta.js.map +1 -0
- package/dist/admin/support/saved-replies/reply-preview.js +48 -0
- package/dist/admin/support/saved-replies/reply-preview.js.map +1 -0
- package/dist/admin/support/saved-replies/save-reply-dialog.js +66 -0
- package/dist/admin/support/saved-replies/save-reply-dialog.js.map +1 -0
- package/dist/admin/support/saved-replies/saved-replies-kpis.js +55 -0
- package/dist/admin/support/saved-replies/saved-replies-kpis.js.map +1 -0
- package/dist/admin/support/saved-replies/saved-replies-tab.js +22 -0
- package/dist/admin/support/saved-replies/saved-replies-tab.js.map +1 -0
- package/dist/admin/support/saved-replies/saved-replies.module.css +95 -0
- package/dist/admin/support/saved-replies/saved-reply-editor.js +55 -0
- package/dist/admin/support/saved-replies/saved-reply-editor.js.map +1 -0
- package/dist/admin/support/saved-replies/use-saved-replies.js +40 -0
- package/dist/admin/support/saved-replies/use-saved-replies.js.map +1 -0
- package/dist/admin/support/suggestion-card.js +70 -0
- package/dist/admin/support/suggestion-card.js.map +1 -0
- package/dist/admin/support/suggestion-card.module.css +72 -0
- package/dist/admin/support/support-case-detail.js +16 -0
- package/dist/admin/support/support-case-detail.js.map +1 -0
- package/dist/admin/support/support-case-identity.js +80 -0
- package/dist/admin/support/support-case-identity.js.map +1 -0
- package/dist/admin/support/support-case-table.js +89 -0
- package/dist/admin/support/support-case-table.js.map +1 -0
- package/dist/admin/support/support-case-thread.js +64 -0
- package/dist/admin/support/support-case-thread.js.map +1 -0
- package/dist/admin/support/support-case.module.css +178 -0
- package/dist/admin/support/support-composer.js +171 -0
- package/dist/admin/support/support-composer.js.map +1 -0
- package/dist/admin/support/support-kpis.js +106 -0
- package/dist/admin/support/support-kpis.js.map +1 -0
- package/dist/admin/support/support-options.js +87 -0
- package/dist/admin/support/support-options.js.map +1 -0
- package/dist/admin/support/support-queue.module.css +82 -0
- package/dist/admin/support/support-thread.module.css +174 -0
- package/dist/admin/support/support-trend.js +59 -0
- package/dist/admin/support/support-trend.js.map +1 -0
- package/dist/admin/support/support-views.js +79 -0
- package/dist/admin/support/support-views.js.map +1 -0
- package/dist/admin/support/support-views.module.css +80 -0
- package/dist/admin/support/support.module.css +98 -0
- package/dist/admin/support/thread-attachment.js +54 -0
- package/dist/admin/support/thread-attachment.js.map +1 -0
- package/dist/admin/support/thread-bubble.js +46 -0
- package/dist/admin/support/thread-bubble.js.map +1 -0
- package/dist/admin/support/thread-event.module.css +35 -0
- package/dist/admin/support/use-admin-support.js +90 -0
- package/dist/admin/support/use-admin-support.js.map +1 -0
- package/dist/admin/support/use-case-activity.js +68 -0
- package/dist/admin/support/use-case-activity.js.map +1 -0
- package/dist/admin/support/use-close-case.js +26 -0
- package/dist/admin/support/use-close-case.js.map +1 -0
- package/dist/admin/support/use-composer-assist.js +114 -0
- package/dist/admin/support/use-composer-assist.js.map +1 -0
- package/dist/admin/support/use-queue-cases.js +17 -0
- package/dist/admin/support/use-queue-cases.js.map +1 -0
- package/dist/admin/support/use-send-reply.js +73 -0
- package/dist/admin/support/use-send-reply.js.map +1 -0
- package/dist/admin/support/use-support-insights.js +53 -0
- package/dist/admin/support/use-support-insights.js.map +1 -0
- package/dist/admin/support/use-view-counts.js +36 -0
- package/dist/admin/support/use-view-counts.js.map +1 -0
- package/dist/admin/support/workspace/action-bar.js +69 -0
- package/dist/admin/support/workspace/action-bar.js.map +1 -0
- package/dist/admin/support/workspace/action-bar.module.css +85 -0
- package/dist/admin/support/workspace/case-card.js +58 -0
- package/dist/admin/support/workspace/case-card.js.map +1 -0
- package/dist/admin/support/workspace/case-facts.js +41 -0
- package/dist/admin/support/workspace/case-facts.js.map +1 -0
- package/dist/admin/support/workspace/case-list-pane.js +126 -0
- package/dist/admin/support/workspace/case-list-pane.js.map +1 -0
- package/dist/admin/support/workspace/case-properties.js +91 -0
- package/dist/admin/support/workspace/case-properties.js.map +1 -0
- package/dist/admin/support/workspace/conversation-header.js +128 -0
- package/dist/admin/support/workspace/conversation-header.js.map +1 -0
- package/dist/admin/support/workspace/conversation-pane.js +90 -0
- package/dist/admin/support/workspace/conversation-pane.js.map +1 -0
- package/dist/admin/support/workspace/conversation.module.css +191 -0
- package/dist/admin/support/workspace/details-pane.js +99 -0
- package/dist/admin/support/workspace/details-pane.js.map +1 -0
- package/dist/admin/support/workspace/details.module.css +137 -0
- package/dist/admin/support/workspace/list.module.css +193 -0
- package/dist/admin/support/workspace/merchant-card.js +58 -0
- package/dist/admin/support/workspace/merchant-card.js.map +1 -0
- package/dist/admin/support/workspace/merchant.module.css +97 -0
- package/dist/admin/support/workspace/related-cases.js +51 -0
- package/dist/admin/support/workspace/related-cases.js.map +1 -0
- package/dist/admin/support/workspace/sort-cases.js +16 -0
- package/dist/admin/support/workspace/sort-cases.js.map +1 -0
- package/dist/admin/support/workspace/status-banner.js +101 -0
- package/dist/admin/support/workspace/status-banner.js.map +1 -0
- package/dist/admin/support/workspace/step-case.js +9 -0
- package/dist/admin/support/workspace/step-case.js.map +1 -0
- package/dist/admin/support/workspace/support-workspace.js +127 -0
- package/dist/admin/support/workspace/support-workspace.js.map +1 -0
- package/dist/admin/support/workspace/use-media.js +17 -0
- package/dist/admin/support/workspace/use-media.js.map +1 -0
- package/dist/admin/support/workspace/use-workspace-keys.js +46 -0
- package/dist/admin/support/workspace/use-workspace-keys.js.map +1 -0
- package/dist/admin/support/workspace/workspace.module.css +89 -0
- package/dist/admin/tenants/[id]/account-officer-dialog.js +58 -0
- package/dist/admin/tenants/[id]/account-officer-dialog.js.map +1 -0
- package/dist/admin/tenants/[id]/account-officer.js +59 -0
- package/dist/admin/tenants/[id]/account-officer.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/best-sellers.js +56 -0
- package/dist/admin/tenants/[id]/commerce/best-sellers.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/commerce-flow.js +84 -0
- package/dist/admin/tenants/[id]/commerce/commerce-flow.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/drawer.module.css +89 -0
- package/dist/admin/tenants/[id]/commerce/flow.module.css +110 -0
- package/dist/admin/tenants/[id]/commerce/format.js +74 -0
- package/dist/admin/tenants/[id]/commerce/format.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/health.module.css +144 -0
- package/dist/admin/tenants/[id]/commerce/index.js +5 -0
- package/dist/admin/tenants/[id]/commerce/index.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/inventory-health.js +82 -0
- package/dist/admin/tenants/[id]/commerce/inventory-health.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/item-card.js +37 -0
- package/dist/admin/tenants/[id]/commerce/item-card.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/items-gallery.js +155 -0
- package/dist/admin/tenants/[id]/commerce/items-gallery.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/items-table.js +49 -0
- package/dist/admin/tenants/[id]/commerce/items-table.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/items.module.css +125 -0
- package/dist/admin/tenants/[id]/commerce/layout.module.css +27 -0
- package/dist/admin/tenants/[id]/commerce/merchant-commerce.js +103 -0
- package/dist/admin/tenants/[id]/commerce/merchant-commerce.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/money-panel.js +52 -0
- package/dist/admin/tenants/[id]/commerce/money-panel.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/money.module.css +122 -0
- package/dist/admin/tenants/[id]/commerce/order-drawer.js +65 -0
- package/dist/admin/tenants/[id]/commerce/order-drawer.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/order-pipeline.js +50 -0
- package/dist/admin/tenants/[id]/commerce/order-pipeline.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/orders.module.css +154 -0
- package/dist/admin/tenants/[id]/commerce/owner-card.js +55 -0
- package/dist/admin/tenants/[id]/commerce/owner-card.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/pill.module.css +47 -0
- package/dist/admin/tenants/[id]/commerce/recent-orders.js +98 -0
- package/dist/admin/tenants/[id]/commerce/recent-orders.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce/shell.module.css +64 -0
- package/dist/admin/tenants/[id]/commerce/status-pill.js +19 -0
- package/dist/admin/tenants/[id]/commerce/status-pill.js.map +1 -0
- package/dist/admin/tenants/[id]/commerce.js +1 -0
- package/dist/admin/tenants/[id]/copy-text.js +30 -0
- package/dist/admin/tenants/[id]/copy-text.js.map +1 -0
- package/dist/admin/tenants/[id]/merchant-ledger.js +47 -0
- package/dist/admin/tenants/[id]/merchant-ledger.js.map +1 -0
- package/dist/admin/tenants/[id]/message-merchant-button.js +38 -0
- package/dist/admin/tenants/[id]/message-merchant-button.js.map +1 -0
- package/dist/admin/tenants/[id]/message-merchant-dialog.js +96 -0
- package/dist/admin/tenants/[id]/message-merchant-dialog.js.map +1 -0
- package/dist/admin/tenants/[id]/page.js +2308 -0
- package/dist/admin/tenants/[id]/page.js.map +1 -0
- package/dist/admin/tenants/[id]/subaccounts-panel.js +40 -0
- package/dist/admin/tenants/[id]/subaccounts-panel.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-activity-feed.js +92 -0
- package/dist/admin/tenants/[id]/tenant-activity-feed.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-activity.module.css +94 -0
- package/dist/admin/tenants/[id]/tenant-attention.js +93 -0
- package/dist/admin/tenants/[id]/tenant-attention.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-header.js +125 -0
- package/dist/admin/tenants/[id]/tenant-header.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-invites.js +49 -0
- package/dist/admin/tenants/[id]/tenant-invites.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-layout.module.css +106 -0
- package/dist/admin/tenants/[id]/tenant-overview.js +182 -0
- package/dist/admin/tenants/[id]/tenant-overview.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-overview.module.css +151 -0
- package/dist/admin/tenants/[id]/tenant-people-panel.js +109 -0
- package/dist/admin/tenants/[id]/tenant-people-panel.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-people.module.css +121 -0
- package/dist/admin/tenants/[id]/tenant-pos.js +101 -0
- package/dist/admin/tenants/[id]/tenant-pos.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-sidebar.js +115 -0
- package/dist/admin/tenants/[id]/tenant-sidebar.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-sidebar.module.css +53 -0
- package/dist/admin/tenants/[id]/tenant-support.js +37 -0
- package/dist/admin/tenants/[id]/tenant-support.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-tabs.js +22 -0
- package/dist/admin/tenants/[id]/tenant-tabs.js.map +1 -0
- package/dist/admin/tenants/[id]/tenant-wallet-card.js +53 -0
- package/dist/admin/tenants/[id]/tenant-wallet-card.js.map +1 -0
- package/dist/admin/tenants/[id]/use-set-account-officer.js +31 -0
- package/dist/admin/tenants/[id]/use-set-account-officer.js.map +1 -0
- package/dist/admin/tenants/[id]/use-tenant-wallet.js +23 -0
- package/dist/admin/tenants/[id]/use-tenant-wallet.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/business-records.js +70 -0
- package/dist/admin/tenants/[id]/verification/business-records.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-checks.js +81 -0
- package/dist/admin/tenants/[id]/verification/case-checks.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-events.js +44 -0
- package/dist/admin/tenants/[id]/verification/case-events.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-form-dialog.js +58 -0
- package/dist/admin/tenants/[id]/verification/case-form-dialog.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-history.js +27 -0
- package/dist/admin/tenants/[id]/verification/case-history.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-rules.js +72 -0
- package/dist/admin/tenants/[id]/verification/case-rules.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-status.js +47 -0
- package/dist/admin/tenants/[id]/verification/case-status.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/case-words.js +104 -0
- package/dist/admin/tenants/[id]/verification/case-words.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/decision-bar.js +59 -0
- package/dist/admin/tenants/[id]/verification/decision-bar.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/decision-dialogs.js +152 -0
- package/dist/admin/tenants/[id]/verification/decision-dialogs.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/document-file.js +78 -0
- package/dist/admin/tenants/[id]/verification/document-file.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/document-view.js +28 -0
- package/dist/admin/tenants/[id]/verification/document-view.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/document-viewer.js +46 -0
- package/dist/admin/tenants/[id]/verification/document-viewer.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/document-viewer.module.css +98 -0
- package/dist/admin/tenants/[id]/verification/person-card.js +111 -0
- package/dist/admin/tenants/[id]/verification/person-card.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/reveal-number.js +48 -0
- package/dist/admin/tenants/[id]/verification/reveal-number.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/reverse-dialog.js +52 -0
- package/dist/admin/tenants/[id]/verification/reverse-dialog.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/sent-files.js +33 -0
- package/dist/admin/tenants/[id]/verification/sent-files.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/tenant-verification.js +103 -0
- package/dist/admin/tenants/[id]/verification/tenant-verification.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/use-case.js +57 -0
- package/dist/admin/tenants/[id]/verification/use-case.js.map +1 -0
- package/dist/admin/tenants/[id]/verification/verification.module.css +168 -0
- package/dist/admin/tenants/account-officer-action.js +8 -0
- package/dist/admin/tenants/account-officer-action.js.map +1 -0
- package/dist/admin/tenants/account-officer-filter.js +43 -0
- package/dist/admin/tenants/account-officer-filter.js.map +1 -0
- package/dist/admin/tenants/account-officer-options.js +15 -0
- package/dist/admin/tenants/account-officer-options.js.map +1 -0
- package/dist/admin/tenants/country-filter.js +53 -0
- package/dist/admin/tenants/country-filter.js.map +1 -0
- package/dist/admin/tenants/country-options.js +22 -0
- package/dist/admin/tenants/country-options.js.map +1 -0
- package/dist/admin/tenants/message-merchant.js +61 -0
- package/dist/admin/tenants/message-merchant.js.map +1 -0
- package/dist/admin/tenants/page.js +11 -0
- package/dist/admin/tenants/page.js.map +1 -0
- package/dist/admin/tenants/tenant-list-row.js +169 -0
- package/dist/admin/tenants/tenant-list-row.js.map +1 -0
- package/dist/admin/tenants/tenants-analytics.js +119 -0
- package/dist/admin/tenants/tenants-analytics.js.map +1 -0
- package/dist/admin/tenants/tenants-kpis.js +98 -0
- package/dist/admin/tenants/tenants-kpis.js.map +1 -0
- package/dist/admin/tenants/tenants-logo.js +8 -0
- package/dist/admin/tenants/tenants-logo.js.map +1 -0
- package/dist/admin/tenants/tenants-table.js +135 -0
- package/dist/admin/tenants/tenants-table.js.map +1 -0
- package/dist/admin/tenants/tenants-workspace.js +98 -0
- package/dist/admin/tenants/tenants-workspace.js.map +1 -0
- package/dist/admin/till-requests/decision-dialog.js +59 -0
- package/dist/admin/till-requests/decision-dialog.js.map +1 -0
- package/dist/admin/till-requests/page.js +124 -0
- package/dist/admin/till-requests/page.js.map +1 -0
- package/dist/admin/till-requests/till-request-row.js +72 -0
- package/dist/admin/till-requests/till-request-row.js.map +1 -0
- package/dist/admin/verification/page.js +11 -0
- package/dist/admin/verification/page.js.map +1 -0
- package/dist/admin/verification/preview-dialog.js +111 -0
- package/dist/admin/verification/preview-dialog.js.map +1 -0
- package/dist/admin/verification/reject-dialog.js +94 -0
- package/dist/admin/verification/reject-dialog.js.map +1 -0
- package/dist/admin/verification/review-queue.js +124 -0
- package/dist/admin/verification/review-queue.js.map +1 -0
- package/dist/admin/verification/review-row.js +55 -0
- package/dist/admin/verification/review-row.js.map +1 -0
- package/dist/admin/verification/review.js +69 -0
- package/dist/admin/verification/review.js.map +1 -0
- package/dist/admin/verification/use-review.js +26 -0
- package/dist/admin/verification/use-review.js.map +1 -0
- package/dist/admin/verification/verification-page.js +35 -0
- package/dist/admin/verification/verification-page.js.map +1 -0
- package/dist/admin/verification/verification.module.css +30 -0
- package/dist/admin/verification/waiting-cases.js +94 -0
- package/dist/admin/verification/waiting-cases.js.map +1 -0
- package/dist/admin/wallets/page.js +11 -0
- package/dist/admin/wallets/page.js.map +1 -0
- package/dist/admin/wallets/wallets-workspace.js +37 -0
- package/dist/admin/wallets/wallets-workspace.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NOTE_MAX } from "./case-words";
|
|
2
|
+
const DECIDED = /* @__PURE__ */ new Set(["APPROVED", "DENIED", "NEEDS_MORE"]);
|
|
3
|
+
function barMode(status) {
|
|
4
|
+
if (status === "WAITING_REVIEW") return "decide";
|
|
5
|
+
return DECIDED.has(status) ? "reverse" : null;
|
|
6
|
+
}
|
|
7
|
+
function noteError(note) {
|
|
8
|
+
const clean = note.trim();
|
|
9
|
+
if (!clean) return "Add a note for the record.";
|
|
10
|
+
if (clean.length > NOTE_MAX)
|
|
11
|
+
return `Keep the note to ${NOTE_MAX} characters.`;
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
function denyErrors(input) {
|
|
15
|
+
return {
|
|
16
|
+
reason: input.reason ? void 0 : "Choose a reason.",
|
|
17
|
+
note: noteError(input.note)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function askMoreErrors(input) {
|
|
21
|
+
return {
|
|
22
|
+
redo: input.redo.length ? void 0 : "Choose what to send again.",
|
|
23
|
+
note: noteError(input.note)
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const hasErrors = (e) => Object.values(e).some(Boolean);
|
|
27
|
+
const REVEAL_MS = 3e4;
|
|
28
|
+
function groupDigits(value) {
|
|
29
|
+
return value.replace(/\s+/g, "").replace(/(.{4})(?=.)/g, "$1 ");
|
|
30
|
+
}
|
|
31
|
+
const FALLBACK = {
|
|
32
|
+
load: "The verification did not load.",
|
|
33
|
+
decide: "The decision was not saved. Try again.",
|
|
34
|
+
reverse: "The decision was not reversed. Try again.",
|
|
35
|
+
reveal: "The number did not load. Try again.",
|
|
36
|
+
photo: "The photo did not load.",
|
|
37
|
+
document: "The document did not open. Try again."
|
|
38
|
+
};
|
|
39
|
+
const FORBIDDEN = {
|
|
40
|
+
load: "You don't have permission to see verification cases.",
|
|
41
|
+
decide: "You don't have permission to decide verification cases.",
|
|
42
|
+
reverse: "A different admin has to reverse this decision.",
|
|
43
|
+
reveal: "You don't have permission to see full ID numbers.",
|
|
44
|
+
photo: "You don't have permission to see these photos.",
|
|
45
|
+
document: "You don't have permission to see documents."
|
|
46
|
+
};
|
|
47
|
+
const statusOf = (e) => e?.status;
|
|
48
|
+
const isNoCase = (e) => statusOf(e) === 404;
|
|
49
|
+
function caseErrorText(error, step) {
|
|
50
|
+
const status = statusOf(error);
|
|
51
|
+
const message = error instanceof Error ? error.message.trim() : "";
|
|
52
|
+
if (status === 409) return message || "That case changed. Refresh it.";
|
|
53
|
+
if (status === 403)
|
|
54
|
+
return step === "reverse" ? message || FORBIDDEN.reverse : FORBIDDEN[step];
|
|
55
|
+
if (step === "photo" && status === 404) return "No photo on file.";
|
|
56
|
+
if (step === "document" && status === 404)
|
|
57
|
+
return "The file for this document is missing.";
|
|
58
|
+
if (typeof status === "number" && status >= 500) return FALLBACK[step];
|
|
59
|
+
return message || FALLBACK[step];
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
REVEAL_MS,
|
|
63
|
+
askMoreErrors,
|
|
64
|
+
barMode,
|
|
65
|
+
caseErrorText,
|
|
66
|
+
denyErrors,
|
|
67
|
+
groupDigits,
|
|
68
|
+
hasErrors,
|
|
69
|
+
isNoCase,
|
|
70
|
+
noteError
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=case-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/case-rules.ts"],"sourcesContent":["import type {\n CaseStatus,\n DenyReason,\n RedoItem,\n} from '@withpotter/lib/admin-case-types';\nimport { NOTE_MAX } from './case-words';\n\n/**\n * What the reviewer may do with a case, the decision forms' checks and what\n * an error says. Pure, so it is tested without a browser.\n */\n\nexport type BarMode = 'decide' | 'reverse' | null;\n\nconst DECIDED = new Set<CaseStatus>(['APPROVED', 'DENIED', 'NEEDS_MORE']);\n\n/** The decision bar shows only when there is something to press. */\nexport function barMode(status: CaseStatus): BarMode {\n if (status === 'WAITING_REVIEW') return 'decide';\n\n return DECIDED.has(status) ? 'reverse' : null;\n}\n\n/** An error for a required note, or undefined when it can be sent. */\nexport function noteError(note: string): string | undefined {\n const clean = note.trim();\n\n if (!clean) return 'Add a note for the record.';\n\n if (clean.length > NOTE_MAX)\n return `Keep the note to ${NOTE_MAX} characters.`;\n\n return undefined;\n}\n\nexport function denyErrors(input: { reason: DenyReason | ''; note: string }): {\n reason?: string;\n note?: string;\n} {\n return {\n reason: input.reason ? undefined : 'Choose a reason.',\n note: noteError(input.note),\n };\n}\n\nexport function askMoreErrors(input: { redo: RedoItem[]; note: string }): {\n redo?: string;\n note?: string;\n} {\n return {\n redo: input.redo.length ? undefined : 'Choose what to send again.',\n note: noteError(input.note),\n };\n}\n\nexport const hasErrors = (e: Record<string, string | undefined>) =>\n Object.values(e).some(Boolean);\n\n/** How long a revealed number stays on screen. */\nexport const REVEAL_MS = 30_000;\n\n/** A revealed number, spaced in fours so it reads back aloud. */\nexport function groupDigits(value: string): string {\n return value.replace(/\\s+/g, '').replace(/(.{4})(?=.)/g, '$1 ');\n}\n\ntype Step = 'load' | 'decide' | 'reverse' | 'reveal' | 'photo' | 'document';\n\nconst FALLBACK: Record<Step, string> = {\n load: 'The verification did not load.',\n decide: 'The decision was not saved. Try again.',\n reverse: 'The decision was not reversed. Try again.',\n reveal: 'The number did not load. Try again.',\n photo: 'The photo did not load.',\n document: 'The document did not open. Try again.',\n};\n\nconst FORBIDDEN: Record<Step, string> = {\n load: \"You don't have permission to see verification cases.\",\n decide: \"You don't have permission to decide verification cases.\",\n reverse: 'A different admin has to reverse this decision.',\n reveal: \"You don't have permission to see full ID numbers.\",\n photo: \"You don't have permission to see these photos.\",\n document: \"You don't have permission to see documents.\",\n};\n\nconst statusOf = (e: unknown) => (e as { status?: unknown } | null)?.status;\n\n/** True when the business has never started verification. */\nexport const isNoCase = (e: unknown) => statusOf(e) === 404;\n\n/**\n * An error in plain words. A 409 keeps the server's line (someone decided or\n * changed the case first); a 403 says what is missing, and on a reversal it\n * is the four-eyes rule rather than a permission.\n */\nexport function caseErrorText(error: unknown, step: Step): string {\n const status = statusOf(error);\n const message = error instanceof Error ? error.message.trim() : '';\n\n if (status === 409) return message || 'That case changed. Refresh it.';\n\n // The four-eyes refusal is a 403 with its own line; keep it.\n if (status === 403)\n return step === 'reverse' ? message || FORBIDDEN.reverse : FORBIDDEN[step];\n\n if (step === 'photo' && status === 404) return 'No photo on file.';\n\n if (step === 'document' && status === 404)\n return 'The file for this document is missing.';\n\n if (typeof status === 'number' && status >= 500) return FALLBACK[step];\n\n return message || FALLBACK[step];\n}\n"],"mappings":"AAKA,SAAS,gBAAgB;AASzB,MAAM,UAAU,oBAAI,IAAgB,CAAC,YAAY,UAAU,YAAY,CAAC;AAGjE,SAAS,QAAQ,QAA6B;AACnD,MAAI,WAAW,iBAAkB,QAAO;AAExC,SAAO,QAAQ,IAAI,MAAM,IAAI,YAAY;AAC3C;AAGO,SAAS,UAAU,MAAkC;AAC1D,QAAM,QAAQ,KAAK,KAAK;AAExB,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,MAAM,SAAS;AACjB,WAAO,oBAAoB,QAAQ;AAErC,SAAO;AACT;AAEO,SAAS,WAAW,OAGzB;AACA,SAAO;AAAA,IACL,QAAQ,MAAM,SAAS,SAAY;AAAA,IACnC,MAAM,UAAU,MAAM,IAAI;AAAA,EAC5B;AACF;AAEO,SAAS,cAAc,OAG5B;AACA,SAAO;AAAA,IACL,MAAM,MAAM,KAAK,SAAS,SAAY;AAAA,IACtC,MAAM,UAAU,MAAM,IAAI;AAAA,EAC5B;AACF;AAEO,MAAM,YAAY,CAAC,MACxB,OAAO,OAAO,CAAC,EAAE,KAAK,OAAO;AAGxB,MAAM,YAAY;AAGlB,SAAS,YAAY,OAAuB;AACjD,SAAO,MAAM,QAAQ,QAAQ,EAAE,EAAE,QAAQ,gBAAgB,KAAK;AAChE;AAIA,MAAM,WAAiC;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AACZ;AAEA,MAAM,YAAkC;AAAA,EACtC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AACZ;AAEA,MAAM,WAAW,CAAC,MAAgB,GAAmC;AAG9D,MAAM,WAAW,CAAC,MAAe,SAAS,CAAC,MAAM;AAOjD,SAAS,cAAc,OAAgB,MAAoB;AAChE,QAAM,SAAS,SAAS,KAAK;AAC7B,QAAM,UAAU,iBAAiB,QAAQ,MAAM,QAAQ,KAAK,IAAI;AAEhE,MAAI,WAAW,IAAK,QAAO,WAAW;AAGtC,MAAI,WAAW;AACb,WAAO,SAAS,YAAY,WAAW,UAAU,UAAU,UAAU,IAAI;AAE3E,MAAI,SAAS,WAAW,WAAW,IAAK,QAAO;AAE/C,MAAI,SAAS,cAAc,WAAW;AACpC,WAAO;AAET,MAAI,OAAO,WAAW,YAAY,UAAU,IAAK,QAAO,SAAS,IAAI;AAErE,SAAO,WAAW,SAAS,IAAI;AACjC;","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Badge } from "@withpotter/ui-kit";
|
|
4
|
+
import { reasonWord, redoWords } from "./case-events";
|
|
5
|
+
import {
|
|
6
|
+
flagWords,
|
|
7
|
+
screeningWord,
|
|
8
|
+
shortDate,
|
|
9
|
+
statusLine
|
|
10
|
+
} from "./case-words";
|
|
11
|
+
import styles from "./verification.module.css";
|
|
12
|
+
function CaseStatus({
|
|
13
|
+
data,
|
|
14
|
+
nameOf
|
|
15
|
+
}) {
|
|
16
|
+
const flags = flagWords(data.flags);
|
|
17
|
+
const d = data.decision;
|
|
18
|
+
return /* @__PURE__ */ jsxs("section", { className: styles.status, "aria-label": "Verification status", children: [
|
|
19
|
+
/* @__PURE__ */ jsx("h2", { className: styles.statusLine, children: statusLine(data, nameOf) }),
|
|
20
|
+
/* @__PURE__ */ jsxs("div", { className: styles.meta, children: [
|
|
21
|
+
data.submittedAt && /* @__PURE__ */ jsxs("span", { children: [
|
|
22
|
+
"Submitted ",
|
|
23
|
+
shortDate(data.submittedAt)
|
|
24
|
+
] }),
|
|
25
|
+
/* @__PURE__ */ jsx("span", { children: data.people.length === 1 ? "1 person" : `${data.people.length} people` }),
|
|
26
|
+
data.businessScreening && /* @__PURE__ */ jsxs("span", { children: [
|
|
27
|
+
"Business screening: ",
|
|
28
|
+
screeningWord(data.businessScreening)
|
|
29
|
+
] }),
|
|
30
|
+
data.legacy && /* @__PURE__ */ jsx("span", { children: "Started before review was required" }),
|
|
31
|
+
d?.reason && /* @__PURE__ */ jsxs("span", { children: [
|
|
32
|
+
"Reason: ",
|
|
33
|
+
reasonWord(d.reason)
|
|
34
|
+
] }),
|
|
35
|
+
d && d.redo.length > 0 && /* @__PURE__ */ jsxs("span", { children: [
|
|
36
|
+
"Redo: ",
|
|
37
|
+
redoWords(d.redo)
|
|
38
|
+
] })
|
|
39
|
+
] }),
|
|
40
|
+
d?.note && /* @__PURE__ */ jsx("p", { className: styles.eventNote, children: d.note }),
|
|
41
|
+
flags.length > 0 && /* @__PURE__ */ jsx("div", { className: styles.flags, "aria-label": "Flags", children: flags.map((f) => /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: f }, f)) })
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
CaseStatus
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=case-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/case-status.tsx"],"sourcesContent":["'use client';\n\nimport { Badge } from '@withpotter/ui-kit';\nimport type { VerificationCase } from '@withpotter/lib/admin-case-types';\nimport { reasonWord, redoWords } from './case-events';\nimport {\n flagWords,\n screeningWord,\n shortDate,\n statusLine,\n type NameOf,\n} from './case-words';\nimport styles from './verification.module.css';\n\n/**\n * Where the case stands, stated once at the top of the record, with what\n * the checks flagged as plain chips under it.\n */\nexport function CaseStatus({\n data,\n nameOf,\n}: {\n data: VerificationCase;\n nameOf: NameOf;\n}) {\n const flags = flagWords(data.flags);\n const d = data.decision;\n\n return (\n <section className={styles.status} aria-label=\"Verification status\">\n <h2 className={styles.statusLine}>{statusLine(data, nameOf)}</h2>\n <div className={styles.meta}>\n {data.submittedAt && (\n <span>Submitted {shortDate(data.submittedAt)}</span>\n )}\n <span>\n {data.people.length === 1\n ? '1 person'\n : `${data.people.length} people`}\n </span>\n {data.businessScreening && (\n <span>\n Business screening: {screeningWord(data.businessScreening)}\n </span>\n )}\n {data.legacy && <span>Started before review was required</span>}\n {d?.reason && <span>Reason: {reasonWord(d.reason)}</span>}\n {d && d.redo.length > 0 && <span>Redo: {redoWords(d.redo)}</span>}\n </div>\n {d?.note && <p className={styles.eventNote}>{d.note}</p>}\n {flags.length > 0 && (\n <div className={styles.flags} aria-label=\"Flags\">\n {flags.map((f) => (\n <Badge key={f} variant=\"secondary\">\n {f}\n </Badge>\n ))}\n </div>\n )}\n </section>\n );\n}\n"],"mappings":";AA8BM,cAGI,YAHJ;AA5BN,SAAS,aAAa;AAEtB,SAAS,YAAY,iBAAiB;AACtC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,OAAO,YAAY;AAMZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AACF,GAGG;AACD,QAAM,QAAQ,UAAU,KAAK,KAAK;AAClC,QAAM,IAAI,KAAK;AAEf,SACE,qBAAC,aAAQ,WAAW,OAAO,QAAQ,cAAW,uBAC5C;AAAA,wBAAC,QAAG,WAAW,OAAO,YAAa,qBAAW,MAAM,MAAM,GAAE;AAAA,IAC5D,qBAAC,SAAI,WAAW,OAAO,MACpB;AAAA,WAAK,eACJ,qBAAC,UAAK;AAAA;AAAA,QAAW,UAAU,KAAK,WAAW;AAAA,SAAE;AAAA,MAE/C,oBAAC,UACE,eAAK,OAAO,WAAW,IACpB,aACA,GAAG,KAAK,OAAO,MAAM,WAC3B;AAAA,MACC,KAAK,qBACJ,qBAAC,UAAK;AAAA;AAAA,QACiB,cAAc,KAAK,iBAAiB;AAAA,SAC3D;AAAA,MAED,KAAK,UAAU,oBAAC,UAAK,gDAAkC;AAAA,MACvD,GAAG,UAAU,qBAAC,UAAK;AAAA;AAAA,QAAS,WAAW,EAAE,MAAM;AAAA,SAAE;AAAA,MACjD,KAAK,EAAE,KAAK,SAAS,KAAK,qBAAC,UAAK;AAAA;AAAA,QAAO,UAAU,EAAE,IAAI;AAAA,SAAE;AAAA,OAC5D;AAAA,IACC,GAAG,QAAQ,oBAAC,OAAE,WAAW,OAAO,WAAY,YAAE,MAAK;AAAA,IACnD,MAAM,SAAS,KACd,oBAAC,SAAI,WAAW,OAAO,OAAO,cAAW,SACtC,gBAAM,IAAI,CAAC,MACV,oBAAC,SAAc,SAAQ,aACpB,eADS,CAEZ,CACD,GACH;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const DAY = 864e5;
|
|
2
|
+
function shortDate(iso) {
|
|
3
|
+
return new Date(iso).toLocaleDateString("en-GB", {
|
|
4
|
+
day: "numeric",
|
|
5
|
+
month: "short",
|
|
6
|
+
year: "numeric"
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function waited(since, now = /* @__PURE__ */ new Date()) {
|
|
10
|
+
const days = Math.floor((now.getTime() - new Date(since).getTime()) / DAY);
|
|
11
|
+
if (days < 1) return "less than a day";
|
|
12
|
+
return days === 1 ? "1 day" : `${days} days`;
|
|
13
|
+
}
|
|
14
|
+
const DECIDED_WORD = {
|
|
15
|
+
APPROVED: "Approved",
|
|
16
|
+
DENIED: "Denied",
|
|
17
|
+
NEEDS_MORE: "Asked for more"
|
|
18
|
+
};
|
|
19
|
+
function statusLine(c, nameOf = () => null, now = /* @__PURE__ */ new Date()) {
|
|
20
|
+
switch (c.status) {
|
|
21
|
+
case "NOT_STARTED":
|
|
22
|
+
return "Not started";
|
|
23
|
+
case "CHECKING":
|
|
24
|
+
return "Checks running";
|
|
25
|
+
case "WAITING_REVIEW":
|
|
26
|
+
return c.waitingSince ? `Waiting for review, ${waited(c.waitingSince, now)}` : "Waiting for review";
|
|
27
|
+
}
|
|
28
|
+
const word = DECIDED_WORD[c.status];
|
|
29
|
+
const at = c.decision?.decidedAt;
|
|
30
|
+
const by = nameOf(c.decision?.decidedBy ?? null);
|
|
31
|
+
return [word, at && shortDate(at), by && `by ${by}`].filter(Boolean).join(" ");
|
|
32
|
+
}
|
|
33
|
+
const FLAG_WORDS = {
|
|
34
|
+
screeningMatch: "Possible screening match",
|
|
35
|
+
nameMismatch: "Name does not match",
|
|
36
|
+
idMismatch: "BVN and NIN disagree",
|
|
37
|
+
livenessFailed: "Liveness failed",
|
|
38
|
+
documentFailed: "ID photo turned down",
|
|
39
|
+
uploadedNotLive: "Photo uploaded, not taken live",
|
|
40
|
+
providerUnavailable: "Provider unavailable",
|
|
41
|
+
pendingAtProvider: "Pending at provider"
|
|
42
|
+
};
|
|
43
|
+
function flagWords(flags) {
|
|
44
|
+
return Object.keys(FLAG_WORDS).filter((k) => flags[k]).map((k) => FLAG_WORDS[k]);
|
|
45
|
+
}
|
|
46
|
+
const OUTCOME_WORDS = {
|
|
47
|
+
MATCHED: "Matched",
|
|
48
|
+
PASSED: "Passed",
|
|
49
|
+
NAME_MISMATCH: "Name does not match",
|
|
50
|
+
NOT_LIVE: "Not live",
|
|
51
|
+
REJECTED: "Rejected",
|
|
52
|
+
PENDING: "Pending",
|
|
53
|
+
PENDING_AT_PROVIDER: "Pending at provider",
|
|
54
|
+
UNAVAILABLE: "Provider unavailable"
|
|
55
|
+
};
|
|
56
|
+
const STATUS_WORDS = {
|
|
57
|
+
NONE: "Not checked",
|
|
58
|
+
PENDING: "Checking",
|
|
59
|
+
VERIFIED: "Passed",
|
|
60
|
+
FAILED: "Failed"
|
|
61
|
+
};
|
|
62
|
+
function checkWord(status, outcome) {
|
|
63
|
+
if (outcome) return OUTCOME_WORDS[outcome];
|
|
64
|
+
return status ? STATUS_WORDS[status] : "Not checked";
|
|
65
|
+
}
|
|
66
|
+
const GOOD = /* @__PURE__ */ new Set(["MATCHED", "PASSED", "VERIFIED", "CLEAR"]);
|
|
67
|
+
const BAD = /* @__PURE__ */ new Set([
|
|
68
|
+
"NAME_MISMATCH",
|
|
69
|
+
"NOT_LIVE",
|
|
70
|
+
"REJECTED",
|
|
71
|
+
"FAILED",
|
|
72
|
+
"REVIEW"
|
|
73
|
+
]);
|
|
74
|
+
function checkTone(status, outcome = null) {
|
|
75
|
+
const key = outcome ?? status ?? "";
|
|
76
|
+
if (GOOD.has(key)) return "good";
|
|
77
|
+
return BAD.has(key) ? "bad" : "neutral";
|
|
78
|
+
}
|
|
79
|
+
const SCREENING_WORDS = {
|
|
80
|
+
NONE: "Not screened",
|
|
81
|
+
PENDING: "Screening",
|
|
82
|
+
CLEAR: "Clear",
|
|
83
|
+
REVIEW: "Possible match",
|
|
84
|
+
REJECTED: "Rejected",
|
|
85
|
+
FAILED: "Screening failed"
|
|
86
|
+
};
|
|
87
|
+
const screeningWord = (s) => SCREENING_WORDS[s];
|
|
88
|
+
function scoreWord(score) {
|
|
89
|
+
if (score === null || Number.isNaN(score)) return null;
|
|
90
|
+
return `${Math.round(score <= 1 ? score * 100 : score)}%`;
|
|
91
|
+
}
|
|
92
|
+
const NOTE_MAX = 300;
|
|
93
|
+
export {
|
|
94
|
+
NOTE_MAX,
|
|
95
|
+
checkTone,
|
|
96
|
+
checkWord,
|
|
97
|
+
flagWords,
|
|
98
|
+
scoreWord,
|
|
99
|
+
screeningWord,
|
|
100
|
+
shortDate,
|
|
101
|
+
statusLine,
|
|
102
|
+
waited
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=case-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/case-words.ts"],"sourcesContent":["import type {\n CaseFlags,\n CheckOutcome,\n CheckStatus,\n ScreeningStatus,\n VerificationCase,\n} from '@withpotter/lib/admin-case-types';\n\n/**\n * The Verification tab's words, apart from the screen: the status line, the\n * flags and each check's outcome. Reasons and history: `case-events.ts`.\n * Pure, so it is tested without a browser.\n */\n\nconst DAY = 86_400_000;\n\n/** \"12 Oct 2026\", always with the year. */\nexport function shortDate(iso: string): string {\n return new Date(iso).toLocaleDateString('en-GB', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n });\n}\n\n/** \"less than a day\", \"1 day\", \"3 days\". */\nexport function waited(since: string, now = new Date()): string {\n const days = Math.floor((now.getTime() - new Date(since).getTime()) / DAY);\n\n if (days < 1) return 'less than a day';\n\n return days === 1 ? '1 day' : `${days} days`;\n}\n\n/** Who did something, by name where the admin list knows them. */\nexport type NameOf = (adminId: string | null) => string | null;\n\nconst DECIDED_WORD = {\n APPROVED: 'Approved',\n DENIED: 'Denied',\n NEEDS_MORE: 'Asked for more',\n} as const;\n\n/** The line at the top: where the case stands, and since when. */\nexport function statusLine(\n c: Pick<VerificationCase, 'status' | 'waitingSince' | 'decision'>,\n nameOf: NameOf = () => null,\n now = new Date(),\n): string {\n switch (c.status) {\n case 'NOT_STARTED':\n return 'Not started';\n case 'CHECKING':\n return 'Checks running';\n case 'WAITING_REVIEW':\n return c.waitingSince\n ? `Waiting for review, ${waited(c.waitingSince, now)}`\n : 'Waiting for review';\n }\n\n const word = DECIDED_WORD[c.status];\n const at = c.decision?.decidedAt;\n const by = nameOf(c.decision?.decidedBy ?? null);\n\n return [word, at && shortDate(at), by && `by ${by}`]\n .filter(Boolean)\n .join(' ');\n}\n\nconst FLAG_WORDS: Record<keyof Required<CaseFlags>, string> = {\n screeningMatch: 'Possible screening match',\n nameMismatch: 'Name does not match',\n idMismatch: 'BVN and NIN disagree',\n livenessFailed: 'Liveness failed',\n documentFailed: 'ID photo turned down',\n uploadedNotLive: 'Photo uploaded, not taken live',\n providerUnavailable: 'Provider unavailable',\n pendingAtProvider: 'Pending at provider',\n};\n\n/** The flags that are set, in a fixed order, as words. */\nexport function flagWords(flags: CaseFlags): string[] {\n return (Object.keys(FLAG_WORDS) as Array<keyof Required<CaseFlags>>)\n .filter((k) => flags[k])\n .map((k) => FLAG_WORDS[k]);\n}\n\nconst OUTCOME_WORDS: Record<CheckOutcome, string> = {\n MATCHED: 'Matched',\n PASSED: 'Passed',\n NAME_MISMATCH: 'Name does not match',\n NOT_LIVE: 'Not live',\n REJECTED: 'Rejected',\n PENDING: 'Pending',\n PENDING_AT_PROVIDER: 'Pending at provider',\n UNAVAILABLE: 'Provider unavailable',\n};\n\nconst STATUS_WORDS: Record<CheckStatus, string> = {\n NONE: 'Not checked',\n PENDING: 'Checking',\n VERIFIED: 'Passed',\n FAILED: 'Failed',\n};\n\n/** A check in words: its outcome when the provider said why, else its status. */\nexport function checkWord(\n status: CheckStatus | null,\n outcome: CheckOutcome | null,\n): string {\n if (outcome) return OUTCOME_WORDS[outcome];\n\n return status ? STATUS_WORDS[status] : 'Not checked';\n}\n\nexport type Tone = 'good' | 'bad' | 'neutral';\n\nconst GOOD = new Set<string>(['MATCHED', 'PASSED', 'VERIFIED', 'CLEAR']);\nconst BAD = new Set<string>([\n 'NAME_MISMATCH',\n 'NOT_LIVE',\n 'REJECTED',\n 'FAILED',\n 'REVIEW',\n]);\n\n/** Whether a check reads as fine, as a problem, or neither yet. */\nexport function checkTone(\n status: CheckStatus | ScreeningStatus | null,\n outcome: CheckOutcome | null = null,\n): Tone {\n const key = outcome ?? status ?? '';\n\n if (GOOD.has(key)) return 'good';\n\n return BAD.has(key) ? 'bad' : 'neutral';\n}\n\nconst SCREENING_WORDS: Record<ScreeningStatus, string> = {\n NONE: 'Not screened',\n PENDING: 'Screening',\n CLEAR: 'Clear',\n REVIEW: 'Possible match',\n REJECTED: 'Rejected',\n FAILED: 'Screening failed',\n};\n\nexport const screeningWord = (s: ScreeningStatus) => SCREENING_WORDS[s];\n\n/** \"84%\" for a 0–1 or 0–100 score; null when the provider gave none. */\nexport function scoreWord(score: number | null): string | null {\n if (score === null || Number.isNaN(score)) return null;\n\n return `${Math.round(score <= 1 ? score * 100 : score)}%`;\n}\n\nexport const NOTE_MAX = 300;\n"],"mappings":"AAcA,MAAM,MAAM;AAGL,SAAS,UAAU,KAAqB;AAC7C,SAAO,IAAI,KAAK,GAAG,EAAE,mBAAmB,SAAS;AAAA,IAC/C,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH;AAGO,SAAS,OAAO,OAAe,MAAM,oBAAI,KAAK,GAAW;AAC9D,QAAM,OAAO,KAAK,OAAO,IAAI,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,QAAQ,KAAK,GAAG;AAEzE,MAAI,OAAO,EAAG,QAAO;AAErB,SAAO,SAAS,IAAI,UAAU,GAAG,IAAI;AACvC;AAKA,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd;AAGO,SAAS,WACd,GACA,SAAiB,MAAM,MACvB,MAAM,oBAAI,KAAK,GACP;AACR,UAAQ,EAAE,QAAQ;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,EAAE,eACL,uBAAuB,OAAO,EAAE,cAAc,GAAG,CAAC,KAClD;AAAA,EACR;AAEA,QAAM,OAAO,aAAa,EAAE,MAAM;AAClC,QAAM,KAAK,EAAE,UAAU;AACvB,QAAM,KAAK,OAAO,EAAE,UAAU,aAAa,IAAI;AAE/C,SAAO,CAAC,MAAM,MAAM,UAAU,EAAE,GAAG,MAAM,MAAM,EAAE,EAAE,EAChD,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAEA,MAAM,aAAwD;AAAA,EAC5D,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,mBAAmB;AACrB;AAGO,SAAS,UAAU,OAA4B;AACpD,SAAQ,OAAO,KAAK,UAAU,EAC3B,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,EACtB,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;AAC7B;AAEA,MAAM,gBAA8C;AAAA,EAClD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,aAAa;AACf;AAEA,MAAM,eAA4C;AAAA,EAChD,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AACV;AAGO,SAAS,UACd,QACA,SACQ;AACR,MAAI,QAAS,QAAO,cAAc,OAAO;AAEzC,SAAO,SAAS,aAAa,MAAM,IAAI;AACzC;AAIA,MAAM,OAAO,oBAAI,IAAY,CAAC,WAAW,UAAU,YAAY,OAAO,CAAC;AACvE,MAAM,MAAM,oBAAI,IAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,SAAS,UACd,QACA,UAA+B,MACzB;AACN,QAAM,MAAM,WAAW,UAAU;AAEjC,MAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAE1B,SAAO,IAAI,IAAI,GAAG,IAAI,QAAQ;AAChC;AAEA,MAAM,kBAAmD;AAAA,EACvD,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AACV;AAEO,MAAM,gBAAgB,CAAC,MAAuB,gBAAgB,CAAC;AAG/D,SAAS,UAAU,OAAqC;AAC7D,MAAI,UAAU,QAAQ,OAAO,MAAM,KAAK,EAAG,QAAO;AAElD,SAAO,GAAG,KAAK,MAAM,SAAS,IAAI,QAAQ,MAAM,KAAK,CAAC;AACxD;AAEO,MAAM,WAAW;","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Button, useConfirm, useToast } from "@withpotter/ui-kit";
|
|
5
|
+
import { useMoneyPermissions } from "../../../_money/permissions";
|
|
6
|
+
import { barMode, caseErrorText } from "./case-rules";
|
|
7
|
+
import { AskMoreDialog, DenyDialog } from "./decision-dialogs";
|
|
8
|
+
import { ReverseDialog } from "./reverse-dialog";
|
|
9
|
+
import { useDecideCase } from "./use-case";
|
|
10
|
+
import styles from "./verification.module.css";
|
|
11
|
+
function DecisionBar({ data }) {
|
|
12
|
+
const { toast } = useToast();
|
|
13
|
+
const confirm = useConfirm();
|
|
14
|
+
const { adminId, manageComplianceHint } = useMoneyPermissions();
|
|
15
|
+
const decide = useDecideCase(data.tenantId);
|
|
16
|
+
const [open, setOpen] = useState(null);
|
|
17
|
+
const mode = barMode(data.status);
|
|
18
|
+
const business = data.businessName ?? "This business";
|
|
19
|
+
if (!mode) return null;
|
|
20
|
+
const ownDecision = mode === "reverse" && !!adminId && data.decision?.decidedBy === adminId;
|
|
21
|
+
const hint = ownDecision ? "You made this decision. A different admin has to reverse it." : manageComplianceHint;
|
|
22
|
+
async function approve() {
|
|
23
|
+
const ok = await confirm({
|
|
24
|
+
title: `Approve ${business}?`,
|
|
25
|
+
description: "Everyone listed is marked verified.",
|
|
26
|
+
confirmLabel: "Approve"
|
|
27
|
+
});
|
|
28
|
+
if (!ok) return;
|
|
29
|
+
decide.mutate(
|
|
30
|
+
{ decision: "APPROVE" },
|
|
31
|
+
{
|
|
32
|
+
onSuccess: () => toast({ title: `${business} approved` }),
|
|
33
|
+
onError: (e) => toast({ title: caseErrorText(e, "decide"), variant: "destructive" })
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
const dialog = {
|
|
38
|
+
tenantId: data.tenantId,
|
|
39
|
+
business,
|
|
40
|
+
onClose: () => setOpen(null)
|
|
41
|
+
};
|
|
42
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
43
|
+
/* @__PURE__ */ jsxs("div", { className: styles.bar, role: "group", "aria-label": "Decision", children: [
|
|
44
|
+
hint && /* @__PURE__ */ jsx("span", { className: styles.barHint, children: hint }),
|
|
45
|
+
mode === "decide" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setOpen("more"), children: "Ask for more" }),
|
|
47
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setOpen("deny"), children: "Deny" }),
|
|
48
|
+
/* @__PURE__ */ jsx(Button, { loading: decide.isPending, onClick: () => void approve(), children: "Approve" })
|
|
49
|
+
] }) : /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setOpen("reverse"), children: "Reverse decision" })
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ jsx(DenyDialog, { ...dialog, open: open === "deny" }),
|
|
52
|
+
/* @__PURE__ */ jsx(AskMoreDialog, { ...dialog, open: open === "more" }),
|
|
53
|
+
/* @__PURE__ */ jsx(ReverseDialog, { ...dialog, open: open === "reverse" })
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
DecisionBar
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=decision-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/decision-bar.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Button, useConfirm, useToast } from '@withpotter/ui-kit';\nimport type { VerificationCase } from '@withpotter/lib/admin-case-types';\nimport { useMoneyPermissions } from '../../../_money/permissions';\nimport { barMode, caseErrorText } from './case-rules';\nimport { AskMoreDialog, DenyDialog } from './decision-dialogs';\nimport { ReverseDialog } from './reverse-dialog';\nimport { useDecideCase } from './use-case';\nimport styles from './verification.module.css';\n\ntype Open = 'deny' | 'more' | 'reverse' | null;\n\n/**\n * The decision, pinned to the bottom of the tab and drawn only when there\n * is one to make: Approve, Deny or Ask for more while the case waits, and\n * Reverse once it is decided. Nothing is locked on a missing permission;\n * the hint says so and the server decides.\n */\nexport function DecisionBar({ data }: { data: VerificationCase }) {\n const { toast } = useToast();\n const confirm = useConfirm();\n const { adminId, manageComplianceHint } = useMoneyPermissions();\n const decide = useDecideCase(data.tenantId);\n const [open, setOpen] = useState<Open>(null);\n const mode = barMode(data.status);\n const business = data.businessName ?? 'This business';\n\n if (!mode) return null;\n\n const ownDecision =\n mode === 'reverse' && !!adminId && data.decision?.decidedBy === adminId;\n const hint = ownDecision\n ? 'You made this decision. A different admin has to reverse it.'\n : manageComplianceHint;\n\n async function approve() {\n const ok = await confirm({\n title: `Approve ${business}?`,\n description: 'Everyone listed is marked verified.',\n confirmLabel: 'Approve',\n });\n\n if (!ok) return;\n\n decide.mutate(\n { decision: 'APPROVE' },\n {\n onSuccess: () => toast({ title: `${business} approved` }),\n onError: (e) =>\n toast({ title: caseErrorText(e, 'decide'), variant: 'destructive' }),\n },\n );\n }\n\n const dialog = {\n tenantId: data.tenantId,\n business,\n onClose: () => setOpen(null),\n };\n\n return (\n <>\n <div className={styles.bar} role=\"group\" aria-label=\"Decision\">\n {hint && <span className={styles.barHint}>{hint}</span>}\n {mode === 'decide' ? (\n <>\n <Button variant=\"secondary\" onClick={() => setOpen('more')}>\n Ask for more\n </Button>\n <Button variant=\"secondary\" onClick={() => setOpen('deny')}>\n Deny\n </Button>\n <Button loading={decide.isPending} onClick={() => void approve()}>\n Approve\n </Button>\n </>\n ) : (\n <Button variant=\"secondary\" onClick={() => setOpen('reverse')}>\n Reverse decision\n </Button>\n )}\n </div>\n <DenyDialog {...dialog} open={open === 'deny'} />\n <AskMoreDialog {...dialog} open={open === 'more'} />\n <ReverseDialog {...dialog} open={open === 'reverse'} />\n </>\n );\n}\n"],"mappings":";AAiEiB,SAEP,UAFO,KAEP,YAFO;AA/DjB,SAAS,gBAAgB;AACzB,SAAS,QAAQ,YAAY,gBAAgB;AAE7C,SAAS,2BAA2B;AACpC,SAAS,SAAS,qBAAqB;AACvC,SAAS,eAAe,kBAAkB;AAC1C,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,OAAO,YAAY;AAUZ,SAAS,YAAY,EAAE,KAAK,GAA+B;AAChE,QAAM,EAAE,MAAM,IAAI,SAAS;AAC3B,QAAM,UAAU,WAAW;AAC3B,QAAM,EAAE,SAAS,qBAAqB,IAAI,oBAAoB;AAC9D,QAAM,SAAS,cAAc,KAAK,QAAQ;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAe,IAAI;AAC3C,QAAM,OAAO,QAAQ,KAAK,MAAM;AAChC,QAAM,WAAW,KAAK,gBAAgB;AAEtC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,cACJ,SAAS,aAAa,CAAC,CAAC,WAAW,KAAK,UAAU,cAAc;AAClE,QAAM,OAAO,cACT,iEACA;AAEJ,iBAAe,UAAU;AACvB,UAAM,KAAK,MAAM,QAAQ;AAAA,MACvB,OAAO,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,CAAC,GAAI;AAET,WAAO;AAAA,MACL,EAAE,UAAU,UAAU;AAAA,MACtB;AAAA,QACE,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG,QAAQ,YAAY,CAAC;AAAA,QACxD,SAAS,CAAC,MACR,MAAM,EAAE,OAAO,cAAc,GAAG,QAAQ,GAAG,SAAS,cAAc,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS;AAAA,IACb,UAAU,KAAK;AAAA,IACf;AAAA,IACA,SAAS,MAAM,QAAQ,IAAI;AAAA,EAC7B;AAEA,SACE,iCACE;AAAA,yBAAC,SAAI,WAAW,OAAO,KAAK,MAAK,SAAQ,cAAW,YACjD;AAAA,cAAQ,oBAAC,UAAK,WAAW,OAAO,SAAU,gBAAK;AAAA,MAC/C,SAAS,WACR,iCACE;AAAA,4BAAC,UAAO,SAAQ,aAAY,SAAS,MAAM,QAAQ,MAAM,GAAG,0BAE5D;AAAA,QACA,oBAAC,UAAO,SAAQ,aAAY,SAAS,MAAM,QAAQ,MAAM,GAAG,kBAE5D;AAAA,QACA,oBAAC,UAAO,SAAS,OAAO,WAAW,SAAS,MAAM,KAAK,QAAQ,GAAG,qBAElE;AAAA,SACF,IAEA,oBAAC,UAAO,SAAQ,aAAY,SAAS,MAAM,QAAQ,SAAS,GAAG,8BAE/D;AAAA,OAEJ;AAAA,IACA,oBAAC,cAAY,GAAG,QAAQ,MAAM,SAAS,QAAQ;AAAA,IAC/C,oBAAC,iBAAe,GAAG,QAAQ,MAAM,SAAS,QAAQ;AAAA,IAClD,oBAAC,iBAAe,GAAG,QAAQ,MAAM,SAAS,WAAW;AAAA,KACvD;AAEJ;","names":[]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import {
|
|
5
|
+
CheckboxGroup,
|
|
6
|
+
ErrorBanner,
|
|
7
|
+
Field,
|
|
8
|
+
Select,
|
|
9
|
+
useToast
|
|
10
|
+
} from "@withpotter/ui-kit";
|
|
11
|
+
import {
|
|
12
|
+
askMoreErrors,
|
|
13
|
+
caseErrorText,
|
|
14
|
+
denyErrors,
|
|
15
|
+
hasErrors
|
|
16
|
+
} from "./case-rules";
|
|
17
|
+
import { DENY_REASONS, REDO_ITEMS } from "./case-events";
|
|
18
|
+
import { CaseFormDialog } from "./case-form-dialog";
|
|
19
|
+
import { useDecideCase } from "./use-case";
|
|
20
|
+
const EMAILED = "Why, for the record.";
|
|
21
|
+
function useForm(initial) {
|
|
22
|
+
const [note, setNote] = useState("");
|
|
23
|
+
const [fields, setFields] = useState(initial);
|
|
24
|
+
const [tried, setTried] = useState(false);
|
|
25
|
+
const reset = () => {
|
|
26
|
+
setNote("");
|
|
27
|
+
setFields(initial);
|
|
28
|
+
setTried(false);
|
|
29
|
+
};
|
|
30
|
+
return { note, setNote, fields, setFields, tried, setTried, reset };
|
|
31
|
+
}
|
|
32
|
+
function DenyDialog({ tenantId, business, open, onClose }) {
|
|
33
|
+
const { toast } = useToast();
|
|
34
|
+
const decide = useDecideCase(tenantId);
|
|
35
|
+
const f = useForm({ reason: "" });
|
|
36
|
+
const errors = denyErrors({ reason: f.fields.reason, note: f.note });
|
|
37
|
+
const close = () => {
|
|
38
|
+
onClose();
|
|
39
|
+
decide.reset();
|
|
40
|
+
f.reset();
|
|
41
|
+
};
|
|
42
|
+
const submit = () => {
|
|
43
|
+
f.setTried(true);
|
|
44
|
+
if (hasErrors(errors) || !f.fields.reason) return;
|
|
45
|
+
decide.mutate(
|
|
46
|
+
{ decision: "DENY", reason: f.fields.reason, note: f.note.trim() },
|
|
47
|
+
{
|
|
48
|
+
onSuccess: () => {
|
|
49
|
+
toast({ title: `${business} denied` });
|
|
50
|
+
close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
return /* @__PURE__ */ jsxs(
|
|
56
|
+
CaseFormDialog,
|
|
57
|
+
{
|
|
58
|
+
open,
|
|
59
|
+
title: "Deny verification",
|
|
60
|
+
description: business,
|
|
61
|
+
act: "Deny",
|
|
62
|
+
tone: "danger",
|
|
63
|
+
pending: decide.isPending,
|
|
64
|
+
error: decide.isError ? caseErrorText(decide.error, "decide") : void 0,
|
|
65
|
+
note: f.note,
|
|
66
|
+
notePlaceholder: EMAILED,
|
|
67
|
+
noteError: f.tried ? errors.note : void 0,
|
|
68
|
+
onNote: f.setNote,
|
|
69
|
+
onSubmit: submit,
|
|
70
|
+
onClose: close,
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ jsx(Field, { label: "Reason", children: /* @__PURE__ */ jsx(
|
|
73
|
+
Select,
|
|
74
|
+
{
|
|
75
|
+
ariaLabel: "Reason",
|
|
76
|
+
placeholder: "Choose a reason",
|
|
77
|
+
inset: true,
|
|
78
|
+
invalid: f.tried && !!errors.reason,
|
|
79
|
+
value: f.fields.reason,
|
|
80
|
+
options: DENY_REASONS,
|
|
81
|
+
onChange: (v) => f.setFields({ reason: v })
|
|
82
|
+
}
|
|
83
|
+
) }),
|
|
84
|
+
f.tried && errors.reason && /* @__PURE__ */ jsx(ErrorBanner, { children: errors.reason })
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
function AskMoreDialog({
|
|
90
|
+
tenantId,
|
|
91
|
+
business,
|
|
92
|
+
open,
|
|
93
|
+
onClose
|
|
94
|
+
}) {
|
|
95
|
+
const { toast } = useToast();
|
|
96
|
+
const decide = useDecideCase(tenantId);
|
|
97
|
+
const f = useForm({ redo: [] });
|
|
98
|
+
const errors = askMoreErrors({ redo: f.fields.redo, note: f.note });
|
|
99
|
+
const close = () => {
|
|
100
|
+
onClose();
|
|
101
|
+
decide.reset();
|
|
102
|
+
f.reset();
|
|
103
|
+
};
|
|
104
|
+
const submit = () => {
|
|
105
|
+
f.setTried(true);
|
|
106
|
+
if (hasErrors(errors)) return;
|
|
107
|
+
decide.mutate(
|
|
108
|
+
{ decision: "ASK_FOR_MORE", redo: f.fields.redo, note: f.note.trim() },
|
|
109
|
+
{
|
|
110
|
+
onSuccess: () => {
|
|
111
|
+
toast({ title: `Asked ${business} for more` });
|
|
112
|
+
close();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
return /* @__PURE__ */ jsxs(
|
|
118
|
+
CaseFormDialog,
|
|
119
|
+
{
|
|
120
|
+
open,
|
|
121
|
+
title: "Ask for more",
|
|
122
|
+
description: business,
|
|
123
|
+
act: "Ask for more",
|
|
124
|
+
tone: "primary",
|
|
125
|
+
pending: decide.isPending,
|
|
126
|
+
error: decide.isError ? caseErrorText(decide.error, "decide") : void 0,
|
|
127
|
+
note: f.note,
|
|
128
|
+
notePlaceholder: EMAILED,
|
|
129
|
+
noteError: f.tried ? errors.note : void 0,
|
|
130
|
+
onNote: f.setNote,
|
|
131
|
+
onSubmit: submit,
|
|
132
|
+
onClose: close,
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
CheckboxGroup,
|
|
136
|
+
{
|
|
137
|
+
label: "Send again",
|
|
138
|
+
options: REDO_ITEMS,
|
|
139
|
+
value: f.fields.redo,
|
|
140
|
+
onChange: (v) => f.setFields({ redo: v })
|
|
141
|
+
}
|
|
142
|
+
),
|
|
143
|
+
f.tried && errors.redo && /* @__PURE__ */ jsx(ErrorBanner, { children: errors.redo })
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
export {
|
|
149
|
+
AskMoreDialog,
|
|
150
|
+
DenyDialog
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=decision-dialogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/decision-dialogs.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport {\n CheckboxGroup,\n ErrorBanner,\n Field,\n Select,\n useToast,\n} from '@withpotter/ui-kit';\nimport type { DenyReason, RedoItem } from '@withpotter/lib/admin-case-types';\nimport {\n askMoreErrors,\n caseErrorText,\n denyErrors,\n hasErrors,\n} from './case-rules';\nimport { DENY_REASONS, REDO_ITEMS } from './case-events';\nimport { CaseFormDialog } from './case-form-dialog';\nimport { useDecideCase } from './use-case';\n\nexport type DialogProps = {\n tenantId: string;\n business: string;\n open: boolean;\n onClose: () => void;\n};\n\n/** Olive does not email the business a decision yet; the note is the record. */\nconst EMAILED = 'Why, for the record.';\n\n/** One form's note, whether it has been tried, and a reset for closing. */\nfunction useForm<T>(initial: T) {\n const [note, setNote] = useState('');\n const [fields, setFields] = useState(initial);\n const [tried, setTried] = useState(false);\n const reset = () => {\n setNote('');\n setFields(initial);\n setTried(false);\n };\n\n return { note, setNote, fields, setFields, tried, setTried, reset };\n}\n\nexport function DenyDialog({ tenantId, business, open, onClose }: DialogProps) {\n const { toast } = useToast();\n const decide = useDecideCase(tenantId);\n const f = useForm<{ reason: DenyReason | '' }>({ reason: '' });\n const errors = denyErrors({ reason: f.fields.reason, note: f.note });\n const close = () => {\n onClose();\n decide.reset();\n f.reset();\n };\n const submit = () => {\n f.setTried(true);\n\n if (hasErrors(errors) || !f.fields.reason) return;\n\n decide.mutate(\n { decision: 'DENY', reason: f.fields.reason, note: f.note.trim() },\n {\n onSuccess: () => {\n toast({ title: `${business} denied` });\n close();\n },\n },\n );\n };\n\n return (\n <CaseFormDialog\n open={open}\n title=\"Deny verification\"\n description={business}\n act=\"Deny\"\n tone=\"danger\"\n pending={decide.isPending}\n error={decide.isError ? caseErrorText(decide.error, 'decide') : undefined}\n note={f.note}\n notePlaceholder={EMAILED}\n noteError={f.tried ? errors.note : undefined}\n onNote={f.setNote}\n onSubmit={submit}\n onClose={close}\n >\n <Field label=\"Reason\">\n <Select\n ariaLabel=\"Reason\"\n placeholder=\"Choose a reason\"\n inset\n invalid={f.tried && !!errors.reason}\n value={f.fields.reason}\n options={DENY_REASONS}\n onChange={(v) => f.setFields({ reason: v as DenyReason })}\n />\n </Field>\n {f.tried && errors.reason && <ErrorBanner>{errors.reason}</ErrorBanner>}\n </CaseFormDialog>\n );\n}\n\nexport function AskMoreDialog({\n tenantId,\n business,\n open,\n onClose,\n}: DialogProps) {\n const { toast } = useToast();\n const decide = useDecideCase(tenantId);\n const f = useForm<{ redo: RedoItem[] }>({ redo: [] });\n const errors = askMoreErrors({ redo: f.fields.redo, note: f.note });\n const close = () => {\n onClose();\n decide.reset();\n f.reset();\n };\n const submit = () => {\n f.setTried(true);\n\n if (hasErrors(errors)) return;\n\n decide.mutate(\n { decision: 'ASK_FOR_MORE', redo: f.fields.redo, note: f.note.trim() },\n {\n onSuccess: () => {\n toast({ title: `Asked ${business} for more` });\n close();\n },\n },\n );\n };\n\n return (\n <CaseFormDialog\n open={open}\n title=\"Ask for more\"\n description={business}\n act=\"Ask for more\"\n tone=\"primary\"\n pending={decide.isPending}\n error={decide.isError ? caseErrorText(decide.error, 'decide') : undefined}\n note={f.note}\n notePlaceholder={EMAILED}\n noteError={f.tried ? errors.note : undefined}\n onNote={f.setNote}\n onSubmit={submit}\n onClose={close}\n >\n <CheckboxGroup\n label=\"Send again\"\n options={REDO_ITEMS}\n value={f.fields.redo}\n onChange={(v) => f.setFields({ redo: v as RedoItem[] })}\n />\n {f.tried && errors.redo && <ErrorBanner>{errors.redo}</ErrorBanner>}\n </CaseFormDialog>\n );\n}\n"],"mappings":";AAwEI,SAgBI,KAhBJ;AAtEJ,SAAS,gBAAgB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc,kBAAkB;AACzC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAU9B,MAAM,UAAU;AAGhB,SAAS,QAAW,SAAY;AAC9B,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE;AACnC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,OAAO;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,QAAQ,MAAM;AAClB,YAAQ,EAAE;AACV,cAAU,OAAO;AACjB,aAAS,KAAK;AAAA,EAChB;AAEA,SAAO,EAAE,MAAM,SAAS,QAAQ,WAAW,OAAO,UAAU,MAAM;AACpE;AAEO,SAAS,WAAW,EAAE,UAAU,UAAU,MAAM,QAAQ,GAAgB;AAC7E,QAAM,EAAE,MAAM,IAAI,SAAS;AAC3B,QAAM,SAAS,cAAc,QAAQ;AACrC,QAAM,IAAI,QAAqC,EAAE,QAAQ,GAAG,CAAC;AAC7D,QAAM,SAAS,WAAW,EAAE,QAAQ,EAAE,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC;AACnE,QAAM,QAAQ,MAAM;AAClB,YAAQ;AACR,WAAO,MAAM;AACb,MAAE,MAAM;AAAA,EACV;AACA,QAAM,SAAS,MAAM;AACnB,MAAE,SAAS,IAAI;AAEf,QAAI,UAAU,MAAM,KAAK,CAAC,EAAE,OAAO,OAAQ;AAE3C,WAAO;AAAA,MACL,EAAE,UAAU,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,EAAE,KAAK,KAAK,EAAE;AAAA,MACjE;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,EAAE,OAAO,GAAG,QAAQ,UAAU,CAAC;AACrC,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,aAAa;AAAA,MACb,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO,UAAU,cAAc,OAAO,OAAO,QAAQ,IAAI;AAAA,MAChE,MAAM,EAAE;AAAA,MACR,iBAAiB;AAAA,MACjB,WAAW,EAAE,QAAQ,OAAO,OAAO;AAAA,MACnC,QAAQ,EAAE;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MAET;AAAA,4BAAC,SAAM,OAAM,UACX;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAY;AAAA,YACZ,OAAK;AAAA,YACL,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO;AAAA,YAC7B,OAAO,EAAE,OAAO;AAAA,YAChB,SAAS;AAAA,YACT,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAgB,CAAC;AAAA;AAAA,QAC1D,GACF;AAAA,QACC,EAAE,SAAS,OAAO,UAAU,oBAAC,eAAa,iBAAO,QAAO;AAAA;AAAA;AAAA,EAC3D;AAEJ;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AACd,QAAM,EAAE,MAAM,IAAI,SAAS;AAC3B,QAAM,SAAS,cAAc,QAAQ;AACrC,QAAM,IAAI,QAA8B,EAAE,MAAM,CAAC,EAAE,CAAC;AACpD,QAAM,SAAS,cAAc,EAAE,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC;AAClE,QAAM,QAAQ,MAAM;AAClB,YAAQ;AACR,WAAO,MAAM;AACb,MAAE,MAAM;AAAA,EACV;AACA,QAAM,SAAS,MAAM;AACnB,MAAE,SAAS,IAAI;AAEf,QAAI,UAAU,MAAM,EAAG;AAEvB,WAAO;AAAA,MACL,EAAE,UAAU,gBAAgB,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,KAAK,KAAK,EAAE;AAAA,MACrE;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,EAAE,OAAO,SAAS,QAAQ,YAAY,CAAC;AAC7C,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,aAAa;AAAA,MACb,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO,UAAU,cAAc,OAAO,OAAO,QAAQ,IAAI;AAAA,MAChE,MAAM,EAAE;AAAA,MACR,iBAAiB;AAAA,MACjB,WAAW,EAAE,QAAQ,OAAO,OAAO;AAAA,MACnC,QAAQ,EAAE;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MAET;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO,EAAE,OAAO;AAAA,YAChB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAgB,CAAC;AAAA;AAAA,QACxD;AAAA,QACC,EAAE,SAAS,OAAO,QAAQ,oBAAC,eAAa,iBAAO,MAAK;AAAA;AAAA;AAAA,EACvD;AAEJ;","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useQuery } from "@tanstack/react-query";
|
|
5
|
+
import { adminCaseApi } from "@withpotter/lib/admin-case-api";
|
|
6
|
+
import { AdmLoading } from "../../../_ui";
|
|
7
|
+
import { documentWord } from "./case-checks";
|
|
8
|
+
import { caseErrorText } from "./case-rules";
|
|
9
|
+
import { documentLinkKey, pdfSource, viewerKind } from "./document-view";
|
|
10
|
+
import styles from "./document-viewer.module.css";
|
|
11
|
+
function DocumentFile({
|
|
12
|
+
tenantId,
|
|
13
|
+
document,
|
|
14
|
+
size = "full"
|
|
15
|
+
}) {
|
|
16
|
+
const link = useQuery({
|
|
17
|
+
queryKey: [...documentLinkKey(tenantId, document.id), size],
|
|
18
|
+
queryFn: () => adminCaseApi.viewDocument(tenantId, document.id),
|
|
19
|
+
retry: false,
|
|
20
|
+
staleTime: Infinity,
|
|
21
|
+
gcTime: 0,
|
|
22
|
+
refetchOnWindowFocus: false,
|
|
23
|
+
refetchOnReconnect: false
|
|
24
|
+
});
|
|
25
|
+
const name = documentWord(document);
|
|
26
|
+
const thumb = size === "thumb";
|
|
27
|
+
if (link.isLoading)
|
|
28
|
+
return thumb ? /* @__PURE__ */ jsx("div", { className: styles.thumbFrame, children: /* @__PURE__ */ jsx("span", { className: styles.note, children: "Loading\u2026" }) }) : /* @__PURE__ */ jsx(AdmLoading, { label: "Opening document\u2026" });
|
|
29
|
+
if (link.isError || !link.data)
|
|
30
|
+
return /* @__PURE__ */ jsx("p", { className: styles.note, role: "alert", children: caseErrorText(link.error, "document") });
|
|
31
|
+
const kind = viewerKind(link.data.mimeType);
|
|
32
|
+
if (kind === "image")
|
|
33
|
+
return /* @__PURE__ */ jsx(Photo, { url: link.data.url, name, thumb });
|
|
34
|
+
if (kind === "pdf" && thumb)
|
|
35
|
+
return /* @__PURE__ */ jsx("div", { className: styles.thumbFrame, children: /* @__PURE__ */ jsx("span", { className: styles.note, children: "PDF. Open it to read." }) });
|
|
36
|
+
if (kind === "pdf")
|
|
37
|
+
return /* @__PURE__ */ jsx("div", { className: styles.frame, children: /* @__PURE__ */ jsx(
|
|
38
|
+
"iframe",
|
|
39
|
+
{
|
|
40
|
+
className: styles.pdf,
|
|
41
|
+
src: pdfSource(link.data.url),
|
|
42
|
+
title: name,
|
|
43
|
+
referrerPolicy: "no-referrer"
|
|
44
|
+
}
|
|
45
|
+
) });
|
|
46
|
+
return /* @__PURE__ */ jsx("p", { className: styles.note, children: "This file type can't be shown here." });
|
|
47
|
+
}
|
|
48
|
+
function Photo({
|
|
49
|
+
url,
|
|
50
|
+
name,
|
|
51
|
+
thumb
|
|
52
|
+
}) {
|
|
53
|
+
const [state, setState] = useState(
|
|
54
|
+
"loading"
|
|
55
|
+
);
|
|
56
|
+
return /* @__PURE__ */ jsxs("div", { className: thumb ? styles.thumbFrame : styles.frame, children: [
|
|
57
|
+
state === "loading" && /* @__PURE__ */ jsx("span", { className: styles.note, children: "Loading photo\u2026" }),
|
|
58
|
+
state === "failed" && /* @__PURE__ */ jsx("span", { className: styles.note, role: "alert", children: "The photo did not load. Close it and open it again." }),
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
"img",
|
|
61
|
+
{
|
|
62
|
+
className: thumb ? styles.thumbImage : styles.image,
|
|
63
|
+
src: url,
|
|
64
|
+
alt: name,
|
|
65
|
+
style: state === "shown" ? void 0 : { display: "none" },
|
|
66
|
+
referrerPolicy: "no-referrer",
|
|
67
|
+
draggable: false,
|
|
68
|
+
onLoad: () => setState("shown"),
|
|
69
|
+
onError: () => setState("failed"),
|
|
70
|
+
onContextMenu: (e) => e.preventDefault()
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
] });
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
DocumentFile
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=document-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/document-file.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { adminCaseApi } from '@withpotter/lib/admin-case-api';\nimport type { CaseDocument } from '@withpotter/lib/admin-case-types';\nimport { AdmLoading } from '../../../_ui';\nimport { documentWord } from './case-checks';\nimport { caseErrorText } from './case-rules';\nimport { documentLinkKey, pdfSource, viewerKind } from './document-view';\nimport styles from './document-viewer.module.css';\n\n/**\n * One file a business sent, drawn from a fresh short-lived link: full size in\n * the document panel, or small on the case itself so the admin sees it before\n * deciding. The two sizes ask for their own link, so the panel never opens on\n * one that has run out while the small copy sat on the page.\n */\nexport function DocumentFile({\n tenantId,\n document,\n size = 'full',\n}: {\n tenantId: string;\n document: CaseDocument;\n size?: 'full' | 'thumb';\n}) {\n // One link per opening: no retries or refetches, each would be another logged view.\n const link = useQuery({\n queryKey: [...documentLinkKey(tenantId, document.id), size],\n queryFn: () => adminCaseApi.viewDocument(tenantId, document.id),\n retry: false,\n staleTime: Infinity,\n gcTime: 0,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n });\n const name = documentWord(document);\n const thumb = size === 'thumb';\n\n if (link.isLoading)\n return thumb ? (\n <div className={styles.thumbFrame}>\n <span className={styles.note}>Loading…</span>\n </div>\n ) : (\n <AdmLoading label=\"Opening document…\" />\n );\n\n if (link.isError || !link.data)\n return (\n <p className={styles.note} role=\"alert\">\n {caseErrorText(link.error, 'document')}\n </p>\n );\n\n const kind = viewerKind(link.data.mimeType);\n\n if (kind === 'image')\n return <Photo url={link.data.url} name={name} thumb={thumb} />;\n\n if (kind === 'pdf' && thumb)\n return (\n <div className={styles.thumbFrame}>\n <span className={styles.note}>PDF. Open it to read.</span>\n </div>\n );\n\n if (kind === 'pdf')\n return (\n <div className={styles.frame}>\n <iframe\n className={styles.pdf}\n src={pdfSource(link.data.url)}\n title={name}\n referrerPolicy=\"no-referrer\"\n />\n </div>\n );\n\n return <p className={styles.note}>This file type can't be shown here.</p>;\n}\n\n/** The photo, with a word while it downloads and if it never arrives. */\nfunction Photo({\n url,\n name,\n thumb,\n}: {\n url: string;\n name: string;\n thumb: boolean;\n}) {\n const [state, setState] = useState<'loading' | 'shown' | 'failed'>(\n 'loading',\n );\n\n return (\n <div className={thumb ? styles.thumbFrame : styles.frame}>\n {state === 'loading' && (\n <span className={styles.note}>Loading photo…</span>\n )}\n {state === 'failed' && (\n <span className={styles.note} role=\"alert\">\n The photo did not load. Close it and open it again.\n </span>\n )}\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n className={thumb ? styles.thumbImage : styles.image}\n src={url}\n alt={name}\n // The class sets display, which would beat `hidden`.\n style={state === 'shown' ? undefined : { display: 'none' }}\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onLoad={() => setState('shown')}\n onError={() => setState('failed')}\n onContextMenu={(e) => e.preventDefault()}\n />\n </div>\n );\n}\n"],"mappings":";AA2CQ,cAuDJ,YAvDI;AAzCR,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB,WAAW,kBAAkB;AACvD,OAAO,YAAY;AAQZ,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAIG;AAED,QAAM,OAAO,SAAS;AAAA,IACpB,UAAU,CAAC,GAAG,gBAAgB,UAAU,SAAS,EAAE,GAAG,IAAI;AAAA,IAC1D,SAAS,MAAM,aAAa,aAAa,UAAU,SAAS,EAAE;AAAA,IAC9D,OAAO;AAAA,IACP,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACD,QAAM,OAAO,aAAa,QAAQ;AAClC,QAAM,QAAQ,SAAS;AAEvB,MAAI,KAAK;AACP,WAAO,QACL,oBAAC,SAAI,WAAW,OAAO,YACrB,8BAAC,UAAK,WAAW,OAAO,MAAM,2BAAQ,GACxC,IAEA,oBAAC,cAAW,OAAM,0BAAoB;AAG1C,MAAI,KAAK,WAAW,CAAC,KAAK;AACxB,WACE,oBAAC,OAAE,WAAW,OAAO,MAAM,MAAK,SAC7B,wBAAc,KAAK,OAAO,UAAU,GACvC;AAGJ,QAAM,OAAO,WAAW,KAAK,KAAK,QAAQ;AAE1C,MAAI,SAAS;AACX,WAAO,oBAAC,SAAM,KAAK,KAAK,KAAK,KAAK,MAAY,OAAc;AAE9D,MAAI,SAAS,SAAS;AACpB,WACE,oBAAC,SAAI,WAAW,OAAO,YACrB,8BAAC,UAAK,WAAW,OAAO,MAAM,mCAAqB,GACrD;AAGJ,MAAI,SAAS;AACX,WACE,oBAAC,SAAI,WAAW,OAAO,OACrB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,OAAO;AAAA,QAClB,KAAK,UAAU,KAAK,KAAK,GAAG;AAAA,QAC5B,OAAO;AAAA,QACP,gBAAe;AAAA;AAAA,IACjB,GACF;AAGJ,SAAO,oBAAC,OAAE,WAAW,OAAO,MAAM,iDAAmC;AACvE;AAGA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,SACE,qBAAC,SAAI,WAAW,QAAQ,OAAO,aAAa,OAAO,OAChD;AAAA,cAAU,aACT,oBAAC,UAAK,WAAW,OAAO,MAAM,iCAAc;AAAA,IAE7C,UAAU,YACT,oBAAC,UAAK,WAAW,OAAO,MAAM,MAAK,SAAQ,iEAE3C;AAAA,IAGF;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,QAAQ,OAAO,aAAa,OAAO;AAAA,QAC9C,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,OAAO,UAAU,UAAU,SAAY,EAAE,SAAS,OAAO;AAAA,QACzD,gBAAe;AAAA,QACf,WAAW;AAAA,QACX,QAAQ,MAAM,SAAS,OAAO;AAAA,QAC9B,SAAS,MAAM,SAAS,QAAQ;AAAA,QAChC,eAAe,CAAC,MAAM,EAAE,eAAe;AAAA;AAAA,IACzC;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function viewerKind(mimeType) {
|
|
2
|
+
const type = (mimeType ?? "").toLowerCase();
|
|
3
|
+
if (type.startsWith("image/")) return "image";
|
|
4
|
+
return type === "application/pdf" ? "pdf" : "other";
|
|
5
|
+
}
|
|
6
|
+
const pdfSource = (url) => `${url}#toolbar=0&navpanes=0`;
|
|
7
|
+
function ownerName(document, people) {
|
|
8
|
+
const person = document.personId ? people.find((p) => p.id === document.personId) : void 0;
|
|
9
|
+
return person?.fullName ?? "The business";
|
|
10
|
+
}
|
|
11
|
+
function photoOf(documents, personId) {
|
|
12
|
+
return documents?.find((d) => d.kind === "ID_PHOTO" && d.personId === personId) ?? null;
|
|
13
|
+
}
|
|
14
|
+
const documentLinkKey = (tenantId, documentId) => [
|
|
15
|
+
"platform-admin",
|
|
16
|
+
"compliance",
|
|
17
|
+
"document-link",
|
|
18
|
+
tenantId,
|
|
19
|
+
documentId
|
|
20
|
+
];
|
|
21
|
+
export {
|
|
22
|
+
documentLinkKey,
|
|
23
|
+
ownerName,
|
|
24
|
+
pdfSource,
|
|
25
|
+
photoOf,
|
|
26
|
+
viewerKind
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=document-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/admin/tenants/%5Bid%5D/verification/document-view.ts"],"sourcesContent":["import type {\n CaseDocument,\n CasePerson,\n} from '@withpotter/lib/admin-case-types';\n\n/**\n * Pure helpers for the document viewer: what to draw a file with, whose it\n * is, and which document a person's ID photo row opens. Tested without a\n * browser.\n */\n\nexport type ViewerKind = 'image' | 'pdf' | 'other';\n\nexport function viewerKind(mimeType: string | null | undefined): ViewerKind {\n const type = (mimeType ?? '').toLowerCase();\n\n if (type.startsWith('image/')) return 'image';\n\n return type === 'application/pdf' ? 'pdf' : 'other';\n}\n\n/** The browser's PDF viewer without its toolbar, so no download or print button. */\nexport const pdfSource = (url: string) => `${url}#toolbar=0&navpanes=0`;\n\n/** The person an ID photo belongs to; the business itself for a certificate. */\nexport function ownerName(\n document: Pick<CaseDocument, 'personId'>,\n people: Pick<CasePerson, 'id' | 'fullName'>[],\n): string {\n const person = document.personId\n ? people.find((p) => p.id === document.personId)\n : undefined;\n\n return person?.fullName ?? 'The business';\n}\n\n/** A person's latest ID photo (documents come newest first). */\nexport function photoOf(\n documents: CaseDocument[] | undefined,\n personId: string,\n): CaseDocument | null {\n return (\n documents?.find((d) => d.kind === 'ID_PHOTO' && d.personId === personId) ??\n null\n );\n}\n\nexport const documentLinkKey = (tenantId: string, documentId: string) => [\n 'platform-admin',\n 'compliance',\n 'document-link',\n tenantId,\n documentId,\n];\n"],"mappings":"AAaO,SAAS,WAAW,UAAiD;AAC1E,QAAM,QAAQ,YAAY,IAAI,YAAY;AAE1C,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO;AAEtC,SAAO,SAAS,oBAAoB,QAAQ;AAC9C;AAGO,MAAM,YAAY,CAAC,QAAgB,GAAG,GAAG;AAGzC,SAAS,UACd,UACA,QACQ;AACR,QAAM,SAAS,SAAS,WACpB,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,QAAQ,IAC7C;AAEJ,SAAO,QAAQ,YAAY;AAC7B;AAGO,SAAS,QACd,WACA,UACqB;AACrB,SACE,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,aAAa,QAAQ,KACvE;AAEJ;AAEO,MAAM,kBAAkB,CAAC,UAAkB,eAAuB;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|