@fayz-ai/core 0.8.0 → 0.8.2
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/denial.d.ts +21 -0
- package/dist/access/denial.d.ts.map +1 -0
- package/dist/access/engine.d.ts +63 -0
- package/dist/access/engine.d.ts.map +1 -0
- package/dist/access/index.cjs +60 -0
- package/dist/access/index.cjs.map +1 -0
- package/dist/access/index.d.ts +6 -0
- package/dist/access/index.d.ts.map +1 -0
- package/dist/access/index.js +51 -0
- package/dist/access/index.js.map +1 -0
- package/dist/access/limits.d.ts +10 -0
- package/dist/access/limits.d.ts.map +1 -0
- package/dist/address/index.d.ts +52 -0
- package/dist/address/index.d.ts.map +1 -0
- package/dist/{chunk-WKZVSKEU.js → chunk-CU64QI4A.js} +2 -2
- package/dist/chunk-CU64QI4A.js.map +1 -0
- package/dist/{chunk-54SRL7AJ.cjs → chunk-CYAWDW44.cjs} +141 -84
- package/dist/chunk-CYAWDW44.cjs.map +1 -0
- package/dist/{chunk-KNIVT6XZ.js → chunk-JHGXROKV.js} +230 -2
- package/dist/chunk-JHGXROKV.js.map +1 -0
- package/dist/{chunk-QR7U2URY.cjs → chunk-SO3VUKGZ.cjs} +230 -2
- package/dist/chunk-SO3VUKGZ.cjs.map +1 -0
- package/dist/{chunk-2NTHNWEH.cjs → chunk-UKU4RIWM.cjs} +2 -2
- package/dist/chunk-UKU4RIWM.cjs.map +1 -0
- package/dist/{chunk-ZBIWYDAR.js → chunk-XJKW2JRW.js} +140 -85
- package/dist/chunk-XJKW2JRW.js.map +1 -0
- package/dist/{chunk-CHGX6UYR.js → chunk-YH25Y4FW.js} +6 -3
- package/dist/chunk-YH25Y4FW.js.map +1 -0
- package/dist/{chunk-5X2VX3RQ.cjs → chunk-ZOPJB5FN.cjs} +6 -3
- package/dist/chunk-ZOPJB5FN.cjs.map +1 -0
- package/dist/data/count.d.ts +34 -0
- package/dist/data/count.d.ts.map +1 -0
- package/dist/data/index.cjs +18 -10
- package/dist/data/index.d.ts +2 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -1
- package/dist/data/resolve.d.ts.map +1 -1
- package/dist/entity/index.cjs +6 -6
- package/dist/entity/index.js +1 -1
- package/dist/entity/registry.d.ts +9 -0
- package/dist/entity/registry.d.ts.map +1 -1
- package/dist/i18n/index.cjs +10 -10
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/shell-translations.d.ts.map +1 -1
- package/dist/index.cjs +852 -124
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +765 -56
- package/dist/index.js.map +1 -1
- package/dist/manifest/index.d.ts +109 -3
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/serialize.d.ts +14 -0
- package/dist/manifest/serialize.d.ts.map +1 -0
- package/dist/plugin/index.cjs +7 -7
- package/dist/plugin/index.js +1 -1
- package/dist/plugin/runtime.d.ts.map +1 -1
- package/dist/types/billing.d.ts +20 -0
- package/dist/types/billing.d.ts.map +1 -1
- package/dist/types/crud.d.ts +48 -2
- package/dist/types/crud.d.ts.map +1 -1
- package/dist/types/entitlements.d.ts +45 -0
- package/dist/types/entitlements.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/plugins.d.ts +84 -0
- package/dist/types/plugins.d.ts.map +1 -1
- package/package.json +14 -4
- package/src/access/denial.ts +33 -0
- package/src/access/engine.test.ts +48 -0
- package/src/access/engine.ts +121 -0
- package/src/access/index.ts +13 -0
- package/src/access/limits.ts +18 -0
- package/src/address/index.ts +188 -0
- package/src/data/count.test.ts +152 -0
- package/src/data/count.ts +131 -0
- package/src/data/index.ts +2 -0
- package/src/data/resolve.ts +7 -1
- package/src/entity/registry.ts +7 -0
- package/src/i18n/shell-translations.ts +230 -0
- package/src/index.ts +18 -3
- package/src/manifest/app-manifest.schema.json +618 -45
- package/src/manifest/index.ts +127 -3
- package/src/manifest/serialize.ts +52 -0
- package/src/plugin/runtime.ts +5 -1
- package/src/types/billing.ts +22 -0
- package/src/types/crud.ts +49 -2
- package/src/types/entitlements.ts +45 -0
- package/src/types/index.ts +4 -3
- package/src/types/plugins.ts +79 -0
- package/dist/chunk-2NTHNWEH.cjs.map +0 -1
- package/dist/chunk-54SRL7AJ.cjs.map +0 -1
- package/dist/chunk-5X2VX3RQ.cjs.map +0 -1
- package/dist/chunk-CHGX6UYR.js.map +0 -1
- package/dist/chunk-KNIVT6XZ.js.map +0 -1
- package/dist/chunk-QR7U2URY.cjs.map +0 -1
- package/dist/chunk-WKZVSKEU.js.map +0 -1
- package/dist/chunk-ZBIWYDAR.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/shell-translations.ts","../src/i18n/index.ts"],"names":["React"],"mappings":"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","file":"chunk-QR7U2URY.cjs","sourcesContent":["// Shared shell/CRUD/framework translations (crud.*, settings.*, auth.*, common.*, …)\n// extracted from saas-core's central i18n. Registered globally at core init so the\n// native CRUD engine, framework UI and shell resolve these keys under any host.\nexport const shellTranslations: Record<string, Record<string, string>> = {\n en: {\n \"common.save\": \"Save\",\n \"common.saveChanges\": \"Save Changes\",\n \"common.saving\": \"Saving...\",\n \"common.cancel\": \"Cancel\",\n \"common.delete\": \"Delete\",\n \"common.edit\": \"Edit\",\n \"common.close\": \"Close\",\n \"common.confirm\": \"Confirm\",\n \"common.back\": \"Back\",\n \"common.add\": \"Add\",\n \"common.loading\": \"Loading...\",\n \"common.error\": \"Something went wrong\",\n \"common.noResults\": \"No results found.\",\n \"common.search\": \"Search\",\n \"common.actions\": \"Actions\",\n \"common.continue\": \"Continue\",\n \"common.done\": \"Done\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.active\": \"Active\",\n \"common.inactive\": \"Inactive\",\n \"common.overview\": \"Overview\",\n \"common.notFound\": \"Not Found\",\n \"common.untitled\": \"Untitled\",\n \"common.noContentYet\": \"No content yet\",\n \"common.selectDate\": \"Select date\",\n \"common.plugins\": \"Plugins\",\n \"auth.login.title\": \"Sign in\",\n \"auth.login.titleCentered\": \"Welcome Back\",\n \"auth.login.subtitle\": \"Enter your credentials to access your account\",\n \"auth.login.emailLabel\": \"Email\",\n \"auth.login.emailPlaceholder\": \"you@example.com\",\n \"auth.login.passwordLabel\": \"Password\",\n \"auth.login.passwordPlaceholder\": \"Enter your password\",\n \"auth.login.forgotPassword\": \"Forgot password?\",\n \"auth.login.submit\": \"Sign in\",\n \"auth.login.submitting\": \"Signing in...\",\n \"auth.login.error\": \"Failed to sign in. Please try again.\",\n \"auth.login.oauthDivider\": \"or continue with\",\n \"auth.login.noAccount\": \"Don't have an account?\",\n \"auth.login.noAccountCentered\": \"Don't have an account yet?\",\n \"auth.login.signUpLink\": \"Sign up\",\n \"auth.login.socialProof\": \"Join thousands of businesses already using {{appName}}\",\n \"auth.signup.title\": \"Create account\",\n \"auth.signup.titleCentered\": \"Create Account\",\n \"auth.signup.subtitle\": \"Get started with your new account\",\n \"auth.signup.nameLabel\": \"Full name\",\n \"auth.signup.namePlaceholder\": \"John Doe\",\n \"auth.signup.emailLabel\": \"Email\",\n \"auth.signup.emailPlaceholder\": \"you@example.com\",\n \"auth.signup.passwordLabel\": \"Password\",\n \"auth.signup.passwordPlaceholder\": \"At least 8 characters\",\n \"auth.signup.confirmPasswordLabel\": \"Confirm password\",\n \"auth.signup.confirmPasswordPlaceholder\": \"Repeat your password\",\n \"auth.signup.termsPrefix\": \"By creating an account, you agree to our\",\n \"auth.signup.termsOfService\": \"Terms of Service\",\n \"auth.signup.privacyPolicy\": \"Privacy Policy\",\n \"auth.signup.submit\": \"Create account\",\n \"auth.signup.submitting\": \"Creating account...\",\n \"auth.signup.error\": \"Failed to create account. Please try again.\",\n \"auth.signup.passwordMismatch\": \"Passwords do not match.\",\n \"auth.signup.passwordTooShort\": \"Password must be at least 8 characters.\",\n \"auth.signup.success\": \"Account created for {{email}}. Check your inbox to confirm your email before signing in.\",\n \"auth.signup.hasAccount\": \"Already have an account?\",\n \"auth.signup.signInLink\": \"Sign in\",\n \"auth.recovery.title\": \"Reset password\",\n \"auth.recovery.titleCentered\": \"Reset Password\",\n \"auth.recovery.instruction\": \"Enter your email address and we will send you a link to reset your password.\",\n \"auth.recovery.subtitle\": \"We'll send you a reset link\",\n \"auth.recovery.emailLabel\": \"Email\",\n \"auth.recovery.emailPlaceholder\": \"you@example.com\",\n \"auth.recovery.submit\": \"Send reset link\",\n \"auth.recovery.submitting\": \"Sending...\",\n \"auth.recovery.error\": \"Failed to send reset email. Please try again.\",\n \"auth.recovery.successHeading\": \"Check your email\",\n \"auth.recovery.successMessage\": \"We sent a password reset link to {{email}}. Please check your inbox and follow the instructions.\",\n \"auth.recovery.backToLogin\": \"Back to login\",\n \"auth.oauth.continueWith\": \"Continue with {{provider}}\",\n \"auth.signIn\": \"Sign In\",\n \"auth.signUp\": \"Sign Up\",\n \"auth.signOut\": \"Sign Out\",\n \"auth.email\": \"Email\",\n \"auth.password\": \"Password\",\n \"auth.forgotPassword\": \"Forgot Password?\",\n \"crud.list.empty\": \"No {{entities}} yet\",\n \"crud.list.addFirst\": \"Add your first {{entity}}\",\n \"crud.list.totalCount\": \"{{count}} total {{entities}}\",\n \"crud.list.searchPlaceholder\": \"Search {{entities}}...\",\n \"crud.list.allFacet\": \"All\",\n \"crud.list.addButton\": \"+ Add {{entity}}\",\n \"crud.detail.notFound\": \"{{entity}} not found.\",\n \"crud.detail.backTo\": \"Back to {{entities}}\",\n \"crud.form.addTitle\": \"Add {{entity}}\",\n \"crud.form.editTitle\": \"Edit {{entity}}\",\n \"crud.form.createSubtitle\": \"Create a new {{entity}}.\",\n \"crud.form.editSubtitle\": \"Update {{entity}} details.\",\n \"crud.form.newBreadcrumb\": \"New {{entity}}\",\n \"crud.form.selectPlaceholder\": \"Select {{label}}...\",\n \"crud.form.saveError\": \"Failed to save {{entity}}\",\n \"crud.form.saving\": \"Saving...\",\n \"crud.form.requiredIndicator\": \"*\",\n \"crud.import.action\": \"Import\",\n \"crud.import.title\": \"Import {{entity}}\",\n \"crud.import.step.download\": \"Template\",\n \"crud.import.step.upload\": \"Upload\",\n \"crud.import.step.mapping\": \"Mapping\",\n \"crud.import.step.importing\": \"Import\",\n \"crud.import.downloadTitle\": \"Download the template\",\n \"crud.import.downloadDescription\": \"Download a CSV template with all available fields for {{entity}}. Fill it in and upload it in the next step.\",\n \"crud.import.downloadTemplate\": \"Download CSV template\",\n \"crud.import.downloadHint\": \"{{count}} fields available\",\n \"crud.import.alreadyHaveFile\": \"I already have a file\",\n \"crud.import.uploadTitle\": \"Drop your CSV file here or click to browse\",\n \"crud.import.uploadHint\": \"Only .csv files are accepted\",\n \"crud.import.invalidFile\": \"Please upload a .csv file.\",\n \"crud.import.emptyFile\": \"The file appears to be empty.\",\n \"crud.import.noRows\": \"The file has headers but no data rows.\",\n \"crud.import.mappingTitle\": \"Map your columns\",\n \"crud.import.mappingDescription\": \"{{file}} — {{columns}} columns, {{rows}} rows\",\n \"crud.import.mappedCount\": \"{{count}} of {{total}} mapped\",\n \"crud.import.csvColumn\": \"CSV Column\",\n \"crud.import.mapsTo\": \"Maps to\",\n \"crud.import.preview\": \"Preview\",\n \"crud.import.skip\": \"— Skip this column\",\n \"crud.import.startImport\": \"Start import\",\n \"crud.import.importing\": \"Importing...\",\n \"crud.import.importingHint\": \"Processing {{count}} rows\",\n \"crud.import.progressCount\": \"{{processed}} of {{total}} rows processed\",\n \"crud.import.doneSuccess\": \"Import complete!\",\n \"crud.import.doneWithErrors\": \"Import completed with errors\",\n \"crud.import.doneCount\": \"{{success}} of {{total}} rows imported successfully\",\n \"crud.import.rowNumber\": \"Row {{row}}:\",\n \"crud.import.toastSuccess\": \"{{count}} records imported\",\n \"crud.import.noConnection\": \"Not connected to the database. Import requires an active connection.\",\n \"crud.export.action\": \"Export\",\n \"crud.export.noData\": \"No data to export.\",\n \"crud.export.toastSuccess\": \"{{count}} records exported\",\n \"crud.delete.title\": \"Delete {{entity}}?\",\n \"crud.delete.confirmNamed\": \"Are you sure you want to delete \\\"{{displayValue}}\\\"? This action cannot be undone.\",\n \"crud.delete.confirmGeneric\": \"Are you sure you want to delete this {{entity}}? This action cannot be undone.\",\n \"crud.delete.cancel\": \"Cancel\",\n \"crud.delete.delete\": \"Delete\",\n \"crud.tabs.access\": \"Access\",\n \"crud.tabs.schedule\": \"Schedule\",\n \"crud.tabs.documents\": \"Documents\",\n \"crud.tabs.financial\": \"Statement\",\n \"crud.tabs.activity\": \"Activity\",\n \"crud.tabs.inventory\": \"Inventory\",\n \"crud.tabs.suppliers\": \"Suppliers\",\n \"crud.tabs.pricing\": \"Pricing\",\n \"crud.tabs.members\": \"Team\",\n \"crud.tabs.stats\": \"Statistics\",\n \"crud.tabs.availability\": \"Availability\",\n \"crud.tabs.orders\": \"Orders\",\n \"crud.orders.all\": \"All\",\n \"crud.orders.columnDate\": \"Date\",\n \"crud.orders.columnStage\": \"Stage\",\n \"crud.orders.columnDescription\": \"Description\",\n \"crud.orders.columnAmount\": \"Amount\",\n \"crud.orders.searchPlaceholder\": \"Search orders...\",\n \"crud.orders.noDocuments\": \"No orders yet\",\n \"crud.orders.stage.draft\": \"Draft\",\n \"crud.orders.stage.quoted\": \"Quoted\",\n \"crud.orders.stage.booked\": \"Booked\",\n \"crud.orders.stage.invoiced\": \"Invoiced\",\n \"crud.orders.stage.paid\": \"Paid\",\n \"crud.orders.stage.partial\": \"Partial\",\n \"crud.orders.stage.overdue\": \"Overdue\",\n \"crud.orders.stage.cancelled\": \"Cancelled\",\n \"crud.orders.stage.no_show\": \"No Show\",\n \"crud.orders.stage.completed\": \"Completed\",\n \"layout.userMenu.profile\": \"Profile\",\n \"layout.userMenu.settings\": \"Settings\",\n \"layout.userMenu.billing\": \"Billing\",\n \"layout.userMenu.help\": \"Help\",\n \"layout.userMenu.lightMode\": \"Light mode\",\n \"layout.userMenu.darkMode\": \"Dark mode\",\n \"layout.userMenu.systemMode\": \"System\",\n \"layout.userMenu.language\": \"Language\",\n \"layout.userMenu.selectLocation\": \"Select location\",\n \"layout.switchingLocation\": \"Switching location…\",\n \"layout.userMenu.signOut\": \"Sign out\",\n \"layout.topbar.searchPlaceholder\": \"Search...\",\n \"layout.topbar.keyboardShortcut\": \"⌘K\",\n \"layout.sidebar.collapse\": \"Collapse sidebar\",\n \"layout.sidebar.expand\": \"Expand sidebar\",\n \"layout.commandPalette.placeholder\": \"Search pages, people, products, services...\",\n \"layout.commandPalette.resultsCount\": \"{{count}} result{{plural}}\",\n \"layout.commandPalette.commandsCount\": \"{{count}} command{{plural}}\",\n \"layout.commandPalette.noResults\": \"No results found.\",\n \"layout.commandPalette.searching\": \"Searching…\",\n \"layout.commandPalette.navigate\": \"navigate\",\n \"layout.commandPalette.open\": \"open\",\n \"billing.title\": \"Billing\",\n \"billing.subtitle\": \"Manage your subscription and billing.\",\n \"billing.currentPlan\": \"Current Plan\",\n \"billing.upgrade\": \"Upgrade\",\n \"billing.downgrade\": \"Downgrade\",\n \"billing.monthly\": \"Monthly\",\n \"billing.yearly\": \"Yearly\",\n \"billing.yearlySave\": \"Save 20%\",\n \"billing.free\": \"Free\",\n \"billing.cancelSubscription\": \"Cancel Subscription\",\n \"billing.canceling\": \"Canceling...\",\n \"billing.resumeSubscription\": \"Resume Subscription\",\n \"billing.resuming\": \"Resuming...\",\n \"billing.features\": \"Features\",\n \"billing.perMonth\": \"/mo\",\n \"billing.perYear\": \"/yr\",\n \"billing.getStarted\": \"Get Started\",\n \"billing.processing\": \"Processing...\",\n \"billing.mostPopular\": \"Most Popular\",\n \"billing.nextBilling\": \"Next billing: {{date}}\",\n \"billing.cancelsOn\": \"Cancels on {{date}}\",\n \"billing.trialEnds\": \"Trial ends {{date}}\",\n \"billing.pastDueWarning\": \"Your payment is past due. Please update your payment method to avoid service interruption.\",\n \"billing.status.active\": \"Active\",\n \"billing.status.trialing\": \"Trial\",\n \"billing.status.pastDue\": \"Past Due\",\n \"billing.status.canceled\": \"Canceled\",\n \"billing.status.paused\": \"Paused\",\n \"organization.invite\": \"Invite\",\n \"organization.members\": \"Members\",\n \"organization.memberCount\": \"{{count}} member{{plural}} in this organization.\",\n \"organization.role\": \"Role\",\n \"organization.emailPlaceholder\": \"team@example.com\",\n \"organization.sendInvites\": \"Send Invites\",\n \"organization.sending\": \"Sending...\",\n \"organization.pending\": \"Pending Invites\",\n \"organization.remove\": \"Remove member\",\n \"organization.resend\": \"Resend\",\n \"organization.revoke\": \"Revoke\",\n \"organization.inviteTitle\": \"Invite Team Members\",\n \"organization.inviteDescription\": \"Send invites to join your organization.\",\n \"organization.inviteSent\": \"Invitations sent\",\n \"organization.inviteSentDescription\": \"Your team members will receive an email with instructions to join.\",\n \"organization.emailAddresses\": \"Email addresses\",\n \"organization.addAnother\": \"Add another\",\n \"organization.selectRole\": \"Select a role\",\n \"organization.sent\": \"Sent {{date}}\",\n \"organization.you\": \"(you)\",\n \"organization.joined\": \"Joined\",\n \"organization.failedInvites\": \"Failed to send invites\",\n \"organization.onboarding.title\": \"Set up your workspace\",\n \"organization.onboarding.namePrompt\": \"What should we call your workspace?\",\n \"organization.onboarding.preferencesPrompt\": \"Regional preferences\",\n \"organization.onboarding.workspaceName\": \"Workspace name\",\n \"organization.onboarding.workspaceNamePlaceholder\": \"My Company\",\n \"organization.onboarding.timezone\": \"Timezone\",\n \"organization.onboarding.currency\": \"Currency\",\n \"organization.onboarding.creating\": \"Setting up your workspace\",\n \"organization.onboarding.creatingDescription\": \"This will only take a moment...\",\n \"organization.onboarding.createWorkspace\": \"Create Workspace\",\n \"organization.onboarding.failedCreate\": \"Failed to create workspace\",\n \"settings.title\": \"Settings\",\n \"settings.subtitle\": \"Manage your account and organization preferences.\",\n \"settings.general\": \"General\",\n \"settings.properties\": \"Properties\",\n \"settings.profile\": \"Profile\",\n \"settings.branding\": \"Branding\",\n \"settings.security\": \"Security\",\n \"settings.team\": \"Team\",\n \"settings.permissions\": \"Permissions\",\n \"settings.locations\": \"Locations\",\n \"settings.holidays\": \"Holidays\",\n \"settings.notifications\": \"Notifications\",\n \"settings.save\": \"Save Changes\",\n \"settings.saving\": \"Saving...\",\n \"settings.companyInfo\": \"Company Information\",\n \"settings.companyInfoDescription\": \"Update your organization details and regional preferences.\",\n \"settings.companyName\": \"Company Name\",\n \"settings.companyNamePlaceholder\": \"Acme Inc.\",\n \"settings.timezone\": \"Timezone\",\n \"settings.timezonePlaceholder\": \"Select timezone\",\n \"settings.currency\": \"Currency\",\n \"settings.currencyPlaceholder\": \"Select currency\",\n \"settings.locale\": \"Locale\",\n \"settings.localePlaceholder\": \"Select locale\",\n \"settings.uploadLogo\": \"Upload Logo\",\n \"settings.uiLanguage\": \"Interface Language\",\n \"settings.uiLanguageDescription\": \"Choose the language for the user interface. This applies to your session only.\",\n \"notifications.title\": \"Notifications\",\n \"notifications.markAllRead\": \"Mark all read\",\n \"notifications.empty\": \"No notifications\",\n \"notifications.whatsNew\": \"What's New\",\n \"notifications.inbox\": \"Inbox\",\n \"user.profile\": \"Profile\",\n \"user.settings\": \"Settings\",\n \"user.help\": \"Help\",\n \"user.shortcuts\": \"Keyboard Shortcuts\",\n \"user.theme\": \"Theme\",\n \"user.themeLight\": \"Light\",\n \"user.themeDark\": \"Dark\",\n \"user.themeSystem\": \"System\",\n \"app.notFound.title\": \"404\",\n \"app.notFound.heading\": \"Page not found\",\n \"app.notFound.message\": \"The page you're looking for doesn't exist or has been moved.\",\n \"app.notFound.goToDashboard\": \"Go to Dashboard\",\n \"app.accessDenied.heading\": \"Access Denied\",\n \"app.accessDenied.message\": \"You don't have permission to view this page.\",\n \"auth.login.enterCredentials\": \"Enter your credentials to access your account\",\n \"auth.login.failedDefault\": \"Failed to sign in. Please try again.\",\n \"auth.login.failedWithProvider\": \"Failed to sign in with {{provider}}.\",\n \"auth.login.orContinueWith\": \"or continue with\",\n \"auth.login.placeholder.email\": \"you@example.com\",\n \"auth.login.placeholder.password\": \"Enter your password\",\n \"auth.login.signingIn\": \"Signing in...\",\n \"auth.login.welcomeBack\": \"Welcome Back\",\n \"auth.login.welcomeTo\": \"Welcome to {{appName}}\",\n \"auth.recovery.checkEmail\": \"Check your email\",\n \"auth.recovery.description\": \"Enter your email address and we will send you a link to reset your password.\",\n \"auth.recovery.failedDefault\": \"Failed to send reset email. Please try again.\",\n \"auth.recovery.resetLinkSent\": \"We sent a password reset link to <strong>{{email}}</strong>. Please check your inbox and follow the instructions.\",\n \"auth.recovery.sendResetLink\": \"Send reset link\",\n \"auth.recovery.sending\": \"Sending...\",\n \"auth.signup.confirmPassword\": \"Confirm password\",\n \"auth.signup.creating\": \"Creating account...\",\n \"auth.signup.emailVerification\": \"Account created for {{email}}. Check your inbox to confirm your email before signing in.\",\n \"auth.signup.failedDefault\": \"Failed to create account. Please try again.\",\n \"auth.signup.fullName\": \"Full name\",\n \"auth.signup.getStarted\": \"Get started with your new account\",\n \"auth.signup.passwordMinLength\": \"Password must be at least 8 characters.\",\n \"auth.signup.passwordsMismatch\": \"Passwords do not match.\",\n \"auth.signup.placeholder.confirm\": \"Repeat your password\",\n \"auth.signup.placeholder.name\": \"John Doe\",\n \"auth.signup.placeholder.password\": \"At least 8 characters\",\n \"auth.signup.termsAgreement\": \"By creating an account, you agree to our\",\n \"billing.invoice.amount\": \"Amount\",\n \"billing.invoice.date\": \"Date\",\n \"billing.invoice.invoice\": \"Invoice\",\n \"billing.invoice.noInvoices\": \"No invoices yet\",\n \"billing.invoice.status\": \"Status\",\n \"billing.paywall.notAvailable\": \"This feature is not available on your current plan.\",\n \"billing.paywall.requiresPlan\": \"This feature requires the {{plan}} plan or higher.\",\n \"billing.paywall.upgradeRequired\": \"Upgrade Required\",\n \"billing.paywall.viewPlans\": \"View Plans\",\n \"chat.defaultTitle\": \"Assistant\",\n \"chat.tryAsking\": \"Try asking\",\n \"chat.fab.tryIt\": \"Try it\",\n \"chat.messagePlaceholder\": \"Message...\",\n \"chat.toolsAvailable\": \"{{count}} tools available\",\n \"chat.suggestion.dashboard.kpi-summary.0\": \"How is my business doing today?\",\n \"chat.suggestion.dashboard.kpi-summary.1\": \"What's my revenue today?\",\n \"chat.suggestion.dashboard.kpi-summary.2\": \"Give me a summary of today\",\n \"chat.suggestion.agenda.list-appointments.0\": \"What's on the agenda today?\",\n \"chat.suggestion.agenda.list-appointments.1\": \"Show me tomorrow's appointments\",\n \"chat.suggestion.agenda.list-appointments.2\": \"Who has the most bookings this week?\",\n \"chat.suggestion.agenda.create-appointment.0\": \"Book a haircut for Sarah tomorrow at 10am\",\n \"chat.suggestion.agenda.check-availability.0\": \"When is Ana available tomorrow?\",\n \"chat.suggestion.agenda.check-availability.1\": \"Find a 90-minute slot for Carlos this week\",\n \"chat.suggestion.financial.get-revenue.0\": \"How much did we make today?\",\n \"chat.suggestion.financial.get-revenue.1\": \"What's this month's revenue?\",\n \"chat.suggestion.financial.get-revenue.2\": \"Compare this week's revenue to last week\",\n \"chat.suggestion.financial.create-invoice.0\": \"Create an invoice for a new client\",\n \"chat.suggestion.financial.list-payables.0\": \"Show me overdue bills\",\n \"chat.suggestion.financial.list-payables.1\": \"What bills are due this week?\",\n \"chat.suggestion.inventory.low-stock.0\": \"Which products are running low?\",\n \"chat.suggestion.inventory.low-stock.1\": \"Show me a stock summary\",\n \"chat.suggestion.inventory.low-stock.2\": \"What are my most used products?\",\n \"chat.suggestion.crm.count-customers.0\": \"How many customers do we have?\",\n \"chat.suggestion.crm.count-customers.1\": \"Who are my top customers?\",\n \"chat.suggestion.crm.list-leads.0\": \"Show new leads from this week\",\n \"chat.suggestion.crm.list-leads.1\": \"Which leads need follow-up?\",\n \"chat.suggestion.crm.list-leads.2\": \"What's our conversion rate?\",\n \"chat.suggestion.custom_forms.list-templates.0\": \"What forms do we have?\",\n \"chat.suggestion.custom_forms.list-templates.1\": \"Show me anamnesis templates\",\n \"chat.suggestion.custom_forms.list-documents.0\": \"Show this client's documents\",\n \"common.create\": \"Create\",\n \"common.feature\": \"Feature\",\n \"common.message\": \"Message...\",\n \"common.more\": \"More\",\n \"common.noContent\": \"No content yet\",\n \"crud.form.createDescription\": \"Create a new {{entity}}.\",\n \"crud.form.editDescription\": \"Update {{entity}} details.\",\n \"crud.form.failedToSave\": \"Failed to save {{entity}}\",\n \"crud.form.saveChanges\": \"Save Changes\",\n \"crud.form.select\": \"Select {{field}}...\",\n \"crud.list.addEntity\": \"+ Add {{entity}}\",\n \"crud.list.search\": \"Search {{entities}}...\",\n \"layout.bottomNav.chat\": \"Chat\",\n \"layout.commandPalette.commandCount\": \"{{count}} command{{plural}}\",\n \"layout.commandPalette.description\": \"Search for pages, actions, people, products and services\",\n \"layout.commandPalette.resultCount\": \"{{count}} result{{plural}}\",\n \"layout.commandPalette.title\": \"Command palette\",\n \"layout.mobileDrawer.description\": \"Application navigation links\",\n \"layout.mobileDrawer.title\": \"Navigation menu\",\n \"layout.topbar.search\": \"Search...\",\n \"notifications.noUpdates\": \"No updates yet\",\n \"organization.createOrg\": \"Create organization\",\n \"organization.createOrgDescription\": \"Create a new workspace for your team.\",\n \"organization.createOrgTitle\": \"Create Organization\",\n \"organization.creating\": \"Creating...\",\n \"organization.invite.addAnother\": \"Add another\",\n \"organization.invite.description\": \"Send invites to join your organization.\",\n \"organization.invite.emailLabel\": \"Email addresses\",\n \"organization.invite.roleLabel\": \"Role\",\n \"organization.invite.rolePlaceholder\": \"Select a role\",\n \"organization.invite.sendInvites\": \"Send Invites\",\n \"organization.invite.sending\": \"Sending...\",\n \"organization.invite.sent\": \"Invitations sent\",\n \"organization.invite.sentDescription\": \"Your team members will receive an email with instructions to join.\",\n \"organization.invite.title\": \"Invite Team Members\",\n \"organization.onboarding.oneMoment\": \"This will only take a moment...\",\n \"organization.onboarding.preferences\": \"Regional preferences\",\n \"organization.onboarding.settingUp\": \"Setting up your workspace\",\n \"organization.onboarding.setupWorkspace\": \"Set up your workspace\",\n \"organization.onboarding.whatName\": \"What should we call your workspace?\",\n \"organization.orgNamePlaceholder\": \"Organization name\",\n \"organization.permissions.createCustom\": \"Create Custom Profile\",\n \"organization.permissions.createProfile\": \"Create Profile\",\n \"organization.permissions.duplicate\": \"Duplicate\",\n \"organization.permissions.copyName\": \"{{name}} (copy)\",\n \"organization.permissions.description\": \"Description\",\n \"organization.permissions.descriptionPlaceholder\": \"Optional description\",\n \"organization.permissions.editProfile\": \"Edit: {{name}}\",\n \"organization.permissions.manageBilling\": \"Manage Billing\",\n \"organization.permissions.managePermissions\": \"Manage Permissions\",\n \"organization.permissions.manageSettings\": \"Manage Settings\",\n \"organization.permissions.manageTeam\": \"Manage Team\",\n \"organization.permissions.memberCount\": \"{{count}} member{{plural}}\",\n \"organization.permissions.previewAs\": \"Preview as\",\n \"organization.permissions.previewingAs\": \"Previewing as\",\n \"organization.permissions.exitPreview\": \"Exit Preview\",\n \"organization.permissions.searchFeatures\": \"Search features...\",\n \"organization.permissions.profileName\": \"Profile Name\",\n \"organization.permissions.profileNamePlaceholder\": \"e.g. Custom Role\",\n \"organization.permissions.subtitle\": \"Manage roles and their permissions.\",\n \"organization.permissions.system\": \"System\",\n \"organization.permissions.systemPermissions\": \"System Permissions\",\n \"organization.permissions.title\": \"Permission Profiles\",\n \"organization.permissions.updateProfile\": \"Update Profile\",\n \"organization.team.invite\": \"Invite\",\n \"organization.team.joined\": \"Joined\",\n \"organization.team.member\": \"Member\",\n \"organization.team.memberCount\": \"{{count}} member{{plural}} in this organization.\",\n \"organization.team.pendingInvites\": \"Pending Invites\",\n \"organization.team.removeMember\": \"Remove member\",\n \"organization.team.resend\": \"Resend\",\n \"organization.team.revoke\": \"Revoke\",\n \"organization.team.inviteResent\": \"Invite resent\",\n \"organization.team.inviteRevoked\": \"Invite revoked\",\n \"organization.team.inviteActionFailed\": \"Couldn't complete that\",\n \"organization.team.role\": \"Role\",\n \"organization.team.sent\": \"Sent {{date}}\",\n \"organization.team.title\": \"Members\",\n \"organization.team.you\": \"(you)\",\n \"settings.branding.accentColor\": \"Accent Color\",\n \"settings.branding.chooseFile\": \"Choose File\",\n \"settings.branding.favicon\": \"Favicon\",\n \"settings.branding.faviconHint\": \"Recommended: 32x32px, PNG or ICO\",\n \"settings.branding.logo\": \"Logo\",\n \"settings.branding.logoHint\": \"Recommended: 200x50px, PNG or SVG\",\n \"settings.branding.preview\": \"Preview\",\n \"settings.branding.primaryColor\": \"Primary Color\",\n \"settings.branding.saveBranding\": \"Save Branding\",\n \"settings.branding.subtitle\": \"Customize the look and feel of your workspace.\",\n \"settings.branding.title\": \"Branding\",\n \"settings.company.currency\": \"Currency\",\n \"settings.company.currencyPlaceholder\": \"Select currency\",\n \"settings.company.locale\": \"Locale\",\n \"settings.company.localePlaceholder\": \"Select locale\",\n \"settings.company.name\": \"Company Name\",\n \"settings.company.subtitle\": \"Update your organization details and regional preferences.\",\n \"settings.company.timezone\": \"Timezone\",\n \"settings.company.timezonePlaceholder\": \"Select timezone\",\n \"settings.company.title\": \"Company Information\",\n \"settings.holidays.addHoliday\": \"Add Holiday\",\n \"settings.holidays.annual\": \"Annual\",\n \"settings.holidays.descriptionPlaceholder\": \"Description (optional)\",\n \"settings.holidays.empty\": \"No holidays configured yet.\",\n \"settings.holidays.namePlaceholder\": \"Holiday name *\",\n \"settings.holidays.newHoliday\": \"New Holiday\",\n \"settings.holidays.recurringAnnually\": \"Recurring annually\",\n \"settings.holidays.subtitle\": \"Non-working days and recurring holidays.\",\n \"settings.holidays.title\": \"Holidays\",\n \"settings.fieldRules\": \"Field Rules\",\n \"settings.fieldRules.subtitle\": \"Configure which fields are required or visible for each register type.\",\n \"settings.fieldRules.required\": \"Required\",\n \"settings.fieldRules.inForm\": \"Form\",\n \"settings.fieldRules.inTable\": \"Table\",\n \"settings.fieldRules.inDetail\": \"Detail\",\n \"settings.fieldRules.field\": \"Field\",\n \"settings.fieldRules.resetDefaults\": \"Reset to Defaults\",\n \"settings.fieldRules.resetConfirm\": \"Reset all field rules for {{entity}} to their defaults?\",\n \"settings.fieldRules.saved\": \"Field rules saved\",\n \"settings.fieldRules.saveFailed\": \"Failed to save field rules\",\n \"settings.fieldRules.modified\": \"{{count}} modified\",\n \"settings.fieldRules.searchPlaceholder\": \"Search register types...\",\n \"settings.fieldRules.noEntities\": \"No register types available.\",\n \"settings.fieldRules.coreRegisters\": \"Register Types\",\n \"settings.fieldRules.otherRegisters\": \"Other\",\n \"settings.fieldRules.showMore\": \"{{count}} more register types...\",\n \"settings.fieldRules.showLess\": \"Show less\",\n \"settings.locations.addFirst\": \"Add your first location\",\n \"settings.locations.addLocation\": \"Add Location\",\n \"settings.locations.adding\": \"Adding...\",\n \"settings.locations.addressPlaceholder\": \"Address\",\n \"settings.locations.cityPlaceholder\": \"City\",\n \"settings.locations.countDescription\": \"{{count}} location{{plural}} registered.\",\n \"settings.locations.countryPlaceholder\": \"Country\",\n \"settings.locations.empty\": \"No locations have been added to this organization yet.\",\n \"settings.locations.headquarters\": \"Headquarters\",\n \"settings.locations.namePlaceholder\": \"Location name *\",\n \"settings.locations.newLocation\": \"New Location\",\n \"settings.locations.noLocations\": \"No locations configured yet.\",\n \"settings.locations.phonePlaceholder\": \"Phone\",\n \"settings.locations.statePlaceholder\": \"State\",\n \"settings.locations.title\": \"Locations\",\n \"settings.profile.email\": \"Email\",\n \"settings.profile.emailHelp\": \"Email cannot be changed directly. Contact support for assistance.\",\n \"settings.profile.fullName\": \"Full Name\",\n \"settings.profile.saveProfile\": \"Save Profile\",\n \"settings.profile.subtitle\": \"Manage your personal information and account settings.\",\n \"settings.profile.title\": \"Profile\",\n \"settings.security.inviteOnly\": \"Invite-Only Access\",\n \"settings.security.inviteOnlyDescription\": \"New users can only join this organization via invite.\",\n \"settings.security.linkSent\": \"Link Sent\",\n \"settings.security.orgSecuritySubtitle\": \"Security policies applied to all members of this organization.\",\n \"settings.security.orgSecurityTitle\": \"Organization Security\",\n \"settings.security.passwordSubtitle\": \"Manage your account password. A reset link will be sent to your email.\",\n \"settings.security.passwordTitle\": \"Password\",\n \"settings.security.require2FA\": \"Require Two-Factor Authentication\",\n \"settings.security.require2FADescription\": \"All members must enable 2FA to access this organization.\",\n \"settings.security.resetLinkDescription\": \"Send a password reset link to your email address.\",\n \"settings.security.resetLinkSent\": \"Reset link sent — check your inbox.\",\n \"settings.security.resetPassword\": \"Reset Password\",\n \"settings.security.sessionTimeout\": \"Session Timeout\",\n \"settings.security.sessionTimeoutDescription\": \"Automatically sign out inactive users after this period.\",\n \"settings.plugin.agenda\": \"Agenda\",\n \"settings.plugin.financial\": \"Financial\",\n \"settings.plugin.inventory\": \"Inventory\",\n \"settings.plugin.crm\": \"Sales & CRM\",\n \"crud.archetype.comingSoon\": \"Coming Soon\",\n \"crud.archetype.access.title\": \"Access & Permissions\",\n \"crud.archetype.access.description\": \"Manage login credentials, assign permission roles, and control what this person can access in the system.\",\n \"crud.access.accountStatus\": \"Account Status\",\n \"crud.access.statusLinked\": \"Active\",\n \"crud.access.statusPending\": \"Invite pending\",\n \"crud.access.statusAccepted\": \"Accepted\",\n \"crud.access.statusExpired\": \"Invite expired\",\n \"crud.access.statusRevoked\": \"Revoked\",\n \"crud.access.acceptedAt\": \"Accepted {{date}}\",\n \"crud.access.revokedDesc\": \"Access was revoked. You can send a new invite.\",\n \"crud.access.grantAccess\": \"Grant Access\",\n \"crud.access.account\": \"Account\",\n \"crud.access.accountDesc\": \"Login credentials and account status for this person.\",\n \"crud.access.resetPassword\": \"Reset Password\",\n \"crud.access.passwordResetSent\": \"Password reset email sent.\",\n \"crud.access.profileUpdated\": \"Permission profile updated.\",\n \"crud.access.inviteResent\": \"Invite resent.\",\n \"crud.access.inviteRevoked\": \"Invite revoked.\",\n \"crud.access.accessRemoved\": \"Access removed.\",\n \"crud.access.dangerZone\": \"Danger Zone\",\n \"crud.access.dangerZoneDesc\": \"Irreversible actions that affect this person's access to the system.\",\n \"crud.access.removeAccess\": \"Remove Access\",\n \"crud.access.revokeInvite\": \"Revoke Invite\",\n \"crud.access.confirmRemoveTitle\": \"Are you sure?\",\n \"crud.access.confirmRemoveDesc\": \"This person will lose all system access immediately. This action cannot be undone.\",\n \"crud.access.accountLinked\": \"Account linked\",\n \"crud.access.noAccount\": \"No account linked\",\n \"crud.access.noAccountDesc\": \"This person does not have a login account and cannot access the system.\",\n \"crud.access.setupDesc\": \"Set up system access for this person by entering their email and choosing a permission profile.\",\n \"crud.access.emailPlaceholder\": \"person@example.com\",\n \"crud.access.sendInvite\": \"Send Invite\",\n \"crud.access.invitePending\": \"Invite pending\",\n \"crud.access.inviteSent\": \"Invite sent {{date}}\",\n \"crud.access.permissionProfile\": \"Permission Profile\",\n \"crud.access.profileDesc\": \"Define what this person can access and do in the system.\",\n \"crud.access.systemAccess\": \"System Access\",\n \"crud.access.effectivePermissions\": \"Effective Permissions\",\n \"crud.access.effectiveDesc\": \"What this person can do based on their assigned profile.\",\n \"crud.access.feature\": \"Feature\",\n \"crud.access.joined\": \"Joined {{date}}\",\n \"crud.access.noEmail\": \"No email address\",\n \"crud.access.noEmailDesc\": \"Add an email address to this person to link them to a system account.\",\n \"crud.access.manageTeam\": \"Manage Team\",\n \"crud.access.manageBilling\": \"Manage Billing\",\n \"crud.access.manageSettings\": \"Manage Settings\",\n \"crud.access.managePermissions\": \"Manage Permissions\",\n \"crud.archetype.activity.title\": \"Activity Timeline\",\n \"crud.archetype.activity.description\": \"View a chronological log of all actions, changes, and events related to this person.\",\n \"crud.archetype.documents.title\": \"Documents\",\n \"crud.archetype.documents.description\": \"Attach and manage files, contracts, certifications, and other documents for this person.\",\n \"crud.archetype.schedule.title\": \"Schedule\",\n \"crud.archetype.schedule.description\": \"View and manage appointments, shifts, and availability for this person.\",\n \"crud.archetype.inventory.title\": \"Inventory & Stock\",\n \"crud.archetype.inventory.description\": \"Track stock levels, view movement history, set reorder alerts, and manage inventory across locations.\",\n \"crud.archetype.suppliers.title\": \"Suppliers\",\n \"crud.archetype.suppliers.description\": \"View and manage which suppliers provide this product, compare costs, and track purchase orders.\",\n \"crud.archetype.pricing.title\": \"Pricing History\",\n \"crud.archetype.pricing.description\": \"View price changes over time, manage promotional pricing, and set location-specific prices.\",\n \"crud.archetype.productActivity.title\": \"Activity\",\n \"crud.archetype.productActivity.description\": \"View a log of all changes, stock adjustments, and events related to this product.\",\n \"crud.archetype.availability.title\": \"Availability\",\n \"crud.archetype.availability.description\": \"Configure when this service can be booked, set duration rules, and manage capacity limits.\",\n \"crud.archetype.servicePricing.title\": \"Pricing Tiers\",\n \"crud.archetype.servicePricing.description\": \"Manage pricing tiers, member discounts, and location-specific pricing for this service.\",\n \"crud.archetype.serviceActivity.title\": \"Activity\",\n \"crud.archetype.serviceActivity.description\": \"View a log of all bookings, changes, and events related to this service.\",\n \"crud.archetype.members.title\": \"Team Members\",\n \"crud.archetype.members.description\": \"View and manage staff assigned to this location, their roles and schedules.\",\n \"crud.archetype.locationSchedule.title\": \"Operating Hours\",\n \"crud.archetype.locationSchedule.description\": \"Set business hours, holidays, and special schedules for this location.\",\n \"crud.archetype.locationStats.title\": \"Statistics\",\n \"crud.archetype.locationStats.description\": \"View performance metrics, revenue, and activity for this location.\",\n \"crud.archetype.locationActivity.title\": \"Activity\",\n \"crud.archetype.locationActivity.description\": \"View a log of all events, changes, and operations at this location.\",\n \"crud.archetype.owner.noOwner\": \"No owner assigned\",\n \"crud.archetype.owner.assignHint\": \"Edit this record to assign an owner.\",\n \"crud.archetype.owner.name\": \"Name\",\n \"crud.archetype.owner.phone\": \"Phone\",\n \"crud.archetype.owner.email\": \"Email\",\n \"crud.archetype.owner.document\": \"Document\",\n \"crud.archetype.owner.address\": \"Address\",\n \"crud.archetype.owner.active\": \"Active\",\n \"crud.archetype.owner.inactive\": \"Inactive\",\n \"crud.archetype.history.title\": \"History\",\n \"crud.archetype.history.description\": \"View visit history, past reports, treatments, and timeline of events.\",\n \"crud.archetype.subjectDocuments.title\": \"Documents\",\n \"crud.archetype.subjectDocuments.description\": \"Attach and manage files, lab results, images, and certificates.\",\n \"schedule.days.sun\": \"Sun\",\n \"schedule.days.mon\": \"Mon\",\n \"schedule.days.tue\": \"Tue\",\n \"schedule.days.wed\": \"Wed\",\n \"schedule.days.thu\": \"Thu\",\n \"schedule.days.fri\": \"Fri\",\n \"schedule.days.sat\": \"Sat\",\n \"schedule.editor.weeklyTitle\": \"Weekly Working Hours\",\n \"schedule.editor.weeklyDescription\": \"Set when this professional is regularly available\",\n \"schedule.editor.unavailable\": \"Unavailable\",\n \"schedule.editor.newInterval\": \"New interval for {{day}}\",\n \"schedule.editor.addHoursFor\": \"Add hours for {{day}}\",\n \"schedule.editor.removeInterval\": \"Remove interval\",\n \"schedule.editor.copyToAll\": \"Copy to all days\",\n \"schedule.editor.bufferTooltip\": \"Buffer time between appointments\",\n \"schedule.editor.min\": \"min\",\n \"schedule.editor.exceptionsTitle\": \"Date Exceptions\",\n \"schedule.editor.exceptionsDescription\": \"Override working hours for specific dates\",\n \"schedule.editor.addException\": \"Add Exception\",\n \"schedule.editor.noExceptions\": \"No date exceptions configured\",\n \"schedule.editor.startDate\": \"Start date\",\n \"schedule.editor.endDate\": \"End date\",\n \"schedule.editor.type\": \"Type\",\n \"schedule.editor.customHours\": \"Custom hours\",\n \"schedule.editor.workingHours\": \"Working hours\",\n \"schedule.editor.to\": \"to\",\n \"schedule.editor.addTimeBlock\": \"Add time block\",\n \"schedule.editor.notes\": \"Notes\",\n \"schedule.editor.notesPlaceholder\": \"e.g. Vacation, Holiday, Training...\",\n \"schedule.editor.saveException\": \"Save Exception\",\n \"schedule.editor.removeException\": \"Remove exception\",\n \"schedule.editor.failedToLoad\": \"Failed to load schedule\",\n \"schedule.editor.saved\": \"Working hours saved\",\n \"schedule.editor.failedToSave\": \"Failed to save\",\n \"schedule.editor.selectStartDate\": \"Please select a start date\",\n \"schedule.editor.endDateAfterStart\": \"End date must be after start date\",\n \"schedule.editor.exceptionAdded\": \"Exception added\",\n \"schedule.editor.failedToSaveException\": \"Failed to save exception\",\n \"schedule.editor.exceptionRemoved\": \"Exception removed\",\n \"schedule.editor.failedToDelete\": \"Failed to delete\",\n \"schedule.blockSettings.title\": \"Block Settings\",\n \"schedule.blockSettings.location\": \"Location\",\n \"schedule.blockSettings.noLocation\": \"No location\",\n \"schedule.blockSettings.maxConcurrent\": \"Max concurrent\",\n \"schedule.blockSettings.minAdvance\": \"Min advance\",\n \"schedule.blockSettings.maxAdvance\": \"Max advance\",\n \"schedule.blockSettings.hrs\": \"hrs\",\n \"schedule.blockSettings.days\": \"days\",\n \"schedule.blockSettings.label\": \"Label\",\n \"schedule.blockSettings.labelPlaceholder\": \"e.g. Morning - Cuts only\",\n \"schedule.blockSettings.allowedServices\": \"Allowed services\",\n \"schedule.blockSettings.allServices\": \"All services\",\n \"schedule.blockSettings.oneService\": \"1 service\",\n \"schedule.blockSettings.nServices\": \"{{count}} services\",\n \"registry.suppliers\": \"Supplier\",\n \"registry.suppliers.description\": \"Manage your product and material suppliers\",\n \"registry.product-categories\": \"Product Category\",\n \"registry.product-categories.description\": \"Product categories for organization\",\n \"registry.stock-locations\": \"Stock Location\",\n \"registry.stock-locations.description\": \"Physical storage locations for inventory\",\n \"registry.measurement-units\": \"Measurement Unit\",\n \"registry.measurement-units.description\": \"Standard units of measure\",\n \"registry.payment-methods\": \"Payment Method\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.cost-centers\": \"Cost Center\",\n \"registry.bank-accounts\": \"Bank Account\",\n \"registry.commission-rules\": \"Commission Rule\",\n \"registry.price-tables\": \"Price Table\",\n \"registry.price-variations\": \"Price Variation\",\n \"registry.payment-method-types\": \"Payment Type\",\n \"registry.card-brands\": \"Card Brand\",\n \"registry.lead-sources\": \"Lead Source\",\n \"registry.tags\": \"Tag\",\n \"registry.activity-types\": \"Activity Type\",\n \"org.connectionError.title\": \"Connection failed\",\n \"org.connectionError.description\": \"Unable to connect to the server. Please check your internet connection and try again.\",\n \"org.connectionError.retry\": \"Try again\",\n \"app.mockMode.banner\": \"You are in offline mode. Data shown may not be up to date.\",\n},\n 'pt-BR': {\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.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.general\": \"Geral\",\n \"settings.properties\": \"Propriedades\",\n \"settings.profile\": \"Perfil\",\n \"settings.branding\": \"Marca\",\n \"settings.security\": \"Segurança\",\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 \"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.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.messagePlaceholder\": \"Mensagem...\",\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.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}\n","import * as React from 'react'\nimport { shellTranslations } from './shell-translations'\n\nexport interface I18nConfig {\n defaultLocale: string\n supported: string[]\n translations: Record<string, Record<string, string>>\n}\n\nconst I18nContext = React.createContext<I18nConfig>({\n defaultLocale: 'en',\n supported: ['en'],\n translations: {},\n})\n\nexport const I18nProvider = I18nContext.Provider\n\nexport function useI18nConfig(): I18nConfig {\n return React.useContext(I18nContext)\n}\n\nexport function useTranslation(): (key: string, params?: Record<string, string | number>) => string {\n const config = React.useContext(I18nContext)\n const localeStore = useLocaleStore()\n const locale = localeStore.locale\n\n return React.useCallback(\n (key: string, params?: Record<string, string | number>): string => {\n const localizedTranslations = config.translations[locale] ?? {}\n const fallback = config.translations[config.defaultLocale] ?? {}\n // Global fallback lets plugins register their locales independently of any\n // I18nProvider — needed when a de-bridged plugin runs under a host shell\n // that doesn't mount @fayz-ai/core's I18nProvider (incremental de-bridge), and\n // for manifest apps where plugins self-register translations.\n const gLocale = _globalTranslations[locale] ?? {}\n const gFallback = _globalTranslations[config.defaultLocale] ?? {}\n let raw = localizedTranslations[key] ?? gLocale[key] ?? fallback[key] ?? gFallback[key] ?? key\n\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n raw = raw.replace(new RegExp(`\\\\{\\\\{${k}\\\\}\\\\}`, 'g'), String(v))\n }\n }\n return raw\n },\n [config, locale],\n )\n}\n\n// Minimal locale store (avoids circular dep with stores package)\ninterface LocaleStore {\n locale: string\n setLocale: (locale: string) => void\n}\n\nlet _localeStore: LocaleStore = {\n locale: 'en',\n setLocale: (l) => { _localeStore.locale = l },\n}\nconst _localeListeners = new Set<() => void>()\n\nexport function setLocaleStore(store: LocaleStore): void {\n _localeStore = store\n}\n\nfunction useLocaleStore(): LocaleStore {\n const locale = React.useSyncExternalStore(\n (listener) => {\n _localeListeners.add(listener)\n return () => _localeListeners.delete(listener)\n },\n getCurrentLocale,\n getCurrentLocale,\n )\n return React.useMemo(() => ({ locale, setLocale: setCurrentLocale }), [locale])\n}\n\nexport function getCurrentLocale(): string {\n return _localeStore.locale\n}\n\nexport function setCurrentLocale(locale: string): void {\n if (_localeStore.locale === locale) return\n _localeStore.setLocale(locale)\n _localeListeners.forEach((listener) => listener())\n}\n\n// Core built-in translations\nexport const coreTranslations: Record<string, Record<string, string>> = {\n en: {\n 'common.save': 'Save',\n 'common.saveChanges': 'Save Changes',\n 'common.saving': 'Saving...',\n 'common.cancel': 'Cancel',\n 'common.delete': 'Delete',\n 'common.edit': 'Edit',\n 'common.close': 'Close',\n 'common.confirm': 'Confirm',\n 'common.discard': 'Discard',\n 'common.back': 'Back',\n 'common.formIncomplete': 'Fill in the required fields before saving.',\n 'connectors.title': 'Integrations',\n 'connectors.subtitle': 'Connect external providers to this module.',\n 'connectors.connected': 'Connected',\n 'connectors.notConnected': 'Not connected',\n 'connectors.connect': 'Connect',\n 'connectors.disconnect': 'Disconnect',\n 'connectors.test': 'Test',\n 'connectors.save': 'Save connection',\n 'connectors.testing': 'Testing…',\n 'connectors.saving': 'Saving…',\n 'connectors.empty': 'No integrations available for this module yet.',\n 'connectors.configure': 'Configure',\n 'saveBar.unsaved': 'Unsaved changes',\n 'common.add': 'Add',\n 'common.loading': 'Loading...',\n 'common.error': 'Something went wrong',\n 'common.noResults': 'No results found.',\n 'common.search': 'Search',\n 'common.actions': 'Actions',\n 'common.continue': 'Continue',\n 'common.done': 'Done',\n 'common.yes': 'Yes',\n 'common.no': 'No',\n 'common.active': 'Active',\n 'common.inactive': 'Inactive',\n 'common.overview': 'Overview',\n 'common.settings': 'Settings',\n 'common.plugins': 'Plugins',\n 'common.new': 'New',\n 'common.filter': 'Filter',\n 'common.export': 'Export',\n 'common.import': 'Import',\n 'common.preview': 'Preview',\n 'common.total': 'Total',\n 'crud.newItem': 'New {{name}}',\n 'crud.editItem': 'Edit {{name}}',\n 'crud.deleteConfirm': 'Delete {{name}}?',\n 'crud.deleteMessage': 'This action cannot be undone.',\n 'crud.created': '{{name}} created',\n 'crud.updated': '{{name}} updated',\n 'crud.deleted': '{{name}} deleted',\n 'crud.noItems': 'No {{namePlural}} yet.',\n 'auth.login.title': 'Sign in',\n 'auth.login.subtitle': 'Enter your credentials to access your account',\n 'auth.login.emailLabel': 'Email',\n 'auth.login.passwordLabel': 'Password',\n 'auth.login.submit': 'Sign in',\n 'auth.login.forgotPassword': 'Forgot password?',\n 'auth.login.noAccount': \"Don't have an account?\",\n 'auth.login.signUpLink': 'Sign up',\n 'auth.signup.title': 'Create account',\n 'auth.signup.submit': 'Create account',\n 'auth.signup.hasAccount': 'Already have an account?',\n 'auth.signup.signInLink': 'Sign in',\n 'settings.title': 'Settings',\n 'settings.company': 'Company',\n 'settings.branding': 'Branding',\n 'settings.security': 'Security',\n 'settings.team': 'Team',\n 'settings.billing': 'Billing',\n 'settings.locations': 'Locations',\n 'billing.title': 'Plans & Billing',\n 'billing.currentPlan': 'Current Plan',\n 'billing.upgrade': 'Upgrade',\n 'billing.manage': 'Manage Subscription',\n },\n 'pt-BR': {\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.discard': 'Descartar',\n 'common.back': 'Voltar',\n 'common.formIncomplete': 'Preencha os campos obrigatórios antes de salvar.',\n 'connectors.title': 'Integrações',\n 'connectors.subtitle': 'Conecte provedores externos a este módulo.',\n 'connectors.connected': 'Conectado',\n 'connectors.notConnected': 'Não conectado',\n 'connectors.connect': 'Conectar',\n 'connectors.disconnect': 'Desconectar',\n 'connectors.test': 'Testar',\n 'connectors.save': 'Salvar conexão',\n 'connectors.testing': 'Testando…',\n 'connectors.saving': 'Salvando…',\n 'connectors.empty': 'Nenhuma integração disponível para este módulo ainda.',\n 'connectors.configure': 'Configurar',\n 'saveBar.unsaved': 'Alterações não salvas',\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': 'Concluído',\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.settings': 'Configurações',\n 'common.plugins': 'Plugins',\n 'common.new': 'Novo',\n 'common.filter': 'Filtrar',\n 'common.export': 'Exportar',\n 'common.import': 'Importar',\n 'common.preview': 'Pré-visualizar',\n 'common.total': 'Total',\n 'crud.newItem': 'Novo {{name}}',\n 'crud.editItem': 'Editar {{name}}',\n 'crud.deleteConfirm': 'Excluir {{name}}?',\n 'crud.deleteMessage': 'Esta ação não pode ser desfeita.',\n 'crud.created': '{{name}} criado',\n 'crud.updated': '{{name}} atualizado',\n 'crud.deleted': '{{name}} excluído',\n 'crud.noItems': 'Nenhum {{namePlural}} ainda.',\n 'auth.login.title': 'Entrar',\n 'auth.login.subtitle': 'Digite suas credenciais para acessar sua conta',\n 'auth.login.emailLabel': 'E-mail',\n 'auth.login.passwordLabel': 'Senha',\n 'auth.login.submit': 'Entrar',\n 'auth.login.forgotPassword': 'Esqueceu a senha?',\n 'auth.login.noAccount': 'Não tem uma conta?',\n 'auth.login.signUpLink': 'Cadastrar',\n 'auth.signup.title': 'Criar conta',\n 'auth.signup.submit': 'Criar conta',\n 'auth.signup.hasAccount': 'Já tem uma conta?',\n 'auth.signup.signInLink': 'Entrar',\n 'settings.title': 'Configurações',\n 'settings.company': 'Empresa',\n 'settings.branding': 'Identidade Visual',\n 'settings.security': 'Segurança',\n 'settings.team': 'Equipe',\n 'settings.billing': 'Faturamento',\n 'settings.locations': 'Localizações',\n 'billing.title': 'Planos e Faturamento',\n 'billing.currentPlan': 'Plano Atual',\n 'billing.upgrade': 'Fazer Upgrade',\n 'billing.manage': 'Gerenciar Assinatura',\n },\n}\n\n// Global translation registry — plugins merge their locales here so keys resolve\n// regardless of which shell mounts the I18nProvider.\nlet _globalTranslations: Record<string, Record<string, string>> = {}\n\nexport function registerTranslations(translations?: Record<string, Record<string, string>>): void {\n if (!translations) return\n _globalTranslations = mergeTranslations(_globalTranslations, translations)\n}\n\nexport function mergeTranslations(\n base: Record<string, Record<string, string>>,\n ...overrides: Array<Record<string, Record<string, string>> | undefined>\n): Record<string, Record<string, string>> {\n const result = { ...base }\n for (const override of overrides) {\n if (!override) continue\n for (const [locale, translations] of Object.entries(override)) {\n result[locale] = { ...(result[locale] ?? {}), ...translations }\n }\n }\n return result\n}\n\n// Seed the global fallback with core's own translations + the shared shell /\n// CRUD / framework translations (extracted from saas-core's central i18n), so\n// the native CRUD engine, framework UI and de-bridged plugins resolve their\n// keys even under a host shell that does not mount @fayz-ai/core's I18nProvider.\nregisterTranslations(coreTranslations)\nregisterTranslations(shellTranslations)\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entity/registry.ts"],"names":[],"mappings":";AAgBA,IAAM,cAAA,uBAAqB,GAAA,EAA8B;AAElD,SAAS,eAAe,KAAA,EAA+B;AAC5D,EAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,KAAK,CAAA;AAC3C;AAEO,SAAS,eAAe,GAAA,EAA2C;AACxE,EAAA,OAAO,cAAA,CAAe,IAAI,GAAG,CAAA;AAC/B;AAEO,SAAS,cAAA,GAAqC;AACnD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,CAAA;AAC3C;AAEO,SAAS,mBAAA,GAA4B;AAC1C,EAAA,cAAA,CAAe,KAAA,EAAM;AACvB;AAEO,SAAS,gBAAgB,SAAA,EAA8B;AAC5D,EAAA,MAAM,OAAO,SAAA,CAAU,IAAA,CAAK,aAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC7D,EAAA,IAAI,SAAA,CAAU,IAAA,EAAM,SAAA,IAAa,SAAA,CAAU,MAAM,aAAA,EAAe;AAC9D,IAAA,OAAO,GAAG,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,aAAa,CAAA,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,SAAA,CAAU,IAAA,EAAM,SAAA,EAAW,OAAO,UAAU,IAAA,CAAK,SAAA;AACrD,EAAA,OAAO,IAAA;AACT","file":"chunk-WKZVSKEU.js","sourcesContent":["import type { EntityDef } from '../types/crud'\nimport type { EntityArchetype } from '../types/entities'\n\nexport interface RegisteredEntity {\n entityKey: string\n label: string\n labelPlural: string\n icon?: string\n fields: EntityDef['fields']\n source: 'app' | 'plugin'\n archetype?: EntityArchetype\n pluginId?: string\n pluginName?: string\n pluginIcon?: string\n}\n\nconst entityRegistry = new Map<string, RegisteredEntity>()\n\nexport function registerEntity(entry: RegisteredEntity): void {\n entityRegistry.set(entry.entityKey, entry)\n}\n\nexport function getEntityByKey(key: string): RegisteredEntity | undefined {\n return entityRegistry.get(key)\n}\n\nexport function getAllEntities(): RegisteredEntity[] {\n return Array.from(entityRegistry.values())\n}\n\nexport function clearEntityRegistry(): void {\n entityRegistry.clear()\n}\n\nexport function deriveEntityKey(entityDef: EntityDef): string {\n const name = entityDef.name.toLowerCase().replace(/\\s+/g, '-')\n if (entityDef.data?.archetype && entityDef.data?.archetypeKind) {\n return `${entityDef.data.archetype}:${entityDef.data.archetypeKind}`\n }\n if (entityDef.data?.archetype) return entityDef.data.archetype\n return name\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/supabase.ts","../src/data/cloud.ts","../src/data/platform-api.ts","../src/data/mock.ts","../src/data/archetype.ts","../src/lib/cache.ts","../src/data/cached.ts","../src/tenant/index.ts","../src/data/resolve.ts"],"names":["resolveTenantId","camelToSnake","snakeToCamel","mapRow"],"mappings":"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","file":"chunk-ZBIWYDAR.js","sourcesContent":["import type { DataProvider, CrudQuery, CrudResult } from './types'\n\nexport interface SupabaseProviderConfig {\n schema?: string\n tenantId?: string | (() => string | undefined)\n tenantIdColumn?: string\n searchColumns?: string[]\n selectColumns?: string\n columnMap?: Record<string, string>\n filters?: Record<string, string>\n defaults?: Record<string, unknown>\n supabaseClient?: unknown\n}\n\nfunction camelToSnake(str: string): string {\n return str.replace(/[A-Z]/g, (c) => '_' + c.toLowerCase())\n}\n\nfunction snakeToCamel(str: string): string {\n return str.replace(/_([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\nfunction mapRow<T>(row: Record<string, unknown>, columnMap?: Record<string, string>): T {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row)) {\n const camelKey = columnMap?.[key] ?? snakeToCamel(key)\n result[camelKey] = value\n }\n return result as T\n}\n\nfunction mapEntity(entity: Record<string, unknown>, columnMap?: Record<string, string>): Record<string, unknown> {\n const reverseMap: Record<string, string> = {}\n if (columnMap) {\n for (const [snake, camel] of Object.entries(columnMap)) {\n reverseMap[camel] = snake\n }\n }\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(entity)) {\n if (key === 'id' || key === 'createdAt' || key === 'updatedAt' || key === 'tenantId') continue\n const snakeKey = reverseMap[key] ?? camelToSnake(key)\n result[snakeKey] = value\n }\n return result\n}\n\n// Global Supabase client registry — set once via createFayzApp\nlet _globalSupabaseClient: unknown | null = null\n\nexport function setGlobalSupabaseClient(client: unknown): void {\n _globalSupabaseClient = client\n}\n\nexport function getSupabaseClientOptional(): unknown | null {\n return _globalSupabaseClient\n}\n\nexport function createSupabaseProvider<T extends { id: string }>(\n table: string,\n config?: SupabaseProviderConfig,\n): DataProvider<T> {\n const schema = config?.schema ?? 'public'\n const tenantIdCol = config?.tenantIdColumn ?? 'tenant_id'\n const searchCols = config?.searchColumns ?? []\n const selectCols = config?.selectColumns ?? '*'\n const columnMap = config?.columnMap\n\n function resolveTenantId(): string | undefined {\n if (!config?.tenantId) return undefined\n return typeof config.tenantId === 'function' ? config.tenantId() : config.tenantId\n }\n\n function getClient() {\n const supabase = (config?.supabaseClient ?? _globalSupabaseClient) as {\n schema: (s: string) => unknown\n from: (t: string) => unknown\n } | null\n if (!supabase) throw new Error(`[@fayz-ai/core] Supabase client not available. Call createFayzApp with a provider first.`)\n return schema === 'public' ? (supabase as { from: (t: string) => unknown }) : (supabase.schema(schema) as { from: (t: string) => unknown })\n }\n\n return {\n async list(query: CrudQuery): Promise<CrudResult<T>> {\n let q = (getClient().from(table) as { select: (...args: unknown[]) => unknown })\n .select(selectCols, { count: 'exact' }) as Record<string, unknown>\n\n const tenantId = resolveTenantId()\n if (tenantId) q = (q as { eq: (col: string, val: string) => unknown }).eq(tenantIdCol, tenantId) as Record<string, unknown>\n\n if (config?.filters) {\n for (const [col, val] of Object.entries(config.filters)) {\n q = (q as { eq: (c: string, v: string) => unknown }).eq(col, val) as Record<string, unknown>\n }\n }\n\n // Faceted / dynamic filters from the query (equality, mapped to columns).\n if (query.filters) {\n for (const [key, val] of Object.entries(query.filters)) {\n if (val == null || val === '') continue\n const col = columnMap?.[key] ?? camelToSnake(key)\n q = (q as { eq: (c: string, v: unknown) => unknown }).eq(col, val) as Record<string, unknown>\n }\n }\n\n if (query.search && searchCols.length > 0) {\n const term = `%${query.search}%`\n const orClause = searchCols.map((col) => `${camelToSnake(col)}.ilike.${term}`).join(',')\n q = (q as { or: (c: string) => unknown }).or(orClause) as Record<string, unknown>\n }\n\n if (query.sortBy) {\n q = (q as { order: (col: string, opts: unknown) => unknown })\n .order(camelToSnake(query.sortBy), { ascending: query.sortDir !== 'desc' }) as Record<string, unknown>\n } else {\n q = (q as { order: (col: string, opts: unknown) => unknown })\n .order('created_at', { ascending: false }) as Record<string, unknown>\n }\n\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n const from = (page - 1) * pageSize\n q = (q as { range: (f: number, t: number) => unknown }).range(from, from + pageSize - 1) as Record<string, unknown>\n\n const { data, error, count } = await q as { data: Record<string, unknown>[] | null; error: unknown; count: number | null }\n if (error) throw error\n\n return {\n data: (data ?? []).map((row) => mapRow<T>(row, columnMap)),\n total: count ?? 0,\n }\n },\n\n async create(data) {\n const row = mapEntity(data as Record<string, unknown>, columnMap)\n const tenantId = resolveTenantId()\n if (tenantId) row[tenantIdCol] = tenantId\n if (config?.defaults) {\n for (const [col, val] of Object.entries(config.defaults)) {\n if (row[col] === undefined) row[col] = val\n }\n }\n\n const { data: created, error } = (await (getClient().from(table) as {\n insert: (r: unknown) => { select: () => { single: () => Promise<{ data: unknown; error: unknown }> } }\n }).insert(row).select().single()) as { data: Record<string, unknown> | null; error: unknown }\n\n if (error) throw error\n return mapRow<T>(created!, columnMap)\n },\n\n async update(id, data) {\n const row = mapEntity(data as Record<string, unknown>, columnMap)\n const { data: updated, error } = (await (getClient().from(table) as {\n update: (r: unknown) => { eq: (c: string, v: string) => { select: () => { single: () => Promise<{ data: unknown; error: unknown }> } } }\n }).update(row).eq('id', id).select().single()) as { data: Record<string, unknown> | null; error: unknown }\n\n if (error) throw error\n return mapRow<T>(updated!, columnMap)\n },\n\n async remove(id) {\n const { error } = (await (getClient().from(table) as {\n delete: () => { eq: (c: string, v: string) => Promise<{ error: unknown }> }\n }).delete().eq('id', id)) as { error: unknown }\n if (error) throw error\n },\n }\n}\n","// ---------------------------------------------------------------------------\n// Fayz Cloud — the shared multi-tenant Supabase project (\"FayzApi\") backing\n// Fayz-hosted modules (calendar, shop, …). Stripe-style default: the SDK\n// knows the product endpoint, apps only supply identity (tenantId).\n//\n// (Not to be confused with createFayzApiProvider in ./platform-api, which\n// talks to the fayz.ai builder's runtime CRUD API.)\n//\n// The key here is the PUBLISHABLE (anon) key — public by design: every anon\n// path goes through column-whitelisted views and SECURITY DEFINER RPCs with\n// server-side validation, and RLS isolates tenants. Apps that bring their own\n// backend override via setGlobalSupabaseClient (or a per-plugin dataProvider)\n// and never touch this client.\n// ---------------------------------------------------------------------------\nimport { createClient } from '@supabase/supabase-js'\n\n// TODO: flip to https://api.fayz.ai once the custom-domain SSL validates\n// (pending _acme-challenge TXT record as of 2026-07-14).\nexport const FAYZ_CLOUD_URL = 'https://yfxutrkyhydgltakbqle.supabase.co'\nexport const FAYZ_CLOUD_PUBLISHABLE_KEY = 'sb_publishable_v8rbvLDgnq5IbkVB5B6LxQ_D62mfPZX'\n\nlet _client: unknown | null = null\n\n/** Lazy singleton client for Fayz Cloud (the shared hosted backend). */\nexport function getFayzCloudClient(): unknown {\n if (!_client) _client = createClient(FAYZ_CLOUD_URL, FAYZ_CLOUD_PUBLISHABLE_KEY)\n return _client\n}\n","import type { CrudQuery, CrudResult, DataProvider } from './types'\n\ntype FayzApiFilterOperator = 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte' | 'like' | 'ilike' | 'is_null' | 'is_not_null'\n\ninterface FayzApiTableFilter {\n column: string\n operator: FayzApiFilterOperator\n value?: unknown\n}\n\nexport interface FayzApiProviderConfig {\n baseUrl?: string\n projectId?: string\n tenantId?: string | (() => string | undefined)\n tenantIdColumn?: string | false\n entityKey?: string\n table?: string\n schema?: string\n idColumn?: string\n searchColumns?: string[]\n runtimeToken?: string | (() => string | undefined | Promise<string | undefined>)\n headers?: () => HeadersInit | Promise<HeadersInit>\n fetcher?: typeof fetch\n}\n\nfunction resolveTenantId(config?: FayzApiProviderConfig): string | undefined {\n const tenantId = config?.tenantId\n return typeof tenantId === 'function' ? tenantId() : tenantId\n}\n\nasync function resolveRuntimeToken(config?: FayzApiProviderConfig): Promise<string | undefined> {\n const runtimeToken = config?.runtimeToken\n return typeof runtimeToken === 'function' ? runtimeToken() : runtimeToken\n}\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '')\n}\n\nfunction appendQuery(\n url: URL,\n query: CrudQuery,\n tenantId?: string,\n tenantIdColumn = 'tenant_id',\n searchColumns: string[] = [],\n): void {\n const filters = normalizeFilters(query.filters)\n if (query.search && searchColumns[0]) {\n filters.push({ column: searchColumns[0], operator: 'ilike', value: `%${query.search}%` })\n }\n if (query.sortBy) url.searchParams.set('sortColumn', query.sortBy)\n if (query.sortDir) url.searchParams.set('sortDirection', query.sortDir)\n if (query.page != null) url.searchParams.set('page', String(query.page))\n if (query.pageSize != null) url.searchParams.set('limit', String(query.pageSize))\n if (tenantId) filters.push({ column: tenantIdColumn, operator: 'eq', value: tenantId })\n if (filters.length > 0) url.searchParams.set('filters', JSON.stringify(filters))\n}\n\nasync function parseResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const text = await response.text().catch(() => '')\n throw new Error(`[@fayz-ai/core] Fayz API request failed (${response.status}): ${text || response.statusText}`)\n }\n return response.json() as Promise<T>\n}\n\nfunction isFilterOperator(value: unknown): value is FayzApiFilterOperator {\n return typeof value === 'string' && [\n 'eq',\n 'neq',\n 'gt',\n 'lt',\n 'gte',\n 'lte',\n 'like',\n 'ilike',\n 'is_null',\n 'is_not_null',\n ].includes(value)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction normalizeFilters(filters?: Record<string, unknown>): FayzApiTableFilter[] {\n if (!filters) return []\n return Object.entries(filters).map(([column, raw]) => {\n if (isRecord(raw) && isFilterOperator(raw.operator)) {\n return { column, operator: raw.operator, value: raw.value }\n }\n return { column, operator: 'eq', value: raw }\n })\n}\n\nexport function createFayzApiProvider<T extends { id: string }>(\n entityOrTable: string,\n config: FayzApiProviderConfig = {},\n): DataProvider<T> {\n const fetcher = config.fetcher ?? fetch\n const baseUrl = trimTrailingSlash(config.baseUrl ?? '')\n const projectId = config.projectId\n const table = config.table ?? entityOrTable\n const idColumn = config.idColumn ?? 'id'\n\n async function headers(runtimeToken?: string): Promise<HeadersInit> {\n return {\n 'Content-Type': 'application/json',\n ...(config.headers ? await config.headers() : {}),\n ...(runtimeToken ? { Authorization: `Bearer ${runtimeToken}` } : {}),\n }\n }\n\n function tableRowsUrl(runtime = false): URL {\n const prefix = baseUrl || (typeof window !== 'undefined' ? window.location.origin : 'http://localhost')\n const encodedProjectId = encodeURIComponent(projectId ?? 'current')\n const encodedTable = encodeURIComponent(table)\n const route = runtime\n ? `/api/v1/runtime/projects/${encodedProjectId}/database/tables/${encodedTable}/rows`\n : `/api/projects/${encodedProjectId}/database/tables/${encodedTable}/rows`\n const url = new URL(route, prefix)\n if (config.schema) url.searchParams.set('schema', config.schema)\n return url\n }\n\n function withTenant(data: Record<string, unknown>, runtime = false): Record<string, unknown> {\n if (runtime) return data\n const tenantId = resolveTenantId(config)\n if (!tenantId || config.tenantIdColumn === false) return data\n return { ...data, [config.tenantIdColumn ?? 'tenant_id']: tenantId }\n }\n\n function primaryKeys(id: string): Record<string, unknown> {\n return { [idColumn]: id }\n }\n\n async function listRows(query: CrudQuery): Promise<CrudResult<T>> {\n const runtimeToken = await resolveRuntimeToken(config)\n const runtime = Boolean(runtimeToken)\n const url = tableRowsUrl(runtime)\n appendQuery(\n url,\n query,\n runtime || config.tenantIdColumn === false ? undefined : resolveTenantId(config),\n config.tenantIdColumn || undefined,\n config.searchColumns,\n )\n const result = await parseResponse<{ rows: T[]; total: number }>(await fetcher(url, { headers: await headers(runtimeToken) }))\n return { data: result.rows, total: result.total }\n }\n\n async function assertTenantScopedRowExists(id: string, runtime = false): Promise<void> {\n if (runtime) return\n const tenantId = config.tenantIdColumn === false ? undefined : resolveTenantId(config)\n if (!tenantId) return\n\n const result = await listRows({ filters: { [idColumn]: id }, page: 1, pageSize: 1 })\n if (result.data.length === 0) {\n throw new Error(`[@fayz-ai/core] Row \"${id}\" was not found for the active tenant.`)\n }\n }\n\n return {\n async list(query: CrudQuery): Promise<CrudResult<T>> {\n return listRows(query)\n },\n\n async create(data) {\n const runtimeToken = await resolveRuntimeToken(config)\n const runtime = Boolean(runtimeToken)\n return parseResponse<T>(await fetcher(tableRowsUrl(runtime), {\n method: 'POST',\n headers: await headers(runtimeToken),\n body: JSON.stringify(withTenant(data as Record<string, unknown>, runtime)),\n }))\n },\n\n async update(id, data) {\n const runtimeToken = await resolveRuntimeToken(config)\n const runtime = Boolean(runtimeToken)\n await assertTenantScopedRowExists(id, runtime)\n return parseResponse<T>(await fetcher(tableRowsUrl(runtime), {\n method: 'PATCH',\n headers: await headers(runtimeToken),\n body: JSON.stringify({ primaryKeys: primaryKeys(id), data }),\n }))\n },\n\n async remove(id) {\n const runtimeToken = await resolveRuntimeToken(config)\n const runtime = Boolean(runtimeToken)\n await assertTenantScopedRowExists(id, runtime)\n await parseResponse<{ deletedCount: number }>(await fetcher(tableRowsUrl(runtime), {\n method: 'DELETE',\n headers: await headers(runtimeToken),\n body: JSON.stringify({ rows: [primaryKeys(id)] }),\n }))\n },\n }\n}\n","import type { DataProvider, CrudQuery, CrudResult } from './types'\nimport type { EntityDef } from '../types/crud'\n\nexport function createMockProvider<T extends { id: string; [key: string]: unknown }>(\n entityDefOrSearchKeys: EntityDef<T> | string[],\n initialData: T[] = [],\n): DataProvider<T> {\n let items = [...initialData]\n\n const searchableKeys = Array.isArray(entityDefOrSearchKeys)\n ? entityDefOrSearchKeys\n : entityDefOrSearchKeys.fields.filter((f) => f.searchable).map((f) => f.key)\n\n const defaultSort = Array.isArray(entityDefOrSearchKeys) ? undefined : entityDefOrSearchKeys.defaultSort\n const defaultSortDir = Array.isArray(entityDefOrSearchKeys) ? 'asc' : (entityDefOrSearchKeys.defaultSortDir ?? 'asc')\n\n return {\n async list(query: CrudQuery): Promise<CrudResult<T>> {\n let filtered = [...items]\n\n if (query.search && searchableKeys.length > 0) {\n const term = query.search.toLowerCase()\n filtered = filtered.filter((item) =>\n searchableKeys.some((key) => {\n const val = item[key]\n return typeof val === 'string' && val.toLowerCase().includes(term)\n }),\n )\n }\n\n // Faceted / dynamic filters (equality match per key).\n if (query.filters) {\n for (const [key, val] of Object.entries(query.filters)) {\n if (val == null || val === '') continue\n filtered = filtered.filter((item) => item[key] === val)\n }\n }\n\n const sortBy = query.sortBy ?? defaultSort\n const sortDir = query.sortDir ?? defaultSortDir\n if (sortBy) {\n filtered.sort((a, b) => {\n const av = a[sortBy] ?? ''\n const bv = b[sortBy] ?? ''\n const cmp = typeof av === 'number' && typeof bv === 'number'\n ? av - bv\n : String(av).localeCompare(String(bv))\n return sortDir === 'desc' ? -cmp : cmp\n })\n }\n\n const total = filtered.length\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n const start = (page - 1) * pageSize\n const data = filtered.slice(start, start + pageSize)\n return { data, total }\n },\n\n async create(data) {\n const now = new Date().toISOString()\n const item = {\n ...data,\n id: crypto.randomUUID(),\n tenantId: 'mock-tenant',\n createdAt: now,\n updatedAt: now,\n } as unknown as T\n items.unshift(item)\n return item\n },\n\n async update(id, data) {\n const idx = items.findIndex((i) => i.id === id)\n if (idx === -1) throw new Error(`[@fayz-ai/core] Mock provider: item not found: ${id}`)\n items[idx] = { ...items[idx], ...data, updatedAt: new Date().toISOString() }\n return items[idx]!\n },\n\n async remove(id) {\n items = items.filter((i) => i.id !== id)\n },\n }\n}\n","import type { DataProvider, CrudQuery, CrudResult } from './types'\nimport { getSupabaseClientOptional } from './supabase'\nimport type { EntityArchetype } from '../types/entities'\n\n// Archetypes that have a `kind` discriminator column\nconst HAS_KIND = new Set<EntityArchetype>(['person', 'category', 'order', 'transaction', 'schedule', 'location'])\n\nconst ARCHETYPE_CONFIG: Record<EntityArchetype, { table: string; fkColumn: string }> = {\n person: { table: 'people', fkColumn: 'person_id' },\n category: { table: 'categories', fkColumn: 'category_id' },\n product: { table: 'products', fkColumn: 'product_id' },\n service: { table: 'services', fkColumn: 'service_id' },\n location: { table: 'locations', fkColumn: 'location_id' },\n order: { table: 'orders', fkColumn: 'order_id' },\n transaction: { table: 'transactions', fkColumn: 'transaction_id' },\n\n schedule: { table: 'schedules', fkColumn: 'schedule_id' },\n}\n\nconst ARCHETYPE_COLUMNS: Record<EntityArchetype, Set<string>> = {\n person: new Set(['name', 'email', 'phone', 'document_number', 'avatar_url', 'date_of_birth', 'address', 'city', 'state', 'country', 'postal_code', 'tags', 'is_active', 'notes', 'metadata']),\n category: new Set(['name', 'slug', 'parent_id', 'icon', 'color', 'sort_order', 'is_active', 'metadata']),\n product: new Set(['name', 'description', 'sku', 'price', 'cost', 'currency', 'unit', 'image_url', 'stock', 'min_stock', 'status', 'is_active', 'tags', 'metadata', 'category_id']),\n service: new Set(['name', 'description', 'price', 'cost', 'currency', 'duration_minutes', 'image_url', 'status', 'is_active', 'tags', 'metadata', 'category_id']),\n location: new Set(['name', 'email', 'phone', 'address', 'city', 'state', 'country', 'postal_code', 'is_headquarters', 'is_active', 'tags', 'notes', 'metadata']),\n order: new Set(['reference_number', 'status', 'party_id', 'assignee_id', 'location_id', 'subtotal', 'discount', 'tax', 'total', 'currency', 'due_at', 'completed_at', 'notes', 'tags', 'metadata']),\n transaction: new Set(['order_id', 'party_id', 'amount', 'currency', 'payment_method', 'reference', 'status', 'transacted_at', 'notes', 'metadata']),\n\n schedule: new Set(['assignee_id', 'location_id', 'day_of_week', 'specific_date', 'starts_at', 'ends_at', 'is_active', 'metadata']),\n}\n\nfunction camelToSnake(str: string): string {\n return str.replace(/[A-Z]/g, (c) => '_' + c.toLowerCase())\n}\n\nfunction snakeToCamel(str: string): string {\n return str.replace(/_([a-z])/g, (_, c) => c.toUpperCase())\n}\n\nfunction mapRow<T>(row: Record<string, unknown>): T {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row)) {\n result[snakeToCamel(key)] = value\n }\n return result as T\n}\n\nexport interface ArchetypeProviderConfig {\n archetype: EntityArchetype\n archetypeKind: string\n projectTable: string\n tenantId: () => string | undefined\n searchColumns?: string[]\n}\n\nexport function createArchetypeProvider<T extends { id: string }>(\n config: ArchetypeProviderConfig,\n): DataProvider<T> {\n const ac = ARCHETYPE_CONFIG[config.archetype]\n const archetypeColumns = ARCHETYPE_COLUMNS[config.archetype]\n const { fkColumn } = ac\n\n function getClient() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase client not available')\n return supabase\n }\n\n // Core v1 lives in PUBLIC — the archetype base tables and the public extension\n // tables share one client/schema. `coreClient()` is kept as a thin alias so the\n // core/extension split below still reads clearly at each call site.\n function coreClient() {\n return getClient()\n }\n\n function splitFields(data: Record<string, unknown>): { archetypeData: Record<string, unknown>; projectData: Record<string, unknown> } {\n const archetypeData: Record<string, unknown> = {}\n const projectData: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(data)) {\n if (['id', 'createdAt', 'updatedAt', 'tenantId', fkColumn].includes(key)) continue\n const snakeKey = camelToSnake(key)\n if (archetypeColumns.has(snakeKey)) {\n archetypeData[snakeKey] = value\n } else {\n projectData[snakeKey] = value\n }\n }\n return { archetypeData, projectData }\n }\n\n // View name convention: v_{shortName} — maps project table to its view\n const VIEW_MAP: Record<string, string> = {\n clients: 'v_clients',\n staff_members: 'v_staff',\n }\n const viewName = VIEW_MAP[config.projectTable] ?? `v_${config.projectTable}`\n\n // Pure-archetype entity: the project table IS the archetype base (e.g. a\n // customers list configured with `table: 'people'`, no separate public\n // extension table). Read/write public.<base> directly — there is no public\n // extension row and no v_ view to join. Extension-table entities (clients,\n // staff_members, …) are unaffected.\n const isPure = config.projectTable === ac.table\n\n return {\n async list(query: CrudQuery): Promise<CrudResult<T>> {\n const tenantId = config.tenantId()\n if (!tenantId) return { data: [], total: 0 }\n\n // Pure archetype → read public.<base> directly (filtered by kind);\n // otherwise the v_ view (JOINs public extension with the public archetype).\n let q = isPure\n ? coreClient().from(ac.table).select('*', { count: 'exact' }).eq('tenant_id', tenantId)\n : getClient().from(viewName).select('*', { count: 'exact' }).eq('tenant_id', tenantId)\n\n if (isPure && HAS_KIND.has(config.archetype)) {\n q = q.eq('kind', config.archetypeKind)\n }\n\n // Search\n if (query.search && config.searchColumns && config.searchColumns.length > 0) {\n const term = `%${query.search}%`\n const orClauses = config.searchColumns\n .map((col) => camelToSnake(col))\n .map((col) => `${col}.ilike.${term}`)\n if (orClauses.length > 0) {\n q = q.or(orClauses.join(','))\n }\n }\n\n // Sort\n if (query.sortBy) {\n q = q.order(camelToSnake(query.sortBy), { ascending: query.sortDir !== 'desc' })\n } else {\n q = q.order('created_at', { ascending: false })\n }\n\n // Pagination\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n const from = (page - 1) * pageSize\n q = q.range(from, from + pageSize - 1)\n\n const { data, error, count } = await q\n if (error) throw error\n\n const rows = (data ?? []).map((row: Record<string, unknown>) => mapRow<T>(row))\n return { data: rows, total: count ?? 0 }\n },\n\n async create(data) {\n const tenantId = config.tenantId()\n if (!tenantId) throw new Error('No tenant selected')\n\n const { archetypeData, projectData } = splitFields(data as Record<string, unknown>)\n\n // 1. Insert into archetype table\n archetypeData.tenant_id = tenantId\n if (HAS_KIND.has(config.archetype)) {\n archetypeData.kind = config.archetypeKind\n }\n\n const { data: archetypeRow, error: archetypeError } = await coreClient()\n .from(ac.table)\n .insert(archetypeData)\n .select()\n .single()\n\n if (archetypeError) throw archetypeError\n const archetypeId = (archetypeRow as any).id\n\n // 2. Insert into project table with archetype FK as PK.\n // Pure-archetype entities have no extension table — skip this step.\n if (!isPure) {\n projectData[fkColumn] = archetypeId\n projectData.tenant_id = tenantId\n\n const { error: projectError } = await getClient()\n .from(config.projectTable)\n .insert(projectData)\n\n if (projectError) {\n await coreClient().from(ac.table).delete().eq('id', archetypeId)\n throw projectError\n }\n }\n\n return { id: archetypeId, ...archetypeRow, ...(isPure ? {} : projectData) } as unknown as T\n },\n\n async update(id, data) {\n const { archetypeData, projectData } = splitFields(data as Record<string, unknown>)\n\n if (Object.keys(archetypeData).length > 0) {\n const { error } = await coreClient()\n .from(ac.table)\n .update(archetypeData)\n .eq('id', id)\n if (error) throw error\n }\n\n if (!isPure && Object.keys(projectData).length > 0) {\n const { error } = await getClient()\n .from(config.projectTable)\n .update(projectData)\n .eq(fkColumn, id)\n if (error) throw error\n }\n\n // Re-fetch (archetype only for pure entities; otherwise join the extension)\n const { data: archetypeRow } = await coreClient().from(ac.table).select('*').eq('id', id).single()\n if (isPure) {\n return mapRow<T>({ ...archetypeRow, id } as Record<string, unknown>)\n }\n const { data: projectRow } = await getClient().from(config.projectTable).select('*').eq(fkColumn, id).single()\n\n const flat = { ...archetypeRow, ...projectRow, id }\n delete (flat as any)[fkColumn]\n return mapRow<T>(flat as Record<string, unknown>)\n },\n\n async remove(id) {\n const { error } = await coreClient()\n .from(ac.table)\n .delete()\n .eq('id', id)\n if (error) throw error\n },\n }\n}\n","// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CacheEntry<T = unknown> {\n data: T\n expiresAt: number\n lastAccess: number\n}\n\nexport interface CacheStore {\n get<T>(key: string): T | undefined\n set<T>(key: string, data: T, ttl?: number): void\n /** Clear all entries whose key starts with `prefix` */\n invalidate(prefix: string): void\n clear(): void\n size(): number\n}\n\nexport interface CacheConfig {\n /** Default time-to-live in ms (default: 60 000 — 1 minute) */\n defaultTTL?: number\n /** Maximum cached entries before LRU eviction (default: 500) */\n maxEntries?: number\n}\n\n// ---------------------------------------------------------------------------\n// Stable key helper — deterministic JSON for cache keys\n// ---------------------------------------------------------------------------\n\nfunction sortDeep(value: unknown): unknown {\n if (value === null || value === undefined || typeof value !== 'object') return value\n if (Array.isArray(value)) return value.map(sortDeep)\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value as Record<string, unknown>).sort()) {\n sorted[k] = sortDeep((value as Record<string, unknown>)[k])\n }\n return sorted\n}\n\nexport function stableKey(...parts: unknown[]): string {\n return parts.map((p) => (typeof p === 'string' ? p : JSON.stringify(sortDeep(p)))).join(':')\n}\n\n// ---------------------------------------------------------------------------\n// CacheStore implementation\n// ---------------------------------------------------------------------------\n\nexport function createCacheStore(config?: CacheConfig): CacheStore {\n const defaultTTL = config?.defaultTTL ?? 60_000\n const maxEntries = config?.maxEntries ?? 500\n const entries = new Map<string, CacheEntry>()\n\n function evictLRU() {\n if (entries.size <= maxEntries) return\n // Find the entry with the oldest lastAccess\n let oldestKey: string | null = null\n let oldestAccess = Infinity\n for (const [key, entry] of entries) {\n if (entry.lastAccess < oldestAccess) {\n oldestAccess = entry.lastAccess\n oldestKey = key\n }\n }\n if (oldestKey) entries.delete(oldestKey)\n }\n\n return {\n get<T>(key: string): T | undefined {\n const entry = entries.get(key)\n if (!entry) return undefined\n if (Date.now() > entry.expiresAt) {\n entries.delete(key)\n return undefined\n }\n entry.lastAccess = Date.now()\n return entry.data as T\n },\n\n set<T>(key: string, data: T, ttl?: number): void {\n const now = Date.now()\n entries.set(key, {\n data,\n expiresAt: now + (ttl ?? defaultTTL),\n lastAccess: now,\n })\n evictLRU()\n },\n\n invalidate(prefix: string): void {\n for (const key of entries.keys()) {\n if (key.startsWith(prefix)) {\n entries.delete(key)\n }\n }\n },\n\n clear(): void {\n entries.clear()\n },\n\n size(): number {\n return entries.size\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Global singleton — auto-flushes on tenant/org switch\n// ---------------------------------------------------------------------------\n\nexport const globalCache = createCacheStore()\n\n/** Flush the global cache — called by the tenant accessor when the active\n * tenant changes (replaces the old org-store subscription). */\nexport function clearGlobalCache(): void {\n globalCache.clear()\n}\n","import type { DataProvider, CrudQuery, CrudResult } from './types'\nimport { globalCache, stableKey } from '../lib/cache'\n\nexport interface ProviderCacheOptions {\n /** Table/entity name — used as cache key namespace */\n table: string\n /** Dynamic tenant ID resolver */\n tenantId: () => string | undefined\n /** Override default TTL for this entity (ms) */\n ttl?: number\n}\n\n/**\n * Wraps a DataProvider with transparent read caching + mutation invalidation.\n *\n * - `list()` results are cached by query params\n * - `create()`, `update()`, `remove()` invalidate all cached entries for the table\n */\nexport function withCache<T extends { id: string }>(\n provider: DataProvider<T>,\n options: ProviderCacheOptions,\n): DataProvider<T> {\n function prefix(): string {\n return `${options.tenantId() ?? '_'}:${options.table}`\n }\n\n return {\n async list(query: CrudQuery): Promise<CrudResult<T>> {\n const key = `${prefix()}:${stableKey(query)}`\n const cached = globalCache.get<CrudResult<T>>(key)\n if (cached) return cached\n\n const result = await provider.list(query)\n globalCache.set(key, result, options.ttl)\n return result\n },\n\n async create(data) {\n const result = await provider.create(data)\n globalCache.invalidate(prefix())\n return result\n },\n\n async update(id, data) {\n const result = await provider.update(id, data)\n globalCache.invalidate(prefix())\n return result\n },\n\n async remove(id) {\n await provider.remove(id)\n globalCache.invalidate(prefix())\n },\n }\n}\n","// Active tenant context — a global accessor the data layer reads for tenant\n// scoping and cache keying. The host (saas shell / app) sets it from its org\n// store via setActiveTenantId; the data providers stay decoupled from any\n// specific org-store implementation (runtime DI).\nimport { clearGlobalCache } from '../lib/cache'\n\nlet _activeTenantId: string | undefined\n\nexport function setActiveTenantId(id: string | undefined): void {\n if (id !== _activeTenantId) {\n _activeTenantId = id\n clearGlobalCache()\n }\n}\n\nexport function getActiveTenantId(): string | undefined {\n return _activeTenantId\n}\n","import type { EntityDef } from '../types/crud'\nimport type { BackendRef } from '../manifest'\nimport type { DataProvider } from './types'\nimport { getSupabaseClientOptional } from './supabase'\nimport { createSupabaseProvider } from './supabase'\nimport { createArchetypeProvider } from './archetype'\nimport { createMockProvider } from './mock'\nimport { createFayzApiProvider, type FayzApiProviderConfig } from './platform-api'\nimport { withCache } from './cached'\nimport { getActiveTenantId } from '../tenant'\n\n/**\n * Resolve the best data provider for an EntityDef.\n * Supabase → Archetype → Mock (in order of preference).\n *\n * Reusable by createCrudPage, PluginRegistryManager, or any component\n * that needs a DataProvider from an EntityDef.\n */\nexport interface ResolveDataProviderOptions {\n backend?: BackendRef\n fayzApi?: Omit<FayzApiProviderConfig, 'entityKey' | 'table'>\n customProviders?: Record<string, <T extends { id: string }>(entityDef: EntityDef<T>, mockData?: T[]) => DataProvider<T>>\n}\n\nexport function resolveDataProvider<T extends { id: string }>(\n entityDef: EntityDef<T>,\n mockData?: T[],\n options: ResolveDataProviderOptions = {},\n): DataProvider<T> {\n const backend = options.backend\n\n if (backend?.provider === 'mock') {\n return createMockProvider(entityDef, mockData)\n }\n\n if (backend?.provider === 'fayz-api') {\n const table = entityDef.data?.table ?? entityDef.name\n return createFayzApiProvider<T>(table, {\n ...options.fayzApi,\n baseUrl: options.fayzApi?.baseUrl ?? backend.url,\n projectId: options.fayzApi?.projectId ?? backend.projectRef,\n entityKey: entityDef.name ?? table,\n table,\n schema: options.fayzApi?.schema ?? entityDef.data?.schema,\n idColumn: options.fayzApi?.idColumn ?? entityDef.data?.columnMap?.id,\n searchColumns: options.fayzApi?.searchColumns ?? entityDef.data?.searchColumns ?? entityDef.fields\n .filter((field) => field.searchable)\n .map((field) => field.key),\n tenantIdColumn: entityDef.data?.tenantScoped === false\n ? false\n : options.fayzApi?.tenantIdColumn ?? entityDef.data?.tenantIdColumn,\n tenantId: options.fayzApi?.tenantId ?? (() => getActiveTenantId()),\n })\n }\n\n if (backend?.provider === 'custom') {\n const adapterId = backend.adapterId\n const factory = adapterId ? options.customProviders?.[adapterId] : undefined\n if (!adapterId || !factory) {\n throw new Error(`[@fayz-ai/core] Custom data provider \"${adapterId ?? 'unknown'}\" is not registered.`)\n }\n return factory<T>(entityDef, mockData)\n }\n\n const client = getSupabaseClientOptional()\n\n if (client && entityDef.data?.table) {\n const tenantId = () => getActiveTenantId()\n const cacheOptions = {\n table: entityDef.data.table,\n tenantId,\n ttl: entityDef.data.cacheTTL,\n }\n\n if (entityDef.data.archetype && entityDef.data.archetypeKind && !entityDef.data.schema) {\n return withCache(createArchetypeProvider<T>({\n archetype: entityDef.data.archetype,\n archetypeKind: entityDef.data.archetypeKind,\n projectTable: entityDef.data.table,\n tenantId,\n searchColumns: entityDef.data.searchColumns ?? entityDef.fields\n .filter((field) => field.searchable)\n .map((field) => field.key),\n }), cacheOptions)\n }\n\n return withCache(createSupabaseProvider<T>(entityDef.data.table, {\n schema: entityDef.data.schema,\n tenantId: entityDef.data.tenantScoped === false ? undefined : tenantId,\n tenantIdColumn: entityDef.data.tenantIdColumn,\n searchColumns: entityDef.data.searchColumns ?? entityDef.fields\n .filter((field) => field.searchable)\n .map((field) => field.key),\n selectColumns: entityDef.data.selectColumns,\n columnMap: entityDef.data.columnMap,\n filters: entityDef.data.filters,\n defaults: entityDef.data.defaults,\n }), cacheOptions)\n }\n\n if (entityDef.data?.table) {\n console.warn(\n `[fayz/core] resolveDataProvider: falling back to mock for \"${entityDef.name}\" (table: ${entityDef.data.table}). ` +\n `Supabase client ${client ? 'available' : 'NOT initialized'}.`,\n )\n }\n return createMockProvider(entityDef, mockData)\n}\n"]}
|