@fayz-ai/core 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/access/index.js.map +1 -1
- package/dist/{chunk-L4TLMYGC.js → chunk-6RBW2Y5K.js} +3 -3
- package/dist/chunk-6RBW2Y5K.js.map +1 -0
- package/dist/chunk-732GZEUI.js +1592 -0
- package/dist/chunk-732GZEUI.js.map +1 -0
- package/dist/{chunk-X5THHG6T.js → chunk-CPMHCTX3.js} +3 -3
- package/dist/chunk-CPMHCTX3.js.map +1 -0
- package/dist/{chunk-V2MSAUHO.js → chunk-JO7Z2AOE.js} +2 -2
- package/dist/chunk-JO7Z2AOE.js.map +1 -0
- package/dist/{chunk-5RJVUC6J.js → chunk-M27JPX3K.js} +12 -3
- package/dist/chunk-M27JPX3K.js.map +1 -0
- package/dist/chunk-OXQGRJZT.js +125 -0
- package/dist/chunk-OXQGRJZT.js.map +1 -0
- package/dist/data/backend-env.d.ts +38 -0
- package/dist/data/backend-env.d.ts.map +1 -0
- package/dist/data/index.js +1 -1
- package/dist/entity/events.d.ts +14 -0
- package/dist/entity/events.d.ts.map +1 -0
- package/dist/events/envelope.d.ts +31 -0
- package/dist/events/envelope.d.ts.map +1 -0
- package/dist/events/index.d.ts +4 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/log.d.ts +44 -0
- package/dist/events/log.d.ts.map +1 -0
- package/dist/events/types.d.ts +40 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +10 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +27 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +388 -52
- package/dist/index.js.map +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/{integrations/index.d.ts → integrations.d.ts} +2 -2
- package/dist/integrations.d.ts.map +1 -0
- package/dist/{address/index.d.ts → lib/address.d.ts} +1 -1
- package/dist/{address/index.d.ts.map → lib/address.d.ts.map} +1 -1
- package/dist/{phone/index.d.ts → lib/phone.d.ts} +1 -1
- package/dist/lib/phone.d.ts.map +1 -0
- package/dist/{seo/index.d.ts → lib/seo.d.ts} +18 -1
- package/dist/lib/seo.d.ts.map +1 -0
- package/dist/{tenant/index.d.ts → lib/tenant.d.ts} +1 -1
- package/dist/lib/tenant.d.ts.map +1 -0
- package/dist/manifest/index.d.ts +1 -1
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/messaging/index.d.ts +3 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/registry.d.ts +35 -0
- package/dist/messaging/registry.d.ts.map +1 -0
- package/dist/messaging/types.d.ts +67 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/plugin/index.js +2 -1
- package/dist/plugin/runtime.d.ts +17 -0
- package/dist/plugin/runtime.d.ts.map +1 -1
- package/dist/registry/block-catalog.d.ts +78 -0
- package/dist/registry/block-catalog.d.ts.map +1 -0
- package/dist/registry/block-constraints.d.ts +64 -0
- package/dist/registry/block-constraints.d.ts.map +1 -0
- package/dist/registry/block-schema.d.ts +69 -0
- package/dist/registry/block-schema.d.ts.map +1 -0
- package/dist/registry/blocks.d.ts +84 -0
- package/dist/registry/blocks.d.ts.map +1 -0
- package/dist/registry/entities.d.ts +153 -0
- package/dist/registry/entities.d.ts.map +1 -0
- package/dist/registry/extension-points.d.ts +117 -0
- package/dist/registry/extension-points.d.ts.map +1 -0
- package/dist/registry/handles.d.ts +41 -0
- package/dist/registry/handles.d.ts.map +1 -0
- package/dist/registry/index.d.ts +41 -41
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/loaders.d.ts +55 -0
- package/dist/registry/loaders.d.ts.map +1 -0
- package/dist/registry/registry-class.d.ts +157 -0
- package/dist/registry/registry-class.d.ts.map +1 -0
- package/dist/registry/schema-check.d.ts +14 -0
- package/dist/registry/schema-check.d.ts.map +1 -0
- package/dist/router/index.d.ts +78 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/{testing/index.d.ts → testing.d.ts} +3 -3
- package/dist/testing.d.ts.map +1 -0
- package/dist/types/analytics.d.ts +196 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/crud.d.ts +22 -2
- package/dist/types/crud.d.ts.map +1 -1
- package/dist/types/plugins.d.ts +55 -1
- package/dist/types/plugins.d.ts.map +1 -1
- package/package.json +6 -18
- package/dist/blocks/index.d.ts +0 -25
- package/dist/blocks/index.d.ts.map +0 -1
- package/dist/chunk-5RJVUC6J.js.map +0 -1
- package/dist/chunk-L4TLMYGC.js.map +0 -1
- package/dist/chunk-V2MSAUHO.js.map +0 -1
- package/dist/chunk-X5THHG6T.js.map +0 -1
- package/dist/chunk-Y2C2FBQP.js +0 -35
- package/dist/chunk-Y2C2FBQP.js.map +0 -1
- package/dist/chunk-YH25Y4FW.js +0 -311
- package/dist/chunk-YH25Y4FW.js.map +0 -1
- package/dist/integrations/index.d.ts.map +0 -1
- package/dist/phone/index.d.ts.map +0 -1
- package/dist/seo/index.d.ts.map +0 -1
- package/dist/tenant/index.d.ts.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/src/access/denial.ts +0 -33
- package/src/access/engine.test.ts +0 -48
- package/src/access/engine.ts +0 -136
- package/src/access/index.ts +0 -14
- package/src/access/limits.ts +0 -18
- package/src/address/index.ts +0 -188
- package/src/app/render.tsx +0 -69
- package/src/blocks/index.tsx +0 -68
- package/src/data/archetype.ts +0 -255
- package/src/data/bulk.ts +0 -35
- package/src/data/cached.ts +0 -55
- package/src/data/count.test.ts +0 -152
- package/src/data/count.ts +0 -131
- package/src/data/filters.test.ts +0 -70
- package/src/data/filters.ts +0 -90
- package/src/data/index.ts +0 -11
- package/src/data/mock.ts +0 -90
- package/src/data/platform-api.ts +0 -209
- package/src/data/refresh.ts +0 -115
- package/src/data/resolve.ts +0 -126
- package/src/data/supabase.ts +0 -230
- package/src/data/types.ts +0 -50
- package/src/entity/index.ts +0 -2
- package/src/entity/registry.ts +0 -49
- package/src/events/index.tsx +0 -82
- package/src/i18n/index.ts +0 -476
- package/src/i18n/shell-translations.en.ts +0 -875
- package/src/i18n/shell-translations.pt-br.ts +0 -873
- package/src/index.ts +0 -217
- package/src/integrations/index.ts +0 -237
- package/src/lib/cache.ts +0 -118
- package/src/lib/csv.ts +0 -54
- package/src/lib/format.ts +0 -58
- package/src/manifest/app-manifest.schema.json +0 -676
- package/src/manifest/index.ts +0 -518
- package/src/manifest/serialize.ts +0 -52
- package/src/phone/index.ts +0 -85
- package/src/plugin/createSafeDataProvider.ts +0 -30
- package/src/plugin/index.ts +0 -1
- package/src/plugin/runtime.ts +0 -331
- package/src/registry/index.ts +0 -163
- package/src/router/history.ts +0 -86
- package/src/router/index.ts +0 -29
- package/src/runtime/index.ts +0 -15
- package/src/runtime/oauth.ts +0 -219
- package/src/search/engine.ts +0 -559
- package/src/search/index.ts +0 -25
- package/src/search/text.ts +0 -206
- package/src/search/types.ts +0 -75
- package/src/seo/index.ts +0 -128
- package/src/tenant/index.ts +0 -38
- package/src/testing/index.ts +0 -116
- package/src/types/auth.ts +0 -41
- package/src/types/billing.ts +0 -39
- package/src/types/crud.ts +0 -184
- package/src/types/entities.ts +0 -142
- package/src/types/entitlements.ts +0 -45
- package/src/types/i18n.ts +0 -7
- package/src/types/index.ts +0 -11
- package/src/types/org.ts +0 -137
- package/src/types/payment.ts +0 -44
- package/src/types/permissions.ts +0 -32
- package/src/types/plugins.ts +0 -480
- package/src/types/theme.ts +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data/filters.ts","../src/data/supabase.ts","../src/lib/cache.ts","../src/lib/tenant.ts","../src/data/count.ts","../src/data/platform-api.ts","../src/data/mock.ts","../src/data/archetype.ts","../src/data/cached.ts","../src/data/resolve.ts","../src/data/bulk.ts"],"names":["resolveTenantId","camelToSnake","snakeToCamel","mapRow"],"mappings":"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","file":"chunk-JO7Z2AOE.js","sourcesContent":["/**\n * ONE filter grammar, shared by the providers and by the agent's data tools.\n *\n * Models express ranges in whatever dialect they were trained on — `{from,to}`,\n * `{gte,lte}`, Mongo's `{$gte,$lt}`. When only some of those are recognised the\n * unrecognised one falls through to an equality compare against\n * \"[object Object]\", which matches nothing and reads as \"there are no\n * appointments today\" instead of \"I did not understand that filter\".\n */\n\nexport interface RangeFilter {\n gte?: unknown\n gt?: unknown\n lte?: unknown\n lt?: unknown\n}\n\nconst LOWER_INCLUSIVE = ['from', 'gte', 'start', 'after', 'since', 'min']\nconst LOWER_EXCLUSIVE = ['gt']\nconst UPPER_INCLUSIVE = ['to', 'lte', 'end', 'until', 'before', 'max']\nconst UPPER_EXCLUSIVE = ['lt']\n\nfunction pick(source: Record<string, unknown>, names: string[]): unknown {\n for (const name of names) {\n if (source[name] !== undefined && source[name] !== null) return source[name]\n const dollar = `$${name}`\n if (source[dollar] !== undefined && source[dollar] !== null) return source[dollar]\n }\n return undefined\n}\n\n/**\n * Parse a filter value into a range, or return null when it is a plain\n * (equality) value. An object that looks like a filter but carries no\n * recognised bound returns `null` too — callers treat that as \"invalid\",\n * never as \"matches nothing\".\n */\nexport function parseRangeFilter(value: unknown): RangeFilter | null {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return null\n const source = value as Record<string, unknown>\n const range: RangeFilter = {}\n const gte = pick(source, LOWER_INCLUSIVE)\n const gt = pick(source, LOWER_EXCLUSIVE)\n const lte = pick(source, UPPER_INCLUSIVE)\n const lt = pick(source, UPPER_EXCLUSIVE)\n if (gte !== undefined) range.gte = gte\n if (gt !== undefined) range.gt = gt\n if (lte !== undefined) range.lte = lte\n if (lt !== undefined) range.lt = lt\n return Object.keys(range).length ? range : null\n}\n\n/** True for any object value — including ones no bound could be read from. */\nexport function isFilterObject(value: unknown): boolean {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction comparable(value: unknown): number {\n if (typeof value === 'number') return value\n if (value instanceof Date) return value.getTime()\n const ts = Date.parse(String(value))\n if (!Number.isNaN(ts)) return ts\n return Number(value)\n}\n\n/** Client-side counterpart of the range a provider would push to SQL. */\nexport function matchesRange(raw: unknown, range: RangeFilter): boolean {\n const value = comparable(raw)\n if (Number.isNaN(value)) return false\n if (range.gte !== undefined && value < comparable(range.gte)) return false\n if (range.gt !== undefined && value <= comparable(range.gt)) return false\n if (range.lte !== undefined && value > comparable(range.lte)) return false\n if (range.lt !== undefined && value >= comparable(range.lt)) return false\n return true\n}\n\n/** Apply a range to a PostgREST query builder. */\nexport function applyRangeToQuery<Q>(\n query: Q,\n column: string,\n range: RangeFilter,\n): Q {\n let q = query as Record<string, (c: string, v: unknown) => unknown>\n for (const op of ['gte', 'gt', 'lte', 'lt'] as const) {\n const bound = range[op]\n if (bound === undefined) continue\n q = q[op](column, bound) as Record<string, (c: string, v: unknown) => unknown>\n }\n return q as Q\n}\n","import type { DataProvider, CrudQuery, CrudResult } from './types'\nimport { applyRangeToQuery, isFilterObject, parseRangeFilter } from './filters'\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 // 'none' skips PostgREST's count aggregate entirely — see CrudQuery.countMode.\n const wantCount = query.countMode !== 'none'\n let q = (getClient().from(table) as { select: (...args: unknown[]) => unknown })\n .select(selectCols, wantCount ? { count: 'exact' } : undefined) 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, mapped to columns. Equality\n // by default; a range object ({from,to} / {gte,lt} / {$gte,$lt}) becomes\n // real SQL bounds instead of an equality compare against \"[object Object]\".\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 const range = parseRangeFilter(val)\n if (range) {\n q = applyRangeToQuery(q, col, range)\n continue\n }\n if (isFilterObject(val)) {\n throw new Error(\n `[@fayz-ai/core] Filter \"${key}\" is an object with no recognised bound. ` +\n 'Use {from,to} / {gte,lte,gt,lt} for ranges, or a plain value for equality.',\n )\n }\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 createMany(rows, options) {\n const tenantId = resolveTenantId()\n const size = Math.max(1, options?.chunkSize ?? 200)\n const prepared = rows.map((r) => {\n const row = mapEntity(r as Record<string, unknown>, columnMap)\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 return row\n })\n\n let created = 0\n const failed: Array<{ index: number; message: string }> = []\n for (let start = 0; start < prepared.length; start += size) {\n const chunk = prepared.slice(start, start + size)\n const { error } = (await (getClient().from(table) as {\n insert: (r: unknown) => Promise<{ error: unknown }>\n }).insert(chunk)) as { error: unknown }\n if (!error) {\n created += chunk.length\n } else {\n // One bad row rejects its whole chunk. Retrying it row by row keeps\n // the other 199 — an import that loses 200 records over one malformed\n // phone number is worse than no import.\n const message = error instanceof Error ? error.message : String(error)\n for (let i = 0; i < chunk.length; i++) {\n const { error: rowError } = (await (getClient().from(table) as {\n insert: (r: unknown) => Promise<{ error: unknown }>\n }).insert(chunk[i])) as { error: unknown }\n if (rowError) {\n failed.push({\n index: start + i,\n message: rowError instanceof Error ? rowError.message : String(rowError ?? message),\n })\n } else created += 1\n }\n }\n options?.onProgress?.(Math.min(start + chunk.length, prepared.length), prepared.length)\n }\n return { created, failed }\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// 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","// 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 * as React from 'react'\nimport { clearGlobalCache } from './cache'\n\nlet _activeTenantId: string | undefined\nconst listeners = new Set<() => void>()\n\nexport function setActiveTenantId(id: string | undefined): void {\n if (id !== _activeTenantId) {\n _activeTenantId = id\n clearGlobalCache()\n for (const l of listeners) l()\n }\n}\n\nexport function getActiveTenantId(): string | undefined {\n return _activeTenantId\n}\n\n/**\n * Subscribes to tenant changes. A getter alone makes every read a race with the\n * shell: a view that mounts before the org store resolves reads `undefined`,\n * and a tenant-scoped fetch that answers \"no tenant\" looks exactly like \"no\n * rows\" — it never retries and the screen stays empty until a remount.\n */\nexport function subscribeActiveTenant(listener: () => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n\n/** The active tenant, re-rendering when it resolves or changes. Use this to key\n * effects that fetch tenant-scoped data. */\nexport function useActiveTenantId(): string | undefined {\n return React.useSyncExternalStore(subscribeActiveTenant, getActiveTenantId, getActiveTenantId)\n}\n","import { getSupabaseClientOptional } from './supabase'\nimport { getActiveTenantId } from '../lib/tenant'\n\n/**\n * Tenant-scoped row counter — the single cheap `count(*)` helper the access\n * engine uses to resolve quantity limits. Uses Supabase's `head:true` count so\n * no rows are transferred. Results are cached briefly per tenant+table+filter to\n * survive the burst of reads a page does (nav badge + gate + list), and can be\n * force-invalidated by creates via {@link invalidateCount}.\n *\n * MOCK MODE NEVER BLOCKS: with no global Supabase client the count is `0`, so\n * limits always read as \"well under cap\" — offline/demo apps stay fully usable.\n */\n\nexport interface CountByTenantOptions {\n /** Optional `kind` column filter for multi-kind tables. */\n kind?: string\n /** `'month'` counts rows created since the 1st of the current month; `'total'` (default) counts all. */\n period?: 'month' | 'total'\n /** Tenant override; defaults to the active tenant (getActiveTenantId). */\n tenantId?: string\n /** Skip the short-lived cache and hit the DB (used by fresh guard checks). */\n fresh?: boolean\n}\n\nconst TTL_MS = 15_000\n\ninterface CacheEntry {\n value: number\n expires: number\n}\n\nconst cache = new Map<string, CacheEntry>()\n\nfunction cacheKey(table: string, tenantId: string, kind: string | undefined, period: string): string {\n return `${tenantId}::${table}::${kind ?? ''}::${period}`\n}\n\nfunction startOfMonthISO(): string {\n const now = new Date()\n return new Date(now.getFullYear(), now.getMonth(), 1).toISOString()\n}\n\n/**\n * How long a usage count may take before we give up on it. Failing OPEN on an\n * error was always the policy (see below); a request that never settles is the\n * same failure with worse symptoms — a caller awaiting this (the create guards)\n * hangs forever, which reads to the user as a dead button. Observed on a cold\n * boot, where the query can be issued before the auth session is ready.\n */\nconst COUNT_TIMEOUT_MS = 5_000\n\n/**\n * Count rows in `table` for the given (or active) tenant.\n * Returns 0 when no Supabase client is registered (mock mode).\n */\nexport async function countByTenant(table: string, options: CountByTenantOptions = {}): Promise<number> {\n const tenantId = options.tenantId ?? getActiveTenantId()\n if (!tenantId) return 0\n\n const period = options.period ?? 'total'\n const key = cacheKey(table, tenantId, options.kind, period)\n\n if (!options.fresh) {\n const hit = cache.get(key)\n if (hit && hit.expires > Date.now()) return hit.value\n }\n\n const client = getSupabaseClientOptional() as {\n from: (t: string) => {\n select: (columns: string, opts: { count: 'exact'; head: true }) => {\n eq: (col: string, val: unknown) => unknown\n }\n }\n } | null\n\n // No client → mock/offline mode: never block.\n if (!client) return 0\n\n let query = client.from(table).select('*', { count: 'exact', head: true }).eq('tenant_id', tenantId) as {\n eq: (col: string, val: unknown) => unknown\n gte: (col: string, val: unknown) => unknown\n }\n\n if (options.kind) {\n query = query.eq('kind', options.kind) as typeof query\n }\n if (period === 'month') {\n query = query.gte('created_at', startOfMonthISO()) as typeof query\n }\n\n // On error OR timeout, fail OPEN (return 0) — a counting failure must never\n // wall a tenant out of their own product, and must never hang the UI awaiting\n // it. Enforcement's source of truth is the DB anyway.\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<{ count: null; error: unknown; timedOut: true }>((resolve) => {\n timer = setTimeout(() => resolve({ count: null, error: 'timeout', timedOut: true }), COUNT_TIMEOUT_MS)\n })\n const settled = await Promise.race([\n query as unknown as Promise<{ count: number | null; error: unknown }>,\n timeout,\n ])\n if (timer) clearTimeout(timer)\n\n const { count, error } = settled\n const value = error ? 0 : count ?? 0\n\n // A timed-out count is not a fact about the tenant — caching it would make one\n // slow request suppress the guard for the whole TTL.\n if (!(settled as { timedOut?: true }).timedOut) {\n cache.set(key, { value, expires: Date.now() + TTL_MS })\n }\n return value\n}\n\n/**\n * Drop cached counts. Called by create handlers (via invalidateLimit) so the\n * next read reflects the row they just added.\n *\n * @param tenantOrKey Substring matched against cache keys (a tenant id, a table\n * name, or any fragment). Omit to clear the entire cache.\n */\nexport function invalidateCount(tenantOrKey?: string): void {\n if (!tenantOrKey) {\n cache.clear()\n return\n }\n for (const key of cache.keys()) {\n if (key.includes(tenantOrKey)) cache.delete(key)\n }\n}\n","import type { CrudQuery, CrudResult, DataProvider } from './types'\nimport { parseRangeFilter } from './filters'\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).flatMap(([column, raw]): FayzApiTableFilter[] => {\n if (isRecord(raw) && isFilterOperator(raw.operator)) {\n return [{ column, operator: raw.operator, value: raw.value }]\n }\n // A range is TWO bounds on one column — sending it as a single `eq` filter\n // compared the column against an object and matched nothing.\n const range = parseRangeFilter(raw)\n if (range) {\n return (['gte', 'gt', 'lte', 'lt'] as const)\n .filter((op) => range[op] !== undefined)\n .map((op) => ({ column, operator: op, value: range[op] }))\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'\nimport { matchesRange, parseRangeFilter } from './filters'\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 — same grammar the SQL providers speak, so a\n // date window behaves identically on mock data instead of silently\n // matching nothing (a range object is never `===` anything).\n if (query.filters) {\n for (const [key, val] of Object.entries(query.filters)) {\n if (val == null || val === '') continue\n const range = parseRangeFilter(val)\n filtered = range\n ? filtered.filter((item) => matchesRange(item[key], range))\n : 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 { applyRangeToQuery, isFilterObject, parseRangeFilter } from './filters'\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 // 'none' skips PostgREST's count aggregate entirely — see CrudQuery.countMode.\n const countOpts = query.countMode === 'none' ? undefined : { count: 'exact' as const }\n let q = isPure\n ? coreClient().from(ac.table).select('*', countOpts).eq('tenant_id', tenantId)\n : getClient().from(viewName).select('*', countOpts).eq('tenant_id', tenantId)\n\n if (isPure && HAS_KIND.has(config.archetype)) {\n q = q.eq('kind', config.archetypeKind)\n }\n\n // Faceted filters — equality, or real SQL bounds for a range object.\n // Silently dropping them made every caller post-filter one page of rows,\n // which reads as \"no records match\" whenever the match sits past it.\n if (query.filters) {\n for (const [key, val] of Object.entries(query.filters)) {\n if (val == null || val === '') continue\n const col = camelToSnake(key)\n const range = parseRangeFilter(val)\n if (range) {\n q = applyRangeToQuery(q, col, range)\n continue\n }\n if (isFilterObject(val)) {\n throw new Error(\n `[@fayz-ai/core] Filter \"${key}\" is an object with no recognised bound. ` +\n 'Use {from,to} / {gte,lte,gt,lt} for ranges, or a plain value for equality.',\n )\n }\n q = q.eq(col, val)\n }\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","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","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 '../lib/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 /**\n * Read through the shared TTL cache (default true).\n *\n * Callers that must observe writes made by ANOTHER surface pass false: the\n * cache is only invalidated by writes that go through it, so a record created\n * on the agenda screen stays invisible to the assistant for the rest of the\n * TTL — which is how \"o que tem na agenda hoje?\" answered \"nada\" over a\n * booking made seconds earlier.\n */\n cache?: boolean\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 // Archetype entities share a physical table (e.g. people) across kinds\n // (student/teacher/staff…). The cache key must carry the kind or the first\n // kind's resultset is served to every sibling entity (teachers page\n // listing students).\n const cacheOptions = {\n table: entityDef.data.archetypeKind\n ? `${entityDef.data.table}#${entityDef.data.archetypeKind}`\n : entityDef.data.table,\n tenantId,\n ttl: entityDef.data.cacheTTL,\n }\n const cached = <P extends DataProvider<T>>(p: P): DataProvider<T> =>\n options.cache === false ? p : withCache(p, cacheOptions)\n\n if (entityDef.data.archetype && entityDef.data.archetypeKind && !entityDef.data.schema) {\n return cached(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 }))\n }\n\n return cached(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 }))\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","import type { BulkWriteOptions, BulkWriteResult, DataProvider } from './types'\n\n/**\n * Write many rows through whatever the provider supports.\n *\n * `createMany` when it exists (one round-trip per chunk), otherwise a sequential\n * `create` loop. Callers never branch: a mock provider and a Supabase table\n * import the same way, only slower.\n *\n * Never all-or-nothing. A 900-row client list will contain a malformed phone\n * and a duplicate e-mail, and a single transaction would throw away the other\n * 898 — plus a statement that large risks the timeout. Failures are collected\n * with their row index so the caller can hand them back for correction.\n */\nexport async function bulkCreate<T extends { id: string }>(\n provider: DataProvider<T>,\n rows: Array<Omit<T, 'id' | 'createdAt' | 'updatedAt' | 'tenantId'>>,\n options?: BulkWriteOptions,\n): Promise<BulkWriteResult> {\n if (!rows.length) return { created: 0, failed: [] }\n if (provider.createMany) return provider.createMany(rows, options)\n\n let created = 0\n const failed: Array<{ index: number; message: string }> = []\n for (let i = 0; i < rows.length; i++) {\n try {\n await provider.create(rows[i])\n created += 1\n } catch (error) {\n failed.push({ index: i, message: error instanceof Error ? error.message : String(error) })\n }\n options?.onProgress?.(i + 1, rows.length)\n }\n return { created, failed }\n}\n"]}
|
|
@@ -938,6 +938,15 @@ function useLocaleStore() {
|
|
|
938
938
|
function getCurrentLocale() {
|
|
939
939
|
return _localeStore.locale;
|
|
940
940
|
}
|
|
941
|
+
var LOCALE_STORAGE_KEY = "saas-core:locale";
|
|
942
|
+
function tl(en, ptBR) {
|
|
943
|
+
try {
|
|
944
|
+
const locale = globalThis.localStorage?.getItem(LOCALE_STORAGE_KEY) ?? "pt-BR";
|
|
945
|
+
return locale.startsWith("pt") ? ptBR : en;
|
|
946
|
+
} catch {
|
|
947
|
+
return ptBR;
|
|
948
|
+
}
|
|
949
|
+
}
|
|
941
950
|
function setCurrentLocale(locale) {
|
|
942
951
|
if (_localeStore.locale === locale) return;
|
|
943
952
|
_localeStore.setLocale(locale);
|
|
@@ -1292,6 +1301,6 @@ function preloadLocale(locale) {
|
|
|
1292
1301
|
return pending;
|
|
1293
1302
|
}
|
|
1294
1303
|
|
|
1295
|
-
export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, preloadLocale, registerTranslations, setCurrentLocale, setLocaleStore, useI18nConfig, useTranslation };
|
|
1296
|
-
//# sourceMappingURL=chunk-
|
|
1297
|
-
//# sourceMappingURL=chunk-
|
|
1304
|
+
export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, preloadLocale, registerTranslations, setCurrentLocale, setLocaleStore, tl, useI18nConfig, useTranslation };
|
|
1305
|
+
//# sourceMappingURL=chunk-M27JPX3K.js.map
|
|
1306
|
+
//# sourceMappingURL=chunk-M27JPX3K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/shell-translations.en.ts","../src/i18n/index.ts"],"names":[],"mappings":"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","file":"chunk-M27JPX3K.js","sourcesContent":["// Shared shell/CRUD/framework translations — en locale.\n// Split per-locale so only the active locale ships in the bundle: 'en' is the\n// eager fallback; other locales load via dynamic import in i18n/index.ts.\nexport const shellTranslationsEn: Record<string, string> = {\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.import.limitExceeded\": \"This import exceeds your plan limit. Upgrade or import fewer rows.\",\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.subscription.title\": \"Subscription\",\n \"billing.subscription.subtitle\": \"Manage your plan and unlock more features.\",\n \"billing.changeToPlan\": \"Switch to this plan\",\n \"billing.featureMatrix\": \"Feature comparison\",\n \"billing.changePlanConfirmTitle\": \"Change plan?\",\n \"billing.changePlanConfirmBody\": \"You're switching to the {{plan}} plan.\",\n \"billing.changePlanConfirm\": \"Switch plan\",\n \"billing.planChanged\": \"You're now on the {{plan}} plan.\",\n \"billing.planChangeFailed\": \"Couldn't change your plan. Please try again.\",\n \"billing.noPlans\": \"No plans are configured.\",\n \"billing.pro\": \"Pro\",\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.backToHome\": \"Back to home\",\n \"settings.navLinks\": \"Settings links\",\n \"settings.general\": \"General\",\n \"settings.properties\": \"Properties\",\n \"settings.profile\": \"Profile\",\n \"settings.branding\": \"Branding\",\n \"settings.security\": \"Security\",\n \"settings.sites\": \"Sites\",\n \"settings.connectors\": \"Connectors\",\n \"settings.subscription\": \"Subscription\",\n \"upgrade.title\": \"Premium feature\",\n \"upgrade.description\": \"This feature is available on a higher plan. Upgrade to unlock it.\",\n \"upgrade.descriptionFeature\": \"The {feature} feature is available on a higher plan. Upgrade to unlock it.\",\n \"contactPicker.search\": \"Search contact...\",\n \"contactPicker.newContact\": \"New contact\",\n \"contactPicker.name\": \"Name\",\n \"contactPicker.phone\": \"Phone\",\n \"contactPicker.emailOptional\": \"Email (optional)\",\n \"contactPicker.create\": \"Create\",\n \"contactPicker.creating\": \"Creating...\",\n \"contactPicker.cancel\": \"Cancel\",\n \"contactPicker.clear\": \"Clear contact\",\n \"contactPicker.createFailed\": \"Could not create the contact\",\n \"contactPicker.addField\": \"Add {label}\",\n \"upgrade.includes\": \"Includes {feature}\",\n \"upgrade.cta\": \"View plans\",\n \"upgrade.badgeTooltip\": \"Available on a higher plan\",\n \"upgrade.unlock\": \"Unlock {feature}\",\n \"upgrade.currentPlan\": \"Your plan: {plan}\",\n \"upgrade.recommended\": \"Recommended\",\n \"upgrade.ctaUpgrade\": \"Upgrade\",\n \"upgrade.ctaUpgradeTo\": \"Upgrade to {plan}\",\n \"upgrade.compareAll\": \"Compare all plans\",\n \"upgrade.valueGeneric\": \"Get everything you need to grow — included in the plans below.\",\n \"upgrade.value.marketing\": \"Campaigns, funnel and content to grow your client base.\",\n \"upgrade.value.reports\": \"Advanced reports and insights to make sharper decisions.\",\n \"upgrade.value.fin_reconciliation\": \"Reconcile payments and keep your cash flow under control.\",\n \"upgrade.value.assistant\": \"Your operations copilot — ask, analyze and act with AI.\",\n \"upgrade.feature.assistant\": \"AI Assistant\",\n \"billing.unlimited\": \"Unlimited\",\n \"billing.upTo\": \"Up to {count}\",\n \"limit.label.clients\": \"clients\",\n \"limit.label.users\": \"team members\",\n \"limit.label.locations\": \"locations\",\n \"limit.label.bookings_month\": \"monthly bookings\",\n \"limit.label.products\": \"products\",\n \"limit.label.students\": \"students\",\n \"limit.label.courses\": \"courses\",\n \"limit.label.contacts\": \"contacts\",\n \"limit.label.deals\": \"deals\",\n \"limit.label.menu_items\": \"menu items\",\n \"limit.label.orders_month\": \"monthly orders\",\n \"limit.label.connected_banks\": \"connected banks\",\n \"limit.label.movements_month\": \"monthly movements\",\n \"limit.label.leads\": \"leads\",\n \"limit.label.quotes\": \"quotes\",\n \"limit.label.conversations_month\": \"monthly conversations\",\n \"limit.label.ai_credits_month\": \"AI credits per month\",\n \"limit.label.recipes\": \"recipes\",\n \"limit.label.form_templates\": \"form templates\",\n \"limit.label.documents_month\": \"monthly documents\",\n \"limit.label.content_posts_month\": \"monthly content posts\",\n \"limit.label.blog_posts\": \"blog posts\",\n \"limit.reached\": \"Você atingiu o limite de {label} do plano {plan}.\",\n \"banner.overLimit\": \"Você excedeu o limite de {label} do seu plano — faça upgrade para continuar crescendo.\",\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 \"shell.accessDenied.title\": \"Access restricted\",\n \"shell.accessDenied.message\": \"You don't have permission to view this page.\",\n \"organization.workspaces\": \"Workspaces\",\n \"organization.onlyWorkspace\": \"This is your only workspace.\",\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.fab.dismiss\": \"Don't show suggestions here\",\n \"chat.fab.open\": \"Open assistant\",\n \"chat.fab.close\": \"Close assistant\",\n \"chat.messagePlaceholder\": \"How can I help?\",\n \"chat.send\": \"Send message\",\n \"chat.notConfigured\": \"Assistant not configured — set chat.apiEndpoint to enable conversations.\",\n \"chat.unavailable\": \"Assistant unavailable\",\n \"chat.greeting\": \"How can I help?\",\n \"chat.greetingNamed\": \"Hi {{name}}, how can I help?\",\n \"chat.greetingHint\": \"Ask in plain words, or tap the mic and just say it.\",\n \"chat.status.ready\": \"Ready\",\n \"chat.status.working\": \"Working on it...\",\n \"chat.status.offline\": \"Not connected\",\n \"chat.jumpToLatest\": \"Latest\",\n \"chat.confirmAction.title\": \"Confirm this action?\",\n \"chat.confirmAction.confirm\": \"Confirm\",\n \"chat.confirmAction.cancel\": \"Cancel\",\n \"chat.confirmAction.always\": \"Always allow\",\n \"chat.confirmAction.alwaysSession\": \"Allow this session\",\n \"chat.confirmAction.alwaysHint\": \"Stop asking before \\\"{{label}}\\\"\",\n \"chat.confirmAction.autoApproved\": \"auto\",\n \"chat.confirmAction.autoApprovedHint\": \"Ran without asking — you allowed this action\",\n \"chat.confirmAction.blocked\": \"Respond to the confirmation above first\",\n \"chat.confirmAction.fillRequired\": \"Fill in to continue: {{fields}}\",\n \"chat.confirmAction.showAll\": \"Add more fields ({{count}})\",\n \"chat.confirmAction.showLess\": \"Show fewer fields\",\n \"chat.tool.createAppointment\": \"Book an appointment\",\n \"chat.tool.createRecord\": \"Create record\",\n \"chat.tool.updateRecord\": \"Update record\",\n \"chat.tool.deleteRecord\": \"Delete record\",\n \"chat.tool.createOrder\": \"Create order\",\n \"chat.tool.createInvoice\": \"Create invoice\",\n \"chat.tool.markPaymentReceived\": \"Mark payment as received\",\n \"chat.tool.createCampaign\": \"Create campaign\",\n \"chat.tool.sendMessage\": \"Send message\",\n \"chat.tool.seatGuests\": \"Seat guests\",\n \"chat.tool.toggleMenuItemAvailability\": \"Change item availability\",\n \"chat.autoApprovals.title\": \"Auto-approved actions\",\n \"chat.autoApprovals.revoke\": \"Ask me again\",\n \"chat.autoApprovals.revokeAll\": \"Ask for everything\",\n \"chat.suggestions.show\": \"Show suggestions\",\n \"chat.suggestions.hide\": \"Hide suggestions\",\n \"chat.voice.start\": \"Speak\",\n \"chat.voice.stop\": \"Stop recording\",\n \"chat.voice.listening\": \"Listening — speak now\",\n \"chat.voice.transcribing\": \"Transcribing...\",\n \"chat.voice.denied\": \"Microphone blocked. Allow access in your browser settings.\",\n \"chat.voice.network\": \"Could not reach the transcription service.\",\n \"chat.voice.failed\": \"Could not hear that — try again.\",\n \"chat.voice.speakOn\": \"Speak replies out loud\",\n \"chat.voice.speakOff\": \"Mute spoken replies\",\n \"chat.signingIn\": \"One moment — still confirming your session.\",\n \"chat.history\": \"Previous conversations\",\n \"chat.history.search\": \"Search conversations\",\n \"chat.history.empty\": \"No conversations found.\",\n \"chat.history.today\": \"Today\",\n \"chat.history.yesterday\": \"Yesterday\",\n \"chat.history.week\": \"Last 7 days\",\n \"chat.history.older\": \"Earlier\",\n \"chat.newConversation\": \"New conversation\",\n \"chat.untitledConversation\": \"Untitled conversation\",\n \"chat.recentConversations\": \"Recent\",\n \"chat.backToConversations\": \"Back to conversations\",\n \"chat.renameConversation\": \"Rename\",\n \"chat.saveTitle\": \"Save title\",\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.addresses.add\": \"Add address\",\n \"crud.archetype.addresses.addTitle\": \"New address\",\n \"crud.archetype.addresses.editTitle\": \"Edit address\",\n \"crud.archetype.addresses.formDescription\": \"Postal code, street and city are required; everything else is optional.\",\n \"crud.archetype.addresses.emptyTitle\": \"No address on file\",\n \"crud.archetype.addresses.emptyDescription\": \"Add where this person is delivered to, collected from, or billed at.\",\n \"crud.archetype.addresses.fallbackLabel\": \"Address\",\n \"crud.archetype.addresses.labelPlaceholder\": \"Home, Work…\",\n \"crud.archetype.addresses.default\": \"Default\",\n \"crud.archetype.addresses.setDefault\": \"Use as the default address\",\n \"crud.archetype.addresses.kind.both\": \"Shipping and billing\",\n \"crud.archetype.addresses.kind.shipping\": \"Shipping\",\n \"crud.archetype.addresses.kind.billing\": \"Billing\",\n \"crud.archetype.addresses.field.label\": \"Label\",\n \"crud.archetype.addresses.field.kind\": \"Use\",\n \"crud.archetype.addresses.field.postalCode\": \"Postal code\",\n \"crud.archetype.addresses.field.street\": \"Street\",\n \"crud.archetype.addresses.field.number\": \"Number\",\n \"crud.archetype.addresses.field.complement\": \"Complement\",\n \"crud.archetype.addresses.field.district\": \"District\",\n \"crud.archetype.addresses.field.city\": \"City\",\n \"crud.archetype.addresses.field.state\": \"State\",\n \"crud.archetype.addresses.field.recipient\": \"Recipient\",\n \"crud.archetype.addresses.field.phone\": \"Phone\",\n \"crud.archetype.addresses.created\": \"Address added\",\n \"crud.archetype.addresses.updated\": \"Address updated\",\n \"crud.archetype.addresses.deleted\": \"Address removed\",\n \"crud.archetype.addresses.deleteTitle\": \"Remove this address?\",\n \"crud.archetype.addresses.loadFailed\": \"Could not load the addresses.\",\n \"crud.archetype.addresses.saveFailed\": \"Could not save the address.\",\n \"crud.archetype.addresses.deleteFailed\": \"Could not remove the address.\",\n \"crud.archetype.addresses.noTenant\": \"No active organization — reload the page and try again.\",\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","import * as React from 'react'\nimport { shellTranslationsEn } from './shell-translations.en'\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\n// Bumped when lazily-loaded translations register so subscribed components\n// re-render even though the locale string itself did not change.\nlet _i18nVersion = 0\nfunction getI18nSnapshot(): string {\n return `${_localeStore.locale} ${_i18nVersion}`\n}\n\nfunction useLocaleStore(): LocaleStore {\n const snapshot = React.useSyncExternalStore(\n (listener) => {\n _localeListeners.add(listener)\n return () => _localeListeners.delete(listener)\n },\n getI18nSnapshot,\n getI18nSnapshot,\n )\n return React.useMemo(() => {\n const locale = snapshot.slice(0, snapshot.indexOf(' '))\n return { locale, setLocale: setCurrentLocale }\n }, [snapshot])\n}\n\nexport function getCurrentLocale(): string {\n return _localeStore.locale\n}\n\n// Same key the saas locale store persists to; read directly to avoid the dep.\nconst LOCALE_STORAGE_KEY = 'saas-core:locale'\n\n/**\n * Pick a bilingual literal at CONFIG time — outside React, before any provider\n * mounts. App config modules evaluate at import time, when `getCurrentLocale()`\n * is still the 'en' default (ES imports hoist above `setCurrentLocale`), so this\n * reads the persisted locale directly and treats pt-BR as the default for a\n * first visit. Inside components use `useTranslation()` instead.\n *\n * name: tl('Appointments', 'Agenda')\n */\nexport function tl(en: string, ptBR: string): string {\n try {\n const locale = globalThis.localStorage?.getItem(LOCALE_STORAGE_KEY) ?? 'pt-BR'\n return locale.startsWith('pt') ? ptBR : en\n } catch {\n return ptBR\n }\n}\n\nexport function setCurrentLocale(locale: string): void {\n if (_localeStore.locale === locale) return\n _localeStore.setLocale(locale)\n // Fire-and-forget: if the locale's shell translations are lazily split, load\n // and register them; keys fall back to 'en' until the chunk arrives.\n void preloadLocale(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 'connectors.hubSubtitle': 'Apps, assistants and providers connected to this organization.',\n 'connectors.add': 'Add connector',\n 'connectors.addSubtitle': 'Integrations available on Fayz for this organization.',\n 'connectors.search': 'Search integration…',\n 'connectors.noneFound': 'No integration found for “{{query}}”.',\n 'connectors.viewAll': 'See every connector',\n 'connectors.groupMine': 'In this organization',\n 'connectors.groupOffered': 'Offered by Fayz',\n 'connectors.docs': 'Provider documentation',\n 'connectors.builtIn': 'native',\n 'connectors.partOfApp': 'part of the app',\n 'connectors.plane.agentic': 'Assistant',\n 'connectors.plane.agentic.desc': 'The assistant uses the provider’s own tools on demand. Nothing is copied.',\n 'connectors.plane.sync': 'Sync',\n 'connectors.plane.sync.desc': 'A pipeline keeps a copy of the data inside the app.',\n 'connectors.plane.recommended': 'recommended',\n 'connectors.plane.undecided': 'How this one is resolved is decided by Fayz when the integration ships.',\n 'connectors.plane.switched': 'Mode changed',\n 'connectors.plane.lockedHint': 'This connection cannot change mode after the fact — disconnect and connect again.',\n 'connectors.direction.inbound': 'inbound',\n 'connectors.direction.outbound': 'outbound',\n 'connectors.state.connected': 'connected',\n 'connectors.state.ready': 'ready to connect',\n 'connectors.state.catalog': 'available on Fayz',\n 'connectors.state.soon': 'coming soon',\n 'connectors.journey.what': 'What it does',\n 'connectors.journey.how': 'How it gets resolved',\n 'connectors.journey.authorize': 'Authorize',\n 'connectors.journey.access': 'Access',\n 'connectors.journey.after': 'Once connected',\n 'connectors.after.agentic': 'These tools are available to the assistant right now.',\n 'connectors.after.willAgentic': 'The assistant gains this provider’s tools; no copy of the data is made.',\n 'connectors.after.willSync': 'A pipeline starts keeping this data in agreement, with mapping and history.',\n 'connectors.tools': 'Assistant tools',\n 'connectors.entitiesCount': 'reaches {{count}} record types',\n 'connectors.entitiesList': 'Records: {{list}}',\n 'connectors.capabilitiesUnknown': 'This connector has not published what it reaches yet.',\n 'connectors.readOnly': 'read only',\n 'connectors.readWrite': 'read and write',\n 'connectors.needsPlugin': 'Fayz has this integration built, but this app does not have the plugin that hosts it.',\n 'connectors.soonBody': 'Fayz lists this provider, but the integration is not wired yet.',\n 'connectors.connectedOn': 'Connected on {{date}}',\n 'connectors.lastUsed': 'used {{when}}',\n 'connectors.neverUsed': 'not used yet',\n 'connectors.grantedByOther': 'authorized by someone else on the team',\n 'connectors.revokeConfirm': 'Disconnect {{name}}? It loses access immediately.',\n 'connectors.filter.all': 'All',\n 'connectors.filter.connected': 'Connected',\n 'connectors.filter.agentic': 'Assistant',\n 'connectors.filter.sync': 'Sync',\n 'connectors.emptyTitle': 'No connectors',\n 'connectors.emptyBody': 'Connect a provider, or authorize an external assistant, and it shows up here.',\n 'connectors.noProject': 'Connectors unavailable',\n 'connectors.noProjectBody': 'This app is not linked to a Fayz project.',\n 'connectors.noOrg': 'No organization',\n 'connectors.noOrgBody': 'Pick an organization to see its connections.',\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 'auth.setPassword.recoveryTitle': 'Choose a new password',\n 'auth.setPassword.recoverySubtitle': 'Set a new password to get back into your account.',\n 'auth.setPassword.welcomeTitle': 'Welcome to {{appName}}',\n 'auth.setPassword.welcomeSubtitle': 'Choose a password to finish setting up your access.',\n 'auth.setPassword.newPassword': 'New password',\n 'auth.setPassword.confirmPassword': 'Confirm password',\n 'auth.setPassword.submit': 'Save password',\n 'auth.setPassword.saving': 'Saving...',\n 'auth.setPassword.tooShort': 'Password must be at least 8 characters.',\n 'auth.setPassword.mismatch': 'Passwords do not match.',\n 'auth.setPassword.checking': 'Checking your link...',\n 'auth.setPassword.expiredTitle': 'This link has expired',\n 'auth.setPassword.expiredSubtitle': 'Reset links can only be used once. Enter your e-mail and we will send a new one.',\n 'auth.setPassword.email': 'E-mail',\n 'auth.setPassword.sendNewLink': 'Send new link',\n 'auth.setPassword.sending': 'Sending...',\n 'auth.setPassword.sent': 'Check your inbox — a new link is on the way.',\n 'auth.setPassword.backToLogin': 'Back to sign in',\n 'settings.title': 'Settings',\n 'settings.company': 'Company',\n 'settings.branding': 'Branding',\n 'settings.security': 'Security',\n 'settings.sites': 'Sites',\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 'connectors.hubSubtitle': 'Aplicativos, assistentes e provedores ligados a esta organização.',\n 'connectors.add': 'Adicionar conector',\n 'connectors.addSubtitle': 'Integrações disponíveis no Fayz para esta organização.',\n 'connectors.search': 'Buscar integração…',\n 'connectors.noneFound': 'Nenhuma integração encontrada para “{{query}}”.',\n 'connectors.viewAll': 'Ver todos os conectores',\n 'connectors.groupMine': 'Nesta organização',\n 'connectors.groupOffered': 'Oferecidos pelo Fayz',\n 'connectors.docs': 'Documentação do provedor',\n 'connectors.builtIn': 'nativo',\n 'connectors.partOfApp': 'faz parte do app',\n 'connectors.plane.agentic': 'Assistente',\n 'connectors.plane.agentic.desc': 'O assistente usa as ferramentas do provedor na hora. Nada é copiado.',\n 'connectors.plane.sync': 'Sincronização',\n 'connectors.plane.sync.desc': 'Uma esteira mantém uma cópia dos dados dentro do app.',\n 'connectors.plane.recommended': 'recomendado',\n 'connectors.plane.undecided': 'O modo desta integração é definido pelo Fayz quando ela for ligada.',\n 'connectors.plane.switched': 'Modo alterado',\n 'connectors.plane.lockedHint': 'Esta conexão não troca de modo depois de feita — desconecte e conecte de novo.',\n 'connectors.direction.inbound': 'entrada',\n 'connectors.direction.outbound': 'saída',\n 'connectors.state.connected': 'conectado',\n 'connectors.state.ready': 'pronto para conectar',\n 'connectors.state.catalog': 'disponível no Fayz',\n 'connectors.state.soon': 'em breve',\n 'connectors.journey.what': 'O que ele faz',\n 'connectors.journey.how': 'Como ele resolve',\n 'connectors.journey.authorize': 'Autorizar',\n 'connectors.journey.access': 'Acesso',\n 'connectors.journey.after': 'Depois de conectado',\n 'connectors.after.agentic': 'Essas ferramentas já estão à mão do assistente.',\n 'connectors.after.willAgentic': 'O assistente ganha as ferramentas do provedor; nenhuma cópia dos dados é feita.',\n 'connectors.after.willSync': 'Uma esteira passa a manter esses dados em acordo, com de-para e histórico.',\n 'connectors.tools': 'Ferramentas do assistente',\n 'connectors.entitiesCount': 'alcança {{count}} tipos de registro',\n 'connectors.entitiesList': 'Registros: {{list}}',\n 'connectors.capabilitiesUnknown': 'Este conector ainda não publicou o que ele alcança.',\n 'connectors.readOnly': 'somente leitura',\n 'connectors.readWrite': 'leitura e escrita',\n 'connectors.needsPlugin': 'O Fayz tem essa integração pronta, mas este app não tem o plugin que hospeda ela.',\n 'connectors.soonBody': 'O Fayz lista este provedor, mas a integração ainda não foi ligada.',\n 'connectors.connectedOn': 'Conectado em {{date}}',\n 'connectors.lastUsed': 'usado {{when}}',\n 'connectors.neverUsed': 'ainda não usado',\n 'connectors.grantedByOther': 'autorizado por outra pessoa da equipe',\n 'connectors.revokeConfirm': 'Desconectar {{name}}? Ele perde o acesso imediatamente.',\n 'connectors.filter.all': 'Tudo',\n 'connectors.filter.connected': 'Conectados',\n 'connectors.filter.agentic': 'Assistente',\n 'connectors.filter.sync': 'Sincronização',\n 'connectors.emptyTitle': 'Nenhum conector',\n 'connectors.emptyBody': 'Conecte um provedor, ou autorize um assistente externo, e ele aparece aqui.',\n 'connectors.noProject': 'Conectores indisponíveis',\n 'connectors.noProjectBody': 'Este app não está ligado a um projeto Fayz.',\n 'connectors.noOrg': 'Sem organização',\n 'connectors.noOrgBody': 'Escolha uma organização para ver as conexões dela.',\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 'auth.setPassword.recoveryTitle': 'Escolha uma nova senha',\n 'auth.setPassword.recoverySubtitle': 'Defina uma nova senha para voltar a acessar sua conta.',\n 'auth.setPassword.welcomeTitle': 'Bem-vindo ao {{appName}}',\n 'auth.setPassword.welcomeSubtitle': 'Escolha uma senha para terminar de configurar seu acesso.',\n 'auth.setPassword.newPassword': 'Nova senha',\n 'auth.setPassword.confirmPassword': 'Confirmar senha',\n 'auth.setPassword.submit': 'Salvar senha',\n 'auth.setPassword.saving': 'Salvando...',\n 'auth.setPassword.tooShort': 'A senha precisa ter no mínimo 8 caracteres.',\n 'auth.setPassword.mismatch': 'As senhas não conferem.',\n 'auth.setPassword.checking': 'Verificando seu link...',\n 'auth.setPassword.expiredTitle': 'Este link expirou',\n 'auth.setPassword.expiredSubtitle': 'Links de acesso só funcionam uma vez. Informe seu e-mail e enviamos um novo.',\n 'auth.setPassword.email': 'E-mail',\n 'auth.setPassword.sendNewLink': 'Enviar novo link',\n 'auth.setPassword.sending': 'Enviando...',\n 'auth.setPassword.sent': 'Confira sua caixa de entrada — o novo link está a caminho.',\n 'auth.setPassword.backToLogin': 'Voltar para o login',\n 'settings.title': 'Configurações',\n 'settings.company': 'Empresa',\n 'settings.branding': 'Identidade Visual',\n 'settings.security': 'Segurança',\n 'settings.sites': 'Sites',\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({ en: shellTranslationsEn })\n\n// ---------------------------------------------------------------------------\n// Lazy shell locales. Only 'en' (the fallback) ships eagerly; other locales\n// load on demand when the app switches to them (setCurrentLocale) or when the\n// app awaits preloadLocale before rendering. Keys resolve through the 'en'\n// fallback until the locale chunk arrives, then listeners re-render.\n// ---------------------------------------------------------------------------\n\nconst _lazyShellLocales: Record<string, () => Promise<Record<string, string>>> = {\n 'pt-BR': () => import('./shell-translations.pt-br').then((m) => m.shellTranslationsPtBr),\n}\nconst _loadedShellLocales = new Set<string>(['en'])\nconst _pendingShellLocales = new Map<string, Promise<void>>()\n\n/**\n * Ensure a lazily-split shell locale is loaded and registered. Resolves\n * immediately for unknown/already-loaded locales. setCurrentLocale calls this\n * fire-and-forget; apps that must avoid an English flash on first paint can\n * `await preloadLocale('pt-BR')` before rendering.\n */\nexport function preloadLocale(locale: string): Promise<void> {\n if (_loadedShellLocales.has(locale)) return Promise.resolve()\n const loader = _lazyShellLocales[locale]\n if (!loader) return Promise.resolve()\n let pending = _pendingShellLocales.get(locale)\n if (!pending) {\n pending = loader().then((translations) => {\n _loadedShellLocales.add(locale)\n _pendingShellLocales.delete(locale)\n registerTranslations({ [locale]: translations })\n _i18nVersion++\n _localeListeners.forEach((listener) => listener())\n })\n _pendingShellLocales.set(locale, pending)\n }\n return pending\n}\n"]}
|