@fayz-ai/core 0.8.4 → 0.8.5
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/access/engine.d.ts +8 -1
- package/dist/access/engine.d.ts.map +1 -1
- package/dist/access/index.d.ts +1 -1
- package/dist/access/index.d.ts.map +1 -1
- package/dist/access/index.js +6 -1
- package/dist/access/index.js.map +1 -1
- package/dist/chunk-HN7PTOSH.js +1149 -0
- package/dist/chunk-HN7PTOSH.js.map +1 -0
- package/dist/{chunk-KL2XT2TV.cjs → chunk-V2MSAUHO.js} +166 -29
- package/dist/chunk-V2MSAUHO.js.map +1 -0
- package/dist/data/archetype.d.ts.map +1 -1
- package/dist/data/bulk.d.ts +17 -0
- package/dist/data/bulk.d.ts.map +1 -0
- package/dist/data/filters.d.ts +29 -0
- package/dist/data/filters.d.ts.map +1 -0
- package/dist/data/index.d.ts +2 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -1
- package/dist/data/mock.d.ts.map +1 -1
- package/dist/data/platform-api.d.ts.map +1 -1
- package/dist/data/refresh.d.ts.map +1 -1
- package/dist/data/resolve.d.ts +10 -0
- package/dist/data/resolve.d.ts.map +1 -1
- package/dist/data/supabase.d.ts.map +1 -1
- package/dist/data/types.d.ts +22 -0
- package/dist/data/types.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +7 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/shell-translations.en.d.ts +2 -0
- package/dist/i18n/shell-translations.en.d.ts.map +1 -0
- package/dist/i18n/shell-translations.pt-br.d.ts +2 -0
- package/dist/i18n/shell-translations.pt-br.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/search/engine.d.ts.map +1 -1
- package/dist/shell-translations.pt-br-2GWRQRRP.js +875 -0
- package/dist/shell-translations.pt-br-2GWRQRRP.js.map +1 -0
- package/dist/tenant/index.d.ts +10 -0
- package/dist/tenant/index.d.ts.map +1 -1
- package/dist/types/org.d.ts +9 -3
- package/dist/types/org.d.ts.map +1 -1
- package/package.json +21 -29
- package/src/access/engine.ts +16 -1
- package/src/access/index.ts +1 -0
- package/src/app/render.tsx +1 -1
- package/src/data/archetype.ts +23 -0
- package/src/data/bulk.ts +35 -0
- package/src/data/filters.test.ts +70 -0
- package/src/data/filters.ts +90 -0
- package/src/data/index.ts +2 -1
- package/src/data/mock.ts +8 -2
- package/src/data/platform-api.ts +12 -3
- package/src/data/refresh.ts +11 -1
- package/src/data/resolve.ts +16 -4
- package/src/data/supabase.ts +60 -1
- package/src/data/types.ts +24 -0
- package/src/i18n/index.ts +56 -6
- package/src/i18n/shell-translations.en.ts +875 -0
- package/src/i18n/shell-translations.pt-br.ts +873 -0
- package/src/index.ts +11 -2
- package/src/search/engine.ts +8 -0
- package/src/tenant/index.ts +20 -0
- package/src/types/org.ts +9 -3
- package/dist/access/index.cjs +0 -60
- package/dist/access/index.cjs.map +0 -1
- package/dist/chunk-56GH3WC2.cjs +0 -35
- package/dist/chunk-56GH3WC2.cjs.map +0 -1
- package/dist/chunk-5TKIZVVJ.cjs +0 -16
- package/dist/chunk-5TKIZVVJ.cjs.map +0 -1
- package/dist/chunk-AXTWKF5X.cjs +0 -38
- package/dist/chunk-AXTWKF5X.cjs.map +0 -1
- package/dist/chunk-GULZD7XW.js +0 -709
- package/dist/chunk-GULZD7XW.js.map +0 -1
- package/dist/chunk-HN66DF4E.cjs +0 -2024
- package/dist/chunk-HN66DF4E.cjs.map +0 -1
- package/dist/chunk-KL2XT2TV.cjs.map +0 -1
- package/dist/chunk-MJ4ML56F.js +0 -1994
- package/dist/chunk-MJ4ML56F.js.map +0 -1
- package/dist/chunk-P5OJUH25.cjs +0 -81
- package/dist/chunk-P5OJUH25.cjs.map +0 -1
- package/dist/chunk-UKU4RIWM.cjs +0 -32
- package/dist/chunk-UKU4RIWM.cjs.map +0 -1
- package/dist/chunk-ZOPJB5FN.cjs +0 -369
- package/dist/chunk-ZOPJB5FN.cjs.map +0 -1
- package/dist/data/index.cjs +0 -40
- package/dist/data/index.cjs.map +0 -1
- package/dist/entity/index.cjs +0 -28
- package/dist/entity/index.cjs.map +0 -1
- package/dist/i18n/index.cjs +0 -44
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/shell-translations.d.ts +0 -2
- package/dist/i18n/shell-translations.d.ts.map +0 -1
- package/dist/index.cjs +0 -2450
- package/dist/index.cjs.map +0 -1
- package/dist/integrations/index.cjs +0 -12
- package/dist/integrations/index.cjs.map +0 -1
- package/dist/plugin/index.cjs +0 -32
- package/dist/plugin/index.cjs.map +0 -1
- package/dist/router/index.cjs +0 -16
- package/dist/router/index.cjs.map +0 -1
- package/dist/runtime/index.cjs +0 -16
- package/dist/runtime/index.cjs.map +0 -1
- package/dist/testing/index.cjs +0 -20
- package/dist/testing/index.cjs.map +0 -1
- package/dist/types/index.cjs +0 -4
- package/dist/types/index.cjs.map +0 -1
- package/src/i18n/shell-translations.ts +0 -1752
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/shell-translations.pt-br.ts"],"names":[],"mappings":"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","file":"shell-translations.pt-br-2GWRQRRP.js","sourcesContent":["// Shared shell/CRUD/framework translations — pt-BR locale.\n// Split per-locale so only the active locale ships in the bundle: 'en' is the\n// eager fallback; other locales load via dynamic import in i18n/index.ts.\nexport const shellTranslationsPtBr: Record<string, string> = {\n \"common.save\": \"Salvar\",\n \"common.saveChanges\": \"Salvar Alterações\",\n \"common.saving\": \"Salvando...\",\n \"common.cancel\": \"Cancelar\",\n \"common.delete\": \"Excluir\",\n \"common.edit\": \"Editar\",\n \"common.close\": \"Fechar\",\n \"common.confirm\": \"Confirmar\",\n \"common.back\": \"Voltar\",\n \"common.add\": \"Adicionar\",\n \"common.loading\": \"Carregando...\",\n \"common.error\": \"Algo deu errado\",\n \"common.noResults\": \"Nenhum resultado encontrado.\",\n \"common.search\": \"Buscar\",\n \"common.actions\": \"Ações\",\n \"common.continue\": \"Continuar\",\n \"common.done\": \"Pronto\",\n \"common.yes\": \"Sim\",\n \"common.no\": \"Não\",\n \"common.active\": \"Ativo\",\n \"common.inactive\": \"Inativo\",\n \"common.overview\": \"Visão Geral\",\n \"common.notFound\": \"Não Encontrado\",\n \"common.untitled\": \"Sem título\",\n \"common.noContentYet\": \"Nenhum conteúdo ainda\",\n \"common.selectDate\": \"Selecionar data\",\n \"common.plugins\": \"Plugins\",\n \"auth.login.title\": \"Entrar\",\n \"auth.login.titleCentered\": \"Bem-vindo de Volta\",\n \"auth.login.subtitle\": \"Insira suas credenciais para acessar sua conta\",\n \"auth.login.emailLabel\": \"E-mail\",\n \"auth.login.emailPlaceholder\": \"voce@exemplo.com\",\n \"auth.login.passwordLabel\": \"Senha\",\n \"auth.login.passwordPlaceholder\": \"Digite sua senha\",\n \"auth.login.forgotPassword\": \"Esqueceu a senha?\",\n \"auth.login.submit\": \"Entrar\",\n \"auth.login.submitting\": \"Entrando...\",\n \"auth.login.error\": \"Falha ao entrar. Tente novamente.\",\n \"auth.login.oauthDivider\": \"ou continue com\",\n \"auth.login.noAccount\": \"Não tem uma conta?\",\n \"auth.login.noAccountCentered\": \"Ainda não tem uma conta?\",\n \"auth.login.signUpLink\": \"Cadastre-se\",\n \"auth.login.socialProof\": \"Junte-se a milhares de empresas que já usam {{appName}}\",\n \"auth.signup.title\": \"Criar conta\",\n \"auth.signup.titleCentered\": \"Criar Conta\",\n \"auth.signup.subtitle\": \"Comece com sua nova conta\",\n \"auth.signup.nameLabel\": \"Nome completo\",\n \"auth.signup.namePlaceholder\": \"João Silva\",\n \"auth.signup.emailLabel\": \"E-mail\",\n \"auth.signup.emailPlaceholder\": \"voce@exemplo.com\",\n \"auth.signup.passwordLabel\": \"Senha\",\n \"auth.signup.passwordPlaceholder\": \"Pelo menos 8 caracteres\",\n \"auth.signup.confirmPasswordLabel\": \"Confirmar senha\",\n \"auth.signup.confirmPasswordPlaceholder\": \"Repita sua senha\",\n \"auth.signup.termsPrefix\": \"Ao criar uma conta, você concorda com nossos\",\n \"auth.signup.termsOfService\": \"Termos de Serviço\",\n \"auth.signup.privacyPolicy\": \"Política de Privacidade\",\n \"auth.signup.submit\": \"Criar conta\",\n \"auth.signup.submitting\": \"Criando conta...\",\n \"auth.signup.error\": \"Falha ao criar conta. Tente novamente.\",\n \"auth.signup.passwordMismatch\": \"As senhas não conferem.\",\n \"auth.signup.passwordTooShort\": \"A senha deve ter pelo menos 8 caracteres.\",\n \"auth.signup.success\": \"Conta criada para {{email}}. Verifique sua caixa de entrada para confirmar seu e-mail.\",\n \"auth.signup.hasAccount\": \"Já tem uma conta?\",\n \"auth.signup.signInLink\": \"Entrar\",\n \"auth.recovery.title\": \"Redefinir senha\",\n \"auth.recovery.titleCentered\": \"Redefinir Senha\",\n \"auth.recovery.instruction\": \"Insira seu e-mail e enviaremos um link para redefinir sua senha.\",\n \"auth.recovery.subtitle\": \"Enviaremos um link de redefinição\",\n \"auth.recovery.emailLabel\": \"E-mail\",\n \"auth.recovery.emailPlaceholder\": \"voce@exemplo.com\",\n \"auth.recovery.submit\": \"Enviar link\",\n \"auth.recovery.submitting\": \"Enviando...\",\n \"auth.recovery.error\": \"Falha ao enviar e-mail. Tente novamente.\",\n \"auth.recovery.successHeading\": \"Verifique seu e-mail\",\n \"auth.recovery.successMessage\": \"Enviamos um link de redefinição para {{email}}. Verifique sua caixa de entrada e siga as instruções.\",\n \"auth.recovery.backToLogin\": \"Voltar ao login\",\n \"auth.oauth.continueWith\": \"Continuar com {{provider}}\",\n \"auth.signIn\": \"Entrar\",\n \"auth.signUp\": \"Cadastrar\",\n \"auth.signOut\": \"Sair\",\n \"auth.email\": \"E-mail\",\n \"auth.password\": \"Senha\",\n \"auth.forgotPassword\": \"Esqueceu a Senha?\",\n \"crud.list.empty\": \"Nenhum(a) {{entities}} ainda\",\n \"crud.list.addFirst\": \"Adicione seu(sua) primeiro(a) {{entity}}\",\n \"crud.list.totalCount\": \"{{count}} {{entities}} no total\",\n \"crud.list.searchPlaceholder\": \"Buscar {{entities}}...\",\n \"crud.list.allFacet\": \"Todos\",\n \"crud.list.addButton\": \"+ Adicionar {{entity}}\",\n \"crud.detail.notFound\": \"{{entity}} não encontrado(a).\",\n \"crud.detail.backTo\": \"Voltar para {{entities}}\",\n \"crud.form.addTitle\": \"Adicionar {{entity}}\",\n \"crud.form.editTitle\": \"Editar {{entity}}\",\n \"crud.form.createSubtitle\": \"Criar um(a) novo(a) {{entity}}.\",\n \"crud.form.editSubtitle\": \"Atualizar detalhes de {{entity}}.\",\n \"crud.form.newBreadcrumb\": \"Novo(a) {{entity}}\",\n \"crud.form.selectPlaceholder\": \"Selecione {{label}}...\",\n \"crud.form.saveError\": \"Falha ao salvar {{entity}}\",\n \"crud.form.saving\": \"Salvando...\",\n \"crud.delete.title\": \"Excluir {{entity}}?\",\n \"crud.delete.confirmNamed\": \"Tem certeza que deseja excluir \\\"{{displayValue}}\\\"? Esta ação não pode ser desfeita.\",\n \"crud.delete.confirmGeneric\": \"Tem certeza que deseja excluir este(a) {{entity}}? Esta ação não pode ser desfeita.\",\n \"crud.delete.cancel\": \"Cancelar\",\n \"crud.delete.delete\": \"Excluir\",\n \"crud.tabs.access\": \"Acesso\",\n \"crud.tabs.schedule\": \"Agenda\",\n \"crud.tabs.documents\": \"Documentos\",\n \"crud.tabs.financial\": \"Extrato\",\n \"crud.tabs.activity\": \"Atividade\",\n \"crud.tabs.inventory\": \"Estoque\",\n \"crud.tabs.suppliers\": \"Fornecedores\",\n \"crud.tabs.pricing\": \"Preços\",\n \"crud.tabs.members\": \"Equipe\",\n \"crud.tabs.stats\": \"Estatísticas\",\n \"crud.tabs.availability\": \"Disponibilidade\",\n \"crud.tabs.orders\": \"Pedidos\",\n \"crud.orders.all\": \"Todos\",\n \"crud.orders.columnDate\": \"Data\",\n \"crud.orders.columnStage\": \"Etapa\",\n \"crud.orders.columnDescription\": \"Descrição\",\n \"crud.orders.columnAmount\": \"Valor\",\n \"crud.orders.searchPlaceholder\": \"Buscar pedidos...\",\n \"crud.orders.noDocuments\": \"Nenhum pedido ainda\",\n \"crud.orders.stage.draft\": \"Rascunho\",\n \"crud.orders.stage.quoted\": \"Orçado\",\n \"crud.orders.stage.booked\": \"Agendado\",\n \"crud.orders.stage.invoiced\": \"Faturado\",\n \"crud.orders.stage.paid\": \"Pago\",\n \"crud.orders.stage.partial\": \"Parcial\",\n \"crud.orders.stage.overdue\": \"Vencido\",\n \"crud.orders.stage.cancelled\": \"Cancelado\",\n \"crud.orders.stage.no_show\": \"Não Compareceu\",\n \"crud.orders.stage.completed\": \"Concluído\",\n \"layout.userMenu.profile\": \"Perfil\",\n \"layout.userMenu.settings\": \"Configurações\",\n \"layout.userMenu.billing\": \"Faturamento\",\n \"layout.userMenu.help\": \"Ajuda\",\n \"layout.userMenu.lightMode\": \"Modo claro\",\n \"layout.userMenu.darkMode\": \"Modo escuro\",\n \"layout.userMenu.systemMode\": \"Sistema\",\n \"layout.userMenu.language\": \"Idioma\",\n \"layout.userMenu.selectLocation\": \"Selecionar local\",\n \"layout.switchingLocation\": \"Trocando de local…\",\n \"layout.userMenu.signOut\": \"Sair\",\n \"layout.topbar.searchPlaceholder\": \"Buscar...\",\n \"layout.sidebar.collapse\": \"Recolher barra lateral\",\n \"layout.sidebar.expand\": \"Expandir barra lateral\",\n \"layout.commandPalette.placeholder\": \"Buscar páginas, pessoas, produtos, serviços...\",\n \"layout.commandPalette.resultsCount\": \"{{count}} resultado{{plural}}\",\n \"layout.commandPalette.noResults\": \"Nenhum resultado encontrado.\",\n \"layout.commandPalette.searching\": \"Buscando…\",\n \"billing.title\": \"Faturamento\",\n \"billing.subtitle\": \"Gerencie sua assinatura e faturamento.\",\n \"billing.currentPlan\": \"Plano Atual\",\n \"billing.subscription.title\": \"Assinatura\",\n \"billing.subscription.subtitle\": \"Gerencie seu plano e desbloqueie mais recursos.\",\n \"billing.changeToPlan\": \"Mudar para este plano\",\n \"billing.featureMatrix\": \"Comparativo de recursos\",\n \"billing.changePlanConfirmTitle\": \"Mudar de plano?\",\n \"billing.changePlanConfirmBody\": \"Você está mudando para o plano {{plan}}.\",\n \"billing.changePlanConfirm\": \"Mudar de plano\",\n \"billing.planChanged\": \"Agora você está no plano {{plan}}.\",\n \"billing.planChangeFailed\": \"Não foi possível mudar seu plano. Tente novamente.\",\n \"billing.noPlans\": \"Nenhum plano configurado.\",\n \"billing.pro\": \"Pro\",\n \"billing.upgrade\": \"Fazer Upgrade\",\n \"billing.downgrade\": \"Fazer Downgrade\",\n \"billing.monthly\": \"Mensal\",\n \"billing.yearly\": \"Anual\",\n \"billing.yearlySave\": \"Economize 20%\",\n \"billing.free\": \"Gratuito\",\n \"billing.cancelSubscription\": \"Cancelar Assinatura\",\n \"billing.canceling\": \"Cancelando...\",\n \"billing.resumeSubscription\": \"Retomar Assinatura\",\n \"billing.resuming\": \"Retomando...\",\n \"billing.features\": \"Recursos\",\n \"billing.perMonth\": \"/mês\",\n \"billing.perYear\": \"/ano\",\n \"billing.getStarted\": \"Começar\",\n \"billing.processing\": \"Processando...\",\n \"billing.mostPopular\": \"Mais Popular\",\n \"billing.nextBilling\": \"Próxima cobrança: {{date}}\",\n \"billing.cancelsOn\": \"Cancela em {{date}}\",\n \"billing.trialEnds\": \"Período de teste termina em {{date}}\",\n \"billing.pastDueWarning\": \"Seu pagamento está atrasado. Atualize seu método de pagamento para evitar interrupção do serviço.\",\n \"billing.status.active\": \"Ativo\",\n \"billing.status.trialing\": \"Período de Teste\",\n \"billing.status.pastDue\": \"Atrasado\",\n \"billing.status.canceled\": \"Cancelado\",\n \"billing.status.paused\": \"Pausado\",\n \"organization.invite\": \"Convidar\",\n \"organization.members\": \"Membros\",\n \"organization.memberCount\": \"{{count}} membro{{plural}} nesta organização.\",\n \"organization.role\": \"Função\",\n \"organization.emailPlaceholder\": \"equipe@exemplo.com\",\n \"organization.sendInvites\": \"Enviar Convites\",\n \"organization.sending\": \"Enviando...\",\n \"organization.pending\": \"Convites Pendentes\",\n \"organization.remove\": \"Remover membro\",\n \"organization.resend\": \"Reenviar\",\n \"organization.revoke\": \"Revogar\",\n \"organization.inviteTitle\": \"Convidar Membros da Equipe\",\n \"organization.inviteDescription\": \"Envie convites para entrar na sua organização.\",\n \"organization.inviteSent\": \"Convites enviados\",\n \"organization.inviteSentDescription\": \"Seus membros receberão um e-mail com instruções para entrar.\",\n \"organization.emailAddresses\": \"Endereços de e-mail\",\n \"organization.addAnother\": \"Adicionar outro\",\n \"organization.selectRole\": \"Selecione uma função\",\n \"organization.you\": \"(você)\",\n \"organization.joined\": \"Entrou\",\n \"organization.onboarding.title\": \"Configure seu espaço de trabalho\",\n \"organization.onboarding.namePrompt\": \"Como devemos chamar seu espaço de trabalho?\",\n \"organization.onboarding.preferencesPrompt\": \"Preferências regionais\",\n \"organization.onboarding.workspaceName\": \"Nome do espaço de trabalho\",\n \"organization.onboarding.workspaceNamePlaceholder\": \"Minha Empresa\",\n \"organization.onboarding.timezone\": \"Fuso horário\",\n \"organization.onboarding.currency\": \"Moeda\",\n \"organization.onboarding.creating\": \"Configurando seu espaço de trabalho\",\n \"organization.onboarding.creatingDescription\": \"Isso levará apenas um momento...\",\n \"organization.onboarding.createWorkspace\": \"Criar Espaço de Trabalho\",\n \"settings.title\": \"Configurações\",\n \"settings.subtitle\": \"Gerencie sua conta e preferências da organização.\",\n \"settings.backToHome\": \"Voltar para o início\",\n \"settings.navLinks\": \"Links de configuração\",\n \"settings.general\": \"Geral\",\n \"settings.properties\": \"Propriedades\",\n \"settings.profile\": \"Perfil\",\n \"settings.branding\": \"Marca\",\n \"settings.security\": \"Segurança\",\n \"settings.sites\": \"Sites\",\n \"settings.connectors\": \"Conectores\",\n \"settings.subscription\": \"Assinatura\",\n \"upgrade.title\": \"Recurso premium\",\n \"upgrade.description\": \"Este recurso está disponível em um plano superior. Faça upgrade para liberá-lo.\",\n \"upgrade.descriptionFeature\": \"O recurso {feature} está disponível em um plano superior. Faça upgrade para liberá-lo.\",\n \"contactPicker.search\": \"Buscar contato...\",\n \"contactPicker.newContact\": \"Novo contato\",\n \"contactPicker.name\": \"Nome\",\n \"contactPicker.phone\": \"Telefone\",\n \"contactPicker.emailOptional\": \"E-mail (opcional)\",\n \"contactPicker.create\": \"Cadastrar\",\n \"contactPicker.creating\": \"Cadastrando...\",\n \"contactPicker.cancel\": \"Cancelar\",\n \"contactPicker.clear\": \"Remover contato\",\n \"contactPicker.createFailed\": \"Não foi possível cadastrar o contato\",\n \"contactPicker.addField\": \"Adicionar {label}\",\n \"upgrade.includes\": \"Inclui {feature}\",\n \"upgrade.cta\": \"Ver planos\",\n \"upgrade.badgeTooltip\": \"Disponível em um plano superior\",\n \"upgrade.unlock\": \"Desbloqueie {feature}\",\n \"upgrade.currentPlan\": \"Seu plano: {plan}\",\n \"upgrade.recommended\": \"Recomendado\",\n \"upgrade.ctaUpgrade\": \"Fazer upgrade\",\n \"upgrade.ctaUpgradeTo\": \"Fazer upgrade para {plan}\",\n \"upgrade.compareAll\": \"Comparar todos os planos\",\n \"upgrade.valueGeneric\": \"Tudo o que você precisa para crescer — incluso nos planos abaixo.\",\n \"upgrade.value.marketing\": \"Campanhas, funil e conteúdo para crescer sua base de clientes.\",\n \"upgrade.value.reports\": \"Relatórios avançados e insights para decidir com mais precisão.\",\n \"upgrade.value.fin_reconciliation\": \"Concilie pagamentos e mantenha seu fluxo de caixa sob controle.\",\n \"upgrade.value.assistant\": \"Seu copiloto de operações — pergunte, analise e aja com IA.\",\n \"upgrade.feature.assistant\": \"Assistente de IA\",\n \"billing.unlimited\": \"Ilimitado\",\n \"billing.upTo\": \"Até {count}\",\n \"limit.label.clients\": \"clientes\",\n \"limit.label.users\": \"membros da equipe\",\n \"limit.label.locations\": \"locais\",\n \"limit.label.bookings_month\": \"agendamentos mensais\",\n \"limit.label.leads\": \"leads\",\n \"limit.label.quotes\": \"orçamentos\",\n \"limit.label.conversations_month\": \"conversas mensais\",\n \"limit.label.ai_credits_month\": \"créditos de IA por mês\",\n \"limit.label.recipes\": \"receitas\",\n \"limit.label.form_templates\": \"modelos de formulário\",\n \"limit.label.documents_month\": \"documentos mensais\",\n \"limit.label.content_posts_month\": \"posts de conteúdo mensais\",\n \"limit.label.blog_posts\": \"posts de blog\",\n \"limit.label.products\": \"produtos\",\n \"limit.label.students\": \"alunos\",\n \"limit.label.courses\": \"cursos\",\n \"limit.label.contacts\": \"contatos\",\n \"limit.label.deals\": \"negócios\",\n \"limit.label.menu_items\": \"itens do cardápio\",\n \"limit.label.orders_month\": \"pedidos mensais\",\n \"limit.label.connected_banks\": \"bancos conectados\",\n \"limit.label.movements_month\": \"movimentações mensais\",\n \"settings.team\": \"Equipe\",\n \"settings.permissions\": \"Permissões\",\n \"settings.locations\": \"Locais\",\n \"settings.holidays\": \"Feriados\",\n \"settings.fieldRules\": \"Regras de Campos\",\n \"settings.notifications\": \"Notificações\",\n \"settings.save\": \"Salvar Alterações\",\n \"settings.saving\": \"Salvando...\",\n \"settings.companyInfo\": \"Informações da Empresa\",\n \"settings.companyInfoDescription\": \"Atualize os dados da sua organização e preferências regionais.\",\n \"settings.companyName\": \"Nome da Empresa\",\n \"settings.companyNamePlaceholder\": \"Minha Empresa LTDA\",\n \"settings.timezone\": \"Fuso Horário\",\n \"settings.timezonePlaceholder\": \"Selecione o fuso horário\",\n \"settings.currency\": \"Moeda\",\n \"settings.currencyPlaceholder\": \"Selecione a moeda\",\n \"settings.locale\": \"Idioma\",\n \"settings.localePlaceholder\": \"Selecione o idioma\",\n \"settings.uploadLogo\": \"Enviar Logo\",\n \"settings.uiLanguage\": \"Idioma da Interface\",\n \"settings.uiLanguageDescription\": \"Escolha o idioma da interface. Aplica-se apenas à sua sessão.\",\n \"notifications.title\": \"Notificações\",\n \"notifications.markAllRead\": \"Marcar todas como lidas\",\n \"notifications.empty\": \"Sem notificações\",\n \"notifications.whatsNew\": \"Novidades\",\n \"notifications.inbox\": \"Caixa de Entrada\",\n \"app.notFound.title\": \"404\",\n \"app.notFound.heading\": \"Página não encontrada\",\n \"app.notFound.message\": \"A página que você procura não existe ou foi movida.\",\n \"app.notFound.goToDashboard\": \"Ir para o Painel\",\n \"app.accessDenied.heading\": \"Acesso Negado\",\n \"app.accessDenied.message\": \"Você não tem permissão para acessar esta página.\",\n \"shell.accessDenied.title\": \"Acesso restrito\",\n \"shell.accessDenied.message\": \"Você não tem permissão para acessar esta página.\",\n \"organization.workspaces\": \"Áreas de trabalho\",\n \"organization.onlyWorkspace\": \"Esta é a sua única área de trabalho.\",\n \"crud.form.requiredIndicator\": \"*\",\n \"crud.form.createDescription\": \"Criar um(a) novo(a) {{entity}}.\",\n \"crud.form.editDescription\": \"Atualizar detalhes de {{entity}}.\",\n \"crud.form.failedToSave\": \"Falha ao salvar {{entity}}\",\n \"crud.form.saveChanges\": \"Salvar Alterações\",\n \"crud.form.select\": \"Selecione {{field}}...\",\n \"crud.list.addEntity\": \"+ Adicionar {{entity}}\",\n \"crud.list.search\": \"Buscar {{entities}}...\",\n \"crud.import.action\": \"Importar\",\n \"crud.import.title\": \"Importar {{entity}}\",\n \"crud.import.step.download\": \"Modelo\",\n \"crud.import.step.upload\": \"Upload\",\n \"crud.import.step.mapping\": \"Mapeamento\",\n \"crud.import.step.importing\": \"Importar\",\n \"crud.import.downloadTitle\": \"Baixe o modelo\",\n \"crud.import.downloadDescription\": \"Baixe um modelo CSV com todos os campos disponíveis para {{entity}}. Preencha e envie no próximo passo.\",\n \"crud.import.downloadTemplate\": \"Baixar modelo CSV\",\n \"crud.import.downloadHint\": \"{{count}} campos disponíveis\",\n \"crud.import.alreadyHaveFile\": \"Já tenho um arquivo\",\n \"crud.import.uploadTitle\": \"Arraste seu arquivo CSV aqui ou clique para buscar\",\n \"crud.import.uploadHint\": \"Apenas arquivos .csv são aceitos\",\n \"crud.import.invalidFile\": \"Envie um arquivo .csv.\",\n \"crud.import.emptyFile\": \"O arquivo parece estar vazio.\",\n \"crud.import.noRows\": \"O arquivo tem cabeçalho mas nenhuma linha de dados.\",\n \"crud.import.mappingTitle\": \"Mapeie suas colunas\",\n \"crud.import.mappingDescription\": \"{{file}} — {{columns}} colunas, {{rows}} linhas\",\n \"crud.import.mappedCount\": \"{{count}} de {{total}} mapeados\",\n \"crud.import.csvColumn\": \"Coluna CSV\",\n \"crud.import.mapsTo\": \"Mapeia para\",\n \"crud.import.preview\": \"Prévia\",\n \"crud.import.skip\": \"— Ignorar esta coluna\",\n \"crud.import.startImport\": \"Iniciar importação\",\n \"crud.import.importing\": \"Importando...\",\n \"crud.import.importingHint\": \"Processando {{count}} linhas\",\n \"crud.import.progressCount\": \"{{processed}} de {{total}} linhas processadas\",\n \"crud.import.doneSuccess\": \"Importação concluída!\",\n \"crud.import.doneWithErrors\": \"Importação concluída com erros\",\n \"crud.import.doneCount\": \"{{success}} de {{total}} linhas importadas com sucesso\",\n \"crud.import.rowNumber\": \"Linha {{row}}:\",\n \"crud.import.toastSuccess\": \"{{count}} registros importados\",\n \"crud.import.noConnection\": \"Sem conexão com o banco de dados. A importação requer uma conexão ativa.\",\n \"crud.import.limitExceeded\": \"Esta importação excede o limite do seu plano. Faça upgrade ou importe menos linhas.\",\n \"crud.export.action\": \"Exportar\",\n \"crud.export.noData\": \"Sem dados para exportar.\",\n \"crud.export.toastSuccess\": \"{{count}} registros exportados\",\n \"layout.topbar.keyboardShortcut\": \"⌘K\",\n \"layout.topbar.search\": \"Buscar...\",\n \"layout.commandPalette.commandsCount\": \"{{count}} comando{{plural}}\",\n \"layout.commandPalette.navigate\": \"navegar\",\n \"layout.commandPalette.open\": \"abrir\",\n \"layout.commandPalette.commandCount\": \"{{count}} comando{{plural}}\",\n \"layout.commandPalette.description\": \"Buscar páginas, ações, pessoas, produtos e serviços\",\n \"layout.commandPalette.resultCount\": \"{{count}} resultado{{plural}}\",\n \"layout.commandPalette.title\": \"Paleta de comandos\",\n \"layout.bottomNav.chat\": \"Chat\",\n \"layout.mobileDrawer.description\": \"Links de navegação do aplicativo\",\n \"layout.mobileDrawer.title\": \"Menu de navegação\",\n \"organization.sent\": \"Enviado {{date}}\",\n \"organization.failedInvites\": \"Falha ao enviar convites\",\n \"organization.onboarding.failedCreate\": \"Falha ao criar espaço de trabalho\",\n \"organization.createOrg\": \"Criar organização\",\n \"organization.createOrgDescription\": \"Crie um novo espaço de trabalho para sua equipe.\",\n \"organization.createOrgTitle\": \"Criar Organização\",\n \"organization.creating\": \"Criando...\",\n \"organization.orgNamePlaceholder\": \"Nome da organização\",\n \"organization.onboarding.oneMoment\": \"Isso levará apenas um momento...\",\n \"organization.onboarding.preferences\": \"Preferências regionais\",\n \"organization.onboarding.settingUp\": \"Configurando seu espaço de trabalho\",\n \"organization.onboarding.setupWorkspace\": \"Configure seu espaço de trabalho\",\n \"organization.onboarding.whatName\": \"Como devemos chamar seu espaço de trabalho?\",\n \"organization.invite.addAnother\": \"Adicionar outro\",\n \"organization.invite.description\": \"Envie convites para entrar na sua organização.\",\n \"organization.invite.emailLabel\": \"Endereços de e-mail\",\n \"organization.invite.roleLabel\": \"Função\",\n \"organization.invite.rolePlaceholder\": \"Selecione uma função\",\n \"organization.invite.sendInvites\": \"Enviar Convites\",\n \"organization.invite.sending\": \"Enviando...\",\n \"organization.invite.sent\": \"Convites enviados\",\n \"organization.invite.sentDescription\": \"Seus membros receberão um e-mail com instruções para entrar.\",\n \"organization.invite.title\": \"Convidar Membros da Equipe\",\n \"organization.permissions.createCustom\": \"Criar Perfil Personalizado\",\n \"organization.permissions.createProfile\": \"Criar Perfil\",\n \"organization.permissions.duplicate\": \"Duplicar\",\n \"organization.permissions.copyName\": \"{{name}} (cópia)\",\n \"organization.permissions.description\": \"Descrição\",\n \"organization.permissions.descriptionPlaceholder\": \"Descrição opcional\",\n \"organization.permissions.editProfile\": \"Editar: {{name}}\",\n \"organization.permissions.manageBilling\": \"Gerenciar Faturamento\",\n \"organization.permissions.managePermissions\": \"Gerenciar Permissões\",\n \"organization.permissions.manageSettings\": \"Gerenciar Configurações\",\n \"organization.permissions.manageTeam\": \"Gerenciar Equipe\",\n \"organization.permissions.memberCount\": \"{{count}} membro{{plural}}\",\n \"organization.permissions.previewAs\": \"Visualizar como\",\n \"organization.permissions.previewingAs\": \"Visualizando como\",\n \"organization.permissions.exitPreview\": \"Sair da Visualização\",\n \"organization.permissions.searchFeatures\": \"Buscar recursos...\",\n \"organization.permissions.profileName\": \"Nome do Perfil\",\n \"organization.permissions.profileNamePlaceholder\": \"ex.: Função Personalizada\",\n \"organization.permissions.subtitle\": \"Gerencie funções e suas permissões.\",\n \"organization.permissions.system\": \"Sistema\",\n \"organization.permissions.systemPermissions\": \"Permissões do Sistema\",\n \"organization.permissions.title\": \"Perfis de Permissão\",\n \"organization.permissions.updateProfile\": \"Atualizar Perfil\",\n \"organization.team.invite\": \"Convidar\",\n \"organization.team.joined\": \"Entrou\",\n \"organization.team.member\": \"Membro\",\n \"organization.team.memberCount\": \"{{count}} membro{{plural}} nesta organização.\",\n \"organization.team.pendingInvites\": \"Convites Pendentes\",\n \"organization.team.removeMember\": \"Remover membro\",\n \"organization.team.resend\": \"Reenviar\",\n \"organization.team.revoke\": \"Revogar\",\n \"organization.team.inviteResent\": \"Convite reenviado\",\n \"organization.team.inviteRevoked\": \"Convite revogado\",\n \"organization.team.inviteActionFailed\": \"Não foi possível concluir\",\n \"organization.team.role\": \"Função\",\n \"organization.team.sent\": \"Enviado {{date}}\",\n \"organization.team.title\": \"Membros\",\n \"organization.team.you\": \"(você)\",\n \"user.profile\": \"Perfil\",\n \"user.settings\": \"Configurações\",\n \"user.help\": \"Ajuda\",\n \"user.shortcuts\": \"Atalhos de Teclado\",\n \"user.theme\": \"Tema\",\n \"user.themeLight\": \"Claro\",\n \"user.themeDark\": \"Escuro\",\n \"user.themeSystem\": \"Sistema\",\n \"notifications.noUpdates\": \"Nenhuma atualização ainda\",\n \"common.create\": \"Criar\",\n \"common.feature\": \"Recurso\",\n \"common.message\": \"Mensagem...\",\n \"common.more\": \"Mais\",\n \"common.noContent\": \"Nenhum conteúdo ainda\",\n \"chat.defaultTitle\": \"Assistente\",\n \"chat.tryAsking\": \"Experimente perguntar\",\n \"chat.fab.tryIt\": \"Experimente\",\n \"chat.fab.dismiss\": \"Não mostrar sugestões aqui\",\n \"chat.fab.open\": \"Abrir assistente\",\n \"chat.fab.close\": \"Fechar assistente\",\n \"chat.messagePlaceholder\": \"Como posso ajudar?\",\n \"chat.send\": \"Enviar mensagem\",\n \"chat.notConfigured\": \"Assistente não configurado — defina chat.apiEndpoint para habilitar conversas.\",\n \"chat.unavailable\": \"Assistente indisponível\",\n \"chat.greeting\": \"Como posso ajudar?\",\n \"chat.greetingNamed\": \"Oi {{name}}, como posso ajudar?\",\n \"chat.greetingHint\": \"Peça com suas palavras, ou toque no microfone e fale.\",\n \"chat.status.ready\": \"Pronto\",\n \"chat.status.working\": \"Trabalhando nisso...\",\n \"chat.status.offline\": \"Sem conexão\",\n \"chat.jumpToLatest\": \"Ir para o fim\",\n \"chat.confirmAction.title\": \"Confirmar esta ação?\",\n \"chat.confirmAction.confirm\": \"Confirmar\",\n \"chat.confirmAction.cancel\": \"Cancelar\",\n \"chat.confirmAction.always\": \"Sempre permitir\",\n \"chat.confirmAction.alwaysSession\": \"Permitir nesta sessão\",\n \"chat.confirmAction.alwaysHint\": \"Parar de perguntar antes de \\\"{{label}}\\\"\",\n \"chat.confirmAction.autoApproved\": \"auto\",\n \"chat.confirmAction.autoApprovedHint\": \"Executado sem perguntar — você liberou esta ação\",\n \"chat.confirmAction.blocked\": \"Responda a confirmação acima primeiro\",\n \"chat.confirmAction.fillRequired\": \"Preencha para continuar: {{fields}}\",\n \"chat.confirmAction.showAll\": \"Preencher mais campos ({{count}})\",\n \"chat.confirmAction.showLess\": \"Mostrar menos campos\",\n \"chat.tool.createAppointment\": \"Marcar horário\",\n \"chat.tool.createRecord\": \"Criar registro\",\n \"chat.tool.updateRecord\": \"Atualizar registro\",\n \"chat.tool.deleteRecord\": \"Excluir registro\",\n \"chat.tool.createOrder\": \"Criar pedido\",\n \"chat.tool.createInvoice\": \"Emitir cobrança\",\n \"chat.tool.markPaymentReceived\": \"Marcar pagamento como recebido\",\n \"chat.tool.createCampaign\": \"Criar campanha\",\n \"chat.tool.sendMessage\": \"Enviar mensagem\",\n \"chat.tool.seatGuests\": \"Acomodar clientes\",\n \"chat.tool.toggleMenuItemAvailability\": \"Alterar disponibilidade do item\",\n \"chat.autoApprovals.title\": \"Ações liberadas\",\n \"chat.autoApprovals.revoke\": \"Voltar a perguntar\",\n \"chat.autoApprovals.revokeAll\": \"Perguntar sempre\",\n \"chat.suggestions.show\": \"Mostrar sugestões\",\n \"chat.suggestions.hide\": \"Ocultar sugestões\",\n \"chat.voice.start\": \"Falar\",\n \"chat.voice.stop\": \"Parar gravação\",\n \"chat.voice.listening\": \"Ouvindo — pode falar\",\n \"chat.voice.transcribing\": \"Transcrevendo...\",\n \"chat.voice.denied\": \"Microfone bloqueado. Libere o acesso nas configurações do navegador.\",\n \"chat.voice.network\": \"Não consegui falar com o serviço de transcrição.\",\n \"chat.voice.failed\": \"Não consegui entender — tente de novo.\",\n \"chat.voice.speakOn\": \"Responder em voz alta\",\n \"chat.voice.speakOff\": \"Silenciar respostas faladas\",\n \"chat.signingIn\": \"Um instante — ainda estou confirmando sua sessão.\",\n \"chat.history\": \"Conversas anteriores\",\n \"chat.history.search\": \"Buscar conversas\",\n \"chat.history.empty\": \"Nenhuma conversa encontrada.\",\n \"chat.history.today\": \"Hoje\",\n \"chat.history.yesterday\": \"Ontem\",\n \"chat.history.week\": \"Últimos 7 dias\",\n \"chat.history.older\": \"Mais antigas\",\n \"chat.newConversation\": \"Nova conversa\",\n \"chat.untitledConversation\": \"Conversa sem título\",\n \"chat.recentConversations\": \"Recentes\",\n \"chat.backToConversations\": \"Voltar para as conversas\",\n \"chat.renameConversation\": \"Renomear\",\n \"chat.saveTitle\": \"Salvar título\",\n \"chat.toolsAvailable\": \"{{count}} ferramentas disponíveis\",\n \"chat.suggestion.dashboard.kpi-summary.0\": \"Como está meu negócio hoje?\",\n \"chat.suggestion.dashboard.kpi-summary.1\": \"Qual o faturamento de hoje?\",\n \"chat.suggestion.dashboard.kpi-summary.2\": \"Me dê um resumo do dia\",\n \"chat.suggestion.agenda.list-appointments.0\": \"O que tem na agenda hoje?\",\n \"chat.suggestion.agenda.list-appointments.1\": \"Mostre os agendamentos de amanhã\",\n \"chat.suggestion.agenda.list-appointments.2\": \"Quem tem mais atendimentos esta semana?\",\n \"chat.suggestion.agenda.create-appointment.0\": \"Agende um corte para Sarah amanhã às 10h\",\n \"chat.suggestion.agenda.check-availability.0\": \"Quando Ana está disponível amanhã?\",\n \"chat.suggestion.agenda.check-availability.1\": \"Encontre um horário de 90 minutos para Carlos esta semana\",\n \"chat.suggestion.financial.get-revenue.0\": \"Quanto faturamos hoje?\",\n \"chat.suggestion.financial.get-revenue.1\": \"Qual o faturamento deste mês?\",\n \"chat.suggestion.financial.get-revenue.2\": \"Compare o faturamento desta semana com a anterior\",\n \"chat.suggestion.financial.create-invoice.0\": \"Crie uma fatura para um novo cliente\",\n \"chat.suggestion.financial.list-payables.0\": \"Mostre as contas em atraso\",\n \"chat.suggestion.financial.list-payables.1\": \"Quais contas vencem esta semana?\",\n \"chat.suggestion.inventory.low-stock.0\": \"Quais produtos estão com estoque baixo?\",\n \"chat.suggestion.inventory.low-stock.1\": \"Mostre um resumo do estoque\",\n \"chat.suggestion.inventory.low-stock.2\": \"Quais são os produtos mais usados?\",\n \"chat.suggestion.crm.count-customers.0\": \"Quantos clientes temos?\",\n \"chat.suggestion.crm.count-customers.1\": \"Quem são meus melhores clientes?\",\n \"chat.suggestion.crm.list-leads.0\": \"Mostre os leads novos desta semana\",\n \"chat.suggestion.crm.list-leads.1\": \"Quais leads precisam de follow-up?\",\n \"chat.suggestion.crm.list-leads.2\": \"Qual nossa taxa de conversão?\",\n \"chat.suggestion.custom_forms.list-templates.0\": \"Quais formulários temos?\",\n \"chat.suggestion.custom_forms.list-templates.1\": \"Mostre os modelos de anamnese\",\n \"chat.suggestion.custom_forms.list-documents.0\": \"Mostre os documentos deste cliente\",\n \"billing.invoice.amount\": \"Valor\",\n \"billing.invoice.date\": \"Data\",\n \"billing.invoice.invoice\": \"Fatura\",\n \"billing.invoice.noInvoices\": \"Nenhuma fatura ainda\",\n \"billing.invoice.status\": \"Status\",\n \"billing.paywall.notAvailable\": \"Este recurso não está disponível no seu plano atual.\",\n \"billing.paywall.requiresPlan\": \"Este recurso requer o plano {{plan}} ou superior.\",\n \"billing.paywall.upgradeRequired\": \"Upgrade Necessário\",\n \"billing.paywall.viewPlans\": \"Ver Planos\",\n \"auth.login.enterCredentials\": \"Insira suas credenciais para acessar sua conta\",\n \"auth.login.failedDefault\": \"Falha ao entrar. Tente novamente.\",\n \"auth.login.failedWithProvider\": \"Falha ao entrar com {{provider}}.\",\n \"auth.login.orContinueWith\": \"ou continue com\",\n \"auth.login.placeholder.email\": \"voce@exemplo.com\",\n \"auth.login.placeholder.password\": \"Digite sua senha\",\n \"auth.login.signingIn\": \"Entrando...\",\n \"auth.login.welcomeBack\": \"Bem-vindo de Volta\",\n \"auth.login.welcomeTo\": \"Bem-vindo ao {{appName}}\",\n \"auth.recovery.checkEmail\": \"Verifique seu e-mail\",\n \"auth.recovery.description\": \"Insira seu e-mail e enviaremos um link para redefinir sua senha.\",\n \"auth.recovery.failedDefault\": \"Falha ao enviar e-mail. Tente novamente.\",\n \"auth.recovery.resetLinkSent\": \"Enviamos um link de redefinição para <strong>{{email}}</strong>. Verifique sua caixa de entrada e siga as instruções.\",\n \"auth.recovery.sendResetLink\": \"Enviar link de redefinição\",\n \"auth.recovery.sending\": \"Enviando...\",\n \"auth.signup.confirmPassword\": \"Confirmar senha\",\n \"auth.signup.creating\": \"Criando conta...\",\n \"auth.signup.emailVerification\": \"Conta criada para {{email}}. Verifique sua caixa de entrada para confirmar seu e-mail.\",\n \"auth.signup.failedDefault\": \"Falha ao criar conta. Tente novamente.\",\n \"auth.signup.fullName\": \"Nome completo\",\n \"auth.signup.getStarted\": \"Comece com sua nova conta\",\n \"auth.signup.passwordMinLength\": \"A senha deve ter pelo menos 8 caracteres.\",\n \"auth.signup.passwordsMismatch\": \"As senhas não conferem.\",\n \"auth.signup.placeholder.confirm\": \"Repita sua senha\",\n \"auth.signup.placeholder.name\": \"João Silva\",\n \"auth.signup.placeholder.password\": \"Pelo menos 8 caracteres\",\n \"auth.signup.termsAgreement\": \"Ao criar uma conta, você concorda com nossos\",\n \"settings.branding.accentColor\": \"Cor de Destaque\",\n \"settings.branding.chooseFile\": \"Escolher Arquivo\",\n \"settings.branding.favicon\": \"Favicon\",\n \"settings.branding.faviconHint\": \"Recomendado: 32x32px, PNG ou ICO\",\n \"settings.branding.logo\": \"Logo\",\n \"settings.branding.logoHint\": \"Recomendado: 200x50px, PNG ou SVG\",\n \"settings.branding.preview\": \"Pré-visualização\",\n \"settings.branding.primaryColor\": \"Cor Primária\",\n \"settings.branding.saveBranding\": \"Salvar Marca\",\n \"settings.branding.subtitle\": \"Personalize a aparência do seu espaço de trabalho.\",\n \"settings.branding.title\": \"Marca\",\n \"settings.company.currency\": \"Moeda\",\n \"settings.company.currencyPlaceholder\": \"Selecione a moeda\",\n \"settings.company.locale\": \"Idioma\",\n \"settings.company.localePlaceholder\": \"Selecione o idioma\",\n \"settings.company.name\": \"Nome da Empresa\",\n \"settings.company.subtitle\": \"Atualize os dados da sua organização e preferências regionais.\",\n \"settings.company.timezone\": \"Fuso Horário\",\n \"settings.company.timezonePlaceholder\": \"Selecione o fuso horário\",\n \"settings.company.title\": \"Informações da Empresa\",\n \"settings.holidays.addHoliday\": \"Adicionar Feriado\",\n \"settings.holidays.annual\": \"Anual\",\n \"settings.holidays.descriptionPlaceholder\": \"Descrição (opcional)\",\n \"settings.holidays.empty\": \"Nenhum feriado configurado ainda.\",\n \"settings.holidays.namePlaceholder\": \"Nome do feriado *\",\n \"settings.holidays.newHoliday\": \"Novo Feriado\",\n \"settings.holidays.recurringAnnually\": \"Recorrente anualmente\",\n \"settings.holidays.subtitle\": \"Dias não úteis e feriados recorrentes.\",\n \"settings.holidays.title\": \"Feriados\",\n \"settings.fieldRules.subtitle\": \"Configure quais campos são obrigatórios ou visíveis para cada tipo de cadastro.\",\n \"settings.fieldRules.required\": \"Obrigatório\",\n \"settings.fieldRules.inForm\": \"Formulário\",\n \"settings.fieldRules.inTable\": \"Tabela\",\n \"settings.fieldRules.inDetail\": \"Detalhe\",\n \"settings.fieldRules.field\": \"Campo\",\n \"settings.fieldRules.resetDefaults\": \"Restaurar Padrões\",\n \"settings.fieldRules.resetConfirm\": \"Restaurar todas as regras de campos de {{entity}} para seus padrões?\",\n \"settings.fieldRules.saved\": \"Regras de campos salvas\",\n \"settings.fieldRules.saveFailed\": \"Falha ao salvar regras de campos\",\n \"settings.fieldRules.modified\": \"{{count}} modificado(s)\",\n \"settings.fieldRules.searchPlaceholder\": \"Buscar tipos de cadastro...\",\n \"settings.fieldRules.noEntities\": \"Nenhum tipo de cadastro disponível.\",\n \"settings.fieldRules.coreRegisters\": \"Tipos de Cadastro\",\n \"settings.fieldRules.otherRegisters\": \"Outros\",\n \"settings.fieldRules.showMore\": \"{{count}} tipos de cadastro a mais...\",\n \"settings.fieldRules.showLess\": \"Mostrar menos\",\n \"settings.locations.addFirst\": \"Adicione seu primeiro local\",\n \"settings.locations.addLocation\": \"Adicionar Local\",\n \"settings.locations.adding\": \"Adicionando...\",\n \"settings.locations.addressPlaceholder\": \"Endereço\",\n \"settings.locations.cityPlaceholder\": \"Cidade\",\n \"settings.locations.countDescription\": \"{{count}} local{{plural}} cadastrado(s).\",\n \"settings.locations.countryPlaceholder\": \"País\",\n \"settings.locations.empty\": \"Nenhum local foi adicionado a esta organização ainda.\",\n \"settings.locations.headquarters\": \"Sede\",\n \"settings.locations.namePlaceholder\": \"Nome do local *\",\n \"settings.locations.newLocation\": \"Novo Local\",\n \"settings.locations.noLocations\": \"Nenhum local configurado ainda.\",\n \"settings.locations.phonePlaceholder\": \"Telefone\",\n \"settings.locations.statePlaceholder\": \"Estado\",\n \"settings.locations.title\": \"Locais\",\n \"settings.profile.email\": \"E-mail\",\n \"settings.profile.emailHelp\": \"O e-mail não pode ser alterado diretamente. Entre em contato com o suporte.\",\n \"settings.profile.fullName\": \"Nome Completo\",\n \"settings.profile.saveProfile\": \"Salvar Perfil\",\n \"settings.profile.subtitle\": \"Gerencie suas informações pessoais e configurações da conta.\",\n \"settings.profile.title\": \"Perfil\",\n \"settings.security.inviteOnly\": \"Acesso Apenas por Convite\",\n \"settings.security.inviteOnlyDescription\": \"Novos usuários só podem entrar nesta organização via convite.\",\n \"settings.security.linkSent\": \"Link Enviado\",\n \"settings.security.orgSecuritySubtitle\": \"Políticas de segurança aplicadas a todos os membros desta organização.\",\n \"settings.security.orgSecurityTitle\": \"Segurança da Organização\",\n \"settings.security.passwordSubtitle\": \"Gerencie a senha da sua conta. Um link de redefinição será enviado para seu e-mail.\",\n \"settings.security.passwordTitle\": \"Senha\",\n \"settings.security.require2FA\": \"Exigir Autenticação de Dois Fatores\",\n \"settings.security.require2FADescription\": \"Todos os membros devem ativar 2FA para acessar esta organização.\",\n \"settings.security.resetLinkDescription\": \"Enviar um link de redefinição de senha para seu e-mail.\",\n \"settings.security.resetLinkSent\": \"Link de redefinição enviado — verifique sua caixa de entrada.\",\n \"settings.security.resetPassword\": \"Redefinir Senha\",\n \"settings.security.sessionTimeout\": \"Tempo Limite da Sessão\",\n \"settings.security.sessionTimeoutDescription\": \"Desconectar automaticamente usuários inativos após este período.\",\n \"settings.plugin.agenda\": \"Agenda\",\n \"settings.plugin.financial\": \"Financeiro\",\n \"settings.plugin.inventory\": \"Estoque\",\n \"settings.plugin.crm\": \"Vendas & CRM\",\n \"crud.archetype.comingSoon\": \"Em Breve\",\n \"crud.archetype.access.title\": \"Acesso e Permissões\",\n \"crud.archetype.access.description\": \"Gerencie credenciais de login, atribua perfis de permissão e controle o que esta pessoa pode acessar no sistema.\",\n \"crud.access.accountStatus\": \"Status da Conta\",\n \"crud.access.statusLinked\": \"Ativo\",\n \"crud.access.statusPending\": \"Convite pendente\",\n \"crud.access.statusAccepted\": \"Aceito\",\n \"crud.access.statusExpired\": \"Convite expirado\",\n \"crud.access.statusRevoked\": \"Revogado\",\n \"crud.access.acceptedAt\": \"Aceito em {{date}}\",\n \"crud.access.revokedDesc\": \"O acesso foi revogado. Você pode enviar um novo convite.\",\n \"crud.access.grantAccess\": \"Conceder Acesso\",\n \"crud.access.account\": \"Conta\",\n \"crud.access.accountDesc\": \"Credenciais de login e status da conta desta pessoa.\",\n \"crud.access.resetPassword\": \"Redefinir Senha\",\n \"crud.access.passwordResetSent\": \"E-mail de redefinição de senha enviado.\",\n \"crud.access.profileUpdated\": \"Perfil de permissão atualizado.\",\n \"crud.access.inviteResent\": \"Convite reenviado.\",\n \"crud.access.inviteRevoked\": \"Convite revogado.\",\n \"crud.access.accessRemoved\": \"Acesso removido.\",\n \"crud.access.dangerZone\": \"Zona de Perigo\",\n \"crud.access.dangerZoneDesc\": \"Ações irreversíveis que afetam o acesso desta pessoa ao sistema.\",\n \"crud.access.removeAccess\": \"Remover Acesso\",\n \"crud.access.revokeInvite\": \"Revogar Convite\",\n \"crud.access.confirmRemoveTitle\": \"Tem certeza?\",\n \"crud.access.confirmRemoveDesc\": \"Esta pessoa perderá todo o acesso ao sistema imediatamente. Esta ação não pode ser desfeita.\",\n \"crud.access.accountLinked\": \"Conta vinculada\",\n \"crud.access.noAccount\": \"Nenhuma conta vinculada\",\n \"crud.access.noAccountDesc\": \"Esta pessoa não possui uma conta de acesso e não pode entrar no sistema.\",\n \"crud.access.setupDesc\": \"Configure o acesso ao sistema para esta pessoa informando o e-mail e escolhendo um perfil de permissão.\",\n \"crud.access.emailPlaceholder\": \"pessoa@exemplo.com\",\n \"crud.access.sendInvite\": \"Enviar Convite\",\n \"crud.access.invitePending\": \"Convite pendente\",\n \"crud.access.inviteSent\": \"Convite enviado em {{date}}\",\n \"crud.access.permissionProfile\": \"Perfil de Permissão\",\n \"crud.access.profileDesc\": \"Defina o que esta pessoa pode acessar e fazer no sistema.\",\n \"crud.access.systemAccess\": \"Acesso ao Sistema\",\n \"crud.access.effectivePermissions\": \"Permissões Efetivas\",\n \"crud.access.effectiveDesc\": \"O que esta pessoa pode fazer com base no perfil atribuído.\",\n \"crud.access.feature\": \"Funcionalidade\",\n \"crud.access.joined\": \"Entrou em {{date}}\",\n \"crud.access.noEmail\": \"Sem endereço de e-mail\",\n \"crud.access.noEmailDesc\": \"Adicione um endereço de e-mail a esta pessoa para vinculá-la a uma conta do sistema.\",\n \"crud.access.manageTeam\": \"Gerenciar Equipe\",\n \"crud.access.manageBilling\": \"Gerenciar Faturamento\",\n \"crud.access.manageSettings\": \"Gerenciar Configurações\",\n \"crud.access.managePermissions\": \"Gerenciar Permissões\",\n \"crud.archetype.activity.title\": \"Linha do Tempo\",\n \"crud.archetype.activity.description\": \"Veja um registro cronológico de todas as ações, alterações e eventos relacionados a esta pessoa.\",\n \"crud.archetype.documents.title\": \"Documentos\",\n \"crud.archetype.documents.description\": \"Anexe e gerencie arquivos, contratos, certificações e outros documentos desta pessoa.\",\n \"crud.archetype.addresses.add\": \"Adicionar endereço\",\n \"crud.archetype.addresses.addTitle\": \"Novo endereço\",\n \"crud.archetype.addresses.editTitle\": \"Editar endereço\",\n \"crud.archetype.addresses.formDescription\": \"CEP, rua e cidade são obrigatórios; o resto é opcional.\",\n \"crud.archetype.addresses.emptyTitle\": \"Nenhum endereço cadastrado\",\n \"crud.archetype.addresses.emptyDescription\": \"Cadastre onde esta pessoa recebe entregas, é coletada ou é cobrada.\",\n \"crud.archetype.addresses.fallbackLabel\": \"Endereço\",\n \"crud.archetype.addresses.labelPlaceholder\": \"Casa, Trabalho…\",\n \"crud.archetype.addresses.default\": \"Padrão\",\n \"crud.archetype.addresses.setDefault\": \"Usar como endereço padrão\",\n \"crud.archetype.addresses.kind.both\": \"Entrega e cobrança\",\n \"crud.archetype.addresses.kind.shipping\": \"Entrega\",\n \"crud.archetype.addresses.kind.billing\": \"Cobrança\",\n \"crud.archetype.addresses.field.label\": \"Identificação\",\n \"crud.archetype.addresses.field.kind\": \"Uso\",\n \"crud.archetype.addresses.field.postalCode\": \"CEP\",\n \"crud.archetype.addresses.field.street\": \"Rua\",\n \"crud.archetype.addresses.field.number\": \"Número\",\n \"crud.archetype.addresses.field.complement\": \"Complemento\",\n \"crud.archetype.addresses.field.district\": \"Bairro\",\n \"crud.archetype.addresses.field.city\": \"Cidade\",\n \"crud.archetype.addresses.field.state\": \"UF\",\n \"crud.archetype.addresses.field.recipient\": \"Quem recebe\",\n \"crud.archetype.addresses.field.phone\": \"Telefone\",\n \"crud.archetype.addresses.created\": \"Endereço adicionado\",\n \"crud.archetype.addresses.updated\": \"Endereço atualizado\",\n \"crud.archetype.addresses.deleted\": \"Endereço removido\",\n \"crud.archetype.addresses.deleteTitle\": \"Remover este endereço?\",\n \"crud.archetype.addresses.loadFailed\": \"Não foi possível carregar os endereços.\",\n \"crud.archetype.addresses.saveFailed\": \"Não foi possível salvar o endereço.\",\n \"crud.archetype.addresses.deleteFailed\": \"Não foi possível remover o endereço.\",\n \"crud.archetype.addresses.noTenant\": \"Nenhuma organização ativa — recarregue a página e tente de novo.\",\n \"crud.archetype.schedule.title\": \"Agenda\",\n \"crud.archetype.schedule.description\": \"Visualize e gerencie compromissos, turnos e disponibilidade desta pessoa.\",\n \"crud.archetype.inventory.title\": \"Estoque\",\n \"crud.archetype.inventory.description\": \"Acompanhe níveis de estoque, histórico de movimentação, alertas de reposição e gerencie o inventário entre locais.\",\n \"crud.archetype.suppliers.title\": \"Fornecedores\",\n \"crud.archetype.suppliers.description\": \"Veja e gerencie quais fornecedores oferecem este produto, compare custos e acompanhe pedidos de compra.\",\n \"crud.archetype.pricing.title\": \"Histórico de Preços\",\n \"crud.archetype.pricing.description\": \"Veja alterações de preço ao longo do tempo, gerencie preços promocionais e defina preços por local.\",\n \"crud.archetype.productActivity.title\": \"Atividade\",\n \"crud.archetype.productActivity.description\": \"Veja um registro de todas as alterações, ajustes de estoque e eventos relacionados a este produto.\",\n \"crud.archetype.availability.title\": \"Disponibilidade\",\n \"crud.archetype.availability.description\": \"Configure quando este serviço pode ser agendado, defina regras de duração e gerencie limites de capacidade.\",\n \"crud.archetype.servicePricing.title\": \"Faixas de Preço\",\n \"crud.archetype.servicePricing.description\": \"Gerencie faixas de preço, descontos para membros e preços por local para este serviço.\",\n \"crud.archetype.serviceActivity.title\": \"Atividade\",\n \"crud.archetype.serviceActivity.description\": \"Veja um registro de todos os agendamentos, alterações e eventos relacionados a este serviço.\",\n \"crud.archetype.members.title\": \"Equipe\",\n \"crud.archetype.members.description\": \"Veja e gerencie a equipe atribuída a este local, seus cargos e horários.\",\n \"crud.archetype.locationSchedule.title\": \"Horário de Funcionamento\",\n \"crud.archetype.locationSchedule.description\": \"Defina horário comercial, feriados e horários especiais para este local.\",\n \"crud.archetype.locationStats.title\": \"Estatísticas\",\n \"crud.archetype.locationStats.description\": \"Veja métricas de desempenho, faturamento e atividade deste local.\",\n \"crud.archetype.locationActivity.title\": \"Atividade\",\n \"crud.archetype.locationActivity.description\": \"Veja um registro de todos os eventos, alterações e operações neste local.\",\n \"crud.archetype.owner.noOwner\": \"Nenhum responsável atribuído\",\n \"crud.archetype.owner.assignHint\": \"Edite este registro para atribuir um responsável.\",\n \"crud.archetype.owner.name\": \"Nome\",\n \"crud.archetype.owner.phone\": \"Telefone\",\n \"crud.archetype.owner.email\": \"E-mail\",\n \"crud.archetype.owner.document\": \"Documento\",\n \"crud.archetype.owner.address\": \"Endereço\",\n \"crud.archetype.owner.active\": \"Ativo\",\n \"crud.archetype.owner.inactive\": \"Inativo\",\n \"crud.archetype.history.title\": \"Histórico\",\n \"crud.archetype.history.description\": \"Veja o histórico de visitas, relatórios anteriores, tratamentos e linha do tempo de eventos.\",\n \"crud.archetype.subjectDocuments.title\": \"Documentos\",\n \"crud.archetype.subjectDocuments.description\": \"Anexe e gerencie arquivos, resultados de exames, imagens e certificados.\",\n \"schedule.days.sun\": \"Dom\",\n \"schedule.days.mon\": \"Seg\",\n \"schedule.days.tue\": \"Ter\",\n \"schedule.days.wed\": \"Qua\",\n \"schedule.days.thu\": \"Qui\",\n \"schedule.days.fri\": \"Sex\",\n \"schedule.days.sat\": \"Sáb\",\n \"schedule.editor.weeklyTitle\": \"Horário de Trabalho Semanal\",\n \"schedule.editor.weeklyDescription\": \"Defina quando este profissional está regularmente disponível\",\n \"schedule.editor.unavailable\": \"Indisponível\",\n \"schedule.editor.newInterval\": \"Novo intervalo para {{day}}\",\n \"schedule.editor.addHoursFor\": \"Adicionar horários para {{day}}\",\n \"schedule.editor.removeInterval\": \"Remover intervalo\",\n \"schedule.editor.copyToAll\": \"Copiar para todos os dias\",\n \"schedule.editor.bufferTooltip\": \"Tempo de intervalo entre atendimentos\",\n \"schedule.editor.min\": \"min\",\n \"schedule.editor.exceptionsTitle\": \"Exceções de Data\",\n \"schedule.editor.exceptionsDescription\": \"Substituir horário de trabalho para datas específicas\",\n \"schedule.editor.addException\": \"Adicionar Exceção\",\n \"schedule.editor.noExceptions\": \"Nenhuma exceção de data configurada\",\n \"schedule.editor.startDate\": \"Data de início\",\n \"schedule.editor.endDate\": \"Data de término\",\n \"schedule.editor.type\": \"Tipo\",\n \"schedule.editor.customHours\": \"Horário personalizado\",\n \"schedule.editor.workingHours\": \"Horário de trabalho\",\n \"schedule.editor.to\": \"até\",\n \"schedule.editor.addTimeBlock\": \"Adicionar bloco de horário\",\n \"schedule.editor.notes\": \"Observações\",\n \"schedule.editor.notesPlaceholder\": \"ex. Férias, Feriado, Treinamento...\",\n \"schedule.editor.saveException\": \"Salvar Exceção\",\n \"schedule.editor.removeException\": \"Remover exceção\",\n \"schedule.editor.failedToLoad\": \"Falha ao carregar agenda\",\n \"schedule.editor.saved\": \"Horário de trabalho salvo\",\n \"schedule.editor.failedToSave\": \"Falha ao salvar\",\n \"schedule.editor.selectStartDate\": \"Selecione uma data de início\",\n \"schedule.editor.endDateAfterStart\": \"A data de término deve ser posterior à data de início\",\n \"schedule.editor.exceptionAdded\": \"Exceção adicionada\",\n \"schedule.editor.failedToSaveException\": \"Falha ao salvar exceção\",\n \"schedule.editor.exceptionRemoved\": \"Exceção removida\",\n \"schedule.editor.failedToDelete\": \"Falha ao excluir\",\n \"schedule.blockSettings.title\": \"Configurações do Bloco\",\n \"schedule.blockSettings.location\": \"Local\",\n \"schedule.blockSettings.noLocation\": \"Sem local\",\n \"schedule.blockSettings.maxConcurrent\": \"Máx. simultâneos\",\n \"schedule.blockSettings.minAdvance\": \"Antecedência mín.\",\n \"schedule.blockSettings.maxAdvance\": \"Antecedência máx.\",\n \"schedule.blockSettings.hrs\": \"hrs\",\n \"schedule.blockSettings.days\": \"dias\",\n \"schedule.blockSettings.label\": \"Rótulo\",\n \"schedule.blockSettings.labelPlaceholder\": \"ex. Manhã – Apenas cortes\",\n \"schedule.blockSettings.allowedServices\": \"Serviços permitidos\",\n \"schedule.blockSettings.allServices\": \"Todos os serviços\",\n \"schedule.blockSettings.oneService\": \"1 serviço\",\n \"schedule.blockSettings.nServices\": \"{{count}} serviços\",\n \"registry.suppliers\": \"Fornecedor\",\n \"registry.suppliers.description\": \"Gerencie seus fornecedores de produtos e materiais\",\n \"registry.product-categories\": \"Categoria de Produto\",\n \"registry.product-categories.description\": \"Categorias de produtos para organização\",\n \"registry.stock-locations\": \"Local de Estoque\",\n \"registry.stock-locations.description\": \"Locais físicos de armazenamento do estoque\",\n \"registry.measurement-units\": \"Unidade de Medida\",\n \"registry.measurement-units.description\": \"Unidades padrão de medida\",\n \"registry.payment-methods\": \"Método de Pagamento\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.cost-centers\": \"Centro de Custo\",\n \"registry.bank-accounts\": \"Conta Bancária\",\n \"registry.commission-rules\": \"Regra de Comissão\",\n \"registry.price-tables\": \"Tabela de Preços\",\n \"registry.price-variations\": \"Variação de Preço\",\n \"registry.payment-method-types\": \"Tipo de Pagamento\",\n \"registry.card-brands\": \"Bandeira de Cartão\",\n \"registry.lead-sources\": \"Origem de Lead\",\n \"registry.tags\": \"Tag\",\n \"registry.activity-types\": \"Tipo de Atividade\",\n \"org.connectionError.title\": \"Falha na conexão\",\n \"org.connectionError.description\": \"Não foi possível conectar ao servidor. Verifique sua conexão com a internet e tente novamente.\",\n \"org.connectionError.retry\": \"Tentar novamente\",\n \"app.mockMode.banner\": \"Você está no modo offline. Os dados exibidos podem não estar atualizados.\",\n}\n"]}
|
package/dist/tenant/index.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
export declare function setActiveTenantId(id: string | undefined): void;
|
|
2
2
|
export declare function getActiveTenantId(): string | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Subscribes to tenant changes. A getter alone makes every read a race with the
|
|
5
|
+
* shell: a view that mounts before the org store resolves reads `undefined`,
|
|
6
|
+
* and a tenant-scoped fetch that answers "no tenant" looks exactly like "no
|
|
7
|
+
* rows" — it never retries and the screen stays empty until a remount.
|
|
8
|
+
*/
|
|
9
|
+
export declare function subscribeActiveTenant(listener: () => void): () => void;
|
|
10
|
+
/** The active tenant, re-rendering when it resolves or changes. Use this to key
|
|
11
|
+
* effects that fetch tenant-scoped data. */
|
|
12
|
+
export declare function useActiveTenantId(): string | undefined;
|
|
3
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AAUA,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAGtE;AAED;6CAC6C;AAC7C,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD"}
|
package/dist/types/org.d.ts
CHANGED
|
@@ -36,11 +36,16 @@ export interface OrgMembership {
|
|
|
36
36
|
* A team member in the Person-first model: a person (of a configured team kind)
|
|
37
37
|
* with an OPTIONAL access overlay. `membership` is present only when the person
|
|
38
38
|
* has login + RBAC role (a `tenant_members` row linked by `person_id`).
|
|
39
|
+
*
|
|
40
|
+
* The inverse also exists: a membership with no person behind it (the owner who
|
|
41
|
+
* created the workspace). Those rows carry `membership` and no `personId`/`kind`.
|
|
39
42
|
*/
|
|
40
43
|
export interface TeamPerson {
|
|
41
|
-
|
|
44
|
+
/** Absent on a login-only row: a member with no person record behind it. */
|
|
45
|
+
personId?: string;
|
|
42
46
|
name: string;
|
|
43
|
-
|
|
47
|
+
/** Absent on a login-only row. */
|
|
48
|
+
kind?: string;
|
|
44
49
|
email?: string;
|
|
45
50
|
avatarUrl?: string;
|
|
46
51
|
isActive: boolean;
|
|
@@ -94,7 +99,8 @@ export interface OrgAdapter {
|
|
|
94
99
|
listMembers(orgId: string): Promise<OrgMember[]>;
|
|
95
100
|
/**
|
|
96
101
|
* Person-first team list: people whose `kind` is in `personKinds`, each with an
|
|
97
|
-
* optional membership overlay (login + role) linked by `tenant_members.person_id
|
|
102
|
+
* optional membership overlay (login + role) linked by `tenant_members.person_id`,
|
|
103
|
+
* PLUS the memberships that match no such person (they'd otherwise be invisible).
|
|
98
104
|
* Optional so adapters can adopt it incrementally; the Team screen falls back to
|
|
99
105
|
* `listMembers` when absent or when no `personKinds` are configured.
|
|
100
106
|
*/
|
package/dist/types/org.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/types/org.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/types/org.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,78 +3,68 @@
|
|
|
3
3
|
"fayz": {
|
|
4
4
|
"status": "beta"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.8.
|
|
6
|
+
"version": "0.8.5",
|
|
7
7
|
"description": "Fayz SDK core — data providers, entity system, plugin runtime, i18n, routing",
|
|
8
8
|
"type": "module",
|
|
9
|
-
"
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"main": "./dist/index.js",
|
|
10
11
|
"module": "./dist/index.js",
|
|
11
12
|
"types": "./dist/index.d.ts",
|
|
12
13
|
"exports": {
|
|
13
14
|
".": {
|
|
14
15
|
"source": "./src/index.ts",
|
|
15
16
|
"types": "./dist/index.d.ts",
|
|
16
|
-
"import": "./dist/index.js"
|
|
17
|
-
"require": "./dist/index.cjs"
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
18
|
},
|
|
19
19
|
"./data": {
|
|
20
20
|
"source": "./src/data/index.ts",
|
|
21
21
|
"types": "./dist/data/index.d.ts",
|
|
22
|
-
"import": "./dist/data/index.js"
|
|
23
|
-
"require": "./dist/data/index.cjs"
|
|
22
|
+
"import": "./dist/data/index.js"
|
|
24
23
|
},
|
|
25
24
|
"./entity": {
|
|
26
25
|
"source": "./src/entity/index.ts",
|
|
27
26
|
"types": "./dist/entity/index.d.ts",
|
|
28
|
-
"import": "./dist/entity/index.js"
|
|
29
|
-
"require": "./dist/entity/index.cjs"
|
|
27
|
+
"import": "./dist/entity/index.js"
|
|
30
28
|
},
|
|
31
29
|
"./plugin": {
|
|
32
30
|
"source": "./src/plugin/index.ts",
|
|
33
31
|
"types": "./dist/plugin/index.d.ts",
|
|
34
|
-
"import": "./dist/plugin/index.js"
|
|
35
|
-
"require": "./dist/plugin/index.cjs"
|
|
32
|
+
"import": "./dist/plugin/index.js"
|
|
36
33
|
},
|
|
37
34
|
"./i18n": {
|
|
38
35
|
"source": "./src/i18n/index.ts",
|
|
39
36
|
"types": "./dist/i18n/index.d.ts",
|
|
40
|
-
"import": "./dist/i18n/index.js"
|
|
41
|
-
"require": "./dist/i18n/index.cjs"
|
|
37
|
+
"import": "./dist/i18n/index.js"
|
|
42
38
|
},
|
|
43
39
|
"./router": {
|
|
44
40
|
"source": "./src/router/index.ts",
|
|
45
41
|
"types": "./dist/router/index.d.ts",
|
|
46
|
-
"import": "./dist/router/index.js"
|
|
47
|
-
"require": "./dist/router/index.cjs"
|
|
42
|
+
"import": "./dist/router/index.js"
|
|
48
43
|
},
|
|
49
44
|
"./runtime": {
|
|
50
45
|
"source": "./src/runtime/index.ts",
|
|
51
46
|
"types": "./dist/runtime/index.d.ts",
|
|
52
|
-
"import": "./dist/runtime/index.js"
|
|
53
|
-
"require": "./dist/runtime/index.cjs"
|
|
47
|
+
"import": "./dist/runtime/index.js"
|
|
54
48
|
},
|
|
55
49
|
"./access": {
|
|
56
50
|
"source": "./src/access/index.ts",
|
|
57
51
|
"types": "./dist/access/index.d.ts",
|
|
58
|
-
"import": "./dist/access/index.js"
|
|
59
|
-
"require": "./dist/access/index.cjs"
|
|
52
|
+
"import": "./dist/access/index.js"
|
|
60
53
|
},
|
|
61
54
|
"./types": {
|
|
62
55
|
"source": "./src/types/index.ts",
|
|
63
56
|
"types": "./dist/types/index.d.ts",
|
|
64
|
-
"import": "./dist/types/index.js"
|
|
65
|
-
"require": "./dist/types/index.cjs"
|
|
57
|
+
"import": "./dist/types/index.js"
|
|
66
58
|
},
|
|
67
59
|
"./testing": {
|
|
68
60
|
"source": "./src/testing/index.ts",
|
|
69
61
|
"types": "./dist/testing/index.d.ts",
|
|
70
|
-
"import": "./dist/testing/index.js"
|
|
71
|
-
"require": "./dist/testing/index.cjs"
|
|
62
|
+
"import": "./dist/testing/index.js"
|
|
72
63
|
},
|
|
73
64
|
"./integrations": {
|
|
74
65
|
"source": "./src/integrations/index.ts",
|
|
75
66
|
"types": "./dist/integrations/index.d.ts",
|
|
76
|
-
"import": "./dist/integrations/index.js"
|
|
77
|
-
"require": "./dist/integrations/index.cjs"
|
|
67
|
+
"import": "./dist/integrations/index.js"
|
|
78
68
|
}
|
|
79
69
|
},
|
|
80
70
|
"files": [
|
|
@@ -83,12 +73,12 @@
|
|
|
83
73
|
],
|
|
84
74
|
"peerDependencies": {
|
|
85
75
|
"react": "^18.0.0 || ^19.0.0",
|
|
86
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
76
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
77
|
+
"zustand": "^4.5.0",
|
|
78
|
+
"@supabase/supabase-js": "^2.45.0"
|
|
87
79
|
},
|
|
88
80
|
"dependencies": {
|
|
89
|
-
"@
|
|
90
|
-
"zustand": "^4.5.0",
|
|
91
|
-
"@fayz-ai/sdk": "^0.8.4"
|
|
81
|
+
"@fayz-ai/sdk": "^0.8.5"
|
|
92
82
|
},
|
|
93
83
|
"devDependencies": {
|
|
94
84
|
"@types/react": "^18.3.0",
|
|
@@ -98,7 +88,9 @@
|
|
|
98
88
|
"tsup": "^8.2.0",
|
|
99
89
|
"typescript": "^5.5.0",
|
|
100
90
|
"vite": "^5.4.0",
|
|
101
|
-
"vitest": "2.1.9"
|
|
91
|
+
"vitest": "2.1.9",
|
|
92
|
+
"zustand": "^4.5.0",
|
|
93
|
+
"@supabase/supabase-js": "^2.45.0"
|
|
102
94
|
},
|
|
103
95
|
"license": "MIT",
|
|
104
96
|
"keywords": [
|
package/src/access/engine.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PermissionProfile, PermissionAction } from '../types/permissions'
|
|
1
|
+
import type { PermissionProfile, PermissionAction, SystemPermission } from '../types/permissions'
|
|
2
2
|
import type { Plan } from '../types/billing'
|
|
3
3
|
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
@@ -67,6 +67,21 @@ export function profileHasPermission(
|
|
|
67
67
|
return actions.includes(action) || actions.includes('manage')
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The org-management side of a profile: managing team, billing, settings and
|
|
72
|
+
* permissions themselves. Separate axis from `grants` — these gate the settings
|
|
73
|
+
* tabs, not a feature's rows — and it follows the same owner bypass, so the one
|
|
74
|
+
* person who can hand out access is never locked out of doing it.
|
|
75
|
+
*/
|
|
76
|
+
export function profileHasSystemPermission(
|
|
77
|
+
profile: PermissionProfile | null,
|
|
78
|
+
permission: SystemPermission,
|
|
79
|
+
): boolean {
|
|
80
|
+
if (!profile) return true
|
|
81
|
+
if (isOwnerProfile(profile)) return true
|
|
82
|
+
return profile.systemPermissions?.includes(permission) ?? false
|
|
83
|
+
}
|
|
84
|
+
|
|
70
85
|
/**
|
|
71
86
|
* Does the current plan entitle `feature`? A plan gates a feature ONLY with an
|
|
72
87
|
* explicit `false`; absent means "not gated by this plan" (allowed). This keeps
|
package/src/access/index.ts
CHANGED
package/src/app/render.tsx
CHANGED
|
@@ -58,7 +58,7 @@ export function renderApp(
|
|
|
58
58
|
const Scaffold = getScaffold(surface.scaffold)
|
|
59
59
|
if (!Scaffold) {
|
|
60
60
|
throw new Error(
|
|
61
|
-
`Scaffold "${surface.scaffold}" is not registered.
|
|
61
|
+
`Scaffold "${surface.scaffold}" is not registered. Call renderApp from the package that provides it (e.g. @fayz-ai/saas, @fayz-ai/portal, @fayz-ai/storefront) or call its register*Scaffold() first.`,
|
|
62
62
|
)
|
|
63
63
|
}
|
|
64
64
|
return React.createElement(
|
package/src/data/archetype.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DataProvider, CrudQuery, CrudResult } from './types'
|
|
2
2
|
import { getSupabaseClientOptional } from './supabase'
|
|
3
|
+
import { applyRangeToQuery, isFilterObject, parseRangeFilter } from './filters'
|
|
3
4
|
import type { EntityArchetype } from '../types/entities'
|
|
4
5
|
|
|
5
6
|
// Archetypes that have a `kind` discriminator column
|
|
@@ -119,6 +120,28 @@ export function createArchetypeProvider<T extends { id: string }>(
|
|
|
119
120
|
q = q.eq('kind', config.archetypeKind)
|
|
120
121
|
}
|
|
121
122
|
|
|
123
|
+
// Faceted filters — equality, or real SQL bounds for a range object.
|
|
124
|
+
// Silently dropping them made every caller post-filter one page of rows,
|
|
125
|
+
// which reads as "no records match" whenever the match sits past it.
|
|
126
|
+
if (query.filters) {
|
|
127
|
+
for (const [key, val] of Object.entries(query.filters)) {
|
|
128
|
+
if (val == null || val === '') continue
|
|
129
|
+
const col = camelToSnake(key)
|
|
130
|
+
const range = parseRangeFilter(val)
|
|
131
|
+
if (range) {
|
|
132
|
+
q = applyRangeToQuery(q, col, range)
|
|
133
|
+
continue
|
|
134
|
+
}
|
|
135
|
+
if (isFilterObject(val)) {
|
|
136
|
+
throw new Error(
|
|
137
|
+
`[@fayz-ai/core] Filter "${key}" is an object with no recognised bound. ` +
|
|
138
|
+
'Use {from,to} / {gte,lte,gt,lt} for ranges, or a plain value for equality.',
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
q = q.eq(col, val)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
122
145
|
// Search
|
|
123
146
|
if (query.search && config.searchColumns && config.searchColumns.length > 0) {
|
|
124
147
|
const term = `%${query.search}%`
|
package/src/data/bulk.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { BulkWriteOptions, BulkWriteResult, DataProvider } from './types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Write many rows through whatever the provider supports.
|
|
5
|
+
*
|
|
6
|
+
* `createMany` when it exists (one round-trip per chunk), otherwise a sequential
|
|
7
|
+
* `create` loop. Callers never branch: a mock provider and a Supabase table
|
|
8
|
+
* import the same way, only slower.
|
|
9
|
+
*
|
|
10
|
+
* Never all-or-nothing. A 900-row client list will contain a malformed phone
|
|
11
|
+
* and a duplicate e-mail, and a single transaction would throw away the other
|
|
12
|
+
* 898 — plus a statement that large risks the timeout. Failures are collected
|
|
13
|
+
* with their row index so the caller can hand them back for correction.
|
|
14
|
+
*/
|
|
15
|
+
export async function bulkCreate<T extends { id: string }>(
|
|
16
|
+
provider: DataProvider<T>,
|
|
17
|
+
rows: Array<Omit<T, 'id' | 'createdAt' | 'updatedAt' | 'tenantId'>>,
|
|
18
|
+
options?: BulkWriteOptions,
|
|
19
|
+
): Promise<BulkWriteResult> {
|
|
20
|
+
if (!rows.length) return { created: 0, failed: [] }
|
|
21
|
+
if (provider.createMany) return provider.createMany(rows, options)
|
|
22
|
+
|
|
23
|
+
let created = 0
|
|
24
|
+
const failed: Array<{ index: number; message: string }> = []
|
|
25
|
+
for (let i = 0; i < rows.length; i++) {
|
|
26
|
+
try {
|
|
27
|
+
await provider.create(rows[i])
|
|
28
|
+
created += 1
|
|
29
|
+
} catch (error) {
|
|
30
|
+
failed.push({ index: i, message: error instanceof Error ? error.message : String(error) })
|
|
31
|
+
}
|
|
32
|
+
options?.onProgress?.(i + 1, rows.length)
|
|
33
|
+
}
|
|
34
|
+
return { created, failed }
|
|
35
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { parseRangeFilter, isFilterObject, matchesRange, applyRangeToQuery } from './filters'
|
|
3
|
+
|
|
4
|
+
describe('parseRangeFilter', () => {
|
|
5
|
+
it('reads the {from,to} dialect', () => {
|
|
6
|
+
expect(parseRangeFilter({ from: 1, to: 5 })).toEqual({ gte: 1, lte: 5 })
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
it('reads the Mongo dialect the models actually emit', () => {
|
|
10
|
+
// The exact filter that answered "não há compromissos hoje" over a booked day.
|
|
11
|
+
expect(
|
|
12
|
+
parseRangeFilter({ $gte: '2026-07-27T00:00:00Z', $lt: '2026-07-28T00:00:00Z' }),
|
|
13
|
+
).toEqual({ gte: '2026-07-27T00:00:00Z', lt: '2026-07-28T00:00:00Z' })
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('reads bare comparison keys', () => {
|
|
17
|
+
expect(parseRangeFilter({ gte: 10, lt: 20 })).toEqual({ gte: 10, lt: 20 })
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('returns null for plain values, so they stay equality filters', () => {
|
|
21
|
+
expect(parseRangeFilter('open')).toBeNull()
|
|
22
|
+
expect(parseRangeFilter(3)).toBeNull()
|
|
23
|
+
expect(parseRangeFilter(null)).toBeNull()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('returns null for an object with no recognised bound — never a silent match-nothing', () => {
|
|
27
|
+
expect(parseRangeFilter({ equals: 'open' })).toBeNull()
|
|
28
|
+
expect(isFilterObject({ equals: 'open' })).toBe(true)
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
describe('matchesRange', () => {
|
|
33
|
+
const day = { gte: '2026-07-27T00:00:00Z', lt: '2026-07-28T00:00:00Z' }
|
|
34
|
+
|
|
35
|
+
it('keeps a timestamp inside the window', () => {
|
|
36
|
+
expect(matchesRange('2026-07-27T18:00:00+00:00', day)).toBe(true)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('drops the bounds it should', () => {
|
|
40
|
+
expect(matchesRange('2026-07-28T00:00:00Z', day)).toBe(false)
|
|
41
|
+
expect(matchesRange('2026-07-26T23:59:59Z', day)).toBe(false)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('honours inclusive upper bounds', () => {
|
|
45
|
+
expect(matchesRange(5, { gte: 1, lte: 5 })).toBe(true)
|
|
46
|
+
expect(matchesRange(5, { gte: 1, lt: 5 })).toBe(false)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('rejects values that are not comparable instead of letting them through', () => {
|
|
50
|
+
expect(matchesRange(null, day)).toBe(false)
|
|
51
|
+
expect(matchesRange('não é data', day)).toBe(false)
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
describe('applyRangeToQuery', () => {
|
|
56
|
+
it('emits one PostgREST call per bound', () => {
|
|
57
|
+
const calls: Array<[string, string, unknown]> = []
|
|
58
|
+
const builder = {
|
|
59
|
+
gte(c: string, v: unknown) { calls.push(['gte', c, v]); return this },
|
|
60
|
+
gt(c: string, v: unknown) { calls.push(['gt', c, v]); return this },
|
|
61
|
+
lte(c: string, v: unknown) { calls.push(['lte', c, v]); return this },
|
|
62
|
+
lt(c: string, v: unknown) { calls.push(['lt', c, v]); return this },
|
|
63
|
+
}
|
|
64
|
+
applyRangeToQuery(builder, 'starts_at', { gte: 'a', lt: 'b' })
|
|
65
|
+
expect(calls).toEqual([
|
|
66
|
+
['gte', 'starts_at', 'a'],
|
|
67
|
+
['lt', 'starts_at', 'b'],
|
|
68
|
+
])
|
|
69
|
+
})
|
|
70
|
+
})
|