@fayz-ai/admin 0.62.0 → 0.63.0
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/{CommandPalette-B5PMQFDG.js → CommandPalette-XDJJ5E3O.js} +3 -3
- package/dist/{CommandPalette-B5PMQFDG.js.map → CommandPalette-XDJJ5E3O.js.map} +1 -1
- package/dist/ConnectedBrandingSettings-43ZM3HCI.js +680 -0
- package/dist/ConnectedBrandingSettings-43ZM3HCI.js.map +1 -0
- package/dist/ConnectedCompanySettings-I4MALI2Q.js +197 -0
- package/dist/ConnectedCompanySettings-I4MALI2Q.js.map +1 -0
- package/dist/ConnectedModulesSettings-A2VJ5BMJ.js +563 -0
- package/dist/ConnectedModulesSettings-A2VJ5BMJ.js.map +1 -0
- package/dist/ConnectedSecuritySettings-25AHA4HJ.js +189 -0
- package/dist/ConnectedSecuritySettings-25AHA4HJ.js.map +1 -0
- package/dist/ConnectedUserProfile-E7USJRUE.js +424 -0
- package/dist/ConnectedUserProfile-E7USJRUE.js.map +1 -0
- package/dist/FieldRulesEditor-YGIPKI5T.js +129 -0
- package/dist/FieldRulesEditor-YGIPKI5T.js.map +1 -0
- package/dist/GettingStartedWidget-HMIJ3Y24.js +12 -0
- package/dist/GettingStartedWidget-HMIJ3Y24.js.map +1 -0
- package/dist/PermissionProfilesTab-3ZPRCHMZ.js +548 -0
- package/dist/PermissionProfilesTab-3ZPRCHMZ.js.map +1 -0
- package/dist/PersonTimeline-HQZT527S.js +3 -0
- package/dist/{PersonTimeline-X7JTPUWJ.js.map → PersonTimeline-HQZT527S.js.map} +1 -1
- package/dist/ProjectsSettings-7O2F27MD.js +5 -0
- package/dist/ProjectsSettings-7O2F27MD.js.map +1 -0
- package/dist/ScheduleEditor-54ELWR45.js +8 -0
- package/dist/{ScheduleEditor-L2UJXKMY.js.map → ScheduleEditor-54ELWR45.js.map} +1 -1
- package/dist/SeuSiteWidget-QLSUVC63.js +6 -0
- package/dist/SeuSiteWidget-QLSUVC63.js.map +1 -0
- package/dist/SubscriptionPage-5GE5HFJK.js +17 -0
- package/dist/{SubscriptionPage-IDVEFLZ5.js.map → SubscriptionPage-5GE5HFJK.js.map} +1 -1
- package/dist/TeamTab-6RAULFLW.js +502 -0
- package/dist/TeamTab-6RAULFLW.js.map +1 -0
- package/dist/TrialWidget-Z6CLUCU3.js +7 -0
- package/dist/TrialWidget-Z6CLUCU3.js.map +1 -0
- package/dist/app/AdminShell.d.ts.map +1 -1
- package/dist/app/admin-app.d.ts.map +1 -1
- package/dist/app/config.d.ts +14 -0
- package/dist/app/config.d.ts.map +1 -1
- package/dist/app/routing.d.ts +6 -0
- package/dist/app/routing.d.ts.map +1 -1
- package/dist/app/scaffold.d.ts.map +1 -1
- package/dist/billing/index.js +9 -4
- package/dist/chunk-2H46WDG5.js +53 -0
- package/dist/chunk-2H46WDG5.js.map +1 -0
- package/dist/chunk-3HLX7YB2.js +94 -0
- package/dist/chunk-3HLX7YB2.js.map +1 -0
- package/dist/chunk-3OUD4XBK.js +3 -0
- package/dist/chunk-3OUD4XBK.js.map +1 -0
- package/dist/{chunk-IXSY4GPK.js → chunk-5D5QLMOQ.js} +5 -3
- package/dist/chunk-5D5QLMOQ.js.map +1 -0
- package/dist/chunk-5WR62X2R.js +1081 -0
- package/dist/chunk-5WR62X2R.js.map +1 -0
- package/dist/{chunk-KPYRTOCK.js → chunk-6CQFGMEO.js} +4 -140
- package/dist/chunk-6CQFGMEO.js.map +1 -0
- package/dist/chunk-6MMSYC2I.js +116 -0
- package/dist/chunk-6MMSYC2I.js.map +1 -0
- package/dist/chunk-6QFOE3UD.js +1466 -0
- package/dist/chunk-6QFOE3UD.js.map +1 -0
- package/dist/chunk-6UUFVQ2E.js +283 -0
- package/dist/chunk-6UUFVQ2E.js.map +1 -0
- package/dist/chunk-7WNLL3F6.js +7889 -0
- package/dist/chunk-7WNLL3F6.js.map +1 -0
- package/dist/chunk-A74IHAQE.js +439 -0
- package/dist/chunk-A74IHAQE.js.map +1 -0
- package/dist/{chunk-JOBRLBIQ.js → chunk-AFA6IO23.js} +4 -3
- package/dist/chunk-AFA6IO23.js.map +1 -0
- package/dist/{chunk-P5UIGQFY.js → chunk-ALCSIN3Z.js} +5 -5
- package/dist/chunk-ALCSIN3Z.js.map +1 -0
- package/dist/chunk-AWM4AMBS.js +39 -0
- package/dist/chunk-AWM4AMBS.js.map +1 -0
- package/dist/{chunk-OQARLKZN.js → chunk-BG5Z6KLN.js} +6 -18
- package/dist/chunk-BG5Z6KLN.js.map +1 -0
- package/dist/chunk-DPNFZONC.js +19 -0
- package/dist/chunk-DPNFZONC.js.map +1 -0
- package/dist/chunk-DRCV643L.js +193 -0
- package/dist/chunk-DRCV643L.js.map +1 -0
- package/dist/chunk-E6DF3VR6.js +206 -0
- package/dist/chunk-E6DF3VR6.js.map +1 -0
- package/dist/chunk-ENHCVGXZ.js +120 -0
- package/dist/chunk-ENHCVGXZ.js.map +1 -0
- package/dist/chunk-FK6RHGI7.js +56 -0
- package/dist/chunk-FK6RHGI7.js.map +1 -0
- package/dist/chunk-G5HNA5QK.js +233 -0
- package/dist/chunk-G5HNA5QK.js.map +1 -0
- package/dist/chunk-HCFO4Z6A.js +53 -0
- package/dist/chunk-HCFO4Z6A.js.map +1 -0
- package/dist/chunk-JFIU6NQP.js +51 -0
- package/dist/chunk-JFIU6NQP.js.map +1 -0
- package/dist/chunk-JRZJBMOY.js +3 -0
- package/dist/chunk-JRZJBMOY.js.map +1 -0
- package/dist/{chunk-3YP7KW47.js → chunk-JVVOL4BB.js} +41 -512
- package/dist/chunk-JVVOL4BB.js.map +1 -0
- package/dist/chunk-KAQ3UIAA.js +415 -0
- package/dist/chunk-KAQ3UIAA.js.map +1 -0
- package/dist/{chunk-P6XUDT2P.js → chunk-KJELMULA.js} +4 -51
- package/dist/chunk-KJELMULA.js.map +1 -0
- package/dist/chunk-KLO7DKXX.js +1651 -0
- package/dist/chunk-KLO7DKXX.js.map +1 -0
- package/dist/chunk-M2CMDWUI.js +75 -0
- package/dist/chunk-M2CMDWUI.js.map +1 -0
- package/dist/chunk-PQ47MLTH.js +255 -0
- package/dist/chunk-PQ47MLTH.js.map +1 -0
- package/dist/{chunk-VX3WJLKK.js → chunk-QD7BMUDF.js} +17 -8
- package/dist/chunk-QD7BMUDF.js.map +1 -0
- package/dist/{chunk-E4MESMNR.js → chunk-QTSKCPSW.js} +7 -10
- package/dist/chunk-QTSKCPSW.js.map +1 -0
- package/dist/chunk-S56FQKPL.js +186 -0
- package/dist/chunk-S56FQKPL.js.map +1 -0
- package/dist/chunk-SGAFPNMA.js +75 -0
- package/dist/chunk-SGAFPNMA.js.map +1 -0
- package/dist/{chunk-OD7P4L3D.js → chunk-SOKCLVM4.js} +3 -3
- package/dist/{chunk-OD7P4L3D.js.map → chunk-SOKCLVM4.js.map} +1 -1
- package/dist/chunk-TL42NKTH.js +3 -0
- package/dist/chunk-TL42NKTH.js.map +1 -0
- package/dist/chunk-U6ZCO2PS.js +2964 -0
- package/dist/chunk-U6ZCO2PS.js.map +1 -0
- package/dist/chunk-VSXNROYH.js +16 -0
- package/dist/chunk-VSXNROYH.js.map +1 -0
- package/dist/chunk-WPFZCYZL.js +619 -0
- package/dist/chunk-WPFZCYZL.js.map +1 -0
- package/dist/chunk-XFTNIBDW.js +23 -0
- package/dist/chunk-XFTNIBDW.js.map +1 -0
- package/dist/chunk-Y66JDL6I.js +1020 -0
- package/dist/chunk-Y66JDL6I.js.map +1 -0
- package/dist/chunk-YEHIBPIX.js +137 -0
- package/dist/chunk-YEHIBPIX.js.map +1 -0
- package/dist/chunk-YKPPCV2Z.js +53 -0
- package/dist/chunk-YKPPCV2Z.js.map +1 -0
- package/dist/components/chat/markdown.d.ts.map +1 -1
- package/dist/components/plugins/PluginSettingsPanel.d.ts.map +1 -1
- package/dist/components/settings/SettingsPage.d.ts.map +1 -1
- package/dist/connect-XKQJOWR7.js +18 -0
- package/dist/connect-XKQJOWR7.js.map +1 -0
- package/dist/crud/CrudDetailPage.d.ts.map +1 -1
- package/dist/crud/CrudListView.d.ts.map +1 -1
- package/dist/crud/CrudPage.d.ts.map +1 -1
- package/dist/crud/RelatedListTab.d.ts.map +1 -1
- package/dist/crud/archetypes/EntityLink.d.ts +1 -1
- package/dist/crud/archetypes/EntityLink.d.ts.map +1 -1
- package/dist/crud/record-chrome.d.ts.map +1 -1
- package/dist/entity-routes-PGU7EHAD.js +4 -0
- package/dist/{entity-routes-LXOBW5IB.js.map → entity-routes-PGU7EHAD.js.map} +1 -1
- package/dist/hooks/useModuleNavigation.d.ts.map +1 -1
- package/dist/impersonation/ImpersonateDialog.d.ts.map +1 -1
- package/dist/impersonation/session.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11902 -33551
- package/dist/index.js.map +1 -1
- package/dist/lib/entity-routes.d.ts.map +1 -1
- package/dist/org/index.js +4 -2
- package/dist/plugins/PluginRegistryManager.d.ts.map +1 -1
- package/dist/settings/MessageTemplateRow.d.ts.map +1 -1
- package/dist/timeline/PersonTimeline.d.ts.map +1 -1
- package/dist/timeline/TimelineList.d.ts.map +1 -1
- package/dist/units/UnitRailPage.d.ts.map +1 -1
- package/dist/units/useUnitFilter.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/PersonTimeline-X7JTPUWJ.js +0 -3
- package/dist/ScheduleEditor-L2UJXKMY.js +0 -6
- package/dist/SubscriptionPage-IDVEFLZ5.js +0 -8
- package/dist/chunk-3YP7KW47.js.map +0 -1
- package/dist/chunk-E4MESMNR.js.map +0 -1
- package/dist/chunk-IXSY4GPK.js.map +0 -1
- package/dist/chunk-JOBRLBIQ.js.map +0 -1
- package/dist/chunk-KPYRTOCK.js.map +0 -1
- package/dist/chunk-OQARLKZN.js.map +0 -1
- package/dist/chunk-P5UIGQFY.js.map +0 -1
- package/dist/chunk-P6XUDT2P.js.map +0 -1
- package/dist/chunk-VX3WJLKK.js.map +0 -1
- package/dist/entity-routes-LXOBW5IB.js +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/billing/AiUsageSection.tsx","../src/components/billing/PlanCheckoutSheet.tsx","../src/components/billing/PricingOverview.tsx","../src/components/billing/SubscriptionPage.tsx"],"names":["React","money","formatCurrency","tl","React2","jsx","jsxs","Fragment","Button","usePluginRuntimeOptional","list","Card","CardContent","AlertCircle","Breakdown","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","SheetBody","ChevronDown","React4","toast","Check"],"mappings":"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","file":"chunk-JVVOL4BB.js","sourcesContent":["import * as React from 'react'\nimport { AlertTriangle, ArrowUpRight, ChevronDown, Sparkles } from 'lucide-react'\nimport { tl, formatCurrency } from '@fayz-ai/core'\nimport { Button, Card, CardContent, ConfirmDialog, Skeleton, toast } from '@fayz-ai/ui'\nimport { cn } from '../../lib/cn'\nimport { useBillingStore } from '../../billing/store'\nimport { EXTRA_AI_CREDITS } from '../../billing/module-pricing'\nimport { useAiUsage, type AiUsageSummary } from '../../billing/ai-usage'\n\nconst num = (n: number) => n.toLocaleString('pt-BR')\n// The platform's own prices are in BRL whatever the tenant's currency.\nconst money = (n: number) => formatCurrency(n, 'BRL')\nconst FEATURE_LABELS: Record<string, readonly [string, string]> = {\n assistant: ['Assistant', 'Assistente'],\n atendeai: ['AtendeAI (WhatsApp)', 'AtendeAI (WhatsApp)'],\n scribe: ['AI scribe', 'Escriba (IA)'],\n}\n\n/**\n * \"Uso de IA neste período\": the plan's credits like a CI minutes meter —\n * spent, left, the pace, who spends — and the way out when it runs short.\n */\nexport function AiUsageSection({ included, planName, upgrade }: {\n included: number\n planName?: string\n /** The next plan up that includes more credits, if any. */\n upgrade?: { name: string; credits: number; onChoose?: () => void }\n}) {\n const state = useAiUsage(included)\n const checkout = useBillingStore((s) => s.checkout)\n const [pack, setPack] = React.useState<(typeof EXTRA_AI_CREDITS)[number] | null>(null)\n\n const buy = async (p: (typeof EXTRA_AI_CREDITS)[number]) => {\n // The gateway seam takes an id; the credit pack is one more product on it.\n if (checkout) {\n try { await checkout(`ai-credits-${p.credits}`) } catch { toast.error(tl('Could not start the purchase.', 'Não foi possível iniciar a compra.')) }\n return\n }\n setPack(p)\n }\n\n return (\n <section aria-labelledby=\"ai-usage-title\" className=\"space-y-3\">\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <h2 id=\"ai-usage-title\" className=\"flex items-center gap-2 text-lg font-semibold\">\n <Sparkles className=\"h-4 w-4 text-violet-600 dark:text-violet-300\" aria-hidden />\n {tl('AI usage this period', 'Uso de IA neste período')}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {planName ? `${planName} · ` : ''}{num(included)} {tl('credits/mo included', 'créditos/mês incluídos')}\n </p>\n </div>\n <Card>\n <CardContent className=\"space-y-4 p-5\">\n {state.status === 'loading' && <Skeleton className=\"h-16 w-full\" />}\n {state.status === 'not-metered' && (\n <EmptyState text={tl('Usage starts counting once the assistant is used this period. Your plan includes these credits every month.',\n 'O consumo começa a contar quando o assistente for usado neste período. O seu plano inclui estes créditos todo mês.')} />\n )}\n {state.status === 'empty' && (\n <>\n <Meter s={state.summary} />\n <EmptyState text={tl('No credits spent yet this period.', 'Nenhum crédito usado neste período ainda.')} />\n </>\n )}\n {state.status === 'ok' && <Usage s={state.summary} upgrade={upgrade} onBuy={buy} />}\n </CardContent>\n </Card>\n\n <ConfirmDialog\n open={pack !== null}\n onConfirm={() => setPack(null)}\n onCancel={() => setPack(null)}\n title={pack ? tl(`${num(pack.credits)} extra credits for ${money(pack.price)}`, `${num(pack.credits)} créditos extras por ${money(pack.price)}`) : ''}\n description={tl('Buying credits online is not available for this account yet. Ask support to add the pack — it is charged on the next invoice.',\n 'A compra de créditos online ainda não está disponível nesta conta. Peça o pacote ao suporte — ele entra na próxima fatura.')}\n confirmLabel={tl('Got it', 'Entendi')}\n cancelLabel={tl('Cancel', 'Cancelar')}\n />\n </section>\n )\n}\n\nfunction EmptyState({ text }: { text: string }) {\n return <p className=\"text-sm text-muted-foreground\">{text}</p>\n}\n\nfunction Meter({ s }: { s: AiUsageSummary }) {\n const pct = Math.round(s.ratio * 100)\n // The bar's scale stretches past 100% when usage or the projection does, so\n // both stay on it; the allowance line marks where 100% sits.\n const scale = Math.max(s.included, s.used, s.projected, 1)\n const at = (n: number) => `${Math.min(100, (n / scale) * 100)}%`\n return (\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1\">\n <p className=\"tabular-nums\">\n <span className=\"text-3xl font-bold\">{num(s.used)}</span>\n <span className=\"text-base text-muted-foreground\"> {tl('of', 'de')} {num(s.included)} {tl('credits', 'créditos')}</span>\n <span className={cn('ml-2 text-base font-semibold', s.over ? 'text-amber-700 dark:text-amber-300' : 'text-violet-700 dark:text-violet-300')}>· {pct}%</span>\n </p>\n <p className=\"text-sm text-muted-foreground tabular-nums\">\n {s.daysLeft} {tl(s.daysLeft === 1 ? 'day left' : 'days left', s.daysLeft === 1 ? 'dia para fechar' : 'dias para fechar')}\n </p>\n </div>\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={s.included}\n aria-valuenow={s.used}\n aria-valuetext={tl(`${num(s.used)} of ${num(s.included)} credits`, `${num(s.used)} de ${num(s.included)} créditos`)}\n aria-label={tl('AI credits used', 'Créditos de IA usados')}\n className=\"relative h-4 w-full rounded-full bg-muted\"\n >\n {/* Projection: a faint band from today's usage to the period's end at this pace. */}\n {s.projected > s.used && (\n <div className={cn('absolute inset-y-0 left-0 rounded-full', s.projectedOver ? 'bg-amber-200 dark:bg-amber-900/70' : 'bg-violet-200 dark:bg-violet-900/70')} style={{ width: at(s.projected) }} />\n )}\n <div className={cn('absolute inset-y-0 left-0 rounded-full', s.over ? 'bg-amber-500' : 'bg-violet-600 dark:bg-violet-400')} style={{ width: at(s.used) }} />\n {scale > s.included && (\n <div className=\"absolute -inset-y-1 w-0.5 rounded bg-foreground/70\" style={{ left: at(s.included) }} title={tl('Plan allowance', 'Incluído no plano')} />\n )}\n </div>\n {s.projected > 0 && (\n <p className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"inline-flex items-center gap-1.5\"><span className={cn('h-2.5 w-2.5 rounded-full', s.over ? 'bg-amber-500' : 'bg-violet-600 dark:bg-violet-400')} />{tl('Used', 'Usado')}</span>\n <span className=\"inline-flex items-center gap-1.5\"><span className={cn('h-2.5 w-2.5 rounded-full', s.projectedOver ? 'bg-amber-200 dark:bg-amber-900' : 'bg-violet-200 dark:bg-violet-900')} />{tl(`At this pace: ${num(s.projected)}`, `Neste ritmo: ${num(s.projected)}`)}</span>\n {scale > s.included && <span className=\"inline-flex items-center gap-1.5\"><span className=\"h-3 w-0.5 bg-foreground/70\" />{tl('Included', 'Incluído no plano')}</span>}\n </p>\n )}\n </div>\n )\n}\n\nfunction Usage({ s, upgrade, onBuy }: {\n s: AiUsageSummary\n upgrade?: { name: string; credits: number; onChoose?: () => void }\n onBuy: (p: (typeof EXTRA_AI_CREDITS)[number]) => void\n}) {\n const short = s.over || s.projectedOver\n return (\n <>\n <Meter s={s} />\n {s.over ? (\n <p role=\"status\" className=\"flex items-start gap-2 rounded-input border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-800 dark:bg-amber-950/50 dark:text-amber-100\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0\" aria-hidden />\n {tl(`You went ${num(s.overBy)} credits over the plan's allowance.`, `Você passou ${num(s.overBy)} créditos do que o plano inclui.`)}\n </p>\n ) : (\n s.projectedOver ? (\n <p className=\"text-sm tabular-nums text-amber-800 dark:text-amber-200\">\n {tl(`At this pace you will reach ${num(s.projected)} credits — over the allowance before the period ends.`, `Neste ritmo você chega a ${num(s.projected)} créditos — acima do que o plano inclui antes de o período fechar.`)}\n </p>\n ) : null\n )}\n\n {(s.byUser.length > 0 || s.byFeature.length > 0) && (\n <details className=\"group\">\n <summary className=\"flex min-h-11 cursor-pointer list-none items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground\">\n <ChevronDown className=\"h-4 w-4 transition-transform group-open:rotate-180\" aria-hidden />\n {tl('Who uses it and where', 'Quem usa e onde')}\n </summary>\n <div className=\"grid gap-4 pt-2 sm:grid-cols-2\">\n {s.byUser.length > 0 && <Breakdown title={tl('Who uses it most', 'Quem mais usa')} rows={s.byUser.slice(0, 5).map((u) => [u.name, u.credits])} total={s.used} />}\n {s.byFeature.length > 0 && <Breakdown title={tl('Where it goes', 'Onde vai')} rows={s.byFeature.map((f) => [FEATURE_LABELS[f.feature] ? tl(...FEATURE_LABELS[f.feature]!) : f.feature, f.credits])} total={s.used} />}\n </div>\n </details>\n )}\n\n {short && (\n <div className=\"flex flex-col gap-2 border-t pt-4 sm:flex-row sm:flex-wrap sm:items-center\">\n <span className=\"text-sm font-medium\">{tl('Buy extra credits', 'Comprar créditos extras')}</span>\n {EXTRA_AI_CREDITS.map((p) => (\n <Button key={p.credits} variant=\"outline\" className=\"h-11\" onClick={() => onBuy(p)}>\n +{num(p.credits)} · {money(p.price)}\n </Button>\n ))}\n {upgrade && (\n <Button variant=\"ghost\" className=\"h-11\" onClick={upgrade.onChoose} disabled={!upgrade.onChoose}>\n <ArrowUpRight className=\"h-4 w-4\" />\n {tl(`More with ${upgrade.name} (${num(upgrade.credits)}/mo)`, `Aumentar com o plano ${upgrade.name} (${num(upgrade.credits)}/mês)`)}\n </Button>\n )}\n </div>\n )}\n </>\n )\n}\n\nfunction Breakdown({ title, rows, total }: { title: string; rows: Array<[string, number]>; total: number }) {\n return (\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">{title}</p>\n <ul className=\"space-y-1.5 text-sm\">\n {rows.map(([label, credits]) => (\n <li key={label} className=\"flex items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate\" title={label}>{label}</span>\n <span className=\"shrink-0 tabular-nums text-muted-foreground\">\n {num(credits)} <span className=\"text-xs\">({total ? Math.round((credits / total) * 100) : 0}%)</span>\n </span>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n","import * as React from 'react'\nimport { AlertCircle, Check } from 'lucide-react'\nimport { tl, usePluginRuntimeOptional, type Plan, formatCurrency } from '@fayz-ai/core'\nimport {\n Button, Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, Switch, getLucideIcon,\n} from '@fayz-ai/ui'\nimport { cn } from '../../lib/cn'\nimport {\n PRICE_BOOK, UPSELL_KEY, billableModules, includedIn, moduleFitsTrades, packageFor, perUnitModules, planFit, quote,\n type BasePackage, type OperationSize, type PricingPlan, type Trade,\n} from '../../billing/module-pricing'\nimport { MODULE_FAMILIES, moduleFamilyOf } from '../../billing/module-families'\n\n// The platform's own prices are in BRL whatever the tenant's currency.\nconst money = (n: number) => formatCurrency(n, 'BRL')\n\n/** One switch the plan change will flip: a module or one of its paid parts. */\nexport interface ModuleChange {\n plugin: string\n facet: string\n status: 'active' | 'disabled'\n}\n\nconst split = (key: string) => {\n const dot = key.indexOf('.')\n return dot < 0 ? { plugin: key, facet: '' } : { plugin: key.slice(0, dot), facet: key.slice(dot + 1) }\n}\n\nfunction priceLabel(key: string, pkg: BasePackage): string {\n const e = PRICE_BOOK[key]!\n if (includedIn(pkg, key)) return tl(`Included in ${pkg.name}`, `Incluído no ${pkg.name}`)\n return `${money(e.price)} ${e.per === 'unit' ? tl('per unit', 'por unidade') : tl('/mo', '/mês')}`\n}\n\n/**\n * Switching plan is composing the subscription: the plan, plus the modules and\n * paid parts this account will run on it. Starts from what is on today, prices\n * every change live, and confirms all of it at once.\n */\nexport function PlanCheckoutSheet({ plan, pricing, size, trades, currentTotal, onCancel, onConfirm }: {\n plan: Plan | null\n pricing: PricingPlan | null\n size: OperationSize\n trades: readonly Trade[]\n currentTotal?: number\n onCancel: () => void\n onConfirm: (plan: Plan, changes: ModuleChange[]) => Promise<void>\n}) {\n const runtime = usePluginRuntimeOptional()\n const initial = React.useMemo(\n () => new Set(billableModules([...size.modules, ...(size.unitModules ?? []).flatMap((u) => u.modules)])\n .concat([...size.modules, ...(size.unitModules ?? []).flatMap((u) => u.modules)].filter((k) => PRICE_BOOK[k]))),\n [size],\n )\n const [selected, setSelected] = React.useState<Set<string>>(initial)\n const [busy, setBusy] = React.useState(false)\n React.useEffect(() => { if (plan) setSelected(new Set(initial)) }, [plan, initial])\n\n // What can be switched here: priced, sold to this trade, and shipped in this\n // app (a module the bundle doesn't carry cannot be turned on from a screen).\n const offer = React.useMemo(() => {\n const plugins = runtime?.plugins ?? []\n return Object.keys(PRICE_BOOK).filter((key) => {\n if (PRICE_BOOK[key]!.comingSoon) return false\n // Off-trade modules stay offered only if the account already runs them.\n if (trades.length && !moduleFitsTrades(key, trades) && !initial.has(key)) return false\n const { plugin, facet } = split(key)\n const manifest = plugins.find((p) => p.id === plugin)\n if (!manifest) return false\n return !facet || !!manifest.facets?.some((f) => f.id === facet && !f.includedWithPlugin)\n })\n }, [runtime?.plugins, trades, initial])\n\n const toggle = (key: string) => setSelected((cur) => {\n const next = new Set(cur)\n const { plugin, facet } = split(key)\n if (next.has(key)) {\n next.delete(key)\n // A module out takes its paid parts with it.\n if (!facet) for (const k of [...next]) if (k.startsWith(`${plugin}.`)) next.delete(k)\n } else {\n next.add(key)\n if (facet) next.add(plugin)\n }\n return next\n })\n\n const pkg = React.useMemo(() => packageFor({ package: size.package, trades, modules: [...selected] }), [size.package, trades, selected])\n const nextSize: OperationSize = React.useMemo(() => {\n const keys = [...selected]\n const perUnit = perUnitModules(keys, pkg)\n return {\n ...size,\n trades,\n modules: keys,\n unitModules: (size.unitModules ?? []).map((u) => ({ ...u, modules: perUnit })),\n }\n }, [selected, size, pkg, trades])\n const q = pricing ? quote(nextSize, pricing) : null\n const total = q?.total ?? plan?.price ?? 0\n const fit = plan ? planFit(plan, nextSize) : { fits: true as const }\n const units = nextSize.unitModules?.length || nextSize.units\n const delta = currentTotal !== undefined ? total - currentTotal : undefined\n\n const changes: ModuleChange[] = [\n ...[...selected].filter((k) => !initial.has(k)).map((k) => ({ ...split(k), status: 'active' as const })),\n ...[...initial].filter((k) => !selected.has(k) && offer.includes(k)).map((k) => ({ ...split(k), status: 'disabled' as const })),\n ]\n\n const families = MODULE_FAMILIES\n .map((f) => ({ family: f, keys: offer.filter((k) => !k.includes('.') && moduleFamilyOf(k) === f.id) }))\n .filter((g) => g.keys.length > 0)\n\n const confirm = async () => {\n if (!plan) return\n setBusy(true)\n try { await onConfirm(plan, changes) } finally { setBusy(false) }\n }\n\n return (\n <Sheet open={!!plan} onOpenChange={(open) => { if (!open && !busy) onCancel() }}>\n <SheetContent width=\"max-w-2xl\">\n <SheetHeader>\n <SheetTitle>{plan ? tl(`Switch to ${plan.name}`, `Mudar para ${plan.name}`) : ''}</SheetTitle>\n <SheetDescription>\n {tl('Choose the modules this account will run on the plan. What is on today comes checked; the price follows each switch.',\n 'Escolha os módulos que a conta vai usar no plano. O que já está ligado vem marcado; o preço acompanha cada escolha.')}\n </SheetDescription>\n </SheetHeader>\n <SheetBody className=\"space-y-6\">\n {families.map(({ family, keys }) => (\n <section key={family.id} className=\"space-y-2\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">{tl(...family.label)}</h3>\n <ul className=\"divide-y rounded-card border\">\n {keys.map((key) => {\n const manifest = runtime?.plugins.find((p) => p.id === key)\n const Icon = manifest?.icon ? getLucideIcon(manifest.icon) : undefined\n const on = selected.has(key)\n const parts = offer.filter((k) => k.startsWith(`${key}.`))\n return (\n <li key={key} className=\"space-y-2 px-4 py-3\">\n <label className=\"flex cursor-pointer items-center gap-3\">\n {Icon ? <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden /> : <span className=\"w-4\" />}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block text-sm font-medium\">{manifest?.name ?? tl(...PRICE_BOOK[key]!.label)}</span>\n <span className=\"block text-xs text-muted-foreground tabular-nums\">{priceLabel(key, pkg)}</span>\n </span>\n <Switch checked={on} onCheckedChange={() => toggle(key)} aria-label={tl(...PRICE_BOOK[key]!.label)} />\n </label>\n {parts.length > 0 && (\n <ul className=\"space-y-2 border-l pl-4 ml-2\">\n {parts.map((part) => {\n const ai = part === UPSELL_KEY\n return (\n <li key={part}>\n <label className=\"flex cursor-pointer items-center gap-3\">\n <span className=\"min-w-0 flex-1\">\n <span className={cn('block text-sm', ai && 'font-medium text-violet-700 dark:text-violet-300')}>{tl(...PRICE_BOOK[part]!.label)}</span>\n <span className=\"block text-xs text-muted-foreground tabular-nums\">+ {priceLabel(part, pkg)}</span>\n </span>\n <Switch checked={selected.has(part)} onCheckedChange={() => toggle(part)} aria-label={tl(...PRICE_BOOK[part]!.label)} />\n </label>\n </li>\n )\n })}\n </ul>\n )}\n </li>\n )\n })}\n </ul>\n </section>\n ))}\n </SheetBody>\n <SheetFooter className=\"flex-col items-stretch gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0\">\n {fit.fits ? (\n <>\n <p className=\"text-xl font-bold tabular-nums\">\n {total > 0 ? money(total) : tl('Free', 'Grátis')}\n {total > 0 && <span className=\"text-sm font-normal text-muted-foreground\">{tl('/mo', '/mês')}</span>}\n </p>\n <p className=\"text-xs text-muted-foreground tabular-nums\">\n {units > 1 && total > 0 ? `≈ ${money(total / units)} ${tl('per unit', 'por unidade')} · ` : ''}\n {delta !== undefined && Math.abs(delta) >= 0.01\n ? (delta > 0 ? tl(`+${money(delta)} vs today`, `+${money(delta)} em relação a hoje`) : tl(`${money(-delta)} less than today`, `${money(-delta)} a menos que hoje`))\n : tl('Same as today', 'Igual a hoje')}\n </p>\n </>\n ) : (\n <p className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0\" aria-hidden />\n {fit.limit === 'locations'\n ? tl(`This plan takes up to ${fit.max} units; you have ${fit.have}.`, `Este plano vai até ${fit.max} unidades; você tem ${fit.have}.`)\n : tl(`This plan takes up to ${fit.max} users; you have ${fit.have}.`, `Este plano vai até ${fit.max} usuários; você tem ${fit.have}.`)}\n </p>\n )}\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"ghost\" className=\"h-11\" onClick={onCancel} disabled={busy}>{tl('Cancel', 'Cancelar')}</Button>\n <Button className=\"h-11\" onClick={() => void confirm()} disabled={busy || !fit.fits}>\n <Check className=\"h-4 w-4\" aria-hidden />\n {busy ? tl('Saving…', 'Salvando…') : tl('Confirm', 'Confirmar')}\n {changes.length > 0 && !busy ? ` · ${changes.length} ${tl(changes.length === 1 ? 'change' : 'changes', changes.length === 1 ? 'mudança' : 'mudanças')}` : ''}\n </Button>\n </div>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n )\n}\n","import * as React from 'react'\nimport { AlertCircle, Blocks, Building2, Calculator, ChevronDown, RotateCcw, TrendingDown, Users } from 'lucide-react'\nimport { tl, usePluginRuntimeOptional, type Plan, formatCurrency } from '@fayz-ai/core'\nimport {\n Badge, Button, Card, CardContent, ChoiceSelect,\n Sheet, SheetBody, SheetContent, SheetDescription, SheetHeader, SheetTitle, Input\n} from '@fayz-ai/ui'\nimport { cn } from '../../lib/cn'\nimport { useUnitStore } from '../../units/store'\nimport { useOrganizationStore } from '../../org/store'\nimport { useOrgAdapterOptional } from '../../org/context'\nimport { useAppConfigStore } from '../../stores/app-config.store'\nimport { useOfferedPlugins } from '../../app/useAppPreset'\nimport { AiUsageSection } from './AiUsageSection'\nimport { PlanCheckoutSheet, type ModuleChange } from './PlanCheckoutSheet'\nimport { PlanFeatureItem, parsePlanFeature } from './plan-feature'\nimport {\n PRICE_BOOK, PRICING_PLANS, PRICING_SCENARIOS, SCENARIO_VERTICAL_LABELS, EXTRA_SEAT_PRICE, activeModuleKeys, billableModules, perUnitModules,\n TRADE_BY_APP, aiCreditsFor, moduleFitsTrades, packageFor, planFit, pricingForPlans, quote,\n type Trade,\n type OperationSize, type PlanFit, type PricingPlan, type Quote, type UnitFootprint,\n} from '../../billing/module-pricing'\n\n// The platform's own prices are in BRL whatever the tenant's currency.\nconst money = (n: number) => formatCurrency(n, 'BRL')\nconst MINE = 'mine'\nconst FEATURES_SHOWN = 5\n\n// ── The operation being priced ─────────────────────────────────────────────\n\n/** This account's real size, read from the stores the shell already fills. */\nfunction useRealOperation() {\n const units = useUnitStore((s) => s.units)\n const members = useOrganizationStore((s) => s.members)\n const orgId = useOrganizationStore((s) => s.currentOrg?.id)\n const adapter = useOrgAdapterOptional()\n const runtime = usePluginRuntimeOptional()\n const [fetchedMembers, setFetchedMembers] = React.useState<number | null>(null)\n\n // The members list is filled by the Team tab; opened straight here it may\n // still be empty, so ask once.\n React.useEffect(() => {\n if (members.length > 0 || !adapter || !orgId) return\n let alive = true\n adapter.listMembers(orgId).then((list) => { if (alive) setFetchedMembers(list.length) }).catch(() => {})\n return () => { alive = false }\n }, [members.length, adapter, orgId])\n\n const apps = useAppConfigStore((s) => s.config.apps)\n const offered = useOfferedPlugins()\n // The trades this account runs; a house app (the central one) adds none.\n const trades = React.useMemo<Trade[]>(\n () => [...new Set((apps ?? []).filter((a) => !(a as { house?: boolean }).house).map((a) => TRADE_BY_APP[a.id]).filter(Boolean) as Trade[])],\n [apps],\n )\n const modules = React.useMemo(\n () => activeModuleKeys((runtime?.plugins ?? []) as Parameters<typeof activeModuleKeys>[0], { trades, offered }),\n [runtime?.plugins, trades, offered],\n )\n const active = units.filter((u) => u.isActive !== false && u.kind !== 'region')\n const list = active.length ? active.map((u) => ({ id: u.id, name: u.name })) : [{ id: 'main', name: tl('Main unit', 'Unidade principal') }]\n const perUnit = perUnitModules(modules, packageFor({ trades, modules }))\n return {\n units: list.length,\n users: Math.max(1, members.length || fetchedMembers || 1),\n modules,\n unitModules: list.map((u) => ({ ...u, modules: perUnit })),\n trades,\n }\n}\n\n/** The operation on screen: the account's own, or a ready-made example, with\n * whatever the owner changed in the simulator on top. */\nfunction useOperation() {\n const real = useRealOperation()\n const [scenario, setScenarioState] = React.useState(MINE)\n const [users, setUsers] = React.useState<number | null>(null)\n const [footprints, setFootprints] = React.useState<UnitFootprint[] | null>(null)\n\n const example = PRICING_SCENARIOS.find((x) => x.id === scenario)\n const base: OperationSize = example ? example.size : real\n const trades: Trade[] = example ? [example.vertical] : real.trades\n // Only what this trade sells (a salon is never offered Pedidos e PDV), and\n // only extras: what the package covers is not a chip to switch.\n const allBase = [...base.modules, ...(base.unitModules ?? []).flatMap((u) => u.modules)]\n const pkg = packageFor({ trades, modules: allBase })\n const available = perUnitModules(allBase, pkg)\n .filter((k, i, all) => all.indexOf(k) === i && (!trades.length || moduleFitsTrades(k, trades)))\n const baseUnits: UnitFootprint[] = base.unitModules?.length\n ? [...base.unitModules]\n : Array.from({ length: base.units }, (_, i) => ({ id: `u${i + 1}`, name: `${tl('Unit', 'Unidade')} ${i + 1}`, modules: available }))\n const units = footprints ?? baseUnits\n const size: OperationSize = { units: units.length, users: users ?? base.users, modules: base.modules, unitModules: units, trades, package: pkg.id }\n\n const reset = () => { setUsers(null); setFootprints(null) }\n return {\n size,\n units,\n available,\n trades,\n scenario,\n simulated: scenario !== MINE || users !== null || footprints !== null,\n pkg,\n paidModules: billableModules([...size.modules, ...units.flatMap((u) => u.modules)], pkg).filter((k, i, all) => all.indexOf(k) === i).length,\n setScenario: (id: string) => { setScenarioState(id); reset() },\n setUsers,\n reset: () => { setScenarioState(MINE); reset() },\n setUnitCount: (n: number) => {\n const next = units.slice(0, n)\n while (next.length < n) next.push({ id: `extra-${next.length + 1}`, name: `${tl('Unit', 'Unidade')} ${next.length + 1}`, modules: units[0]?.modules ?? available })\n setFootprints(next)\n },\n toggle: (unitId: string, key: string) => setFootprints(units.map((u) => u.id !== unitId ? u : {\n ...u,\n modules: u.modules.includes(key)\n // Taking a module out takes its paid parts with it.\n ? u.modules.filter((m) => m !== key && !m.startsWith(`${key}.`))\n : [...u.modules, key, ...(key.includes('.') ? [key.slice(0, key.indexOf('.'))] : [])].filter((m, i, all) => all.indexOf(m) === i),\n })),\n }\n}\ntype Operation = ReturnType<typeof useOperation>\n\ninterface PricedPlan {\n plan: Plan\n pricing: PricingPlan | null\n quote: Quote | null\n total: number\n fit: PlanFit\n aiCredits: number\n}\n\n// The plan's own \"AI assistant\" bullet is replaced by the model's line, so a\n// card never shows the allowance twice or two different numbers.\nconst AI_FEATURE = /assistente de ia|ai assistant/i\n\n// Without app plans the model's own tiers are the offer.\nconst MODEL_PLANS: Plan[] = PRICING_PLANS.filter((p) => p.id !== 'a-la-carte').map((p) => ({\n id: p.id, name: tl(...p.name), price: p.platformFee, currency: 'BRL', interval: 'month', features: [],\n pricing: { platformFee: p.platformFee, seatsPerUnit: p.seatsPerUnit, discount: p.discount },\n}))\n\n// ── Pieces ─────────────────────────────────────────────────────────────────\n\nfunction Stat({ icon, children }: { icon: React.ReactNode; children: React.ReactNode }) {\n return (\n <span className=\"inline-flex items-center gap-1.5 text-sm text-muted-foreground\">\n <span aria-hidden>{icon}</span>\n <span className=\"tabular-nums text-foreground\">{children}</span>\n </span>\n )\n}\n\nfunction fitReason(fit: PlanFit): string | null {\n if (fit.fits) return null\n const one = fit.max === 1\n return fit.limit === 'locations'\n ? tl(`Up to ${fit.max} ${one ? 'unit' : 'units'} — you have ${fit.have}`, `Até ${fit.max} ${one ? 'unidade' : 'unidades'} — você tem ${fit.have}`)\n : tl(`Up to ${fit.max} ${one ? 'user' : 'users'} — you have ${fit.have}`, `Até ${fit.max} ${one ? 'usuário' : 'usuários'} — você tem ${fit.have}`)\n}\n\nfunction PlanCard({ p, units, recommended, current, onChoose, onDetails }: {\n p: PricedPlan\n units: number\n recommended: boolean\n current: boolean\n onChoose?: () => void\n onDetails: () => void\n}) {\n const [allFeatures, setAllFeatures] = React.useState(false)\n const reason = fitReason(p.fit)\n // Every plan leads with its AI allowance, highlighted like the app's own `*` features.\n const all = [\n `*${tl(`AI assistant — ${p.aiCredits.toLocaleString('pt-BR')} credits/mo`, `Assistente de IA — ${p.aiCredits.toLocaleString('pt-BR')} créditos/mês`)}`,\n ...p.plan.features.filter((f) => !AI_FEATURE.test(parsePlanFeature(f).label)),\n ]\n const features = allFeatures ? all : all.slice(0, FEATURES_SHOWN)\n const hidden = all.length - features.length\n\n return (\n // On a phone the recommended plan comes first; wide screens keep the price ladder.\n <Card className={cn('relative flex flex-col', recommended && 'order-first border-primary shadow-md md:order-none', !p.fit.fits && 'bg-muted/30')}>\n {(recommended || (p.plan.highlighted && p.fit.fits)) && (\n <div className=\"absolute -top-3 left-5\">\n <Badge className={cn(recommended ? 'border-transparent bg-primary text-primary-foreground' : 'bg-secondary text-secondary-foreground')}>\n {recommended ? tl('Recommended for you', 'Recomendado para você') : tl('Most popular', 'Mais popular')}\n </Badge>\n </div>\n )}\n <CardContent className=\"flex flex-1 flex-col gap-4 p-5 pt-6\">\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"text-lg font-semibold\">{p.plan.name}</h3>\n {current && <Badge variant=\"outline\">{tl('Your plan', 'Seu plano')}</Badge>}\n </div>\n {p.plan.description && <p className=\"text-sm text-muted-foreground\">{p.plan.description}</p>}\n </div>\n\n {reason ? (\n <div className=\"flex items-start gap-2 rounded-input border border-dashed px-3 py-2.5 text-sm text-muted-foreground\">\n <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <span><span className=\"font-medium text-foreground\">{tl('Too small for you', 'Não comporta a sua operação')}</span><br />{reason}</span>\n </div>\n ) : (\n <div>\n {/* Wraps instead of overflowing: three cards side by side leave a\n narrow column, and a five-digit price does not fit it at 3xl. */}\n <p className=\"flex min-w-0 flex-wrap items-baseline gap-x-1\">\n <span className=\"text-2xl font-bold tabular-nums 2xl:text-3xl\">{p.total > 0 ? money(p.total) : tl('Free', 'Grátis')}</span>\n {p.total > 0 && <span className=\"text-sm text-muted-foreground\">{tl('/mo', '/mês')}</span>}\n </p>\n {p.total > 0 && units > 1 && (\n <p className=\"text-sm text-muted-foreground tabular-nums\">\n ≈ {money(p.total / units)} {tl('per unit', 'por unidade')}\n </p>\n )}\n </div>\n )}\n\n {features.length > 0 && (\n <ul className=\"flex-1 space-y-2 text-sm\">\n {features.map((f) => <PlanFeatureItem key={f} feature={f} iconClassName=\"h-4 w-4\" />)}\n {hidden > 0 && (\n <li>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" className=\"font-normal whitespace-normal text-sm font-medium text-primary underline-offset-2 hover:underline\" onClick={() => setAllFeatures(true)}>\n + {hidden} {tl('more', hidden === 1 ? 'recurso' : 'recursos')}\n </Button>\n </li>\n )}\n </ul>\n )}\n\n <div className=\"mt-auto space-y-2\">\n {p.quote && p.fit.fits && (\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={onDetails}\n className=\"font-normal whitespace-normal flex w-full items-center justify-center gap-1.5 py-1 text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline\">\n <Calculator className=\"h-3.5 w-3.5\" />\n {tl('How we got here', 'Como chegamos neste valor')}\n </Button>\n )}\n {current ? (\n <Button variant=\"outline\" className=\"w-full\" disabled>{tl('Current plan', 'Plano atual')}</Button>\n ) : onChoose ? (\n <Button className=\"w-full\" variant={recommended ? 'default' : 'outline'} disabled={!p.fit.fits} onClick={onChoose}>\n {tl(`Switch to ${p.plan.name}`, `Mudar para ${p.plan.name}`)}\n </Button>\n ) : null}\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction NumberField({ icon, label, value, onChange }: {\n icon: React.ReactNode; label: string; value: number; onChange: (n: number) => void\n}) {\n return (\n <label className=\"flex h-11 items-center gap-2 rounded-input border bg-background px-3 text-sm\">\n <span className=\"text-muted-foreground\" aria-hidden>{icon}</span>\n <span className=\"text-muted-foreground\">{label}</span>\n <Input\n type=\"number\"\n min={1}\n inputMode=\"numeric\"\n wrapperClassName=\"w-14\"\n className=\"h-auto border-0 bg-transparent p-0 text-right font-medium tabular-nums shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n value={value}\n onChange={(e) => onChange(Math.max(1, Number(e.target.value) || 1))}\n />\n </label>\n )\n}\n\n/** One card per unit, like the proposal: what it runs (tap to take a module\n * out or put it back) and what it adds a month. */\nfunction UnitCards({ op, quoteFor }: { op: Operation; quoteFor: Quote | null }) {\n if (op.available.length === 0) return null\n return (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {op.units.map((u) => <UnitCard key={u.id} op={op} unit={u} amount={quoteFor?.lines.find((l) => l.key === `unit:${u.id}`)?.amount ?? 0} />)}\n </div>\n )\n}\n\nfunction UnitCard({ op, unit, amount }: { op: Operation; unit: UnitFootprint; amount: number }) {\n const [adding, setAdding] = React.useState(false)\n const on = op.available.filter((k) => unit.modules.includes(k))\n const off = op.available.filter((k) => !unit.modules.includes(k))\n const chip = (key: string, active: boolean) => (\n <Button variant=\"bare\" size=\"bare\" key={key} type=\"button\" aria-pressed={active} onClick={() => op.toggle(unit.id, key)}\n title={active ? tl('Take out of this unit', 'Tirar desta unidade') : tl('Add to this unit', 'Pôr nesta unidade')}\n className={cn('min-h-8 rounded-full border px-2.5 py-1 text-xs transition-colors',\n active ? 'border-primary/40 bg-primary/10 text-foreground hover:bg-primary/20' : 'border-dashed text-muted-foreground hover:text-foreground')}>\n {active ? '' : '+ '}{tl(...PRICE_BOOK[key]!.label)}\n </Button>\n )\n return (\n <div className=\"space-y-2 rounded-card border border-t-4 border-t-primary bg-card p-4\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"min-w-0 font-semibold\">{unit.name}</p>\n <span className=\"shrink-0 text-sm tabular-nums text-muted-foreground\">{money(amount)}</span>\n </div>\n <div className=\"flex flex-wrap gap-1.5\">\n {on.map((k) => chip(k, true))}\n {off.length > 0 && !adding && (\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => setAdding(true)}\n className=\"font-normal whitespace-normal min-h-8 rounded-full px-2.5 py-1 text-xs font-medium text-primary underline-offset-2 hover:underline\">\n + {off.length} {tl(off.length === 1 ? 'module' : 'modules', off.length === 1 ? 'módulo' : 'módulos')}\n </Button>\n )}\n {adding && off.map((k) => chip(k, false))}\n </div>\n </div>\n )\n}\n\nfunction Breakdown({ q }: { q: Quote }) {\n return (\n <ul className=\"divide-y rounded-card border text-sm\">\n {q.lines.map((line) => (\n <li key={line.key} className=\"flex items-start justify-between gap-4 px-4 py-2.5\">\n <div className=\"min-w-0\">\n <p className=\"font-medium\">{line.label}</p>\n <p className=\"text-xs text-muted-foreground\">{line.detail}</p>\n </div>\n {line.kind === 'credits' ? (\n <span className=\"shrink-0 font-medium text-violet-700 dark:text-violet-200\">{tl('Included', 'Incluído')}</span>\n ) : (\n <span className={cn('shrink-0 tabular-nums', line.amount < 0 && 'text-emerald-700 dark:text-emerald-400')}>{money(line.amount)}</span>\n )}\n </li>\n ))}\n <li className=\"flex justify-between gap-4 bg-muted/40 px-4 py-3 font-semibold\">\n <span>{tl('Total per month', 'Total por mês')}</span>\n <span className=\"tabular-nums\">{money(q.total)}</span>\n </li>\n </ul>\n )\n}\n\nfunction DetailsSheet({ open, onOpenChange, op, priced, planId, setPlanId }: {\n open: boolean\n onOpenChange: (open: boolean) => void\n op: Operation\n priced: PricedPlan[]\n planId: string | undefined\n setPlanId: (id: string) => void\n}) {\n const withMath = priced.filter((p) => p.quote)\n const scenarioInfo = PRICING_SCENARIOS.find((x) => x.id === op.scenario)\n const shown = withMath.find((p) => p.plan.id === planId) ?? withMath[0]\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent width=\"max-w-2xl\">\n <SheetHeader>\n <SheetTitle>{tl('How we price', 'Como calculamos')}</SheetTitle>\n <SheetDescription>\n {tl('Each unit pays for what it runs; the one that runs most pays in full, the others 85% (65% from the 6th). Group-wide modules are paid once.',\n 'Cada unidade paga o que usa; a que mais usa paga cheio, as outras 85% (65% a partir da 6ª). O que serve o grupo todo é pago uma vez.')}\n </SheetDescription>\n </SheetHeader>\n <SheetBody className=\"space-y-6\">\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold\">{tl('1. Your operation', '1. Sua operação')}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <ChoiceSelect\n aria-label={tl('Operation', 'Operação')}\n className=\"h-11 w-full sm:w-72\"\n value={op.scenario}\n onChange={(v) => op.setScenario(v ?? MINE)}\n options={[\n { value: MINE, label: tl('My operation', 'Minha operação') },\n // Grouped by trade, so a salon compares itself with salons.\n ...(Object.keys(SCENARIO_VERTICAL_LABELS) as Array<keyof typeof SCENARIO_VERTICAL_LABELS>).flatMap((v) =>\n PRICING_SCENARIOS.filter((x) => x.vertical === v).map((x) => ({\n value: x.id,\n label: `${tl(...SCENARIO_VERTICAL_LABELS[v])} · ${tl(...x.name)}`,\n }))),\n ]}\n />\n <NumberField icon={<Building2 className=\"h-4 w-4\" />} label={tl('Units', 'Unidades')} value={op.units.length} onChange={op.setUnitCount} />\n <NumberField icon={<Users className=\"h-4 w-4\" />} label={tl('Users', 'Usuários')} value={op.size.users} onChange={op.setUsers} />\n </div>\n {scenarioInfo?.assumptions?.length ? (\n <div className=\"rounded-input border border-dashed bg-muted/30 px-3 py-2 text-xs text-muted-foreground\">\n <p className=\"font-medium text-foreground\">\n {tl('Assumptions', 'Premissas')}\n </p>\n <ul className=\"mt-1 list-disc space-y-0.5 pl-4\">\n {scenarioInfo.assumptions.map((a) => <li key={a}>{a}</li>)}\n </ul>\n </div>\n ) : null}\n <p className=\"text-xs text-muted-foreground\">\n {tl('Tap a module to take it out of a unit or put it back. The plan cards follow.', 'Toque num módulo para tirar ou pôr em uma unidade. Os cartões dos planos acompanham.')}\n </p>\n <UnitCards op={op} quoteFor={shown?.quote ?? null} />\n </section>\n\n {shown?.quote && (\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold\">{tl('2. The math, per plan', '2. A conta, por plano')}</h3>\n {withMath.length > 1 && (\n // Plan · value, one line each: a tab strip of names alone made the\n // reader open each plan to learn what it costs.\n <div role=\"radiogroup\" aria-label={tl('Plan', 'Plano')} className={cn('grid gap-2', withMath.length >= 3 ? 'sm:grid-cols-3' : 'sm:grid-cols-2')}>\n {withMath.map((p) => {\n const on = p.plan.id === shown.plan.id\n const seats = p.pricing?.seatsPerUnit\n const units = op.units.length\n return (\n <Button variant=\"bare\" size=\"bare\"\n key={p.plan.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={on}\n onClick={() => setPlanId(p.plan.id)}\n className={cn(\n 'min-h-11 rounded-card border px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n on ? 'border-primary bg-primary/5' : 'hover:bg-muted/40',\n )}\n >\n <span className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-sm font-semibold\">{p.plan.name}</span>\n <span className=\"text-sm font-semibold tabular-nums\">{money(p.total)}</span>\n </span>\n <span className=\"mt-0.5 block text-[11px] leading-snug text-muted-foreground\">\n {units > 1 ? `≈ ${money(p.total / units)} ${tl('per unit', 'por unidade')} · ` : ''}\n {seats === null || seats === undefined\n ? tl('Unlimited users', 'Usuários ilimitados')\n : tl(`${seats} users per unit`, `${seats} usuários por unidade`)}\n {` · ${p.aiCredits.toLocaleString('pt-BR')} ${tl('AI credits', 'créditos de IA')}`}\n </span>\n </Button>\n )\n })}\n </div>\n )}\n <Breakdown q={shown.quote} />\n </section>\n )}\n </SheetBody>\n </SheetContent>\n </Sheet>\n )\n}\n\n// ── The page block ─────────────────────────────────────────────────────────\n\n/**\n * One answer to \"what do I pay\": the account's plan and its price for THIS\n * operation on top, the plans priced the same way below, and the math behind a\n * button. The price of a plan is never a fixed number on this screen — it is\n * what this operation would pay on it.\n */\nexport function PricingOverview({ plans, currentPlanId, onChoose, onConfirm, compare }: {\n plans?: Plan[]\n currentPlanId?: string\n onChoose?: (plan: Plan) => void\n /** Switching plan composes it: the plan plus the modules it will run,\n * confirmed at once. Given, choosing a plan opens that composer. */\n onConfirm?: (plan: Plan, changes: ModuleChange[]) => Promise<void>\n /** The feature comparison, revealed on demand under the cards. */\n compare?: React.ReactNode\n}) {\n const op = useOperation()\n const sources = plans?.length ? plans : MODEL_PLANS\n const [detailsOpen, setDetailsOpen] = React.useState(false)\n const [detailsPlan, setDetailsPlan] = React.useState<string | undefined>()\n const [compareOpen, setCompareOpen] = React.useState(false)\n const [checkout, setCheckout] = React.useState<Plan | null>(null)\n const choose = onConfirm ? (plan: Plan) => setCheckout(plan) : onChoose\n\n const priced = React.useMemo<PricedPlan[]>(() => {\n const pricings = pricingForPlans(sources)\n return sources.map((plan, i) => {\n const pricing = pricings[i] ?? null\n const q = pricing ? quote(op.size, pricing) : null\n return { plan, pricing, quote: q, total: q?.total ?? plan.price, fit: planFit(plan, op.size), aiCredits: aiCreditsFor(plan, pricing) }\n })\n }, [sources, JSON.stringify(op.size)])\n\n const fitting = priced.filter((p) => p.fit.fits)\n const recommended = fitting.reduce<PricedPlan | undefined>((best, p) => (!best || p.total < best.total ? p : best), undefined)\n const current = priced.find((p) => p.plan.id === currentPlanId)\n // Savings speak to the account's own plan, never to an example's.\n const saving = op.scenario === MINE && current && recommended && current.fit.fits && recommended.plan.id !== current.plan.id\n ? current.total - recommended.total : 0\n const openDetails = (planId?: string) => { setDetailsPlan(planId ?? current?.plan.id ?? recommended?.plan.id); setDetailsOpen(true) }\n const cols = priced.length >= 4 ? 'lg:grid-cols-4' : priced.length === 3 ? 'lg:grid-cols-3' : 'lg:grid-cols-2'\n\n return (\n <div className=\"space-y-8\">\n {/* The answer first: your plan, what you pay, and the one thing worth knowing. */}\n <Card>\n <CardContent className=\"flex flex-col gap-5 p-5 md:flex-row md:items-center md:justify-between\">\n <div className=\"min-w-0 space-y-1\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {op.simulated ? tl('Simulation', 'Simulação') : current ? tl('Your plan', 'Seu plano') : tl('Your operation', 'Sua operação')}\n </p>\n {current && !op.simulated ? (\n <p className=\"flex flex-wrap items-baseline gap-x-2\">\n <span className=\"text-lg font-semibold\">{current.plan.name}</span>\n <span className=\"text-3xl font-bold tabular-nums\">{current.total > 0 ? money(current.total) : tl('Free', 'Grátis')}</span>\n {current.total > 0 && <span className=\"text-sm text-muted-foreground\">{tl('/mo for your operation', '/mês para a sua operação')}</span>}\n </p>\n ) : recommended ? (\n <p className=\"flex flex-wrap items-baseline gap-x-2\">\n <span className=\"text-sm text-muted-foreground\">{tl('From', 'A partir de')}</span>\n <span className=\"text-3xl font-bold tabular-nums\">{money(recommended.total)}</span>\n <span className=\"text-sm text-muted-foreground\">{tl('/mo on', '/mês no')} {recommended.plan.name}</span>\n </p>\n ) : null}\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 pt-1\">\n <Stat icon={<Building2 className=\"h-4 w-4\" />}>{op.units.length} {tl(op.units.length === 1 ? 'unit' : 'units', op.units.length === 1 ? 'unidade' : 'unidades')}</Stat>\n <Stat icon={<Users className=\"h-4 w-4\" />}>{op.size.users} {tl(op.size.users === 1 ? 'user' : 'users', op.size.users === 1 ? 'usuário' : 'usuários')}</Stat>\n <Stat icon={<Blocks className=\"h-4 w-4\" />}>{op.pkg.name} + {op.paidModules} {tl(op.paidModules === 1 ? 'extra' : 'extras', op.paidModules === 1 ? 'extra' : 'extras')}</Stat>\n </div>\n <p className=\"pt-1 text-xs text-muted-foreground\">\n {tl(`What sets your price: the modules each unit runs (the next units pay less), what serves the whole group, and the plan fee. Logins beyond the plan: R$ ${EXTRA_SEAT_PRICE} each.`,\n `O que define o seu preço: os módulos de cada unidade (as seguintes pagam menos), o que serve o grupo todo e a plataforma do plano. Login além do incluído: R$ ${EXTRA_SEAT_PRICE} cada.`)}\n </p>\n {saving > 0.5 && (\n <p className=\"flex items-center gap-1.5 pt-1 text-sm font-medium text-emerald-700 dark:text-emerald-400\">\n <TrendingDown className=\"h-4 w-4\" aria-hidden />\n {tl(`On ${recommended!.plan.name} you would pay ${money(saving)} less a month.`,\n `No ${recommended!.plan.name} você pagaria ${money(saving)} a menos por mês.`)}\n </p>\n )}\n </div>\n <div className=\"flex shrink-0 flex-col gap-2 sm:flex-row md:flex-col\">\n <Button variant=\"outline\" className=\"h-11\" onClick={() => openDetails()}>\n <Calculator className=\"h-4 w-4\" />\n {tl('See the details', 'Ver detalhes do cálculo')}\n </Button>\n {op.simulated && (\n <Button variant=\"ghost\" className=\"h-11\" onClick={op.reset}>\n <RotateCcw className=\"h-4 w-4\" />\n {tl('Back to my numbers', 'Voltar aos meus números')}\n </Button>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* The account's own meter: hidden while simulating someone else's numbers. */}\n {current && op.scenario === MINE && (() => {\n const next = priced.find((p) => p.aiCredits > current.aiCredits && p.plan.id !== current.plan.id && p.fit.fits)\n return (\n <AiUsageSection\n included={current.aiCredits}\n planName={current.plan.name}\n upgrade={next ? { name: next.plan.name, credits: next.aiCredits, onChoose: choose && plans?.length ? () => choose(next.plan) : undefined } : undefined}\n />\n )\n })()}\n\n <div className={cn('grid items-stretch gap-5 md:grid-cols-2', cols)}>\n {priced.map((p) => (\n <PlanCard\n key={p.plan.id}\n p={p}\n units={op.units.length}\n recommended={p.plan.id === recommended?.plan.id}\n current={op.scenario === MINE && p.plan.id === currentPlanId}\n // An example is someone else's operation: nothing to switch to from it.\n onChoose={choose && plans?.length && op.scenario === MINE ? () => choose(p.plan) : undefined}\n onDetails={() => openDetails(p.plan.id)}\n />\n ))}\n </div>\n\n {compare && (\n <div className=\"space-y-3\">\n <Button variant=\"ghost\" className=\"h-11 px-2\" aria-expanded={compareOpen} onClick={() => setCompareOpen((o) => !o)}>\n <ChevronDown className={cn('h-4 w-4 transition-transform', compareOpen && 'rotate-180')} />\n {compareOpen ? tl('Hide the comparison', 'Ocultar comparação') : tl('Compare what each plan includes', 'Comparar o que cada plano inclui')}\n </Button>\n {compareOpen && compare}\n </div>\n )}\n\n <p className=\"text-xs text-muted-foreground\">\n {tl('Not included: equipment, digital certificates, internet and the providers\\' own fees (invoicing, iFood, acquirers). Setup and migration are free.',\n 'Não incluído: equipamentos, certificado digital, internet e as taxas dos próprios provedores (emissão fiscal, iFood, adquirentes). Implantação e migração sem custo.')}\n </p>\n\n <PlanCheckoutSheet\n plan={checkout}\n pricing={checkout ? priced.find((p) => p.plan.id === checkout.id)?.pricing ?? null : null}\n size={op.size}\n trades={op.trades}\n currentTotal={op.scenario === MINE ? current?.total : undefined}\n onCancel={() => setCheckout(null)}\n onConfirm={async (plan, changes) => { await onConfirm!(plan, changes); setCheckout(null) }}\n />\n <DetailsSheet open={detailsOpen} onOpenChange={setDetailsOpen} op={op} priced={priced} planId={detailsPlan} setPlanId={setDetailsPlan} />\n </div>\n )\n}\n","import * as React from 'react'\nimport { Crown, Check, Minus } from 'lucide-react'\nimport { parsePlanFeature } from './plan-feature'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, toast } from '@fayz-ai/ui'\nimport { invalidateAppConfig } from '@fayz-ai/core'\nimport type { Plan } from '@fayz-ai/core'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { useBillingStore } from '../../billing/store'\nimport { useOrgAdapterOptional } from '../../org/context'\nimport { useOrganizationStore } from '../../org/store'\nimport { usePermissionsStore } from '../../permissions'\nimport { formatPlanPrice } from '../../lib/currency'\nimport { getPlanEntitlements } from './access-contract'\nimport { PricingOverview } from './PricingOverview'\nimport type { ModuleChange } from './PlanCheckoutSheet'\nimport { getSupabaseClientOptional } from '../../lib/supabase'\nimport { clearAppConfigSnapshot } from '../../app/app-config-cache'\nimport { useAppConfig } from '../../hooks/useAppConfig'\n\n// ---------------------------------------------------------------------------\n// SubscriptionPage — the shell's self-serve subscription surface. Present as the\n// /settings/subscription tab whenever `config.billing` is configured. Reads the\n// plans seeded into the billing store from config, resolves the current plan\n// from `currentOrg.plan`, and changes plan via the checkout seam (Stripe/Pix) or,\n// when no seam is configured, an optimistic `adapter.updateOrg(orgId, { plan })`.\n// ---------------------------------------------------------------------------\n\ninterface MatrixRow {\n id: string\n label: string\n cell: (plan: Plan) => React.ReactNode\n odd: boolean\n}\n\nexport function SubscriptionPage({ className }: { className?: string }) {\n const { t } = useTranslation()\n const tr = (key: string, fallback: string) => {\n const v = t(key)\n return !v || v === key ? fallback : v\n }\n\n const plans = useBillingStore((s) => s.plans)\n const checkout = useBillingStore((s) => s.checkout)\n const adapter = useOrgAdapterOptional()\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n\n const currentPlanId = currentOrg?.plan || 'free'\n\n const { refresh: refreshAppConfig } = useAppConfig()\n\n // Feature matrix — union of every plan's features, order-preserved.\n const allFeatures = React.useMemo(() => {\n const seen = new Set<string>()\n const out: string[] = []\n for (const plan of plans) {\n for (const f of plan.features) {\n if (!seen.has(f)) {\n seen.add(f)\n out.push(f)\n }\n }\n }\n return out\n }, [plans])\n\n // Real entitlements matrix — derived from plan.entitlements when any plan\n // declares them. Feature rows show ✓/— per plan; limit rows show \"Up to N\" /\n // \"Unlimited\". Falls back to the marketing-bullet matrix (allFeatures) below\n // when no plan carries entitlements.\n const featureCatalog = usePermissionsStore((s) => s.features)\n const entitlementsMatrix = React.useMemo(() => {\n const hasAny = plans.some((p) => getPlanEntitlements(p))\n if (!hasAny) return null\n\n const featureIds: string[] = []\n const featureSeen = new Set<string>()\n const limitKeys: string[] = []\n const limitSeen = new Set<string>()\n for (const plan of plans) {\n const ent = getPlanEntitlements(plan)\n for (const id of Object.keys(ent?.features ?? {})) {\n if (!featureSeen.has(id)) { featureSeen.add(id); featureIds.push(id) }\n }\n for (const key of Object.keys(ent?.limits ?? {})) {\n if (!limitSeen.has(key)) { limitSeen.add(key); limitKeys.push(key) }\n }\n }\n if (featureIds.length === 0 && limitKeys.length === 0) return null\n\n const labelForFeature = (id: string) => featureCatalog.find((f) => f.id === id)?.label ?? id\n const labelForLimit = (key: string) => {\n const v = t(`limit.label.${key}`)\n return !v || v === `limit.label.${key}` ? key : v\n }\n return { featureIds, limitKeys, labelForFeature, labelForLimit }\n }, [plans, featureCatalog, t])\n\n async function applyChange(plan: Plan): Promise<boolean> {\n try {\n // Seam: a configured gateway (Stripe/Pix) owns the transition; the webhook\n // is the source of truth for the persisted plan, so we don't mutate here.\n if (checkout) {\n await checkout(plan.id)\n return true\n }\n // No gateway: optimistic org update. Persist + swap the store so the plan\n // badge and CTAs re-render immediately.\n if (adapter && currentOrg) {\n const updated = await adapter.updateOrg(currentOrg.id, { plan: plan.id })\n setCurrentOrg(updated)\n } else if (currentOrg) {\n setCurrentOrg({ ...currentOrg, plan: plan.id })\n }\n toast.success(\n tr('billing.planChanged', 'Plan updated').replace('{{plan}}', plan.name),\n )\n return true\n } catch {\n toast.error(tr('billing.planChangeFailed', \"Couldn't change your plan. Please try again.\"))\n return false\n }\n }\n\n const featureMark = (on: boolean) =>\n on ? <Check className=\"mx-auto h-4 w-4 text-primary\" /> : <Minus className=\"mx-auto h-4 w-4 text-muted-foreground/40\" />\n const limitText = (cap: number | undefined) =>\n cap === undefined\n ? '—'\n : cap < 0\n ? tr('billing.unlimited', 'Unlimited')\n : tr('billing.upTo', 'Up to {count}').replace('{count}', String(cap)).replace('{{count}}', String(cap))\n const matrixRows: MatrixRow[] = (\n entitlementsMatrix\n ? [\n ...entitlementsMatrix.featureIds.map((id) => ({\n id: `f:${id}`,\n label: entitlementsMatrix.labelForFeature(id),\n cell: (plan: Plan) => featureMark(getPlanEntitlements(plan)?.features?.[id] !== false),\n })),\n ...entitlementsMatrix.limitKeys.map((key) => ({\n id: `l:${key}`,\n label: entitlementsMatrix.labelForLimit(key),\n cell: (plan: Plan) => <span className=\"text-muted-foreground\">{limitText(getPlanEntitlements(plan)?.limits?.[key])}</span>,\n })),\n ]\n : allFeatures.map((feature) => ({\n id: feature,\n label: parsePlanFeature(feature).label,\n cell: (plan: Plan) => featureMark(plan.features.includes(feature)),\n }))\n ).map((row, i) => ({ ...row, odd: i % 2 === 1 }))\n const matrixColumns: ColumnDef<MatrixRow>[] = [\n { id: 'feature', header: tr('billing.features', 'Features'), cell: ({ row }) => row.original.label },\n ...plans.map((plan): ColumnDef<MatrixRow> => ({\n id: plan.id,\n header: () => (\n <span className=\"inline-flex items-center gap-1\">\n {plan.price > 0 && <Crown className=\"h-3.5 w-3.5 text-amber-500\" />}\n {plan.name}\n </span>\n ),\n meta: { className: 'text-center' },\n cell: ({ row }) => row.original.cell(plan),\n })),\n ]\n\n const compare = entitlementsMatrix || allFeatures.length > 0 ? (\n <div className=\"space-y-3\">\n <DataTable variant=\"flat\" columns={matrixColumns} data={matrixRows} rowClassName={(r) => (r.odd ? 'bg-muted/20' : undefined)} />\n </div>\n ) : null\n\n if (plans.length === 0) {\n return (\n <div className={className ?? 'mx-auto max-w-5xl'}>\n <PricingOverview />\n </div>\n )\n }\n\n // The plan and the modules it will run, in one confirmation. With a payment\n // gateway the plan is the webhook's to persist, so modules go first; without\n // one the plan changes first, so its ceiling lets the new modules in.\n async function applyPlanWithModules(plan: Plan, changes: ModuleChange[]) {\n const supabase = getSupabaseClientOptional()\n const failed: string[] = []\n const setModules = async () => {\n if (!supabase) return\n for (const c of changes) {\n const { error } = await supabase.rpc('tenant_plugin_set', { p_plugin: c.plugin, p_status: c.status, p_facet: c.facet })\n if (error) failed.push(c.facet ? `${c.plugin}.${c.facet}` : c.plugin)\n }\n }\n if (checkout) await setModules()\n // A plan that did not change leaves the modules as they were.\n if (plan.id !== currentPlanId && !(await applyChange(plan))) return\n if (!checkout) await setModules()\n if (currentOrg?.id) {\n invalidateAppConfig(currentOrg.id)\n clearAppConfigSnapshot(currentOrg.id)\n }\n await refreshAppConfig()\n if (failed.length) {\n toast.error(tr('billing.modulesNotChanged', 'Some modules were not changed'), { description: failed.join(', ') })\n } else if (changes.length) {\n toast.success(tr('billing.modulesChanged', 'Modules updated'))\n }\n }\n\n return (\n <div className={className ?? 'mx-auto max-w-5xl space-y-8'}>\n {/* Sem título nem descrição: a barra já escreve \"Assinatura\", e a frase\n embaixo custava uma linha para repetir o que os planos mostram. */}\n\n <PricingOverview\n plans={plans}\n currentPlanId={currentPlanId}\n onConfirm={applyPlanWithModules}\n compare={compare}\n />\n\n </div>\n )\n}\n"]}
|