@fayz-ai/plugin-marketing 0.13.33 → 0.13.34
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/MarketingPage-BE54EZHP.js +2921 -0
- package/dist/MarketingPage-BE54EZHP.js.map +1 -0
- package/dist/SettingsView-JJXZ3R7V.js +80 -0
- package/dist/SettingsView-JJXZ3R7V.js.map +1 -0
- package/dist/chunk-JHCVIZ52.js +17 -0
- package/dist/chunk-JHCVIZ52.js.map +1 -0
- package/dist/chunk-P3OYOY5W.js +207 -0
- package/dist/chunk-P3OYOY5W.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1581 -6420
- package/dist/index.js.map +1 -1
- package/dist/migrations/main.browser.js +12 -0
- package/dist/migrations/main.browser.js.map +1 -0
- package/dist/migrations/main.js +1660 -0
- package/dist/migrations/main.js.map +1 -0
- package/package.json +10 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/views/OverviewView.tsx","../src/views/GapScreens.tsx","../src/views/ChannelsView.tsx","../src/views/ChannelDetailView.tsx","../src/views/CampaignComposer.tsx","../src/views/CampaignsView.tsx","../src/views/FunnelView.tsx","../src/views/CadencesView.tsx","../src/types.ts","../src/views/LandingPageComposer.tsx","../src/views/LandingPagesView.tsx","../src/views/content/ContentPlannerContext.tsx","../src/data/contentTypes.ts","../src/views/content/contentBits.tsx","../src/views/content/PlanBriefView.tsx","../src/data/contentMedia.ts","../src/views/content/RecordingChecklist.tsx","../src/views/content/PostSocialPreview.tsx","../src/views/content/templates.ts","../src/views/content/PostPage.tsx","../src/views/content/ContentView.tsx","../src/views/blog/useEntityCrud.ts","../src/views/blog/BlogAdminView.tsx","../src/views/blog/BlogEntityForm.tsx","../src/views/MarketingPage.tsx"],"names":["jsx","React","useTranslation","jsxs","DataTable","Users","PageToolbar","SubpageHeader","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Input","SegmentedControl","Button","RowActions","Sparkles","Trash2","Plus","PageHeaderActions","PageActions","Modal","ModalContent","ModalHeader","ModalTitle","ModalBody","ModalFooter","Checkbox","cn","X","ImageIcon","Send","isVideo","toDraft","Fragment","MarkdownEditor","Skeleton","ListIcon","ChevronRight","useMemo","useState","useLimitGuard","invalidateLimit"],"mappings":"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","file":"MarketingPage-BE54EZHP.js","sourcesContent":["import React from 'react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\nimport { useMarketingStore } from '../context'\nimport type { DateRangeKey } from '../types'\n\n/**\n * Marketing overview. KPIs, channel mix and the campaigns table are registered\n * dashboard widgets (see ./dashboardWidgets) rendered through DashboardCanvas —\n * the same widgets also surface on the global app home. The sticky range control\n * drives the marketing store's range, which refetches all widgets' data.\n */\nexport function OverviewView() {\n const setRange = useMarketingStore((s) => s.setRange)\n const range = useMarketingStore((s) => s.range)\n return (\n <DashboardCanvas\n surface=\"plugin-home\"\n domain=\"marketing\"\n showHeader={false}\n className=\"mx-auto max-w-6xl space-y-6\"\n range={{ default: range, onChange: (r) => void setRange(r as DateRangeKey) }}\n />\n )\n}\n","// ---------------------------------------------------------------------------\n// O que o Marketing do V1 tem e este ainda não.\n// ---------------------------------------------------------------------------\n// Lido no `CRMSidebar` do beautyplace — onde as views de marketing moram junto\n// com as de venda, com o prefixo `mkt-` — e medido no banco de produção do V1.\n// ---------------------------------------------------------------------------\nimport React from 'react'\nimport { ComingSoon } from '@fayz-ai/ui'\n\n/** Segmentos de clientes. */\nexport function SegmentsView() {\n return (\n <ComingSoon\n title=\"Segmentos\"\n summary=\"Recortes salvos da base — «quem comprou nos últimos 90 dias», «quem nunca voltou», «quem gasta acima de X» — para a campanha falar com um grupo e não com todo mundo.\"\n v1Path=\"Marketing → Segmentação → Segmentos de Clientes\"\n measured=\"65 segmentos no V1 e 8 da Artorius. É o que ela mais tem de marketing — e o que mais falta aqui.\"\n missing={[\n 'O construtor de recorte: campo, operador, valor — e a contagem ao vivo de quantos caem nele',\n 'O segmento tem de ser DINÂMICO (recalcula ao usar) ou congelado por escolha, e a diferença precisa ficar clara na tela',\n 'Ligar o segmento à campanha é o que dá sentido aos dois',\n ]}\n />\n )\n}\n\n/** Modelos de mensagem. */\nexport function MessageTemplatesView() {\n return (\n <ComingSoon\n title=\"Modelos de mensagem\"\n summary=\"O texto pronto que a campanha usa, com os campos que se trocam por nome, data ou valor na hora do envio.\"\n v1Path=\"Marketing → Campanhas → Modelos de Mensagem\"\n measured=\"43 modelos no V1, nenhum da Artorius. Existe também `whatsapp_templates`, que é outra coisa: o modelo APROVADO pela Meta.\"\n missing={[\n 'As variáveis e a pré-visualização com dado real — modelo sem prévia erra em produção',\n 'Separar o modelo livre (e-mail, SMS) do modelo aprovado pela Meta (WhatsApp): as regras são outras',\n ]}\n />\n )\n}\n\n/** Histórico de envios. */\nexport function SendHistoryView() {\n return (\n <ComingSoon\n title=\"Histórico de envios\"\n summary=\"O que saiu, para quem, quando, e o que aconteceu depois — entregue, lido, respondido, recusado.\"\n v1Path=\"Marketing → Histórico de Envios\"\n measured=\"Vista de leitura no V1 sobre a fila de mensagens.\"\n missing={[\n 'O evento por destinatário, e não só o total da campanha — é onde se descobre que metade da lista tem número errado',\n 'O recusado tem de virar regra: quem pediu para não receber não pode entrar na próxima',\n ]}\n />\n )\n}\n\n/** Gatilhos rápidos. */\nexport function QuickTriggersView() {\n return (\n <ComingSoon\n title=\"Gatilhos rápidos\"\n summary=\"O disparo de uma mensagem quando algo acontece — aniversário, primeira compra, sumiço — sem montar uma campanha inteira para isso.\"\n v1Path=\"Marketing → Gatilhos Rápidos\"\n measured=\"No V1 é um atalho para automações já prontas, e não um cadastro próprio.\"\n missing={[\n 'As Cadências daqui já fazem a parte difícil; falta a porta de um clique',\n 'Os aniversariantes do CRM são o primeiro gatilho óbvio, e os dois agora estão no mesmo menu',\n ]}\n />\n )\n}\n\n/** Marca. */\nexport function BrandView() {\n return (\n <ComingSoon\n title=\"Marca\"\n summary=\"As cores, as fontes e o logotipo da casa num lugar só — para a peça sair com a cara certa sem ninguém procurar o arquivo.\"\n v1Path=\"Marketing → Marca\"\n measured=\"6 kits de marca no V1 e UM da Artorius. Ela já tem a identidade cadastrada lá.\"\n missing={[\n 'O kit tem cores, gradientes, fontes e arquivos: são quatro tabelas no V1, não um formulário',\n 'As Configurações daqui já guardam a cor e o logotipo do tenant — decidir se este é o mesmo lugar antes de criar o segundo',\n ]}\n />\n )\n}\n\n/** Imagens autorizadas. */\nexport function AuthorizedImagesView() {\n return (\n <ComingSoon\n title=\"Imagens autorizadas\"\n summary=\"As fotos que a casa PODE usar: quem aparece nelas assinou a autorização, e o prazo dela ainda não venceu.\"\n v1Path=\"Marketing → Imagens autorizadas\"\n measured=\"No V1 vive junto do cadastro do cliente, onde a autorização é dada.\"\n missing={[\n 'A autorização é jurídica e tem prazo — o que falta não é a galeria, é a data de validade e o pedido',\n 'Usar foto de cliente sem isso é risco real, e é por isso que a tela existe',\n ]}\n />\n )\n}\n","import React from 'react'\nimport { ChevronRight } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, PageToolbar } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingConfig, useMarketingStore } from '../context'\nimport { formatCurrency, formatNumber, formatPercent } from '../lib/format'\nimport { RangeTabs, ChannelCell } from '../components/MarketingBits'\nimport type { ChannelPerformance } from '../types'\n\nexport function ChannelsView({ onOpen }: { onOpen: (channelId: string) => void }) {\n const t = useTranslation()\n const { conversion, currency } = useMarketingConfig()\n const channels = useMarketingStore((s) => s.channels)\n\n // Default ordering by conversions; DataTable lets the user re-sort any column.\n const sorted = [...channels].sort((a, b) => b.conversions - a.conversions)\n\n const columns = React.useMemo<ColumnDef<ChannelPerformance, any>[]>(() => [\n { accessorKey: 'channelId', header: t('marketing.col.channel'), cell: ({ getValue }) => <ChannelCell channelId={getValue() as string} /> },\n { accessorKey: 'reach', header: t('marketing.col.reach'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatNumber(getValue() as number)}</span> },\n { accessorKey: 'leads', header: t('marketing.col.leads'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatNumber(getValue() as number)}</span> },\n { accessorKey: 'conversions', header: conversion.labelPlural, cell: ({ getValue }) => <span className=\"font-medium text-foreground\">{formatNumber(getValue() as number)}</span> },\n { accessorKey: 'cvr', header: t('marketing.col.cvr'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatPercent(getValue() as number)}</span> },\n { accessorKey: 'spend', header: t('marketing.col.spend'), cell: ({ getValue }) => { const v = getValue() as number; return <span className=\"text-muted-foreground\">{v > 0 ? formatCurrency(v, currency) : '—'}</span> } },\n { accessorKey: 'cpa', header: t('marketing.col.cpa'), cell: ({ getValue }) => { const v = getValue() as number; return <span className=\"text-muted-foreground\">{v > 0 ? formatCurrency(v, currency) : '—'}</span> } },\n { accessorKey: 'value', header: conversion.valueLabel, cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatCurrency(getValue() as number, currency)}</span> },\n { id: 'open', header: '', enableSorting: false, cell: () => <ChevronRight className=\"h-4 w-4 text-muted-foreground\" /> },\n ], [t, conversion.labelPlural, conversion.valueLabel, currency])\n\n return (\n <div className=\"mx-auto max-w-6xl space-y-4\">\n {/* Período na barra flutuante — ver CampaignsView. */}\n <PageToolbar range={<RangeTabs />} />\n\n <DataTable\n columns={columns}\n data={sorted}\n onRowClick={(row) => onOpen(row.channelId)}\n emptyMessage={t('marketing.channels.subtitle')}\n />\n </div>\n )\n}\n","import React from 'react'\nimport { Target, Percent, DollarSign, Users } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingConfig, useMarketingStore, useChannelLookup, useMarketingProvider } from '../context'\nimport { formatCurrency, formatNumber, formatPercent } from '../lib/format'\nimport { KpiCard, StatusBadge } from '../components/MarketingBits'\nimport type { Campaign } from '../types'\n\nexport function ChannelDetailView({ channelId, onBack }: { channelId: string; onBack: () => void }) {\n const t = useTranslation()\n const { conversion, currency, labels } = useMarketingConfig()\n const range = useMarketingStore((s) => s.range)\n const channels = useMarketingStore((s) => s.channels)\n const lookup = useChannelLookup()\n const provider = useMarketingProvider()\n const [campaigns, setCampaigns] = React.useState<Campaign[]>([])\n\n React.useEffect(() => {\n void provider.listCampaigns({ range, channelId }).then(setCampaigns)\n }, [provider, range, channelId])\n\n const perf = channels.find((c) => c.channelId === channelId)\n const channel = lookup.get(channelId)\n\n const columns = React.useMemo<ColumnDef<Campaign, any>[]>(() => [\n { accessorKey: 'name', header: t('marketing.col.campaign'), cell: ({ getValue }) => <span className=\"font-medium text-foreground\">{getValue() as string}</span> },\n { accessorKey: 'conversions', header: conversion.labelPlural, cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatNumber(getValue() as number)}</span> },\n { id: 'cvr', accessorFn: (c) => (c.reach > 0 ? (c.conversions / c.reach) * 100 : 0), header: t('marketing.col.cvr'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatPercent(getValue() as number)}</span> },\n { accessorKey: 'spend', header: t('marketing.col.spend'), cell: ({ getValue }) => { const v = getValue() as number; return <span className=\"text-muted-foreground\">{v > 0 ? formatCurrency(v, currency) : '—'}</span> } },\n { accessorKey: 'status', header: t('marketing.col.status'), cell: ({ getValue }) => <StatusBadge status={getValue() as Campaign['status']} /> },\n ], [t, conversion.labelPlural, currency])\n\n return (\n <div className=\"mx-auto max-w-6xl space-y-6\">\n <SubpageHeader\n title={channel?.label ?? channelId}\n subtitle={channel?.kind}\n onBack={onBack}\n parentLabel={labels.channels}\n />\n\n {perf && (\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <KpiCard icon={Users} label={t('marketing.metric.reach')} value={formatNumber(perf.reach)} />\n <KpiCard icon={Target} label={conversion.labelPlural} value={formatNumber(perf.conversions)} />\n <KpiCard icon={Percent} label={t('marketing.metric.cvr')} value={formatPercent(perf.cvr)} />\n <KpiCard icon={DollarSign} label={t('marketing.col.cpa')} value={perf.cpa > 0 ? formatCurrency(perf.cpa, currency) : '—'} sub={perf.spend > 0 ? `${formatCurrency(perf.spend, currency)} ${t('marketing.metric.spend')}` : '—'} />\n </div>\n )}\n\n <div className=\"space-y-2\">\n <h2 className=\"text-sm font-semibold text-foreground\">{t('marketing.channels.campaignsOn')}</h2>\n <DataTable columns={columns} data={campaigns} emptyMessage={t('marketing.channels.noCampaigns')} />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Megaphone, Send, Users } from 'lucide-react'\nimport {\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Button, Input, SegmentedControl,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingConfig, useMarketingProvider, useMarketingStore } from '../context'\nimport type { AudienceSegment } from '../data/types'\nimport type { CampaignKind, CampaignPurpose, CampaignStatus } from '../types'\n\n// ---------------------------------------------------------------------------\n// Nova campanha — e \"campanha\" são DUAS coisas diferentes.\n//\n// Investimento (`ad_spend`) — verba num canal. Não dispara nada; é o\n// denominador do custo por aquisição.\n// Disparo (`outbound`) — uma mensagem para um RECORTE de gente, com\n// uma FINALIDADE. Esta roda sozinha.\n//\n// Eram a mesma tela, e só a primeira existia: dava para registrar quanto se\n// gastou no Instagram e não dava para mandar nada para ninguém.\n//\n// A FINALIDADE NÃO É RÓTULO. `marketing_has_consent` lê exatamente este campo:\n// `transactional` passa sempre (falar de algo que a pessoa já comprou não é\n// marketing), o resto exige opt-in registrado. Escolher \"Promoção\" e escolher\n// \"Aviso sobre o pedido\" muda QUEM recebe — por isso ela é um campo obrigatório\n// do disparo, e não uma etiqueta no fim do formulário.\n// ---------------------------------------------------------------------------\n\nconst STATUSES: CampaignStatus[] = ['draft', 'active', 'paused']\nconst PURPOSES: CampaignPurpose[] = ['promotion', 'newsletter', 'survey', 'transactional']\n\nexport function CampaignComposer({ open, onClose, initialSegmentId }: {\n open: boolean\n onClose: () => void\n /** Pré-selecionado quando a campanha nasce de um recorte (\"criar campanha\n * para este segmento\"), que é o caminho mais curto até ela existir. */\n initialSegmentId?: string\n}) {\n const t = useTranslation()\n const { channels } = useMarketingConfig()\n const provider = useMarketingProvider()\n const saveCampaign = useMarketingStore((s) => s.saveCampaign)\n\n const [kind, setKind] = React.useState<CampaignKind>('ad_spend')\n const [name, setName] = React.useState('')\n const [channelId, setChannelId] = React.useState(channels[0]?.id ?? '')\n const [status, setStatus] = React.useState<CampaignStatus>('draft')\n const [spend, setSpend] = React.useState('')\n const [purpose, setPurpose] = React.useState<CampaignPurpose>('promotion')\n const [segmentId, setSegmentId] = React.useState('')\n const [templateKey, setTemplateKey] = React.useState('')\n const [segments, setSegments] = React.useState<AudienceSegment[]>([])\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (!open) return\n setName(''); setChannelId(channels[0]?.id ?? ''); setSpend('')\n setPurpose('promotion'); setTemplateKey('')\n // Um disparo nasce RASCUNHO. Uma campanha que começa a enviar no instante\n // em que alguém aperta \"criar\" é uma campanha que envia um rascunho.\n setStatus('draft')\n setSegmentId(initialSegmentId ?? '')\n setKind(initialSegmentId ? 'outbound' : 'ad_spend')\n void provider.listAudienceSegments().then(setSegments).catch(() => setSegments([]))\n }, [open, channels, initialSegmentId, provider])\n\n const isOutbound = kind === 'outbound'\n // O disparo precisa de para QUEM e de O QUÊ. Sem os dois ele seria gravado e\n // nunca sairia — e a tela não diria por quê.\n const canSave = name.trim().length > 0\n && (isOutbound ? Boolean(segmentId && templateKey.trim()) : Boolean(channelId))\n\n async function handleSave() {\n if (!canSave) return\n setSaving(true)\n try {\n await saveCampaign({\n name: name.trim(),\n // Um disparo também tem canal: é por ele que o relatório soma o que\n // saiu por WhatsApp e o que saiu por e-mail.\n channelId: channelId || channels[0]?.id || 'email',\n status,\n kind,\n purpose: isOutbound ? purpose : 'promotion',\n segmentId: isOutbound ? segmentId : undefined,\n templateKey: isOutbound ? templateKey.trim() : undefined,\n start: new Date().toISOString(),\n spend: isOutbound ? 0 : Number(spend) || 0,\n })\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n const selectedSegment = segments.find((s) => s.id === segmentId)\n\n return (\n <Modal open={open} onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle>{t('marketing.composer.title')}</ModalTitle>\n </ModalHeader>\n <ModalBody className=\"space-y-4\">\n {/* O que esta campanha É. Primeiro campo porque muda o resto da tela. */}\n <SegmentedControl<CampaignKind>\n className=\"w-full\"\n value={kind}\n onChange={setKind}\n aria-label={t('marketing.composer.kind')}\n options={[\n { value: 'ad_spend', label: t('marketing.composer.kindSpend') },\n { value: 'outbound', label: t('marketing.composer.kindOutbound') },\n ]}\n />\n <p className=\"-mt-2 flex items-start gap-1.5 text-[11px] text-muted-foreground\">\n {isOutbound ? <Send className=\"mt-0.5 h-3 w-3 shrink-0\" /> : <Megaphone className=\"mt-0.5 h-3 w-3 shrink-0\" />}\n {isOutbound ? t('marketing.composer.kindOutboundHint') : t('marketing.composer.kindSpendHint')}\n </p>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.name')}</span>\n <Input value={name} onChange={(e) => setName(e.target.value)} placeholder={t('marketing.composer.namePlaceholder')} />\n </label>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.channel')}</span>\n <Select value={channelId} onValueChange={setChannelId}>\n <SelectTrigger><SelectValue placeholder={t('marketing.composer.channelPlaceholder')} /></SelectTrigger>\n <SelectContent>\n {channels.map((c) => <SelectItem key={c.id} value={c.id}>{c.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n\n {isOutbound ? (\n <>\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.audience')}</span>\n {segments.length > 0 ? (\n <Select value={segmentId} onValueChange={setSegmentId}>\n <SelectTrigger><SelectValue placeholder={t('marketing.composer.audiencePlaceholder')} /></SelectTrigger>\n <SelectContent>\n {segments.map((s) => <SelectItem key={s.id} value={s.id}>{s.name}</SelectItem>)}\n </SelectContent>\n </Select>\n ) : (\n <p className=\"rounded-lg border border-dashed px-3 py-2 text-xs text-muted-foreground\">\n {t('marketing.composer.noSegments')}\n </p>\n )}\n {selectedSegment?.description && (\n <span className=\"flex items-center gap-1.5 text-[11px] text-muted-foreground\">\n <Users className=\"h-3 w-3\" />{selectedSegment.description}\n </span>\n )}\n </label>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.purpose')}</span>\n <Select value={purpose} onValueChange={(v) => setPurpose(v as CampaignPurpose)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {PURPOSES.map((p) => <SelectItem key={p} value={p}>{t(`marketing.purpose.${p}`)}</SelectItem>)}\n </SelectContent>\n </Select>\n {/* A frase que explica por que este campo existe. */}\n <span className=\"text-[11px] text-muted-foreground\">{t(`marketing.purpose.${purpose}.hint`)}</span>\n </label>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.template')}</span>\n <Input value={templateKey} onChange={(e) => setTemplateKey(e.target.value)} placeholder=\"ex.: campanha_reativacao\" />\n <span className=\"text-[11px] text-muted-foreground\">{t('marketing.composer.templateHint')}</span>\n </label>\n </>\n ) : (\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.budget')}</span>\n <Input type=\"number\" min={0} value={spend} onChange={(e) => setSpend(e.target.value)} placeholder=\"0\" />\n </label>\n )}\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.composer.status')}</span>\n <Select value={status} onValueChange={(v) => setStatus(v as CampaignStatus)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {STATUSES.map((s) => <SelectItem key={s} value={s} className=\"capitalize\">{t(`marketing.status.${s}`)}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>{t('marketing.composer.cancel')}</Button>\n <Button onClick={handleSave} disabled={saving || !canSave}>{t('marketing.composer.create')}</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React from 'react'\nimport { Plus, Trash2, WandSparkles, SlidersHorizontal } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button, DataTable, PageHeaderActions, PageToolbar, RowActions } from '@fayz-ai/ui'\nimport { PermissionGate, QuickActionsButton, askAI, PageActions, type PageAction } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { PluginQuickAction } from '@fayz-ai/core'\nimport { useMarketingConfig, useMarketingStore } from '../context'\nimport { formatCurrency, formatNumber, formatPercent } from '../lib/format'\nimport { RangeTabs, ChannelCell, StatusBadge } from '../components/MarketingBits'\nimport { CampaignComposer } from './CampaignComposer'\nimport type { Campaign } from '../types'\n\nexport function CampaignsView() {\n const t = useTranslation()\n const { conversion, currency } = useMarketingConfig()\n const campaigns = useMarketingStore((s) => s.campaigns)\n const deleteCampaign = useMarketingStore((s) => s.deleteCampaign)\n const [composerOpen, setComposerOpen] = React.useState(false)\n\n const columns = React.useMemo<ColumnDef<Campaign, any>[]>(() => [\n { accessorKey: 'name', header: t('marketing.col.campaign'), cell: ({ getValue }) => <span className=\"font-medium text-foreground\">{getValue() as string}</span> },\n { accessorKey: 'channelId', header: t('marketing.col.channel'), cell: ({ getValue }) => <ChannelCell channelId={getValue() as string} /> },\n { accessorKey: 'reach', header: t('marketing.col.reach'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatNumber(getValue() as number)}</span> },\n { accessorKey: 'conversions', header: conversion.labelPlural, cell: ({ getValue }) => <span className=\"font-medium text-foreground\">{formatNumber(getValue() as number)}</span> },\n { id: 'cvr', accessorFn: (c) => (c.reach > 0 ? (c.conversions / c.reach) * 100 : 0), header: t('marketing.col.cvr'), cell: ({ getValue }) => <span className=\"text-muted-foreground\">{formatPercent(getValue() as number)}</span> },\n { accessorKey: 'spend', header: t('marketing.col.spend'), cell: ({ getValue }) => { const v = getValue() as number; return <span className=\"text-muted-foreground\">{v > 0 ? formatCurrency(v, currency) : '—'}</span> } },\n { accessorKey: 'status', header: t('marketing.col.status'), cell: ({ getValue }) => <StatusBadge status={getValue() as Campaign['status']} /> },\n {\n id: 'actions', header: '', enableSorting: false,\n cell: ({ row }) => (\n <RowActions\n actions={[{\n id: 'delete',\n label: t('marketing.campaigns.delete'),\n icon: Trash2,\n intent: 'danger',\n onSelect: () => { void deleteCampaign(row.original.id) },\n }]}\n />\n ),\n },\n ], [t, conversion.labelPlural, currency, deleteCampaign])\n\n const createActions = React.useMemo<PageAction[]>(() => [\n {\n id: 'with-ai',\n label: t('assistant.askAI'),\n description: t('marketing.campaigns.aiHint'),\n icon: WandSparkles,\n ai: true,\n intent: 'secondary',\n // Both entries end in a new campaign, so the circle is a \"+\" even though\n // neither icon is one — a menu of ways to create is still a create.\n creates: true,\n permission: { feature: 'marketing', action: 'create' },\n onSelect: () => askAI({\n hint: t('marketing.campaigns.askPlaceholder'),\n intro: {\n role: 'growth',\n persona: t('marketing.campaigns.askPersona'),\n pitch: t('marketing.campaigns.askPitch'),\n description: t('marketing.campaigns.askDescription'),\n suggestions: [0, 1, 2].map((i) => ({ label: t(`marketing.campaigns.askSuggestion.${i}`) })),\n },\n }),\n },\n {\n id: 'by-hand',\n label: t('marketing.campaigns.newByHand'),\n description: t('marketing.campaigns.newByHandHint'),\n icon: SlidersHorizontal,\n intent: 'primary',\n creates: true,\n permission: { feature: 'marketing', action: 'create' },\n onSelect: () => setComposerOpen(true),\n },\n ], [t])\n\n return (\n <div className=\"mx-auto max-w-6xl space-y-4\">\n {/* Período e criar vão para a direita da barra, como em toda tela do\n produto; aqui embaixo fica só a frase que explica a tela. */}\n {/* Criar é ação da tela: barra da shell. Período é a pergunta que a tela\n responde: barra flutuante, como no painel e nas análises. */}\n {/* A porta de IA abre `agent_marketing_create_campaign`, server-plane e já\n existente — aqui só se abre a porta, com a copy da ação. O gate viaja\n com a declaração, em vez de a tela embrulhar o botão no seu próprio. */}\n <PageHeaderActions>\n <PageActions actions={createActions} />\n </PageHeaderActions>\n <PageToolbar range={<RangeTabs />} />\n\n <DataTable columns={columns} data={campaigns} emptyMessage={t('marketing.campaigns.empty')} />\n\n <CampaignComposer open={composerOpen} onClose={() => setComposerOpen(false)} />\n </div>\n )\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { PageToolbar } from '@fayz-ai/ui'\nimport { useMarketingConfig, useMarketingStore } from '../context'\nimport { formatNumber, formatPercent } from '../lib/format'\nimport { RangeTabs } from '../components/MarketingBits'\n\nexport function FunnelView() {\n const t = useTranslation()\n const { conversion } = useMarketingConfig()\n const funnel = useMarketingStore((s) => s.funnel)\n const max = Math.max(...funnel.map((s) => s.count), 1)\n\n return (\n <div className=\"mx-auto max-w-4xl space-y-4\">\n {/* Ver CampaignsView: período na barra flutuante. */}\n <PageToolbar range={<RangeTabs />} />\n\n <div className=\"rounded-card border border-border bg-card p-5\">\n <div className=\"space-y-3\">\n {funnel.map((stage, i) => {\n const pct = max > 0 ? Math.max((stage.count / max) * 100, 4) : 0\n const prev = funnel[i - 1]\n const stepRate = prev && prev.count > 0 ? (stage.count / prev.count) * 100 : null\n return (\n <div key={stage.id}>\n <div className=\"mb-1 flex items-center justify-between text-sm\">\n <span className=\"font-medium text-foreground\">{stage.label}</span>\n <span className=\"text-muted-foreground\">\n {formatNumber(stage.count)}\n {stepRate != null && <span className=\"ml-2 text-xs\">({formatPercent(stepRate, 0)} {t('marketing.funnel.ofPrev')})</span>}\n </span>\n </div>\n <div className=\"h-9 overflow-hidden rounded-md bg-muted/40\">\n <div className=\"h-full rounded-md\" style={{ width: `${pct}%`, backgroundColor: stage.color + '33', borderLeft: `3px solid ${stage.color}` }} />\n </div>\n </div>\n )\n })}\n </div>\n\n <div className=\"mt-5 border-t border-border pt-4 text-sm\">\n <span className=\"text-muted-foreground\">{t('marketing.funnel.overall')}: </span>\n <span className=\"font-semibold text-foreground\">\n {funnel.length > 1 && funnel[0].count > 0\n ? formatPercent((funnel[funnel.length - 1].count / funnel[0].count) * 100)\n : '—'}\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Workflow } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { SubpageHeader } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Cadências — a régua de relacionamento, dentro do Marketing.\n//\n// A tela é INJETADA (`cadenceSurface`), não importada: quem é dono da cadência\n// é o plugin-automations, que tem o motor no banco. Este módulo só diz ONDE ela\n// mora — e mora aqui porque \"como a casa fala com quem ainda não comprou\" é uma\n// decisão de marketing, não de infraestrutura de automação.\n//\n// Sem a superfície injetada, a tela não finge: explica o que falta e para de\n// prometer. Um item de menu que abre um quadro vazio custa mais que o silêncio.\n// ---------------------------------------------------------------------------\n\nexport function CadencesView({ surface: Surface }: { surface?: React.ComponentType }) {\n const t = useTranslation()\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('marketing.cadences.title')} subtitle={t('marketing.cadences.subtitle')} />\n {Surface ? (\n <Surface />\n ) : (\n <div className=\"flex flex-col items-center gap-1 rounded-lg border border-dashed py-12 text-center\">\n <Workflow className=\"mb-2 h-9 w-9 text-muted-foreground/40\" strokeWidth={1.5} />\n <p className=\"text-sm font-medium\">{t('marketing.cadences.missingTitle')}</p>\n <p className=\"max-w-md text-xs text-muted-foreground\">{t('marketing.cadences.missingHint')}</p>\n </div>\n )}\n </div>\n )\n}\n","// ---------------------------------------------------------------------------\n// @fayz-ai/plugin-marketing — domain model for ACQUISITION & CONVERSION\n// analytics. The plugin is vertical-agnostic: each app supplies a\n// `ConversionModel` (what a conversion is + where it's read from) and a set of\n// `AcquisitionChannel`s, and the same analytics engine adapts.\n// ---------------------------------------------------------------------------\n\nexport type AcquisitionChannelKind =\n | 'paid'\n | 'organic'\n | 'social'\n | 'referral'\n | 'direct'\n | 'outbound'\n\nexport interface AcquisitionChannel {\n id: string\n label: string\n /** lucide-react icon name (resolved in components/icons.ts) */\n icon: string\n kind: AcquisitionChannelKind\n}\n\n/** Where attribution reads conversions from (per vertical). */\nexport type ConversionSource = 'crm' | 'agenda' | 'orders' | 'custom'\n\nexport interface ConversionModel {\n id: string\n /** singular noun for one conversion, e.g. 'Won deal' | 'Booking' | 'Order' */\n label: string\n labelPlural: string\n /** label for the monetary value, e.g. 'Pipeline value' | 'Revenue' */\n valueLabel: string\n source: ConversionSource\n /** average monetary value of a single conversion (mock + estimates) */\n avgValue: number\n}\n\nexport type CampaignStatus = 'active' | 'paused' | 'ended' | 'draft'\n\n/** An acquisition campaign running on a channel, with attributed performance. */\n/** Para que a mensagem existe — e, por consequência, QUEM pode recebê-la:\n * `marketing_has_consent` libera `transactional` sempre e exige opt-in para o\n * resto. Não é rótulo, é a regra de quem entra no público. */\nexport type CampaignPurpose = 'promotion' | 'survey' | 'newsletter' | 'transactional'\n\n/** `ad_spend` é verba num canal (o que a tela de canais soma). `outbound` é\n * disparo para um público — e só este roda sozinho no tick do minuto. */\nexport type CampaignKind = 'ad_spend' | 'outbound'\n\nexport interface Campaign {\n id: string\n name: string\n channelId: string\n status: CampaignStatus\n kind: CampaignKind\n purpose: CampaignPurpose\n /** O recorte de gente para quem ela vai (campanha `outbound`). */\n segmentId?: string\n /** O modelo de mensagem que sai, no cadastro de Comunicação. */\n templateKey?: string\n start: string\n end?: string\n spend: number\n /** visits / sessions / sends reached (NOT raw impressions) */\n reach: number\n leads: number\n conversions: number\n /** attributed monetary value */\n value: number\n}\n\n/** Per-channel rollup used by the Channels view + Overview. */\nexport interface ChannelPerformance {\n channelId: string\n reach: number\n leads: number\n conversions: number\n spend: number\n value: number\n /** conversions / reach * 100 */\n cvr: number\n /** spend / conversions (0 when no spend) */\n cpa: number\n}\n\nexport interface FunnelStage {\n id: string\n label: string\n count: number\n color: string\n}\n\n/** A site the tenant owns — a row of public.fayz_projects, managed in\n * Settings → Sites. `appId`/`fayzProjectId` are the deploy's ids on the\n * hosting platform: the keys the visit-analytics call needs (app + route +\n * period). Marketing reads these; it does not own them. */\nexport interface MarketingSite {\n id: string\n name: string\n /** live site URL, e.g. 'https://espacorenovario.com.br' */\n url?: string\n appId?: string\n fayzProjectId?: string\n /** Fayz editor for this project — where a planned page gets built. */\n editorUrl?: string\n}\n\n/** 'live' = the route already exists on the site. 'planned' = it does not yet;\n * `prompt` is the brief for building it with Fayz. */\nexport type LandingPageStatus = 'live' | 'planned'\n\n/** A landing page IS a site + a route. `leadTags` is the CRM cross: leads that\n * come in through the page carry those tag slugs. */\nexport interface LandingPage {\n id: string\n siteId: string\n name: string\n /** path within the site, always leading-slashed, e.g. '/lp-capilar' */\n route: string\n leadTags: string[]\n status: LandingPageStatus\n /** what the page should be — only meaningful while status is 'planned' */\n prompt?: string\n isActive: boolean\n\n // ── A porta, que antes era uma tela à parte ──────────────────────────────\n //\n // Uma landing page e uma \"página de captura\" eram duas portas públicas para a\n // mesma coisa. A distinção que existia na minha cabeça — uma é conteúdo, a\n // outra é regra — não é uma distinção que o lojista faz: ele quer UMA porta,\n // com o texto e as regras dela no mesmo lugar.\n\n /** A chave PÚBLICA e opaca da página. Um slug adivinhável deixaria achar a\n * página de outra casa escrevendo o nome dela. */\n captureKey?: string\n /** Em que sala a porta dá. \"Agendamento\" é palavra de salão; num restaurante\n * a mesma página marca MESA, e numa loja só captura contato. */\n captureDestination: CaptureDestination\n captureRequiredFields: CaptureField[]\n /** A janela é dupla: piso em horas contra \"daqui a dez minutos\", teto em dias\n * contra \"o ano que vem\". Nulas quando o destino não marca nada. */\n minAdvanceHours?: number\n maxAdvanceDays?: number\n}\n\nexport type CaptureDestination = 'lead' | 'booking' | 'reservation'\nexport type CaptureField = 'name' | 'phone' | 'email' | 'document' | 'notes'\nexport const CAPTURE_FIELDS: CaptureField[] = ['name', 'phone', 'email', 'document', 'notes']\n\nexport interface LandingPagePerf extends LandingPage {\n siteName: string\n siteUrl?: string\n appId?: string\n editorUrl?: string\n /** full public URL (site + route); the bare route when the site has no URL */\n url: string\n /** null while no visit source is connected — renders as \"—\", not as zero. */\n visits: number | null\n /** leads carrying `leadTag` within the queried period */\n conversions: number\n /** conversions / visits * 100 — null when visits are unknown */\n cvr: number | null\n}\n\nexport interface MarketingOverview {\n conversions: number\n conversionsPrev: number\n cvr: number\n cvrPrev: number\n spend: number\n cpa: number\n value: number\n topChannelId: string | null\n /** conversions per channel for the mix bars */\n channelMix: Array<{ channelId: string; conversions: number }>\n}\n\nexport type DateRangeKey = '7d' | '30d' | '90d'\n\nexport interface MarketingQuery {\n range: DateRangeKey\n /** optionally scope to a single channel (channel detail) */\n channelId?: string\n}\n\nexport const DATE_RANGE_LABELS: Record<DateRangeKey, string> = {\n '7d': 'Last 7 days',\n '30d': 'Last 30 days',\n '90d': 'Last 90 days',\n}\n\n","import React from 'react'\nimport { Sparkles } from 'lucide-react'\nimport {\n SheetBody, SheetFooter,\n Button, Input, Badge, SegmentedControl,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea,\n} from '@fayz-ai/ui'\nimport { RightRailPage } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingStore } from '../context'\nimport type { LandingPage, LandingPageStatus, CaptureDestination, CaptureField } from '../types'\nimport { CAPTURE_FIELDS } from '../types'\n\n/** 'Consulta capilar' → 'consulta-capilar' — the shape CRM tag slugs take. */\nfunction slugify(value: string): string {\n return value\n .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase().trim()\n .replace(/[^a-z0-9:]+/g, '-')\n .replace(/^-+|-+$/g, '')\n}\n\nexport function LandingPageComposer({\n open, page, onClose,\n}: { open: boolean; page?: LandingPage | null; onClose: () => void }) {\n const t = useTranslation()\n const sites = useMarketingStore((s) => s.sites)\n const leadTags = useMarketingStore((s) => s.leadTags)\n const saveLandingPage = useMarketingStore((s) => s.saveLandingPage)\n\n const [siteId, setSiteId] = React.useState('')\n const [name, setName] = React.useState('')\n const [route, setRoute] = React.useState('')\n const [status, setStatus] = React.useState<LandingPageStatus>('live')\n const [prompt, setPrompt] = React.useState('')\n const [tags, setTags] = React.useState<string[]>([])\n const [newTag, setNewTag] = React.useState('')\n // A porta. Antes isto era uma TELA à parte (`/sales/capture`) e uma segunda\n // tabela: duas portas públicas para a mesma coisa. O lojista quer uma só,\n // com o texto e a regra no mesmo lugar.\n const [destination, setDestination] = React.useState<CaptureDestination>('lead')\n const [required, setRequired] = React.useState<CaptureField[]>(['name'])\n const [minH, setMinH] = React.useState('')\n const [maxD, setMaxD] = React.useState('')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (!open) return\n setSiteId(page?.siteId ?? sites[0]?.id ?? '')\n setName(page?.name ?? '')\n setRoute(page?.route ?? '')\n setStatus(page?.status ?? 'live')\n setPrompt(page?.prompt ?? '')\n setTags(page?.leadTags ?? [])\n setNewTag('')\n setDestination(page?.captureDestination ?? 'lead')\n setRequired(page?.captureRequiredFields?.length ? page.captureRequiredFields : ['name'])\n setMinH(page?.minAdvanceHours != null ? String(page.minAdvanceHours) : '')\n setMaxD(page?.maxAdvanceDays != null ? String(page.maxAdvanceDays) : '')\n }, [open, page, sites])\n\n const site = sites.find((s) => s.id === siteId)\n const previewPath = route.trim() ? (route.trim().startsWith('/') ? route.trim() : `/${route.trim()}`) : ''\n\n // The catalog plus whatever this page already carries: a slug used by a\n // campaign before anyone curated the vocabulary is still a real tag.\n const options = React.useMemo(() => {\n const byslug = new Map(leadTags.map((tag) => [tag.slug, tag.name]))\n for (const slug of tags) if (!byslug.has(slug)) byslug.set(slug, slug)\n return [...byslug].map(([slug, label]) => ({ slug, label }))\n }, [leadTags, tags])\n\n function toggleTag(slug: string) {\n setTags((current) => (current.includes(slug) ? current.filter((s) => s !== slug) : [...current, slug]))\n }\n\n function addTag() {\n const slug = slugify(newTag)\n if (!slug) return\n setTags((current) => (current.includes(slug) ? current : [...current, slug]))\n setNewTag('')\n }\n\n async function handleSave() {\n if (!siteId || !name.trim() || !route.trim()) return\n setSaving(true)\n try {\n await saveLandingPage({\n id: page?.id,\n siteId,\n name: name.trim(),\n route: route.trim(),\n leadTags: tags,\n status,\n prompt: status === 'planned' ? prompt.trim() || undefined : undefined,\n captureDestination: destination,\n captureRequiredFields: required,\n minAdvanceHours: destination !== 'lead' && minH ? Number(minH) : null,\n maxAdvanceDays: destination !== 'lead' && maxD ? Number(maxD) : null,\n })\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n return (\n // Beside the list, not over it: the routes already taken are what you check\n // a new one against, and the dialog covered them.\n <RightRailPage\n title={page ? (page.name || t('marketing.landing.edit')) : t('marketing.landing.new')}\n open={open}\n onClose={onClose}\n width=\"max-w-md\"\n >\n <SheetBody className=\"space-y-4\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.site')}</span>\n <Select value={siteId} onValueChange={setSiteId}>\n <SelectTrigger><SelectValue placeholder={t('marketing.landing.sitePlaceholder')} /></SelectTrigger>\n <SelectContent>\n {sites.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.url ? `${s.name} · ${s.url.replace(/^https?:\\/\\//, '')}` : s.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.name')}</span>\n <Input value={name} onChange={(e) => setName(e.target.value)} placeholder={t('marketing.landing.namePlaceholder')} />\n </label>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.route')}</span>\n <Input value={route} onChange={(e) => setRoute(e.target.value)} placeholder=\"/lp-capilar\" />\n {site?.url && previewPath ? (\n <span className=\"block text-xs text-muted-foreground\">\n {site.url.replace(/\\/+$/, '')}{previewPath}\n </span>\n ) : null}\n </label>\n\n <div className=\"space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.status')}</span>\n <SegmentedControl\n value={status}\n onChange={(v) => setStatus(v as LandingPageStatus)}\n options={[\n { value: 'live', label: t('marketing.landing.statusLive') },\n { value: 'planned', label: t('marketing.landing.statusPlanned') },\n ]}\n />\n </div>\n\n {status === 'planned' ? (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.prompt')}</span>\n {site?.editorUrl ? (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => window.open(site.editorUrl!, '_blank', 'noopener,noreferrer')}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\"\n >\n <Sparkles className=\"h-3.5 w-3.5\" /> {t('marketing.landing.buildWithFayz')}\n </Button>\n ) : null}\n </div>\n <Textarea\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n rows={3}\n placeholder={t('marketing.landing.promptPlaceholder')}\n className=\"rounded-md border-border bg-background shadow-none focus-visible:ring-offset-0\"\n />\n </div>\n ) : null}\n\n {/* One field, not a chip list plus a form: the catalog and the free\n slug live in the same box, like any tag picker. */}\n <div className=\"space-y-1.5\">\n <span className=\"text-sm font-medium text-foreground\">{t('marketing.landing.leadTag')}</span>\n <div className=\"flex flex-wrap items-center gap-1.5 rounded-md border border-border bg-background px-2 py-2 focus-within:ring-2 focus-within:ring-ring\">\n {options.map((opt) => {\n const active = tags.includes(opt.slug)\n return (\n <Badge\n key={opt.slug}\n variant={active ? 'default' : 'outline'}\n className=\"cursor-pointer text-xs\"\n onClick={() => toggleTag(opt.slug)}\n >\n {opt.label}\n </Badge>\n )\n })}\n <div className=\"min-w-[8rem] flex-1\">\n <Input\n value={newTag}\n onChange={(e) => setNewTag(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); addTag() } }}\n onBlur={addTag}\n placeholder={t('marketing.landing.leadTagPlaceholder')}\n className=\"h-auto rounded-none border-0 bg-transparent px-1 py-0 text-xs shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n </div>\n <span className=\"block text-xs text-muted-foreground\">{t('marketing.landing.leadTagHint')}</span>\n </div>\n\n {/* ── O formulário da página ─────────────────────────────────────\n A página é o conteúdo; isto é a regra da porta. Ficavam em telas\n separadas, e a separação era minha, não do lojista. */}\n <div className=\"space-y-3 rounded-card border bg-muted/20 p-3\" data-testid=\"landing-capture\">\n <div>\n <p className=\"text-sm font-medium\">{t('marketing.landing.formTitle')}</p>\n <p className=\"text-xs text-muted-foreground\">{t('marketing.landing.formHint')}</p>\n </div>\n\n <div>\n <label className=\"text-xs font-medium\">{t('marketing.landing.destination')}</label>\n <Select value={destination} onValueChange={(v) => setDestination(v as CaptureDestination)}>\n <SelectTrigger className=\"h-9 text-sm\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"lead\">{t('marketing.landing.dest.lead')}</SelectItem>\n <SelectItem value=\"booking\">{t('marketing.landing.dest.booking')}</SelectItem>\n <SelectItem value=\"reservation\">{t('marketing.landing.dest.reservation')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div>\n <label className=\"text-xs font-medium\">{t('marketing.landing.required')}</label>\n <p className=\"text-[10px] text-muted-foreground\">{t('marketing.landing.requiredHint')}</p>\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {CAPTURE_FIELDS.map((f) => {\n const on = required.includes(f)\n return (\n <Button variant=\"bare\" size=\"bare\" key={f} type=\"button\"\n className={`font-normal rounded-full border px-2.5 py-1 text-xs ${on ? 'border-primary bg-primary/10 text-primary' : 'text-muted-foreground'}`}\n onClick={() => setRequired((prev) => on ? prev.filter((x) => x !== f) : [...prev, f])}>\n {t(`marketing.landing.field.${f}`)}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* A janela só aparece onde há horário para marcar. */}\n {destination !== 'lead' && (\n <div className=\"grid gap-3 sm:grid-cols-2\" data-testid=\"landing-window\">\n <div>\n <label className=\"text-xs font-medium\">{t('marketing.landing.minAdvance')}</label>\n <Input type=\"number\" min={0} value={minH} onChange={(e) => setMinH(e.target.value)} placeholder=\"2\" />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{t('marketing.landing.minAdvanceHint')}</p>\n </div>\n <div>\n <label className=\"text-xs font-medium\">{t('marketing.landing.maxAdvance')}</label>\n <Input type=\"number\" min={1} value={maxD} onChange={(e) => setMaxD(e.target.value)} placeholder=\"60\" />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{t('marketing.landing.maxAdvanceHint')}</p>\n </div>\n </div>\n )}\n\n {page?.captureKey && (\n <p className=\"text-[10px] text-muted-foreground\">\n {t('marketing.landing.publicKey', { key: page.captureKey })}\n </p>\n )}\n </div>\n </SheetBody>\n {/* No Cancel: the column header holds the way out. */}\n <SheetFooter>\n <Button\n className=\"flex-1\"\n onClick={handleSave}\n disabled={saving || !siteId || !name.trim() || !route.trim()}\n >\n {page ? t('marketing.landing.save') : t('marketing.landing.create')}\n </Button>\n </SheetFooter>\n </RightRailPage>\n )\n}\n","import React from 'react'\nimport { MousePointerClick, Layers, Users, Plus, Pencil, Trash2, ExternalLink, Sparkles } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, PageHeaderActions, PageToolbar, RowActions } from '@fayz-ai/ui'\nimport { PageActions, type PageAction } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingStore } from '../context'\nimport { formatNumber, formatPercent } from '../lib/format'\nimport { KpiCard, RangeTabs } from '../components/MarketingBits'\nimport { LandingPageComposer } from './LandingPageComposer'\nimport type { LandingPagePerf } from '../types'\n\nexport function LandingPagesView() {\n const t = useTranslation()\n const pages = useMarketingStore((s) => s.landingPages)\n const deleteLandingPage = useMarketingStore((s) => s.deleteLandingPage)\n const [editing, setEditing] = React.useState<LandingPagePerf | null>(null)\n const [composerOpen, setComposerOpen] = React.useState(false)\n\n // Visits are only known for pages whose host reports them; a page with an\n // unknown count must not drag the total down to a wrong number.\n const measured = pages.filter((p) => p.visits !== null)\n const totalVisits = measured.reduce((s, p) => s + (p.visits ?? 0), 0)\n const totalLeads = pages.reduce((s, p) => s + p.conversions, 0)\n\n function openNew() {\n setEditing(null)\n setComposerOpen(true)\n }\n\n function openEdit(page: LandingPagePerf) {\n setEditing(page)\n setComposerOpen(true)\n }\n\n const columns = React.useMemo<ColumnDef<LandingPagePerf, any>[]>(() => [\n {\n accessorKey: 'name',\n header: t('marketing.col.page'),\n cell: ({ row }) => (\n <div className=\"min-w-0\">\n <span className=\"flex items-center gap-1.5 truncate font-medium text-foreground\">\n {row.original.name}\n {row.original.status === 'planned' ? (\n <span className=\"rounded-full bg-amber-100 px-2 py-0.5 text-[10px] font-semibold text-amber-800\">\n {t('marketing.landing.statusPlanned')}\n </span>\n ) : null}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">{row.original.siteName}</span>\n </div>\n ),\n },\n {\n accessorKey: 'route',\n header: t('marketing.col.route'),\n cell: ({ row }) => (\n <a\n href={row.original.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={(e) => e.stopPropagation()}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground hover:underline\"\n >\n {row.original.route}\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n ),\n },\n {\n accessorKey: 'leadTags',\n header: t('marketing.col.leadTag'),\n cell: ({ getValue }) => {\n const tags = (getValue() as string[]) ?? []\n if (!tags.length) return <span className=\"text-muted-foreground\">—</span>\n return (\n <div className=\"flex flex-wrap gap-1\">\n {tags.map((tag) => (\n <span key={tag} className=\"rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground\">{tag}</span>\n ))}\n </div>\n )\n },\n },\n {\n accessorKey: 'visits',\n header: t('marketing.col.visits'),\n cell: ({ getValue }) => {\n const visits = getValue() as number | null\n return visits === null\n ? <span className=\"text-muted-foreground\" title={t('marketing.landing.visitsPending')}>—</span>\n : <span className=\"text-muted-foreground\">{formatNumber(visits)}</span>\n },\n },\n {\n accessorKey: 'conversions',\n header: t('marketing.col.leads'),\n cell: ({ getValue }) => <span className=\"font-medium text-foreground\">{formatNumber(getValue() as number)}</span>,\n },\n {\n accessorKey: 'cvr',\n header: t('marketing.col.cvr'),\n cell: ({ getValue }) => {\n const cvr = getValue() as number | null\n return cvr === null\n ? <span className=\"text-muted-foreground\">—</span>\n : <span className=\"text-muted-foreground\">{formatPercent(cvr)}</span>\n },\n },\n {\n id: 'actions', header: '', enableSorting: false,\n cell: ({ row }) => (\n <RowActions\n actions={[\n ...(row.original.status === 'planned' && row.original.editorUrl ? [{\n id: 'build',\n label: t('marketing.landing.buildWithFayz'),\n icon: Sparkles,\n onSelect: () => window.open(row.original.editorUrl!, '_blank', 'noopener,noreferrer'),\n }] : []),\n { id: 'edit', label: t('marketing.landing.edit'), icon: Pencil, onSelect: () => openEdit(row.original) },\n {\n id: 'delete',\n label: t('marketing.landing.delete'),\n icon: Trash2,\n intent: 'danger' as const,\n onSelect: () => { void deleteLandingPage(row.original.id) },\n },\n ]}\n />\n ),\n },\n ], [t, deleteLandingPage])\n\n const createActions = React.useMemo<PageAction[]>(() => [{\n id: 'new-page',\n label: t('marketing.landing.new'),\n icon: Plus,\n intent: 'primary',\n creates: true,\n permission: { feature: 'marketing', action: 'create' },\n onSelect: openNew,\n }], [t])\n\n return (\n <div className=\"mx-auto max-w-6xl space-y-4\">\n {/* Criar na barra da shell, período na flutuante — ver CampaignsView.\n Declarado, não desenhado: era o último botão do módulo montado à mão,\n e por isso o único que no celular ficava no cabeçalho em vez de virar\n o \"+\" do polegar. O gate viaja na declaração. */}\n <PageHeaderActions>\n <PageActions actions={createActions} />\n </PageHeaderActions>\n <PageToolbar range={<RangeTabs />} />\n\n <div className=\"grid grid-cols-3 gap-4\">\n <KpiCard icon={Layers} label={t('marketing.metric.pages')} value={String(pages.length)} />\n <KpiCard\n icon={MousePointerClick}\n label={t('marketing.metric.totalVisits')}\n value={measured.length > 0 ? formatNumber(totalVisits) : '—'}\n />\n <KpiCard icon={Users} label={t('marketing.metric.leads')} value={formatNumber(totalLeads)} />\n </div>\n\n <DataTable columns={columns} data={pages} emptyMessage={t('marketing.landing.empty')} />\n\n {measured.length < pages.length ? (\n <p className=\"text-xs text-muted-foreground\">{t('marketing.landing.visitsPending')}</p>\n ) : null}\n\n <LandingPageComposer open={composerOpen} page={editing} onClose={() => { setComposerOpen(false); setEditing(null) }} />\n </div>\n )\n}\n","import { createPluginContext } from '@fayz-ai/admin'\nimport type { ResolvedMarketingConfig } from '../../context'\nimport type { ContentPlannerProvider } from '../../data/contentTypes'\nimport type { ContentPlannerUIState } from './contentStore'\n\n// Separate context trio for the content planner — MarketingContext's generics\n// are fixed to the analytics provider/store, so the planner mounts its own.\nconst ctx = createPluginContext<ResolvedMarketingConfig, ContentPlannerProvider, ContentPlannerUIState>('ContentPlanner')\n\nexport const ContentPlannerContextProvider = ctx.ContextProvider\nexport const useContentPlannerConfig = ctx.useConfig\nexport const useContentPlannerProvider = ctx.useProvider\nexport const useContentPlannerStore = ctx.useStore\n","// ---------------------------------------------------------------------------\n// Content planner — domain types + provider seam. Deliberately separate from\n// MarketingDataProvider: analytics is mock-until-bridges, while the planner is\n// a real CRUD surface (Supabase-backed via createSafeDataProvider). The\n// interface must stay methods-only (the safe-provider Proxy turns every\n// property access into a call).\n// ---------------------------------------------------------------------------\n\nexport type PostFormat = 'reel' | 'static' | 'carousel' | 'story' | 'video' | 'live' | 'article'\n\n/** Platforms an account can publish to. UI-driven list (the DB stores plain\n * text[]), so growing it is a one-line change here. */\nexport const PLATFORMS = [\n 'instagram',\n 'tiktok',\n 'youtube',\n 'facebook',\n 'linkedin',\n 'x',\n 'pinterest',\n 'threads',\n] as const\nexport type Platform = (typeof PLATFORMS)[number]\n\nexport type PostStatus = 'idea' | 'script' | 'recording' | 'editing' | 'scheduled' | 'published'\n\nexport const POST_STATUS_ORDER: PostStatus[] = ['idea', 'script', 'recording', 'editing', 'scheduled', 'published']\n\nexport interface SocialAccount {\n id: string\n name: string\n handle?: string\n /** Platforms this account/brand publishes to (one account, many connections). */\n platforms: string[]\n isActive: boolean\n}\n\nexport interface ContentPlan {\n id: string\n accountId: string\n name: string\n status: 'draft' | 'active' | 'archived'\n weeksCount: number\n startDate?: string\n /** Structured \"what we want\" config — feeds chips + future AI drafting. */\n objective?: string\n tone?: string\n pillars: string[]\n formats: PostFormat[]\n weeklyFrequency: number\n /** Free-form brief/strategy document (markdown). */\n briefMd: string\n}\n\n/** Recording-day checklist item (on-set companion). */\nexport interface ChecklistItem {\n id: string\n text: string\n done: boolean\n}\n\nexport interface ContentPost {\n id: string\n planId: string\n weekNumber: number\n position: number\n title: string\n format: PostFormat\n status: PostStatus\n scheduledDate?: string\n /** Target platforms for this post; empty = inherit the account's platforms. */\n platforms: string[]\n /** Recording-day checklist — persisted as the crew checks items off. */\n checklist: ChecklistItem[]\n /** Uploaded asset URL (static posts: caption + final art instead of a script). */\n mediaUrl?: string\n hook?: string\n cta?: string\n /** The Notion-style page body — the script/plan in markdown. */\n contentMd: string\n updatedAt?: string\n}\n\nexport interface SaveSocialAccountInput {\n id?: string\n name: string\n handle?: string\n platforms?: string[]\n isActive?: boolean\n}\n\nexport interface SaveContentPlanInput {\n id?: string\n accountId?: string\n name?: string\n status?: ContentPlan['status']\n weeksCount?: number\n startDate?: string | null\n objective?: string\n tone?: string\n pillars?: string[]\n formats?: PostFormat[]\n weeklyFrequency?: number\n briefMd?: string\n}\n\nexport interface SaveContentPostInput {\n id?: string\n planId?: string\n weekNumber?: number\n position?: number\n title?: string\n format?: PostFormat\n status?: PostStatus\n scheduledDate?: string | null\n platforms?: string[]\n checklist?: ChecklistItem[]\n mediaUrl?: string | null\n hook?: string\n cta?: string\n contentMd?: string\n}\n\nexport interface ContentPlannerProvider {\n listAccounts(): Promise<SocialAccount[]>\n saveAccount(input: SaveSocialAccountInput): Promise<SocialAccount>\n /** Hard delete — plans and posts cascade with the account. */\n deleteAccount(id: string): Promise<void>\n listPlans(accountId: string): Promise<ContentPlan[]>\n getPlan(id: string): Promise<ContentPlan | null>\n savePlan(input: SaveContentPlanInput): Promise<ContentPlan>\n deletePlan(id: string): Promise<void>\n /** Ordered by week_number then position. */\n listPosts(planId: string): Promise<ContentPost[]>\n getPost(id: string): Promise<ContentPost | null>\n savePost(input: SaveContentPostInput): Promise<ContentPost>\n deletePost(id: string): Promise<void>\n}\n","import React from 'react'\nimport { Button, cn } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { PostFormat, PostStatus } from '../../data/contentTypes'\nimport { PLATFORMS, POST_STATUS_ORDER } from '../../data/contentTypes'\nimport { PlatformIcon } from '../../components/icons'\n\nexport const POST_FORMATS: PostFormat[] = ['reel', 'static', 'carousel', 'story', 'video', 'live', 'article']\nexport { POST_STATUS_ORDER }\n\nconst FORMAT_STYLE: Record<PostFormat, string> = {\n reel: 'bg-violet-100 text-violet-700',\n static: 'bg-sky-100 text-sky-700',\n carousel: 'bg-amber-100 text-amber-700',\n story: 'bg-pink-100 text-pink-700',\n video: 'bg-red-100 text-red-700',\n live: 'bg-rose-100 text-rose-700',\n article: 'bg-teal-100 text-teal-700',\n}\n\n// Status dot colors — same palette/semantics as plugin-agenda's booking\n// statuses (config.ts): gray backlog, indigo planned, warm amber/orange while\n// in production, blue when scheduled, emerald when done.\nexport const POST_STATUS_COLOR: Record<PostStatus, string> = {\n idea: '#6b7280',\n script: '#6366f1',\n recording: '#f59e0b',\n editing: '#f97316',\n scheduled: '#3b82f6',\n published: '#10b981',\n}\n\n/** Small status dot (agenda/CRM convention) for selects and lists. */\nexport function StatusDot({ status, className }: { status: PostStatus; className?: string }) {\n return (\n <span\n className={cn('h-2 w-2 shrink-0 rounded-full', className)}\n style={{ backgroundColor: POST_STATUS_COLOR[status] }}\n />\n )\n}\n\nconst STATUS_STYLE: Record<PostStatus, string> = {\n idea: 'bg-slate-100 text-slate-600',\n script: 'bg-indigo-100 text-indigo-700',\n recording: 'bg-amber-100 text-amber-700',\n editing: 'bg-orange-100 text-orange-700',\n scheduled: 'bg-sky-100 text-sky-700',\n published: 'bg-emerald-100 text-emerald-700',\n}\n\nexport function FormatBadge({ format }: { format: PostFormat }) {\n const t = useTranslation()\n return (\n <span className={cn('rounded-full px-2 py-0.5 text-xs font-medium', FORMAT_STYLE[format])}>\n {t(`marketing.content.format.${format}`)}\n </span>\n )\n}\n\nexport function PostStatusBadge({ status }: { status: PostStatus }) {\n const t = useTranslation()\n return (\n <span className={cn('rounded-full px-2 py-0.5 text-xs font-medium', STATUS_STYLE[status])}>\n {t(`marketing.content.status.${status}`)}\n </span>\n )\n}\n\n/** Compact row of platform glyphs (post targets or account connections). */\nexport function PlatformBadges({ platforms, className }: { platforms: string[]; className?: string }) {\n if (platforms.length === 0) return null\n return (\n <span className={cn('inline-flex items-center gap-1 text-muted-foreground', className)}>\n {platforms.map((p) => (\n <PlatformIcon key={p} platform={p} className=\"h-3.5 w-3.5\" />\n ))}\n </span>\n )\n}\n\n/** Toggleable platform chips — used by the add-account form and the post page. */\nexport function PlatformPicker({ value, onChange }: {\n value: string[]\n onChange: (platforms: string[]) => void\n}) {\n return (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {PLATFORMS.map((platform) => {\n const selected = value.includes(platform)\n return (\n <Button variant=\"bare\" size=\"bare\"\n key={platform}\n type=\"button\"\n aria-pressed={selected}\n onClick={() =>\n onChange(selected ? value.filter((p) => p !== platform) : [...value, platform])\n }\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium capitalize transition-colors',\n selected\n ? 'border-primary bg-primary/10 text-foreground'\n : 'border-border text-muted-foreground hover:bg-muted/40',\n )}\n >\n <PlatformIcon platform={platform} className=\"h-3.5 w-3.5\" />\n {platform}\n </Button>\n )\n })}\n </div>\n )\n}\n\n","import React from 'react'\nimport { X } from 'lucide-react'\nimport {\n Button, Input, MarkdownEditor, SubpageHeader, Checkbox,\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { ContentPlan, PostFormat } from '../../data/contentTypes'\nimport { useContentPlannerStore } from './ContentPlannerContext'\nimport { POST_FORMATS } from './contentBits'\n\n// ---------------------------------------------------------------------------\n// Plan brief — the \"what we want\" page: structured strategy fields (pillars,\n// objective, tone, formats, cadence) plus a free-form markdown brief.\n// ---------------------------------------------------------------------------\n\ninterface Draft {\n name: string\n objective: string\n tone: string\n pillars: string[]\n formats: PostFormat[]\n weeklyFrequency: number\n weeksCount: number\n briefMd: string\n}\n\nfunction toDraft(plan: ContentPlan): Draft {\n return {\n name: plan.name,\n objective: plan.objective ?? '',\n tone: plan.tone ?? '',\n pillars: plan.pillars,\n formats: plan.formats,\n weeklyFrequency: plan.weeklyFrequency,\n weeksCount: plan.weeksCount,\n briefMd: plan.briefMd,\n }\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">{label}</label>\n {children}\n </div>\n )\n}\n\nfunction useBriefDraft() {\n const plan = useContentPlannerStore((s) => s.activePlan)\n const savePlan = useContentPlannerStore((s) => s.savePlan)\n\n const [draft, setDraft] = React.useState<Draft | null>(plan ? toDraft(plan) : null)\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (plan) setDraft(toDraft(plan))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [plan?.id])\n\n const patch = (partial: Partial<Draft>) => setDraft((d) => (d ? { ...d, ...partial } : d))\n const dirty = !!plan && !!draft && JSON.stringify(draft) !== JSON.stringify(toDraft(plan))\n\n const save = async () => {\n if (!plan || !draft) return\n setSaving(true)\n try {\n await savePlan({\n id: plan.id,\n name: draft.name,\n objective: draft.objective,\n tone: draft.tone,\n pillars: draft.pillars,\n formats: draft.formats,\n weeklyFrequency: draft.weeklyFrequency,\n weeksCount: draft.weeksCount,\n briefMd: draft.briefMd,\n })\n } finally {\n setSaving(false)\n }\n }\n\n return { plan, draft, patch, dirty, saving, save }\n}\n\nfunction BriefFields({ draft, patch }: { draft: Draft; patch: (p: Partial<Draft>) => void }) {\n const t = useTranslation()\n const [pillarInput, setPillarInput] = React.useState('')\n\n const addPillar = () => {\n const value = pillarInput.trim()\n if (!value || draft.pillars.includes(value)) return\n patch({ pillars: [...draft.pillars, value] })\n setPillarInput('')\n }\n\n const toggleFormat = (format: PostFormat) => {\n patch({\n formats: draft.formats.includes(format)\n ? draft.formats.filter((f) => f !== format)\n : [...draft.formats, format],\n })\n }\n\n return (\n <div className=\"space-y-5\">\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <Field label={t('marketing.content.planName')}>\n <Input value={draft.name} onChange={(e) => patch({ name: e.target.value })} />\n </Field>\n <Field label={t('marketing.content.objective')}>\n <Input\n value={draft.objective}\n onChange={(e) => patch({ objective: e.target.value })}\n placeholder={t('marketing.content.objectivePlaceholder')}\n />\n </Field>\n <Field label={t('marketing.content.tone')}>\n <Input\n value={draft.tone}\n onChange={(e) => patch({ tone: e.target.value })}\n placeholder={t('marketing.content.tonePlaceholder')}\n />\n </Field>\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label={t('marketing.content.weeklyFrequency')}>\n <Input\n type=\"number\"\n min={1}\n max={14}\n value={draft.weeklyFrequency}\n onChange={(e) => patch({ weeklyFrequency: Math.max(1, Number(e.target.value) || 1) })}\n />\n </Field>\n <Field label={t('marketing.content.weeksCount')}>\n <Input\n type=\"number\"\n min={1}\n max={52}\n value={draft.weeksCount}\n onChange={(e) => patch({ weeksCount: Math.max(1, Number(e.target.value) || 1) })}\n />\n </Field>\n </div>\n </div>\n\n <Field label={t('marketing.content.pillars')}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {draft.pillars.map((pillar) => (\n <span\n key={pillar}\n className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2.5 py-0.5 text-xs font-medium text-foreground\"\n >\n {pillar}\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => patch({ pillars: draft.pillars.filter((p) => p !== pillar) })}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-3 w-3\" />\n </Button>\n </span>\n ))}\n <Input\n value={pillarInput}\n onChange={(e) => setPillarInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n addPillar()\n }\n }}\n onBlur={addPillar}\n placeholder={t('marketing.content.pillarPlaceholder')}\n className=\"h-7 w-44 text-xs\"\n />\n </div>\n </Field>\n\n <Field label={t('marketing.content.formatsLabel')}>\n <div className=\"flex flex-wrap gap-4\">\n {POST_FORMATS.map((format) => (\n <label key={format} className=\"flex items-center gap-2 text-sm text-foreground\">\n <Checkbox\n checked={draft.formats.includes(format)}\n onChange={() => toggleFormat(format)}\n />\n {t(`marketing.content.format.${format}`)}\n </label>\n ))}\n </div>\n </Field>\n\n <Field label={t('marketing.content.briefBody')}>\n <MarkdownEditor\n value={draft.briefMd}\n onChange={(briefMd) => patch({ briefMd })}\n placeholder={t('marketing.content.briefPlaceholder')}\n editLabel={t('marketing.content.edit')}\n previewLabel={t('marketing.content.preview')}\n minRows={10}\n />\n </Field>\n </div>\n )\n}\n\n/** Full-page variant — kept for the /marketing/content/brief deep link. */\nexport function PlanBriefView({ onBack }: { onBack: () => void }) {\n const t = useTranslation()\n const { plan, draft, patch, dirty, saving, save } = useBriefDraft()\n\n if (!plan || !draft) {\n return <div className=\"mx-auto max-w-3xl text-sm text-muted-foreground\">…</div>\n }\n\n return (\n <div className=\"mx-auto max-w-3xl space-y-5\">\n <SubpageHeader\n title={t('marketing.content.brief')}\n subtitle={plan.name}\n parentLabel={t('marketing.content.title')}\n onBack={onBack}\n actions={\n <Button size=\"sm\" onClick={() => void save()} disabled={!dirty || saving}>\n {t('marketing.content.save')}\n </Button>\n }\n />\n <BriefFields draft={draft} patch={patch} />\n </div>\n )\n}\n\n/** The brief in the shell's right column — the board stays in sight while the\n * strategy is edited. */\nexport function PlanBriefSheet({ open, onClose }: { open: boolean; onClose: () => void }) {\n const t = useTranslation()\n const { plan, draft, patch, dirty, saving, save } = useBriefDraft()\n\n return (\n <Modal open={open} onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"4xl\">\n <ModalHeader>\n <ModalTitle>{plan?.name ?? t('marketing.content.brief')}</ModalTitle>\n </ModalHeader>\n <ModalBody>\n {draft ? (\n <BriefFields draft={draft} patch={patch} />\n ) : (\n <p className=\"text-sm text-muted-foreground\">…</p>\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>{t('common.cancel')}</Button>\n <Button onClick={() => void save().then(onClose)} disabled={!dirty || saving}>\n {t('marketing.content.save')}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Media asset upload for content posts (static art, covers). Public bucket\n// `mkt-media` (created by migration 003); path content/{tenantId}/{postId}-{ts}.{ext}\n// so re-uploads never collide and old URLs keep resolving until replaced.\n// ---------------------------------------------------------------------------\n\nexport function canUploadMedia(): boolean {\n return !!getSupabaseClientOptional()\n}\n\nexport async function uploadPostMedia(postId: string, file: File): Promise<string> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n const tenantId = getActiveTenantId()\n if (!tenantId) throw new Error('No active tenant')\n\n const ext = file.name.split('.').pop()?.toLowerCase() ?? 'bin'\n const path = `content/${tenantId}/${postId}-${Date.now()}.${ext}`\n const { error } = await supabase.storage.from('mkt-media').upload(path, file, { upsert: true })\n if (error) throw error\n const { data } = supabase.storage.from('mkt-media').getPublicUrl(path)\n return data.publicUrl as string\n}\n","import React from 'react'\nimport { Plus, Sparkles, X } from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { ChecklistItem, ContentPost } from '../../data/contentTypes'\nimport { useContentPlannerStore } from './ContentPlannerContext'\n\n// ---------------------------------------------------------------------------\n// Recording-day checklist — the on-set companion inside the post's aside\n// panel (ContentSplit). Mobile-first: big touch targets, every change persists\n// immediately (the crew checks items off from a phone between takes).\n// \"Generate from script\" seeds one item per `## TAKE …` heading.\n// ---------------------------------------------------------------------------\n\nfunction newId(): string {\n return typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? crypto.randomUUID()\n : `ck-${Date.now()}-${Math.floor(Math.random() * 1e6)}`\n}\n\nexport function RecordingChecklist({ post }: { post: ContentPost }) {\n const t = useTranslation()\n const savePost = useContentPlannerStore((s) => s.savePost)\n const [items, setItems] = React.useState<ChecklistItem[]>(post.checklist)\n const [text, setText] = React.useState('')\n\n // Re-sync when navigating between posts\n React.useEffect(() => {\n setItems(post.checklist)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [post.id])\n\n const persist = (next: ChecklistItem[]) => {\n setItems(next)\n void savePost({ id: post.id, checklist: next })\n }\n\n const toggle = (id: string) =>\n persist(items.map((i) => (i.id === id ? { ...i, done: !i.done } : i)))\n\n const remove = (id: string) => persist(items.filter((i) => i.id !== id))\n\n const add = () => {\n const value = text.trim()\n if (!value) return\n persist([...items, { id: newId(), text: value, done: false }])\n setText('')\n }\n\n const generateFromScript = () => {\n const takes = [...post.contentMd.matchAll(/^##\\s+(TAKE\\s+.+)$/gim)].map((m) =>\n m[1].trim(),\n )\n const existing = new Set(items.map((i) => i.text))\n const fresh = takes\n .filter((take) => !existing.has(take))\n .map((take) => ({ id: newId(), text: take, done: false }))\n if (fresh.length > 0) persist([...items, ...fresh])\n }\n\n const hasTakes = /^##\\s+TAKE\\s+/im.test(post.contentMd)\n const done = items.filter((i) => i.done).length\n\n return (\n <div className=\"space-y-3\">\n {items.length > 0 && (\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>{done}/{items.length}</span>\n {hasTakes && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={generateFromScript}\n className=\"flex items-center gap-1 font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n <Sparkles className=\"h-3 w-3\" />\n {t('marketing.content.checklistGenerate')}\n </Button>\n )}\n </div>\n <div className=\"h-1 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-primary transition-[width]\"\n style={{ width: items.length ? `${(done / items.length) * 100}%` : 0 }}\n />\n </div>\n </div>\n )}\n\n {items.length === 0 && (\n <div className=\"space-y-3 rounded-card border border-dashed border-border p-3 text-center\">\n <p className=\"text-xs text-muted-foreground\">\n {t('marketing.content.checklistEmpty')}\n </p>\n {hasTakes && (\n <Button variant=\"outline\" size=\"sm\" onClick={generateFromScript}>\n <Sparkles className=\"mr-1.5 h-3.5 w-3.5\" />\n {t('marketing.content.checklistGenerate')}\n </Button>\n )}\n </div>\n )}\n\n <ul className=\"space-y-1\">\n {items.map((item) => (\n <li key={item.id} className=\"group/item flex items-start gap-2.5 rounded-button px-1 py-2 transition-colors hover:bg-muted/40\">\n {/* label wraps the row → the whole line is the touch target */}\n <label className=\"flex min-w-0 flex-1 cursor-pointer items-start gap-2.5\">\n <Checkbox checked={item.done} onChange={() => toggle(item.id)} className=\"mt-0.5\" />\n <span\n className={cn(\n 'min-w-0 flex-1 text-sm leading-snug',\n item.done ? 'text-muted-foreground line-through' : 'text-foreground',\n )}\n >\n {item.text}\n </span>\n </label>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n aria-label={t('marketing.content.cancel')}\n onClick={() => remove(item.id)}\n className=\"rounded p-0.5 text-muted-foreground/50 opacity-0 transition-opacity hover:text-destructive group-hover/item:opacity-100 focus:opacity-100\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </li>\n ))}\n </ul>\n\n <div className=\"flex items-center gap-2\">\n <Input\n value={text}\n onChange={(e) => setText(e.target.value)}\n placeholder={t('marketing.content.checklistAddPlaceholder')}\n onKeyDown={(e) => { if (e.key === 'Enter') add() }}\n className=\"h-8 text-sm\"\n />\n <Button variant=\"outline\" size=\"sm\" onClick={add} disabled={!text.trim()} aria-label={t('marketing.content.checklistAdd')}>\n <Plus className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport {\n Heart, MessageCircle, Send, Bookmark, MoreHorizontal, ThumbsUp, Share2,\n Repeat2, BarChart2, Image as ImageIcon, Globe,\n} from 'lucide-react'\nimport { Button, cn } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { PlatformIcon } from '../../components/icons'\n\n// ---------------------------------------------------------------------------\n// Social post preview — the caption \"Visualizar\" mode renders the post the way\n// the platform will show it (asset + caption + action row). One tab per\n// selected platform; Instagram is the frame for look-alikes (TikTok/Threads/\n// Pinterest/YouTube get their own frames in a later pass).\n// ---------------------------------------------------------------------------\n\ninterface PreviewProps {\n caption: string\n mediaUrl?: string\n accountName: string\n accountHandle?: string\n platforms: string[]\n}\n\n/** Captions are plain text on every network — strip the markdown skeleton. */\nfunction toCaption(md: string): string {\n return md\n .replace(/^#+\\s*/gm, '')\n .replace(/\\*\\*/g, '')\n .replace(/^[-*]\\s+/gm, '')\n .trim()\n}\n\nfunction isVideo(url?: string): boolean {\n return !!url && /\\.(mp4|webm|mov)($|\\?)/i.test(url)\n}\n\nfunction Media({ mediaUrl, className }: { mediaUrl?: string; className?: string }) {\n if (!mediaUrl) {\n return (\n <div className={cn('flex aspect-square w-full items-center justify-center bg-muted/40', className)}>\n <ImageIcon className=\"h-8 w-8 text-muted-foreground/40\" />\n </div>\n )\n }\n return isVideo(mediaUrl) ? (\n <video src={mediaUrl} controls className={cn('w-full bg-black object-contain', className)} />\n ) : (\n <img src={mediaUrl} alt=\"\" className={cn('w-full object-cover', className)} />\n )\n}\n\nfunction Avatar({ name, ring }: { name: string; ring?: boolean }) {\n return (\n <span\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-semibold text-foreground',\n ring && 'ring-2 ring-offset-2 ring-pink-500/60',\n )}\n >\n {(name.replace(/^@/, '')[0] ?? '?').toUpperCase()}\n </span>\n )\n}\n\nfunction InstagramFrame({ caption, mediaUrl, accountName, accountHandle }: PreviewProps) {\n const t = useTranslation()\n const handle = (accountHandle || accountName).replace(/^@/, '')\n return (\n <div className=\"mx-auto w-full max-w-sm overflow-hidden rounded-card border border-border bg-card\">\n <div className=\"flex items-center gap-2.5 px-3 py-2.5\">\n <Avatar name={handle} ring />\n <span className=\"flex-1 truncate text-sm font-semibold text-foreground\">{handle}</span>\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <Media mediaUrl={mediaUrl} />\n <div className=\"space-y-2 px-3 py-2.5\">\n <div className=\"flex items-center gap-4 text-foreground\">\n <Heart className=\"h-6 w-6\" />\n <MessageCircle className=\"h-6 w-6\" />\n <Send className=\"h-6 w-6\" />\n <Bookmark className=\"ml-auto h-6 w-6\" />\n </div>\n <p className=\"whitespace-pre-wrap text-sm leading-snug text-foreground\">\n <span className=\"mr-1.5 font-semibold\">{handle}</span>\n {toCaption(caption)}\n </p>\n <p className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {t('marketing.content.previewNow')}\n </p>\n </div>\n </div>\n )\n}\n\nfunction FacebookFrame({ caption, mediaUrl, accountName }: PreviewProps) {\n const t = useTranslation()\n return (\n <div className=\"mx-auto w-full max-w-sm overflow-hidden rounded-card border border-border bg-card\">\n <div className=\"flex items-center gap-2.5 px-3 py-2.5\">\n <Avatar name={accountName} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-foreground\">{accountName.replace(/^@/, '')}</p>\n <p className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n {t('marketing.content.previewNow')} · <Globe className=\"h-3 w-3\" />\n </p>\n </div>\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <p className=\"whitespace-pre-wrap px-3 pb-2.5 text-sm leading-snug text-foreground\">{toCaption(caption)}</p>\n <Media mediaUrl={mediaUrl} className=\"aspect-auto\" />\n <div className=\"flex items-center justify-around border-t border-border px-3 py-2 text-muted-foreground\">\n <span className=\"flex items-center gap-1.5 text-xs font-medium\"><ThumbsUp className=\"h-4 w-4\" /> {t('marketing.content.previewLike')}</span>\n <span className=\"flex items-center gap-1.5 text-xs font-medium\"><MessageCircle className=\"h-4 w-4\" /> {t('marketing.content.previewComment')}</span>\n <span className=\"flex items-center gap-1.5 text-xs font-medium\"><Share2 className=\"h-4 w-4\" /> {t('marketing.content.previewShare')}</span>\n </div>\n </div>\n )\n}\n\nfunction LinkedinFrame({ caption, mediaUrl, accountName }: PreviewProps) {\n const t = useTranslation()\n return (\n <div className=\"mx-auto w-full max-w-sm overflow-hidden rounded-card border border-border bg-card\">\n <div className=\"flex items-center gap-2.5 px-3 py-2.5\">\n <Avatar name={accountName} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-semibold text-foreground\">{accountName.replace(/^@/, '')}</p>\n <p className=\"text-xs text-muted-foreground\">{t('marketing.content.previewNow')}</p>\n </div>\n </div>\n <p className=\"whitespace-pre-wrap px-3 pb-2.5 text-sm leading-snug text-foreground\">{toCaption(caption)}</p>\n <Media mediaUrl={mediaUrl} className=\"aspect-auto\" />\n <div className=\"flex items-center justify-around border-t border-border px-3 py-2 text-muted-foreground\">\n <ThumbsUp className=\"h-4 w-4\" />\n <MessageCircle className=\"h-4 w-4\" />\n <Repeat2 className=\"h-4 w-4\" />\n <Send className=\"h-4 w-4\" />\n </div>\n </div>\n )\n}\n\nfunction XFrame({ caption, mediaUrl, accountName, accountHandle }: PreviewProps) {\n const t = useTranslation()\n const handle = (accountHandle || accountName).replace(/^@/, '')\n return (\n <div className=\"mx-auto w-full max-w-sm rounded-card border border-border bg-card p-3\">\n <div className=\"flex gap-2.5\">\n <Avatar name={handle} />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm text-foreground\">\n <span className=\"font-semibold\">{accountName.replace(/^@/, '')}</span>\n <span className=\"text-muted-foreground\"> @{handle} · {t('marketing.content.previewNow')}</span>\n </p>\n <p className=\"mt-0.5 whitespace-pre-wrap text-sm leading-snug text-foreground\">{toCaption(caption)}</p>\n <div className=\"mt-2 overflow-hidden rounded-xl border border-border\">\n <Media mediaUrl={mediaUrl} className=\"aspect-auto\" />\n </div>\n <div className=\"mt-2 flex items-center justify-between pr-6 text-muted-foreground\">\n <MessageCircle className=\"h-4 w-4\" />\n <Repeat2 className=\"h-4 w-4\" />\n <Heart className=\"h-4 w-4\" />\n <BarChart2 className=\"h-4 w-4\" />\n <Share2 className=\"h-4 w-4\" />\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nconst FRAMES: Record<string, React.ComponentType<PreviewProps>> = {\n instagram: InstagramFrame,\n facebook: FacebookFrame,\n linkedin: LinkedinFrame,\n x: XFrame,\n}\n\nexport function PostSocialPreview(props: PreviewProps) {\n const platforms = props.platforms.length > 0 ? props.platforms : ['instagram']\n const [selected, setSelected] = React.useState(platforms[0])\n const active = platforms.includes(selected) ? selected : platforms[0]\n const Frame = FRAMES[active] ?? InstagramFrame\n\n return (\n <div className=\"space-y-3 rounded-md border border-border bg-muted/20 p-4\">\n {platforms.length > 1 && (\n <div className=\"flex items-center justify-center gap-1\">\n {platforms.map((platform) => (\n <Button variant=\"bare\" size=\"bare\"\n key={platform}\n type=\"button\"\n onClick={() => setSelected(platform)}\n aria-pressed={active === platform}\n className={cn(\n 'flex items-center gap-1.5 rounded-button px-2.5 py-1.5 text-xs font-medium capitalize transition-colors',\n active === platform\n ? 'bg-card text-foreground shadow-button'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n <PlatformIcon platform={platform} className=\"h-3.5 w-3.5\" />\n {platform}\n </Button>\n ))}\n </div>\n )}\n <Frame {...props} />\n </div>\n )\n}\n","import type { PostFormat } from '../../data/contentTypes'\n\n// ---------------------------------------------------------------------------\n// Default markdown scaffolds inserted when a post's page is still empty.\n// The section headers follow the script format clinics/creators actually use\n// (hook-first reels, on-screen text + spoken line per take). Body text is user\n// content, so it ships in pt-BR — the product's first content-planner users.\n// ---------------------------------------------------------------------------\n\nconst reel = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Reel · **Duração:** 45 a 60 segundos\n\n---\n\n## TAKE 1 – GANCHO (0s a 5s)\n\n*Direção de cena: olhando para a câmera, energia alta.*\n\n**Texto na tela:** …\n\n**Fala:** \"…\"\n\n---\n\n## TAKE 2 – DESENVOLVIMENTO (5s a 40s)\n\n*Direção de cena: …*\n\n**Texto na tela:** …\n\n**Fala:** \"…\"\n\n---\n\n## TAKE 3 – CTA (40s a 60s)\n\n**Fala:** \"…\"\n\n**CTA:** …\n`\n\nconst staticPost = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Estático\n\n## Texto da arte\n\n…\n\n## Legenda\n\n…\n\n**CTA:** …\n`\n\nconst carousel = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Carrossel\n\n## Slide 1 — Capa (gancho)\n\n…\n\n## Slide 2\n\n…\n\n## Slide 3\n\n…\n\n## Último slide — CTA\n\n…\n`\n\nconst story = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Story\n\n## Frame 1\n\n…\n\n## Frame 2\n\n…\n\n## Frame final — CTA\n\n*Sticker de link / caixa de pergunta / enquete.*\n\n…\n`\n\nconst video = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Vídeo longo (YouTube) · **Duração:** 8 a 12 minutos\n\n## Gancho (0s a 30s)\n\n…\n\n## Roteiro por blocos\n\n### Bloco 1 — Contexto\n\n…\n\n### Bloco 2 — Desenvolvimento\n\n…\n\n### Bloco 3 — Fechamento\n\n…\n\n**CTA:** inscreva-se / comente / link na descrição\n`\n\nconst live = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Live\n\n## Pauta\n\n1. Abertura e aquecimento (5 min)\n2. …\n3. Perguntas e respostas (15 min)\n\n## Avisos / CTAs durante a live\n\n…\n`\n\nconst article = (title: string) => `# ${title}\n\n**TEMA:** ${title.toUpperCase()}\n**Formato:** Artigo / Newsletter\n\n## Título de trabalho\n\n…\n\n## Estrutura\n\n- Abertura (dor / promessa)\n- Desenvolvimento em 3 pontos\n- Conclusão + CTA\n\n## Rascunho\n\n…\n`\n\nexport const POST_TEMPLATES: Record<PostFormat, (title: string) => string> = {\n reel,\n static: staticPost,\n carousel,\n story,\n video,\n live,\n article,\n}\n","import React from 'react'\nimport { ImagePlus, Loader2, X } from 'lucide-react'\nimport {\n Button, Input, MarkdownEditor, Skeleton,\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { canUploadMedia, uploadPostMedia } from '../../data/contentMedia'\nimport { RecordingChecklist } from './RecordingChecklist'\nimport { PostSocialPreview } from './PostSocialPreview'\nimport type { ContentPost, PostFormat, PostStatus } from '../../data/contentTypes'\nimport { useContentPlannerProvider, useContentPlannerStore } from './ContentPlannerContext'\nimport { POST_FORMATS, POST_STATUS_ORDER, PlatformPicker, StatusDot } from './contentBits'\nimport { POST_TEMPLATES } from './templates'\n\n// ---------------------------------------------------------------------------\n// Post modal — opens over the board: title, a compact meta row\n// (format / status / date / hook / CTA), the markdown script body and the\n// recording checklist beside it.\n// ---------------------------------------------------------------------------\n\nfunction MediaAsset({ post, onChanged }: {\n post: ContentPost\n onChanged: (mediaUrl: string | null) => void\n}) {\n const t = useTranslation()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [busy, setBusy] = React.useState(false)\n const isVideo = post.mediaUrl ? /\\.(mp4|webm|mov)($|\\?)/i.test(post.mediaUrl) : false\n\n const pick = () => inputRef.current?.click()\n\n const upload = async (file: File) => {\n setBusy(true)\n try {\n const url = await uploadPostMedia(post.id, file)\n onChanged(url)\n } finally {\n setBusy(false)\n }\n }\n\n if (!canUploadMedia()) {\n return <p className=\"text-xs text-muted-foreground\">{t('marketing.content.mediaUnavailable')}</p>\n }\n\n return (\n <div className=\"space-y-2\">\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*,video/*\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) void upload(file)\n e.target.value = ''\n }}\n />\n {post.mediaUrl ? (\n <div className=\"relative overflow-hidden rounded-card border border-border bg-muted/20\">\n {isVideo ? (\n <video src={post.mediaUrl} controls className=\"max-h-72 w-full object-contain\" />\n ) : (\n <img src={post.mediaUrl} alt=\"\" className=\"max-h-72 w-full object-contain\" />\n )}\n <div className=\"flex items-center justify-end gap-2 border-t border-border p-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={pick} disabled={busy}>\n {busy ? <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" /> : <ImagePlus className=\"mr-1.5 h-3.5 w-3.5\" />}\n {t('marketing.content.mediaReplace')}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => onChanged(null)} disabled={busy}>\n <X className=\"mr-1 h-3.5 w-3.5\" />\n {t('marketing.content.mediaRemove')}\n </Button>\n </div>\n </div>\n ) : (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={pick}\n disabled={busy}\n className=\"flex w-full flex-col items-center justify-center gap-2 rounded-card border border-dashed border-border p-6 text-muted-foreground transition-colors hover:bg-muted/30 hover:text-foreground font-normal disabled:opacity-100\"\n >\n {busy ? <Loader2 className=\"h-5 w-5 animate-spin\" /> : <ImagePlus className=\"h-5 w-5\" />}\n <span className=\"text-sm font-medium\">{t('marketing.content.mediaUpload')}</span>\n <span className=\"text-xs\">{t('marketing.content.mediaHint')}</span>\n </Button>\n )}\n </div>\n )\n}\n\ninterface Draft {\n title: string\n format: PostFormat\n status: PostStatus\n scheduledDate: string\n platforms: string[]\n hook: string\n cta: string\n contentMd: string\n}\n\nfunction toDraft(post: ContentPost): Draft {\n return {\n title: post.title,\n format: post.format,\n status: post.status,\n scheduledDate: post.scheduledDate ?? '',\n platforms: post.platforms,\n hook: post.hook ?? '',\n cta: post.cta ?? '',\n contentMd: post.contentMd,\n }\n}\n\nexport function PostModal({ postId, onClose }: { postId: string | null; onClose: () => void }) {\n return (\n <Modal open={!!postId} onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"5xl\">\n {postId && <PostEditor postId={postId} onClose={onClose} />}\n </ModalContent>\n </Modal>\n )\n}\n\nfunction PostEditor({ postId, onClose }: { postId: string; onClose: () => void }) {\n const t = useTranslation()\n const provider = useContentPlannerProvider()\n const storePost = useContentPlannerStore((s) => s.posts.find((p) => p.id === postId))\n const savePost = useContentPlannerStore((s) => s.savePost)\n const deletePost = useContentPlannerStore((s) => s.deletePost)\n const accounts = useContentPlannerStore((s) => s.accounts)\n const activeAccountId = useContentPlannerStore((s) => s.activeAccountId)\n\n const [post, setPost] = React.useState<ContentPost | null>(storePost ?? null)\n const [draft, setDraft] = React.useState<Draft | null>(storePost ? toDraft(storePost) : null)\n const [saving, setSaving] = React.useState(false)\n const [confirmDelete, setConfirmDelete] = React.useState(false)\n\n // Deep links land here before the board loaded the plan — fetch directly.\n React.useEffect(() => {\n if (post?.id === postId) return\n if (storePost) {\n setPost(storePost)\n setDraft(toDraft(storePost))\n return\n }\n void provider.getPost(postId).then((fetched) => {\n if (fetched) {\n setPost(fetched)\n setDraft(toDraft(fetched))\n }\n })\n }, [postId, storePost, post?.id, provider])\n\n if (!post || !draft) {\n return (\n <ModalBody className=\"space-y-5\">\n <Skeleton className=\"h-8 w-56\" />\n <Skeleton className=\"h-10 w-full\" />\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-3\">\n {Array.from({ length: 3 }, (_, i) => <Skeleton key={i} className=\"h-14\" />)}\n </div>\n <Skeleton className=\"h-64 w-full\" />\n </ModalBody>\n )\n }\n\n const dirty =\n draft.title !== post.title ||\n draft.format !== post.format ||\n draft.status !== post.status ||\n draft.scheduledDate !== (post.scheduledDate ?? '') ||\n draft.platforms.join(',') !== post.platforms.join(',') ||\n draft.hook !== (post.hook ?? '') ||\n draft.cta !== (post.cta ?? '') ||\n draft.contentMd !== post.contentMd\n\n const patch = (partial: Partial<Draft>) => setDraft((d) => (d ? { ...d, ...partial } : d))\n\n const save = async () => {\n setSaving(true)\n try {\n const updated = await savePost({\n id: post.id,\n title: draft.title,\n format: draft.format,\n status: draft.status,\n scheduledDate: draft.scheduledDate || null,\n platforms: draft.platforms,\n hook: draft.hook,\n cta: draft.cta,\n contentMd: draft.contentMd,\n })\n setPost(updated)\n setDraft(toDraft(updated))\n } finally {\n setSaving(false)\n }\n }\n\n const insertTemplate = () => {\n patch({ contentMd: POST_TEMPLATES[draft.format](draft.title || t('marketing.content.untitled')) })\n }\n\n const isStatic = draft.format === 'static'\n const account = accounts.find((a) => a.id === activeAccountId) ?? null\n\n\n const handleMediaChanged = (mediaUrl: string | null) => {\n void savePost({ id: post.id, mediaUrl }).then((updated) => {\n setPost(updated)\n setDraft((d) => (d ? { ...d } : d))\n })\n }\n\n return (\n <>\n <ModalHeader>\n <ModalTitle>{draft.title || t('marketing.content.untitled')}</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_18rem]\">\n <div className=\"min-w-0 space-y-5\">\n <Input\n value={draft.title}\n onChange={(e) => patch({ title: e.target.value })}\n placeholder={t('marketing.content.titlePlaceholder')}\n className=\"text-base font-medium\"\n />\n\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-3\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.formatLabel')}</label>\n <Select value={draft.format} onValueChange={(v) => patch({ format: v as PostFormat })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {POST_FORMATS.map((f) => (\n <SelectItem key={f} value={f}>{t(`marketing.content.format.${f}`)}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.statusLabel')}</label>\n <Select value={draft.status} onValueChange={(v) => patch({ status: v as PostStatus })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {POST_STATUS_ORDER.map((s) => (\n <SelectItem key={s} value={s}>\n <span className=\"flex items-center gap-2\">\n <StatusDot status={s} />\n {t(`marketing.content.status.${s}`)}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.scheduledDate')}</label>\n <Input\n type=\"date\"\n value={draft.scheduledDate}\n onChange={(e) => patch({ scheduledDate: e.target.value })}\n />\n </div>\n <div className=\"space-y-1 sm:col-span-2\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.hook')}</label>\n <Input\n value={draft.hook}\n onChange={(e) => patch({ hook: e.target.value })}\n placeholder={t('marketing.content.hookPlaceholder')}\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.cta')}</label>\n <Input\n value={draft.cta}\n onChange={(e) => patch({ cta: e.target.value })}\n placeholder={t('marketing.content.ctaPlaceholder')}\n />\n </div>\n <div className=\"space-y-1 sm:col-span-3\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('marketing.content.platformsLabel')}</label>\n <PlatformPicker value={draft.platforms} onChange={(platforms) => patch({ platforms })} />\n </div>\n </div>\n\n {isStatic && (\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {t('marketing.content.mediaLabel')}\n </label>\n <MediaAsset post={post} onChanged={handleMediaChanged} />\n </div>\n )}\n\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {isStatic ? t('marketing.content.captionLabel') : t('marketing.content.scriptLabel')}\n </label>\n {draft.contentMd.trim() === '' && (\n <Button variant=\"outline\" size=\"sm\" onClick={insertTemplate}>\n {t('marketing.content.insertTemplate')}\n </Button>\n )}\n </div>\n <MarkdownEditor\n value={draft.contentMd}\n onChange={(contentMd) => patch({ contentMd })}\n placeholder={isStatic ? t('marketing.content.captionPlaceholder') : t('marketing.content.bodyPlaceholder')}\n editLabel={t('marketing.content.edit')}\n previewLabel={t('marketing.content.preview')}\n renderPreview={\n isStatic\n ? (value) => (\n <PostSocialPreview\n caption={value}\n mediaUrl={post.mediaUrl}\n accountName={account?.name ?? '@conta'}\n accountHandle={account?.handle}\n platforms={\n draft.platforms.length > 0 ? draft.platforms : account?.platforms ?? []\n }\n />\n )\n : undefined\n }\n />\n </div>\n </div>\n <aside className=\"space-y-2 lg:border-l lg:border-border lg:pl-6\">\n <p className=\"text-sm font-medium text-foreground\">{t('marketing.content.checklistTitle')}</p>\n <p className=\"text-xs text-muted-foreground\">{t('marketing.content.checklistDescription')}</p>\n <RecordingChecklist post={post} />\n </aside>\n </div>\n </ModalBody>\n {/* Delete confirms inline in the footer: no modal stacked on a modal. */}\n <ModalFooter className=\"sm:justify-between\">\n {confirmDelete ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">{t('marketing.content.deletePostConfirm')}</span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmDelete(false)}>\n {t('marketing.content.cancel')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => void deletePost(post.id).then(onClose)}>\n {t('marketing.content.deletePost')}\n </Button>\n </div>\n ) : (\n <Button variant=\"ghost\" className=\"text-destructive\" onClick={() => setConfirmDelete(true)}>\n {t('marketing.content.deletePost')}\n </Button>\n )}\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" onClick={onClose}>{t('marketing.content.cancel')}</Button>\n <Button onClick={() => void save().then(onClose)} disabled={!dirty || saving}>\n {t('marketing.content.save')}\n </Button>\n </div>\n </ModalFooter>\n </>\n )\n}\n","import React from 'react'\nimport {\n Plus, NotebookPen, ChevronLeft, ChevronRight,\n Columns3, CalendarDays, List as ListIcon, Trash2, GripVertical, Settings2,\n} from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { SocialAccount } from '../../data/contentTypes'\nimport {\n Button, DataTable, Input, Skeleton, cn, ConfirmDialog, SegmentedControl, PageHeaderActions,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectSeparator,\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n} from '@fayz-ai/ui'\nimport { useTranslation, getCurrentLocale, appHref } from '@fayz-ai/core'\nimport { useOrganizationStore, useLimitGuard, invalidateLimit } from '@fayz-ai/admin'\nimport { PlanBriefSheet } from './PlanBriefView'\nimport { PostModal } from './PostPage'\nimport type { ContentPost } from '../../data/contentTypes'\nimport { useContentPlannerStore } from './ContentPlannerContext'\nimport { FormatBadge, PostStatusBadge, PlatformBadges, PlatformPicker } from './contentBits'\nimport type { BoardViewMode } from './contentStore'\n\n// ---------------------------------------------------------------------------\n// Content board — the spreadsheet, productized. Three lenses on the same plan\n// (content-planning best practice: plan by cadence, schedule by date, audit by\n// status): Board (weeks as columns), Calendar (posts on real dates) and List\n// (flat audit table). The page never blanks out: with no account or plan the\n// calendar renders as an empty ghost grid and the account selector carries an\n// inline add-account flow with platform connections.\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_WEEKS = 8\nconst ADD_ACCOUNT_VALUE = '__add-account__'\n// Custom MIME so week columns only react to post-card drags\nconst POST_DRAG_MIME = 'application/x-mkt-post'\n\nfunction PostCard({ post, onOpen, onDelete }: {\n post: ContentPost\n onOpen: () => void\n onDelete?: () => void\n}) {\n const t = useTranslation()\n const [dragging, setDragging] = React.useState(false)\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onOpen}\n onKeyDown={(e) => { if (e.key === 'Enter') onOpen() }}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(POST_DRAG_MIME, post.id)\n e.dataTransfer.effectAllowed = 'move'\n setDragging(true)\n }}\n onDragEnd={() => setDragging(false)}\n className={cn(\n 'group/post relative w-full cursor-pointer rounded-card border border-border bg-card p-3 pl-7 text-left transition-colors hover:bg-muted/40',\n dragging && 'opacity-50',\n )}\n >\n <GripVertical\n className=\"absolute left-1.5 top-3 h-4 w-4 cursor-grab text-muted-foreground/50 opacity-0 transition-opacity group-hover/post:opacity-100\"\n aria-hidden\n />\n {onDelete && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n aria-label={t('marketing.content.deletePost')}\n onClick={(e) => {\n e.stopPropagation()\n onDelete()\n }}\n className=\"absolute right-1.5 top-2 rounded p-1 text-muted-foreground/60 opacity-0 transition-opacity hover:bg-destructive/10 hover:text-destructive group-hover/post:opacity-100\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n <p className=\"pr-5 text-sm font-medium text-foreground\">\n {post.title || t('marketing.content.untitled')}\n </p>\n <div className=\"mt-2 flex flex-wrap items-center gap-1.5\">\n <FormatBadge format={post.format} />\n <PostStatusBadge status={post.status} />\n {post.scheduledDate && (\n <span className=\"text-xs text-muted-foreground\">{shortDay(new Date(`${post.scheduledDate}T00:00:00`))}</span>\n )}\n <PlatformBadges platforms={post.platforms} />\n </div>\n </div>\n )\n}\n\nfunction WeekColumn({ week, rangeLabel, posts, onOpenPost, onNewPost, onDeletePost, onDropPost, disabled }: {\n week: number\n /** Real date range of the week (e.g. \"6 – 12 out\"). */\n rangeLabel: string\n posts: ContentPost[]\n onOpenPost: (id: string) => void\n onNewPost: (week: number) => void\n onDeletePost?: (id: string) => void\n onDropPost?: (postId: string, week: number) => void\n disabled?: boolean\n}) {\n const t = useTranslation()\n const [isDropTarget, setIsDropTarget] = React.useState(false)\n return (\n <div\n className={cn(\n 'flex flex-col gap-2 rounded-card border border-border bg-muted/20 p-2.5 transition-colors',\n isDropTarget && 'border-primary bg-primary/5 ring-1 ring-primary/40',\n )}\n onDragOver={(e) => {\n if (!onDropPost || !e.dataTransfer.types.includes(POST_DRAG_MIME)) return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n setIsDropTarget(true)\n }}\n onDragLeave={() => setIsDropTarget(false)}\n onDrop={(e) => {\n if (!onDropPost) return\n e.preventDefault()\n setIsDropTarget(false)\n const postId = e.dataTransfer.getData(POST_DRAG_MIME)\n if (postId) onDropPost(postId, week)\n }}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-x-2 gap-y-0.5 px-1\">\n <p className=\"whitespace-nowrap text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {t('marketing.content.week')} {week}\n </p>\n <p className=\"whitespace-nowrap text-xs text-muted-foreground/80\">{rangeLabel}</p>\n </div>\n {posts.map((post) => (\n <PostCard\n key={post.id}\n post={post}\n onOpen={() => onOpenPost(post.id)}\n onDelete={onDeletePost ? () => onDeletePost(post.id) : undefined}\n />\n ))}\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => onNewPost(week)}\n disabled={disabled}\n className=\"flex items-center justify-center gap-1 rounded-card border border-dashed border-border p-2 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground disabled:pointer-events-none disabled:opacity-50\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {t('marketing.content.newPost')}\n </Button>\n </div>\n )\n}\n\n/** Account modal — create (\"+\" option) or settings (cog on an account):\n * name, handle, platform connections, and delete on the edit variant. */\nfunction AccountModal({ open, account, onClose }: {\n open: boolean\n account?: SocialAccount | null\n onClose: () => void\n}) {\n const t = useTranslation()\n const saveAccount = useContentPlannerStore((s) => s.saveAccount)\n const deleteAccount = useContentPlannerStore((s) => s.deleteAccount)\n const isEdit = !!account\n const [name, setName] = React.useState('')\n const [handle, setHandle] = React.useState('')\n const [platforms, setPlatforms] = React.useState<string[]>(['instagram'])\n const [saving, setSaving] = React.useState(false)\n const [confirmDelete, setConfirmDelete] = React.useState(false)\n\n // Prefill per open (edit) / reset (create) so drafts don't leak between uses\n React.useEffect(() => {\n if (open) {\n setName(account?.name ?? '')\n setHandle(account?.handle ?? '')\n setPlatforms(account?.platforms?.length ? account.platforms : ['instagram'])\n setSaving(false)\n setConfirmDelete(false)\n }\n }, [open, account])\n\n const create = async () => {\n if (!name.trim() || platforms.length === 0 || saving) return\n setSaving(true)\n try {\n await saveAccount({\n ...(isEdit ? { id: account.id } : {}),\n name: name.trim(),\n handle: handle.trim() || undefined,\n platforms,\n })\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n const remove = async () => {\n if (!account || saving) return\n setSaving(true)\n try {\n await deleteAccount(account.id)\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <Modal open={open} onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"sm\">\n <ModalHeader>\n <ModalTitle>\n {isEdit ? t('marketing.content.editAccountTitle') : t('marketing.content.addAccountTitle')}\n </ModalTitle>\n </ModalHeader>\n <ModalBody className=\"space-y-4\">\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {t('marketing.content.nameLabel')}\n </label>\n <Input\n autoFocus\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t('marketing.content.accountNamePlaceholder')}\n onKeyDown={(e) => { if (e.key === 'Enter') void create() }}\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {t('marketing.content.handleLabel')}\n </label>\n <Input\n value={handle}\n onChange={(e) => setHandle(e.target.value)}\n placeholder={t('marketing.content.handlePlaceholder')}\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {t('marketing.content.platformsLabel')}\n </label>\n <PlatformPicker value={platforms} onChange={setPlatforms} />\n </div>\n </ModalBody>\n <ModalFooter>\n {/* Delete is a two-step INLINE confirm — never a dialog stacked on a\n modal (no modal-over-modal, house rule). */}\n {confirmDelete && isEdit ? (\n <div className=\"flex w-full items-center gap-3 rounded-card border border-destructive/30 bg-destructive/5 p-3\">\n <p className=\"flex-1 text-xs text-destructive\">\n {t('marketing.content.deleteAccountConfirm')}\n </p>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmDelete(false)} disabled={saving}>\n {t('marketing.content.cancel')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => void remove()} disabled={saving}>\n {t('marketing.content.deleteAccount')}\n </Button>\n </div>\n ) : (\n <>\n {isEdit && (\n <Button\n variant=\"outline\"\n onClick={() => setConfirmDelete(true)}\n disabled={saving}\n className=\"mr-auto text-destructive hover:text-destructive\"\n >\n <Trash2 className=\"mr-1.5 h-4 w-4\" />\n {t('marketing.content.deleteAccount')}\n </Button>\n )}\n <Button variant=\"outline\" onClick={onClose} disabled={saving}>\n {t('marketing.content.cancel')}\n </Button>\n <Button onClick={() => void create()} disabled={saving || !name.trim() || platforms.length === 0}>\n {isEdit ? t('marketing.content.save') : t('marketing.content.createAccount')}\n </Button>\n </>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n/** Master account dropdown — always visible at the top. Each account carries\n * a cog that opens its settings (edit / delete); the last option creates. */\nfunction AccountSelector() {\n const t = useTranslation()\n const loaded = useContentPlannerStore((s) => s.loaded)\n const accounts = useContentPlannerStore((s) => s.accounts)\n const activeAccountId = useContentPlannerStore((s) => s.activeAccountId)\n const setAccount = useContentPlannerStore((s) => s.setAccount)\n const [open, setOpen] = React.useState(false)\n const [modal, setModal] = React.useState<{ mode: 'create' } | { mode: 'edit'; account: SocialAccount } | null>(null)\n\n const activeAccount = accounts.find((a) => a.id === activeAccountId) ?? null\n\n if (!loaded) {\n return (\n <div className=\"flex items-center gap-1\">\n <Skeleton className=\"h-9 w-64\" />\n <Skeleton className=\"h-9 w-9\" />\n </div>\n )\n }\n\n const openSettings = (account: SocialAccount) => {\n setOpen(false)\n setModal({ mode: 'edit', account })\n }\n\n return (\n <>\n <div className=\"flex items-center gap-1\">\n <Select\n open={open}\n onOpenChange={setOpen}\n value={activeAccountId ?? undefined}\n onValueChange={(id) => {\n if (id === ADD_ACCOUNT_VALUE) {\n setModal({ mode: 'create' })\n return\n }\n void setAccount(id)\n }}\n >\n <SelectTrigger className=\"w-64\">\n <SelectValue placeholder={t('marketing.content.account')} />\n </SelectTrigger>\n <SelectContent>\n {accounts.length === 0 ? (\n <SelectItem value=\"__none__\" disabled>\n {t('marketing.content.noAccountsAvailable')}\n </SelectItem>\n ) : (\n accounts.map((acc) => (\n <div key={acc.id} className=\"relative\">\n <SelectItem value={acc.id} className=\"pr-9\">\n <span className=\"flex items-center gap-2\">\n {acc.name}\n <PlatformBadges platforms={acc.platforms} />\n </span>\n </SelectItem>\n {/* Sits on top of the item — pointer events stop here so the\n cog opens settings instead of selecting the account. */}\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n aria-label={t('marketing.content.accountSettings')}\n onPointerDown={(e) => { e.stopPropagation(); e.preventDefault() }}\n onPointerUp={(e) => { e.stopPropagation(); e.preventDefault() }}\n onClick={(e) => {\n e.stopPropagation()\n openSettings(acc)\n }}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-1 text-muted-foreground/70 transition-colors hover:bg-muted/60 hover:text-foreground\"\n >\n <Settings2 className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n ))\n )}\n <SelectSeparator />\n <SelectItem value={ADD_ACCOUNT_VALUE}>\n <span className=\"flex items-center gap-1.5\">\n <Plus className=\"h-3.5 w-3.5\" />\n {t('marketing.content.addAccount')}\n </span>\n </SelectItem>\n </SelectContent>\n </Select>\n {activeAccount && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 text-muted-foreground\"\n aria-label={t('marketing.content.accountSettings')}\n onClick={() => setModal({ mode: 'edit', account: activeAccount })}\n >\n <Settings2 className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n <AccountModal\n open={!!modal}\n account={modal?.mode === 'edit' ? modal.account : null}\n onClose={() => setModal(null)}\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// View switcher\n// ---------------------------------------------------------------------------\n\nfunction ViewSwitcher({ mode, onChange }: { mode: BoardViewMode; onChange: (m: BoardViewMode) => void }) {\n const t = useTranslation()\n return (\n <SegmentedControl<BoardViewMode>\n size=\"md\"\n aria-label={t('marketing.content.viewBoard')}\n value={mode}\n onChange={onChange}\n options={[\n { value: 'board', label: <span className=\"flex items-center gap-1.5\"><Columns3 className=\"h-3.5 w-3.5\" />{t('marketing.content.viewBoard')}</span> },\n { value: 'calendar', label: <span className=\"flex items-center gap-1.5\"><CalendarDays className=\"h-3.5 w-3.5\" />{t('marketing.content.viewCalendar')}</span> },\n { value: 'list', label: <span className=\"flex items-center gap-1.5\"><ListIcon className=\"h-3.5 w-3.5\" />{t('marketing.content.viewList')}</span> },\n ]}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Board view — weeks as columns grouped by month blocks (cadence planning)\n// ---------------------------------------------------------------------------\n\ninterface BoardWeek {\n week: number\n rangeLabel: string\n monthLabel: string\n}\n\nfunction shortDay(d: Date): string {\n return d.toLocaleDateString(getCurrentLocale(), { day: 'numeric', month: 'short' })\n}\n\n/** Anchor each plan week to real dates (same reference the calendar view\n * uses): week N starts at startDate + (N-1) weeks; month sections group by\n * the month the week starts in. */\nfunction buildBoardWeeks(startDate: Date, weeksCount: number): BoardWeek[] {\n return Array.from({ length: weeksCount }, (_, i) => {\n const start = new Date(startDate)\n start.setDate(start.getDate() + i * 7)\n const end = new Date(start)\n end.setDate(start.getDate() + 6)\n return {\n week: i + 1,\n rangeLabel: `${shortDay(start)} – ${shortDay(end)}`,\n monthLabel: start.toLocaleDateString(getCurrentLocale(), { month: 'long', year: 'numeric' }),\n }\n })\n}\n\nfunction BoardView({ startDate, weeksCount, postsByWeek, onOpenPost, onNewPost, onDeletePost, onDropPost, disabled }: {\n startDate: Date\n weeksCount: number\n postsByWeek: Map<number, ContentPost[]>\n onOpenPost: (id: string) => void\n onNewPost: (week: number) => void\n onDeletePost: (id: string) => void\n onDropPost: (postId: string, week: number) => void\n disabled: boolean\n}) {\n const months: Array<{ label: string; weeks: BoardWeek[] }> = []\n for (const bw of buildBoardWeeks(startDate, weeksCount)) {\n const current = months[months.length - 1]\n if (current && current.label === bw.monthLabel) current.weeks.push(bw)\n else months.push({ label: bw.monthLabel, weeks: [bw] })\n }\n return (\n <div className=\"space-y-8\">\n {months.map(({ label, weeks }) => (\n <section key={label} className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n </h3>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {weeks.map(({ week, rangeLabel }) => (\n <WeekColumn\n key={week}\n week={week}\n rangeLabel={rangeLabel}\n posts={postsByWeek.get(week) ?? []}\n onOpenPost={onOpenPost}\n onNewPost={onNewPost}\n onDeletePost={onDeletePost}\n onDropPost={onDropPost}\n disabled={disabled}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Calendar view — posts pinned to real dates, month by month\n// ---------------------------------------------------------------------------\n\nfunction toISODate(d: Date): string {\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nfunction mondayOfCurrentWeek(): Date {\n const now = new Date()\n const monday = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n monday.setDate(monday.getDate() - ((monday.getDay() + 6) % 7))\n return monday\n}\n\nfunction CalendarView({ posts, onOpenPost, onNewPostAt, disabled }: {\n posts: ContentPost[]\n onOpenPost: (id: string) => void\n onNewPostAt: (isoDate: string) => void\n disabled: boolean\n}) {\n const t = useTranslation()\n const [cursor, setCursor] = React.useState(() => {\n const first = posts.find((p) => p.scheduledDate)?.scheduledDate\n const base = first ? new Date(`${first}T00:00:00`) : new Date()\n return new Date(base.getFullYear(), base.getMonth(), 1)\n })\n // Days showing their full list when they hold more posts than the cap\n const [expandedDay, setExpandedDay] = React.useState<string | null>(null)\n const MAX_VISIBLE = 3\n\n const postsByDate = React.useMemo(() => {\n const map = new Map<string, ContentPost[]>()\n for (const post of posts) {\n if (!post.scheduledDate) continue\n const list = map.get(post.scheduledDate) ?? []\n list.push(post)\n map.set(post.scheduledDate, list)\n }\n return map\n }, [posts])\n\n const unscheduled = posts.filter((p) => !p.scheduledDate)\n\n // Monday-first grid covering the whole displayed month.\n const days = React.useMemo(() => {\n const firstOfMonth = new Date(cursor.getFullYear(), cursor.getMonth(), 1)\n const start = new Date(firstOfMonth)\n start.setDate(start.getDate() - ((firstOfMonth.getDay() + 6) % 7))\n const cells: Date[] = []\n for (let i = 0; i < 42; i++) {\n const d = new Date(start)\n d.setDate(start.getDate() + i)\n cells.push(d)\n }\n // Trim trailing full weeks outside the month\n while (cells.length > 7 && cells[cells.length - 7].getMonth() !== cursor.getMonth()) {\n cells.splice(cells.length - 7, 7)\n }\n return cells\n }, [cursor])\n\n const monthLabel = cursor.toLocaleDateString(getCurrentLocale(), { month: 'long', year: 'numeric' })\n const weekdayLabels = days.slice(0, 7).map((d) =>\n d.toLocaleDateString(getCurrentLocale(), { weekday: 'short' }),\n )\n const todayISO = toISODate(new Date())\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold capitalize text-foreground\">{monthLabel}</h3>\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setCursor(new Date(cursor.getFullYear(), cursor.getMonth() - 1, 1))}>\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setCursor(new Date(cursor.getFullYear(), cursor.getMonth() + 1, 1))}>\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {unscheduled.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2 rounded-card border border-dashed border-border bg-muted/20 p-2.5\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {t('marketing.content.unscheduled')}\n </span>\n {unscheduled.map((post) => (\n <Button variant=\"bare\" size=\"bare\"\n key={post.id}\n type=\"button\"\n onClick={() => onOpenPost(post.id)}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-2.5 py-1 text-xs font-medium text-foreground transition-colors hover:bg-muted/40\"\n >\n {post.title || t('marketing.content.untitled')}\n <FormatBadge format={post.format} />\n </Button>\n ))}\n </div>\n )}\n\n <div className=\"overflow-hidden rounded-card border border-border\">\n <div className=\"grid grid-cols-7 border-b border-border bg-muted/30\">\n {weekdayLabels.map((label, i) => (\n <div key={i} className=\"px-2 py-1.5 text-center text-xs font-medium capitalize text-muted-foreground\">\n {label}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7\">\n {days.map((day, i) => {\n const iso = toISODate(day)\n const inMonth = day.getMonth() === cursor.getMonth()\n const dayPosts = postsByDate.get(iso) ?? []\n return (\n <div\n key={i}\n className={cn(\n 'group min-h-24 border-b border-r border-border p-1.5 [&:nth-child(7n)]:border-r-0',\n !inMonth && 'bg-muted/20',\n )}\n >\n <div className=\"flex items-center justify-between\">\n <span\n className={cn(\n 'text-xs',\n inMonth ? 'text-foreground' : 'text-muted-foreground/60',\n iso === todayISO && 'flex h-5 w-5 items-center justify-center rounded-full bg-primary font-semibold text-primary-foreground',\n )}\n >\n {day.getDate()}\n </span>\n {!disabled && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => onNewPostAt(iso)}\n className=\"rounded p-0.5 text-muted-foreground opacity-0 transition-opacity hover:bg-muted/60 hover:text-foreground group-hover:opacity-100\"\n aria-label={t('marketing.content.newPost')}\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n </div>\n <div className=\"mt-1 space-y-1\">\n {(expandedDay === iso ? dayPosts : dayPosts.slice(0, MAX_VISIBLE)).map((post) => (\n <Button variant=\"bare\" size=\"bare\"\n key={post.id}\n type=\"button\"\n onClick={() => onOpenPost(post.id)}\n className=\"block w-full truncate rounded border border-border bg-card px-1.5 py-1 text-left text-xs text-foreground transition-colors hover:bg-muted/40 font-normal\"\n >\n {post.title || t('marketing.content.untitled')}\n </Button>\n ))}\n {dayPosts.length > MAX_VISIBLE && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setExpandedDay(expandedDay === iso ? null : iso)}\n className=\"block w-full px-1.5 py-0.5 text-left text-xs font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {expandedDay === iso\n ? t('marketing.content.showLess')\n : `+${dayPosts.length - MAX_VISIBLE}`}\n </Button>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// List view — flat audit table (sorted by week, then position)\n// ---------------------------------------------------------------------------\n\nfunction ListView({ posts, onOpenPost }: { posts: ContentPost[]; onOpenPost: (id: string) => void }) {\n const t = useTranslation()\n const columns = React.useMemo<ColumnDef<ContentPost>[]>(() => {\n const head = (key: string) => () => <span className=\"text-xs uppercase tracking-wide\">{t(key)}</span>\n return [\n { id: 'week', header: head('marketing.content.listWeek'), cell: ({ row }) => <span className=\"text-muted-foreground\">{row.original.weekNumber}</span> },\n {\n id: 'title', header: head('marketing.content.listTitle'),\n cell: ({ row: { original: post } }) => (\n <span className=\"flex items-center gap-2 font-medium text-foreground\">\n {post.title || t('marketing.content.untitled')}\n <PlatformBadges platforms={post.platforms} />\n </span>\n ),\n },\n { id: 'format', header: head('marketing.content.listFormat'), cell: ({ row }) => <FormatBadge format={row.original.format} /> },\n { id: 'status', header: head('marketing.content.listStatus'), cell: ({ row }) => <PostStatusBadge status={row.original.status} /> },\n { id: 'date', header: head('marketing.content.listDate'), cell: ({ row }) => <span className=\"text-muted-foreground\">{row.original.scheduledDate ?? '—'}</span> },\n ]\n }, [t])\n if (posts.length === 0) {\n return <p className=\"text-sm text-muted-foreground\">{t('marketing.content.noPosts')}</p>\n }\n return (\n <div className=\"overflow-hidden rounded-card border border-border\">\n <DataTable variant=\"bare\" columns={columns} data={posts} onRowClick={(post) => onOpenPost(post.id)} />\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n\nexport function ContentView({ initialPostId = null }: {\n /** Deep link (`#/marketing/content/post/<id>`) opens the board with this post's modal up. */\n initialPostId?: string | null\n}) {\n const t = useTranslation()\n const [openPostId, setOpenPostId] = React.useState<string | null>(initialPostId)\n // replaceState, not navigate: a hash change re-routes the module and remounts\n // the board under the modal (scroll and filters lost).\n const onOpenPost = React.useCallback((id: string | null) => {\n setOpenPostId(id)\n window.history.replaceState(window.history.state, '', appHref(id ? `/marketing/content/post/${id}` : '/marketing/content'))\n }, [])\n const loaded = useContentPlannerStore((s) => s.loaded)\n const loading = useContentPlannerStore((s) => s.loading)\n const accounts = useContentPlannerStore((s) => s.accounts)\n const activeAccountId = useContentPlannerStore((s) => s.activeAccountId)\n const plan = useContentPlannerStore((s) => s.activePlan)\n const posts = useContentPlannerStore((s) => s.posts)\n const load = useContentPlannerStore((s) => s.load)\n const savePlan = useContentPlannerStore((s) => s.savePlan)\n const savePost = useContentPlannerStore((s) => s.savePost)\n const deletePost = useContentPlannerStore((s) => s.deletePost)\n const viewMode = useContentPlannerStore((s) => s.viewMode)\n const setViewMode = useContentPlannerStore((s) => s.setViewMode)\n const loadedTenantId = useContentPlannerStore((s) => s.loadedTenantId)\n const guardContentPosts = useLimitGuard('content_posts_month')\n\n const [briefOpen, setBriefOpen] = React.useState(false)\n const [pendingDeleteId, setPendingDeleteId] = React.useState<string | null>(null)\n\n // The tenant hydrates async after login/refresh — (re)load whenever the\n // active tenant diverges from the one the current data belongs to. Also\n // covers org switching.\n const tenantId = useOrganizationStore((state) => state.currentOrg?.id)\n React.useEffect(() => {\n if (!loading && (!loaded || (tenantId && tenantId !== loadedTenantId))) void load()\n }, [tenantId, loadedTenantId, loaded, loading, load])\n\n const postsByWeek = React.useMemo(() => {\n const map = new Map<number, ContentPost[]>()\n for (const post of posts) {\n const list = map.get(post.weekNumber) ?? []\n list.push(post)\n map.set(post.weekNumber, list)\n }\n return map\n }, [posts])\n\n const ensurePlan = async () => {\n if (plan) return plan\n if (!activeAccountId) return null\n return savePlan({\n accountId: activeAccountId,\n name: t('marketing.content.defaultPlanName'),\n status: 'active',\n weeksCount: DEFAULT_WEEKS,\n startDate: toISODate(mondayOfCurrentWeek()),\n })\n }\n\n // With an account but no plan yet, the first \"new post\" click bootstraps the\n // default plan and drops the post straight into it. The scheduled date\n // prefills with the first day of the selected week so the post lands dated.\n const createPost = async (week: number) => {\n // Client-side monthly-quota guard before the store create.\n if ((await guardContentPosts()) === 'blocked') return\n const targetPlan = await ensurePlan()\n if (!targetPlan) return\n const start = targetPlan.startDate\n ? new Date(`${targetPlan.startDate}T00:00:00`)\n : mondayOfCurrentWeek()\n start.setDate(start.getDate() + (week - 1) * 7)\n const post = await savePost({\n planId: targetPlan.id,\n weekNumber: week,\n title: '',\n format: 'reel',\n status: 'idea',\n scheduledDate: toISODate(start),\n })\n invalidateLimit('content_posts_month')\n onOpenPost(post.id)\n }\n\n const movePost = async (postId: string, week: number) => {\n const post = posts.find((p) => p.id === postId)\n if (!post || post.weekNumber === week) return\n await savePost({ id: postId, weekNumber: week })\n }\n\n // Calendar day click → derive the plan week from startDate when available.\n const createPostAt = async (isoDate: string) => {\n // Client-side monthly-quota guard before the store create.\n if ((await guardContentPosts()) === 'blocked') return\n const targetPlan = await ensurePlan()\n if (!targetPlan) return\n let week = 1\n if (targetPlan.startDate) {\n const start = new Date(`${targetPlan.startDate}T00:00:00`)\n const day = new Date(`${isoDate}T00:00:00`)\n const diff = Math.floor((day.getTime() - start.getTime()) / (7 * 24 * 3600 * 1000)) + 1\n week = Math.min(Math.max(diff, 1), targetPlan.weeksCount)\n }\n const post = await savePost({\n planId: targetPlan.id,\n weekNumber: week,\n title: '',\n format: 'reel',\n status: 'idea',\n scheduledDate: isoDate,\n })\n invalidateLimit('content_posts_month')\n onOpenPost(post.id)\n }\n\n // Initial load, tenant hydration and account switches all re-skeleton the\n // board so stale posts never flash under the new selection.\n const busy = !loaded || loading\n\n const hasAccount = accounts.length > 0\n const weeksCount = plan?.weeksCount ?? DEFAULT_WEEKS\n // Same date anchor the calendar view uses. Plans without a start date\n // (legacy rows) display against the current week.\n const boardStart = plan?.startDate\n ? new Date(`${plan.startDate}T00:00:00`)\n : mondayOfCurrentWeek()\n\n return (\n <div className=\"mx-auto max-w-6xl space-y-6\">\n {plan && (\n <PageHeaderActions>\n <Button onClick={() => setBriefOpen(true)}>\n <NotebookPen className=\"mr-1.5 h-4 w-4\" />\n {t('marketing.content.brief')}\n </Button>\n </PageHeaderActions>\n )}\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <AccountSelector />\n {plan && <span className=\"text-sm text-muted-foreground\">{plan.name}</span>}\n </div>\n <div className=\"flex items-center gap-2\">\n <ViewSwitcher mode={viewMode} onChange={setViewMode} />\n </div>\n </div>\n\n {!busy && !hasAccount && (\n <p className=\"text-sm text-muted-foreground\">\n {t('marketing.content.noAccountsHint')}\n </p>\n )}\n\n {busy && viewMode === 'board' && (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {Array.from({ length: 8 }, (_, i) => <Skeleton key={i} className=\"h-44\" />)}\n </div>\n )}\n {busy && viewMode === 'calendar' && <Skeleton className=\"h-96 w-full\" />}\n {busy && viewMode === 'list' && (\n <div className=\"space-y-2\">\n {Array.from({ length: 6 }, (_, i) => <Skeleton key={i} className=\"h-10 w-full\" />)}\n </div>\n )}\n\n {!busy && viewMode === 'board' && (\n <BoardView\n startDate={boardStart}\n weeksCount={weeksCount}\n postsByWeek={postsByWeek}\n onOpenPost={onOpenPost}\n onNewPost={(w) => void createPost(w)}\n onDeletePost={setPendingDeleteId}\n onDropPost={(id, w) => void movePost(id, w)}\n disabled={!hasAccount}\n />\n )}\n {!busy && viewMode === 'calendar' && (\n <CalendarView\n posts={posts}\n onOpenPost={onOpenPost}\n onNewPostAt={(iso) => void createPostAt(iso)}\n disabled={!hasAccount}\n />\n )}\n {!busy && viewMode === 'list' && <ListView posts={posts} onOpenPost={onOpenPost} />}\n\n <PlanBriefSheet open={briefOpen} onClose={() => setBriefOpen(false)} />\n <PostModal postId={openPostId} onClose={() => onOpenPost(null)} />\n\n <ConfirmDialog\n open={!!pendingDeleteId}\n variant=\"destructive\"\n title={t('marketing.content.deletePost')}\n description={t('marketing.content.deletePostConfirm')}\n confirmLabel={t('marketing.content.deletePost')}\n cancelLabel={t('marketing.content.cancel')}\n onCancel={() => setPendingDeleteId(null)}\n onConfirm={() => {\n const id = pendingDeleteId\n setPendingDeleteId(null)\n if (id) void deletePost(id)\n }}\n />\n </div>\n )\n}\n","import { useMemo, useState, useCallback } from 'react'\nimport { resolveDataProvider } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\ninterface ListQuery {\n search?: string\n filters?: Record<string, unknown>\n page?: number\n pageSize?: number\n sortBy?: string\n sortDir?: 'asc' | 'desc'\n}\n\n/**\n * Minimal store-less CRUD wiring for a plugin that owns its data + routing.\n * Resolves the generic Supabase provider from the EntityDef's `data.table`\n * (mock fallback when Supabase is not configured) and exposes list/get/save/\n * remove. Used by the blog backoffice list + form views — the heavy list/form\n * rendering stays in the shared CrudListView / CrudFormPage.\n */\nexport function useEntityCrud<T extends { id: string }>(entity: EntityDef<T>) {\n const provider = useMemo(() => resolveDataProvider<T>(entity), [entity])\n const [items, setItems] = useState<T[] | null>(null)\n const [total, setTotal] = useState(0)\n\n const fetch = useCallback(async (query: ListQuery = {}) => {\n try {\n const res = await provider.list(query as any)\n setItems(res.data)\n setTotal(res.total)\n } catch (err) {\n // Table not provisioned yet (migration not applied to this pool) or a\n // transient error — surface an empty list instead of a perpetual skeleton.\n console.warn('[blog] list failed; showing empty. Apply the plugin-blog migration to this pool.', err)\n setItems([])\n setTotal(0)\n }\n }, [provider])\n\n const getById = useCallback(async (id: string): Promise<T | null> => {\n const res = await provider.list({ filters: { id }, page: 1, pageSize: 1 } as any)\n return res.data[0] ?? null\n }, [provider])\n\n const create = useCallback((data: Record<string, unknown>) => provider.create(data as any), [provider])\n const update = useCallback((id: string, data: Record<string, unknown>) => provider.update(id, data as any), [provider])\n const remove = useCallback((id: string) => provider.remove(id), [provider])\n\n return { items, total, fetch, getById, create, update, remove }\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CrudListView, type CrudNavTab } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useMarketingConfig } from '../../context'\nimport { buildBlogPostEntity, buildBlogCategoryEntity } from '../../data/blogEntities'\nimport { useEntityCrud } from './useEntityCrud'\n\n// ---------------------------------------------------------------------------\n// Blog backoffice — an in-page marketing tab with two lenses (Posts /\n// Categories), each a generic CrudListView backed by the blog tables. Follows\n// the content-planner pattern: this plugin owns the data + routing; create/edit\n// deep-link through the marketing module nav (navigate('blog-post:id') etc.).\n// ---------------------------------------------------------------------------\n\nfunction PostsList({ navigate, navTabs }: { navigate: (view: string) => void; navTabs: CrudNavTab[] }) {\n const entity = useMemo(() => buildBlogPostEntity(), [])\n const { items, total, fetch } = useEntityCrud(entity)\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<string | undefined>()\n const [loadedOnce, setLoadedOnce] = useState(false)\n\n useEffect(() => {\n let active = true\n Promise.resolve(\n fetch({ search: search || undefined, filters: statusFilter ? { status: statusFilter } : undefined }),\n ).finally(() => { if (active) setLoadedOnce(true) })\n return () => { active = false }\n }, [search, statusFilter, fetch])\n\n const facets = useMemo(() => [{\n field: 'status',\n allLabel: 'All',\n options: [{ value: 'draft', label: 'Draft' }, { value: 'published', label: 'Published' }],\n }], [])\n\n return (\n <CrudListView\n entityDef={entity}\n items={loadedOnce ? items : null}\n total={total}\n search={search}\n onSearchChange={setSearch}\n searchPlaceholder=\"Search posts…\"\n facets={facets}\n activeFilters={{ status: statusFilter }}\n onFacetChange={(_field, value) => setStatusFilter(value)}\n navTabs={navTabs}\n activeNavTab=\"posts\"\n onNew={() => navigate('blog-new')}\n // O post é escrevível pelo agente (marketing publica a entidade em\n // `queryEntities` com writable), então a porta leva a algum lugar.\n aiCreate={{\n hint: 'Descreva o post…',\n description: 'Descreva o assunto e eu escrevo o rascunho.',\n intro: {\n role: 'growth',\n persona: 'Redator do blog',\n pitch: 'Diga sobre o que é o post.',\n description:\n 'Escrevo título, resumo e corpo em markdown, com slug e tempo de leitura. Nasce como rascunho — você lê, ajusta e publica quando quiser.',\n suggestions: [\n { label: 'Um post sobre cuidados pós-procedimento' },\n { label: 'Cinco dúvidas frequentes dos clientes, respondidas' },\n { label: 'Um post curto para divulgar a promoção do mês' },\n ],\n },\n }}\n addLabel=\"New post\"\n onRowClick={(row) => navigate(`blog-post:${(row as { id: string }).id}`)}\n />\n )\n}\n\nfunction CategoriesList({ navigate, navTabs }: { navigate: (view: string) => void; navTabs: CrudNavTab[] }) {\n const entity = useMemo(() => buildBlogCategoryEntity(), [])\n const { items, total, fetch } = useEntityCrud(entity)\n const [search, setSearch] = useState('')\n const [loadedOnce, setLoadedOnce] = useState(false)\n\n useEffect(() => {\n let active = true\n Promise.resolve(fetch({ search: search || undefined })).finally(() => { if (active) setLoadedOnce(true) })\n return () => { active = false }\n }, [search, fetch])\n\n return (\n <CrudListView\n entityDef={entity}\n items={loadedOnce ? items : null}\n total={total}\n search={search}\n onSearchChange={setSearch}\n searchPlaceholder=\"Search categories…\"\n navTabs={navTabs}\n activeNavTab=\"categories\"\n onNew={() => navigate('blog-cat-new')}\n addLabel=\"New category\"\n onRowClick={(row) => navigate(`blog-cat:${(row as { id: string }).id}`)}\n />\n )\n}\n\nexport function BlogAdminView({ navigate }: { navigate: (view: string) => void }) {\n const { labels } = useMarketingConfig()\n const t = useTranslation()\n const [lens, setLens] = useState<'posts' | 'categories'>('posts')\n\n // Posts e Categorias são listas IRMÃS, e a régua para isso já existe: a faixa\n // de abas do cabeçalho da lista (`navTabs`), a mesma de qualquer CRUD. Um\n // SegmentedControl solto acima da lista era um terceiro jeito de trocar de\n // visão na mesma tela — e ficava fora do cabeçalho, longe das ações.\n const navTabs: CrudNavTab[] = useMemo(() => [\n { id: 'posts', label: labels.blog ?? t('marketing.nav.blog'), onSelect: () => setLens('posts') },\n { id: 'categories', label: labels.blogCategories ?? t('marketing.nav.blogCategories'), onSelect: () => setLens('categories') },\n ], [labels.blog, labels.blogCategories, t])\n\n return lens === 'posts'\n ? <PostsList navigate={navigate} navTabs={navTabs} />\n : <CategoriesList navigate={navigate} navTabs={navTabs} />\n}\n","import React from 'react'\nimport { SubpageHeader, Button, toast } from '@fayz-ai/ui'\nimport { CrudFormPage, useLimitGuard, invalidateLimit } from '@fayz-ai/admin'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { useEntityCrud } from './useEntityCrud'\nimport { BLOG_POSTS_TABLE } from '../../data/blogEntities'\n\n// ---------------------------------------------------------------------------\n// Generic create/edit for a blog entity (post or category), rendered through\n// the shared CrudFormPage (declarative EntityDef → fields, incl. the markdown\n// body + category relation). Persistence flows through the generic Supabase\n// provider; this only wires load / save / delete + the back link.\n// ---------------------------------------------------------------------------\n\nexport function BlogEntityForm<T extends { id: string }>({\n entity,\n editId,\n parentLabel,\n onDone,\n}: {\n entity: EntityDef<T>\n editId?: string\n parentLabel: string\n onDone: () => void\n}) {\n const { getById, create, update, remove } = useEntityCrud(entity)\n const isEdit = !!editId\n // Plan quantity guard applies to blog POSTS only (categories are unbounded).\n const isPost = (entity as { data?: { table?: string } }).data?.table === BLOG_POSTS_TABLE\n const guardBlogPosts = useLimitGuard('blog_posts')\n const namePlural = entity.namePlural ?? entity.name + 's'\n const [initialData, setInitialData] = React.useState<Record<string, any> | null>(isEdit ? null : {})\n\n React.useEffect(() => {\n if (!editId) return\n let cancelled = false\n ;(async () => {\n const item = await getById(editId)\n if (!cancelled) setInitialData((item as Record<string, any>) ?? {})\n })()\n return () => { cancelled = true }\n }, [editId, getById])\n\n async function save(values: Record<string, any>) {\n // Client-side plan guard before the provider create — posts only, on create.\n if (!isEdit && isPost && (await guardBlogPosts()) === 'blocked') return\n try {\n if (isEdit) await update(editId!, values)\n else {\n await create(values)\n if (isPost) invalidateLimit('blog_posts')\n }\n toast.success(isEdit ? `${entity.name} updated` : `${entity.name} created`)\n onDone()\n } catch (err) {\n toast.error(`Failed to save ${entity.name.toLowerCase()}`)\n throw err\n }\n }\n\n async function del() {\n if (!editId) return\n try {\n await remove(editId)\n toast.success(`${entity.name} deleted`)\n onDone()\n } catch {\n toast.error(`Failed to delete ${entity.name.toLowerCase()}`)\n }\n }\n\n const title = isEdit\n ? (initialData?.[entity.displayField ?? 'name'] ?? entity.name)\n : `New ${entity.name.toLowerCase()}`\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={String(title)}\n onBack={onDone}\n parentLabel={parentLabel}\n actions={isEdit ? (\n <Button variant=\"ghost\" className=\"text-destructive hover:text-destructive\" onClick={del}>\n Delete\n </Button>\n ) : undefined}\n />\n {initialData !== null && (\n <CrudFormPage\n entityDef={entity}\n mode={isEdit ? 'edit' : 'create'}\n initialData={initialData}\n namePlural={namePlural}\n onCancel={onDone}\n onSubmit={save}\n hideBreadcrumb\n />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { ModulePage, type ModuleNavItem } from '@fayz-ai/ui'\nimport { useTranslation, useDataChanged } from '@fayz-ai/core'\nimport type { PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, createViewRouter } from '@fayz-ai/admin'\nimport { MarketingContextProvider, type ResolvedMarketingConfig } from '../context'\nimport type { MarketingDataProvider } from '../data/types'\nimport type { ContentPlannerProvider } from '../data/contentTypes'\nimport type { MarketingUIState } from '../store'\nimport { OverviewView } from './OverviewView'\nimport {\n SegmentsView, MessageTemplatesView, SendHistoryView,\n QuickTriggersView, BrandView, AuthorizedImagesView,\n} from './GapScreens'\nimport { ChannelsView } from './ChannelsView'\nimport { ChannelDetailView } from './ChannelDetailView'\nimport { CampaignsView } from './CampaignsView'\nimport { FunnelView } from './FunnelView'\nimport { CadencesView } from './CadencesView'\nimport { LandingPagesView } from './LandingPagesView'\nimport { ContentPlannerContextProvider } from './content/ContentPlannerContext'\nimport type { ContentPlannerUIState } from './content/contentStore'\nimport { ContentView } from './content/ContentView'\nimport { PlanBriefView } from './content/PlanBriefView'\nimport { BlogAdminView } from './blog/BlogAdminView'\nimport { BlogEntityForm } from './blog/BlogEntityForm'\nimport { buildBlogPostEntity, buildBlogCategoryEntity } from '../data/blogEntities'\n\nfunction buildNav(\n config: ResolvedMarketingConfig,\n view: string,\n navigate: (v: string) => void,\n hasCadenceSurface: boolean,\n /** Sem override do app, cada aba se nomeia pelo i18n do plugin. */\n t: (key: string, params?: Record<string, string | number>) => string,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n { id: 'overview', label: config.labels.overview ?? t('marketing.nav.overview'), icon: 'BarChart3', active: view === 'overview', onClick: () => navigate('overview') },\n ]\n if (config.modules.channels) {\n items.push({\n id: 'channels', label: config.labels.channels ?? t('marketing.nav.channels'), icon: 'Radio',\n active: view === 'channels' || view.startsWith('channel-detail:'),\n onClick: () => navigate('channels'),\n })\n }\n // A campanha e o que ela usa moram juntos: o modelo é o texto que ela manda e\n // o histórico é o que aconteceu depois de mandar. No V1 são três linhas\n // soltas em pontos diferentes da barra. Ver ./GapScreens.\n if (config.modules.campaigns) {\n items.push({\n id: 'campaigns', label: config.labels.campaigns ?? t('marketing.nav.campaigns'), icon: 'Megaphone',\n active: ['campaigns', 'message-templates', 'send-history'].includes(view),\n children: [\n { id: 'campaigns', label: config.labels.campaigns ?? t('marketing.nav.campaigns'), defaultChild: true, active: view === 'campaigns', onClick: () => navigate('campaigns') },\n { id: 'message-templates', label: t('marketing.nav.messageTemplates'), active: view === 'message-templates', onClick: () => navigate('message-templates') },\n { id: 'send-history', label: t('marketing.nav.sendHistory'), active: view === 'send-history', onClick: () => navigate('send-history') },\n ],\n })\n // Para quem a campanha fala. É a tela que a Artorius mais usa no V1 (8 dos\n // 65 segmentos são dela) e a que mais falta aqui.\n items.push({ id: 'segments', label: t('marketing.nav.segments'), icon: 'Users', active: view === 'segments', onClick: () => navigate('segments') })\n }\n if (config.modules.funnel) {\n items.push({ id: 'funnel', label: config.labels.funnel ?? t('marketing.nav.funnel'), icon: 'Filter', active: view === 'funnel', onClick: () => navigate('funnel') })\n }\n // Vizinha das Campanhas de propósito: a campanha é o disparo único, a\n // cadência é a sequência. São a mesma decisão vista em dois prazos.\n if (config.modules.cadences && hasCadenceSurface) {\n items.push({\n id: 'cadences', label: config.labels.cadences ?? t('marketing.cadences.title'), icon: 'Workflow',\n active: view === 'cadences' || view === 'quick-triggers',\n children: [\n { id: 'cadences', label: config.labels.cadences ?? t('marketing.cadences.title'), defaultChild: true, active: view === 'cadences', onClick: () => navigate('cadences') },\n // O gatilho é a cadência de um passo só, com a porta de um clique.\n { id: 'quick-triggers', label: t('marketing.nav.quickTriggers'), active: view === 'quick-triggers', onClick: () => navigate('quick-triggers') },\n ],\n })\n }\n if (config.modules.landingPages) {\n items.push({ id: 'landing-pages', label: config.labels.landingPages ?? t('marketing.nav.landingPages'), icon: 'LayoutTemplate', active: view === 'landing-pages', onClick: () => navigate('landing-pages') })\n }\n if (config.modules.contentPlanner) {\n items.push({\n id: 'content', label: config.labels.content ?? t('marketing.nav.content'), icon: 'Clapperboard',\n active: view === 'content' || view === 'content-brief' || view.startsWith('content-post:'),\n onClick: () => navigate('content'),\n })\n }\n if (config.modules.blog) {\n items.push({\n id: 'blog', label: config.labels.blog ?? t('marketing.nav.blog'), icon: 'Newspaper',\n active: view === 'blog' || view === 'blog-new' || view.startsWith('blog-post:')\n || view === 'blog-cat-new' || view.startsWith('blog-cat:'),\n onClick: () => navigate('blog'),\n })\n }\n\n // A identidade da casa e o que se pode publicar com ela. Última do menu\n // porque se mexe uma vez e se consulta sempre — ver ./GapScreens.\n {\n items.push({\n id: 'brand', label: t('marketing.nav.brand'), icon: 'Palette',\n active: view === 'brand' || view === 'authorized-images',\n children: [\n { id: 'brand', label: t('marketing.nav.brand'), defaultChild: true, active: view === 'brand', onClick: () => navigate('brand') },\n { id: 'authorized-images', label: t('marketing.nav.authorizedImages'), active: view === 'authorized-images', onClick: () => navigate('authorized-images') },\n ],\n })\n }\n return items\n}\n\nexport function MarketingPage({ config, provider, store, contentProvider, contentStore, cadenceSurface }: {\n config: ResolvedMarketingConfig\n provider: MarketingDataProvider\n store: StoreApi<MarketingUIState>\n contentProvider: ContentPlannerProvider\n contentStore: StoreApi<ContentPlannerUIState>\n /** A tela de cadências do plugin-automations, injetada pelo app. */\n cadenceSurface?: React.ComponentType\n}) {\n const t = useTranslation()\n const { view, direction, navigate } = useModuleNavigation('/marketing', {\n overview: 0, channels: 0, campaigns: 0, funnel: 0, cadences: 0, 'landing-pages': 0, content: 0, blog: 0,\n 'channel-detail': 1, 'content-post': 1, 'content-brief': 1,\n 'blog-new': 1, 'blog-post': 1, 'blog-cat-new': 1, 'blog-cat': 1,\n }, 'overview')\n\n React.useEffect(() => { void store.getState().load() }, [store])\n\n // Agent RPC writes (createCampaign) land outside the provider — refresh past\n // its read cache when any agent write is announced.\n useDataChanged({ table: 'plg_marketing_campaigns' }, () => { void store.getState().refresh() }, [store])\n\n const isOverview = view === 'overview'\n const nav = buildNav(config, view, navigate, Boolean(cadenceSurface), t)\n\n // Blog backoffice entities — one shared EntityDef each drives the list + form.\n const blogPostEntity = React.useMemo(() => buildBlogPostEntity(), [])\n const blogCategoryEntity = React.useMemo(() => buildBlogCategoryEntity(), [])\n\n const quickActions = React.useMemo<PluginQuickAction[]>(() => [\n { id: 'new-campaign', label: t('marketing.campaigns.new'), icon: 'Megaphone', description: config.labels.campaigns, action: () => navigate('campaigns') },\n ], [t, config.labels.campaigns])\n\n const renderView = createViewRouter([\n { id: 'channels', render: () => <ChannelsView onOpen={(id) => navigate(`channel-detail:${id}`)} /> },\n { id: 'channel-detail', render: ({ id }) => <ChannelDetailView channelId={id!} onBack={() => navigate('channels')} /> },\n { id: 'campaigns', render: () => <CampaignsView /> },\n { id: 'funnel', render: () => <FunnelView /> },\n { id: 'cadences', render: () => <CadencesView surface={cadenceSurface} /> },\n { id: 'landing-pages', render: () => <LandingPagesView /> },\n { id: 'content', render: () => <ContentView /> },\n { id: 'content-post', render: ({ id }) => <ContentView initialPostId={id!} /> },\n { id: 'content-brief', render: () => <PlanBriefView onBack={() => navigate('content')} /> },\n { id: 'blog', render: () => <BlogAdminView navigate={navigate} /> },\n { id: 'blog-new', render: () => <BlogEntityForm entity={blogPostEntity} parentLabel={config.labels.blog ?? t('marketing.nav.blog')} onDone={() => navigate('blog')} /> },\n { id: 'blog-post', render: ({ id }) => <BlogEntityForm entity={blogPostEntity} editId={id!} parentLabel={config.labels.blog ?? t('marketing.nav.blog')} onDone={() => navigate('blog')} /> },\n { id: 'blog-cat-new', render: () => <BlogEntityForm entity={blogCategoryEntity} parentLabel={config.labels.blogCategories ?? t('marketing.nav.blogCategories')} onDone={() => navigate('blog')} /> },\n { id: 'blog-cat', render: ({ id }) => <BlogEntityForm entity={blogCategoryEntity} editId={id!} parentLabel={config.labels.blogCategories ?? t('marketing.nav.blogCategories')} onDone={() => navigate('blog')} /> },\n // As telas que ainda não existem — ver ./GapScreens.\n { id: 'segments', render: () => <SegmentsView /> },\n { id: 'message-templates', render: () => <MessageTemplatesView /> },\n { id: 'send-history', render: () => <SendHistoryView /> },\n { id: 'quick-triggers', render: () => <QuickTriggersView /> },\n { id: 'brand', render: () => <BrandView /> },\n { id: 'authorized-images', render: () => <AuthorizedImagesView /> },\n { id: 'overview', render: () => <OverviewView /> },\n ], 'overview')\n\n return (\n <MarketingContextProvider config={config} provider={provider} store={store}>\n <ContentPlannerContextProvider config={config} provider={contentProvider} store={contentStore}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n navVariant={config.moduleNav}\n showHeader={isOverview}\n viewKey={view}\n direction={direction}\n headerAction={\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath=\"/settings/marketing\"\n />\n }\n >\n {renderView(view)}\n </ModulePage>\n </ContentPlannerContextProvider>\n </MarketingContextProvider>\n )\n}\n"]}
|