@fayz-ai/saas 0.6.6 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shell/stores/chat.store.ts","../src/shell/lib/core-ai-tools.ts","../src/shell/hooks/useAITools.ts","../src/shell/hooks/useChat.ts","../src/shell/hooks/useTranslation.ts","../src/shell/components/chat/ChatFab.tsx","../src/shell/components/chat/ChatSuggestions.tsx","../src/shell/components/chat/ChatPanel.tsx","../src/shell/config/theme/light.ts","../src/shell/config/theme/dark.ts","../src/shell/config/theme/utils.ts","../src/shell/stores/theme.store.ts","../src/shell/components/layout/CommandPalette.tsx","../src/app/routing.tsx","../src/lib/entity-routes.ts","../src/shell/stores/locale.store.ts","../src/shell/lib/locale-config.ts","../src/shell/components/settings/CompanySettings.tsx","../src/shell/lib/org-context.ts","../src/shell/components/settings/ConnectedCompanySettings.tsx","../src/shell/components/settings/UserProfile.tsx","../src/shell/lib/supabase.ts","../src/shell/components/settings/ConnectedUserProfile.tsx","../src/shell/components/settings/SecuritySettings.tsx","../src/shell/stores/auth.store.ts","../src/shell/lib/auth-context.ts","../src/shell/components/settings/ConnectedSecuritySettings.tsx","../src/shell/components/settings/BrandingSettings.tsx","../src/shell/components/settings/ConnectedBrandingSettings.tsx","../src/shell/components/settings/SettingsPage.tsx","../src/shell/stores/invite.store.ts","../src/shell/components/organization/InviteMemberDialog.tsx","../src/shell/stores/tenant.store.ts","../src/shell/hooks/usePermission.ts","../src/shell/lib/dedup.ts","../src/shell/components/organization/TeamTab.tsx","../src/shell/components/organization/PermissionMatrixEditor.tsx","../src/shell/components/organization/PermissionProfilesTab.tsx","../src/crud/archetypes/ActiveToggle.tsx","../src/crud/archetypes/PersonFormLayout.tsx","../src/crud/archetypes/ProductFormLayout.tsx","../src/crud/archetypes/ServiceFormLayout.tsx","../src/crud/archetypes/LocationFormLayout.tsx","../src/crud/archetypes/PersonPicker.tsx","../src/crud/archetypes/SubjectFormLayout.tsx","../src/crud/relation-field.tsx","../src/crud/CrudFormPage.tsx","../src/crud/fieldToColumn.tsx","../src/crud/CrudCardGrid.tsx","../src/permissions/PermissionGate.tsx","../src/crud/CrudListView.tsx","../src/plugins/WidgetSlot.tsx","../src/lib/schedule-service.ts","../src/lib/schedule-config.ts","../src/crud/archetypes/BlockSettingsPopover.tsx","../src/crud/archetypes/ScheduleEditor.tsx","../src/crud/archetypes/PersonDetailTabs.tsx","../src/crud/archetypes/ProductDetailTabs.tsx","../src/crud/archetypes/ServiceDetailTabs.tsx","../src/crud/archetypes/LocationDetailTabs.tsx","../src/crud/archetypes/EntityLink.tsx","../src/crud/archetypes/SubjectDetailTabs.tsx","../src/crud/CrudDetailPage.tsx","../src/crud/DeleteConfirmDialog.tsx","../src/crud/ImportWizard.tsx","../src/crud/csv-export.ts","../src/hooks/useFieldRules.ts","../src/crud/CrudPage.tsx","../src/stores/createCrudStore.ts","../src/crud/createCrudPage.tsx","../src/shell/components/settings/LocationsCrudPage.ts","../src/shell/components/settings/FieldRulesSettings.tsx","../src/shell/lib/entity-registry.ts","../src/shell/components/settings/ConnectedFieldRulesSettings.tsx","../src/app/AdminShell.tsx","../src/app/admin-app.tsx","../src/app/scaffold.tsx","../src/shell/components/crud/archetypes/ClientOrdersTab.tsx","../src/shell/lib/create-client-orders-provider.ts","../src/archetype-lookup.ts","../src/placeholder.ts","../src/plugins/SettingsGroup.tsx","../src/plugins/QuickActionsButton.tsx","../src/plugins/ModuleActionBar.tsx","../src/plugins/createPluginContext.tsx","../src/plugins/createViewRouter.tsx","../src/lib/currency.ts","../src/plugins/PluginRegistryManager.tsx","../src/hooks/useModuleNavigation.ts","../src/components/shared/PersonLink.tsx","../src/hooks/usePluginPrefs.ts","../src/shell/components/plugins/ConnectorsHub.tsx","../src/shell/components/plugins/PluginSettingsPanel.tsx"],"names":["registry","React","coreUseTranslation","jsxs","jsx","React3","create","BookOpen","MessageCircle","Map","Sparkles","useState","useRef","useEffect","React4","STORAGE_KEY","React5","useOrgAdapterOptional","adapter","React6","Card","CardHeader","CardTitle","CardDescription","CardContent","Camera","Input","CardFooter","Button","Save","_getOpt","React7","React8","Loader2","UserPlus","Clock","useAuthStore","createContext","useContext","React9","X","currentSettings","React10","Building2","User","Shield","t","React11","Plus","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","initialState","usePermission","useCallback","useMemo","React12","Avatar","AvatarImage","AvatarFallback","Mail","React13","ArrowLeft","Search","ChevronRight","Badge","React14","Skeleton","Pencil","renderField","SKIP_FIELDS","FieldItem","Package","IDENTITY_FIELDS","PRICING_FIELDS","Briefcase","CONTACT_FIELDS","ADDRESS_FIELDS","MapPin","getSupabaseClientOptional","Check","LucideIcons","Checkbox","useTranslation","toast","useSaveBar","useBackHandler","formatCurrencyLocale","formatDateLocale","formatDateTimeLocale","formatCurrency","formatDate","LucideIcons2","Dropdown","DropdownTrigger","DropdownContent","DropdownItem","Upload","usePluginRuntimeOptional","getWidgetsForZone","resolvePluginComponent","ChevronDown","Copy","Settings","Modal","ModalContent","ModalHeader","ModalTitle","ModalDescription","Trash2","ModalFooter","usePluginsOptional","FileText","ComingSoon","BarChart3","Tag","CalendarDays","Users","formatValue","DollarSign","ShoppingBag","FolderOpen","Tabs","TabsList","TabsTrigger","Eye","TabsContent","cn","Download","ModalBody","deriveEntityKey","React27","DropdownSeparator","ShieldCheck","React28","usePluginRuntime","React29","resolvePluginRuntime","PluginRuntimeProvider","React30","Ban","UserX","ExternalLink","ToggleRow","ICON_MAP","useStore","useZustandStore","PersonLink","Calendar","RegistryCrudView","resolveDataProvider","Plug"],"mappings":"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","file":"index.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface ChatMessage {\n id: string\n role: 'user' | 'assistant'\n content: string\n timestamp: string\n}\n\ninterface ChatState {\n messages: ChatMessage[]\n isOpen: boolean\n isStreaming: boolean\n setOpen: (open: boolean) => void\n toggleOpen: () => void\n addMessage: (message: ChatMessage) => void\n updateLastAssistant: (content: string) => void\n setStreaming: (streaming: boolean) => void\n reset: () => void\n}\n\nexport const useChatStore = create<ChatState>((set) => ({\n messages: [],\n isOpen: false,\n isStreaming: false,\n\n setOpen: (open) => set({ isOpen: open }),\n toggleOpen: () => set((s) => ({ isOpen: !s.isOpen })),\n\n addMessage: (message) =>\n set((s) => ({ messages: [...s.messages, message] })),\n\n updateLastAssistant: (content) =>\n set((s) => {\n const msgs = [...s.messages]\n const lastIdx = msgs.length - 1\n if (lastIdx >= 0 && msgs[lastIdx].role === 'assistant') {\n msgs[lastIdx] = { ...msgs[lastIdx], content }\n }\n return { messages: msgs }\n }),\n\n setStreaming: (isStreaming) => set({ isStreaming }),\n reset: () => set({ messages: [], isStreaming: false }),\n}))\n","import type { PluginAITool, PluginRegistryDef } from '../types/plugins'\n\n/**\n * Core SaaS-level AI tools — always available, no plugin required.\n */\nexport const coreAITools: PluginAITool[] = [\n {\n id: 'core.business-summary',\n name: 'getBusinessSummary',\n description: 'Returns a summary of the current business: name, plan, vertical, team size, and key metrics.',\n icon: 'Building2',\n mode: 'read',\n parameters: { type: 'object', properties: {}, required: [] },\n category: 'Core',\n suggestions: [\n { label: \"How's my business doing today?\" },\n ],\n },\n {\n id: 'core.team-members',\n name: 'getTeamMembers',\n description: 'Lists team members for the current tenant with their roles and status.',\n icon: 'Users',\n mode: 'read',\n parameters: {\n type: 'object',\n properties: {\n role: { type: 'string', description: 'Filter by role: owner, admin, manager, staff, viewer' },\n },\n },\n permission: { feature: 'team', action: 'read' },\n category: 'Core',\n suggestions: [\n { label: 'Who is on my team?' },\n ],\n },\n {\n id: 'core.navigate',\n name: 'navigateTo',\n description: 'Helps the user find and navigate to a specific page or feature in the app.',\n icon: 'Compass',\n mode: 'read',\n parameters: {\n type: 'object',\n properties: {\n page: { type: 'string', description: 'Page name or feature the user is looking for' },\n },\n required: ['page'],\n },\n category: 'Core',\n },\n]\n\n/**\n * Auto-generates read tools from plugin registry definitions.\n * Each registry gets a basic \"list\" tool so plugins get AI capabilities for free.\n */\nexport function generateRegistryTools(pluginId: string, registries: PluginRegistryDef[]): PluginAITool[] {\n return registries\n .filter((r) => !r.readOnly)\n .map((registry) => {\n const plural = registry.entity.namePlural ?? `${registry.entity.name}s`\n return {\n id: `${pluginId}.list-${registry.id}`,\n name: `list${plural.replace(/\\s+/g, '')}`,\n description: `Lists all ${plural.toLowerCase()} for the current business.`,\n icon: registry.icon ?? registry.entity.icon,\n mode: 'read' as const,\n parameters: {\n type: 'object' as const,\n properties: {\n search: { type: 'string' as const, description: 'Search text' },\n },\n },\n category: pluginId.charAt(0).toUpperCase() + pluginId.slice(1),\n }\n })\n}\n\n/**\n * Formats a tool as a function signature: e.g. \"getRevenue(period?)\"\n */\nexport function formatToolSignature(tool: PluginAITool): string {\n const params = tool.parameters?.properties\n ? Object.entries(tool.parameters.properties)\n .map(([key]) => tool.parameters?.required?.includes(key) ? key : `${key}?`)\n .join(', ')\n : ''\n return `${tool.name}(${params})`\n}\n","import * as React from 'react'\nimport { usePluginRuntimeOptional } from '../lib/plugins'\nimport { coreAITools, generateRegistryTools, formatToolSignature } from '../lib/core-ai-tools'\nimport type { PluginAITool, AIToolSuggestion } from '../types/plugins'\n\nexport interface ResolvedSuggestion extends AIToolSuggestion {\n toolId: string\n category: string\n}\n\nexport interface ResolvedToolEntry {\n tool: PluginAITool\n signature: string\n}\n\nexport interface ResolvedToolGroup {\n category: string\n tools: ResolvedToolEntry[]\n}\n\n/**\n * Detects which plugin \"owns\" the current page based on route matching.\n * Returns the plugin ID or null for non-plugin pages (e.g. settings/general, dashboard).\n */\nfunction detectActivePluginId(runtime: ReturnType<typeof usePluginRuntimeOptional>): string | null {\n if (!runtime) return null\n const path = runtime.context.currentPath\n\n // Check each active plugin's routes for a match\n for (const plugin of runtime.activePlugins) {\n for (const route of plugin.routes) {\n if (path === route.path || path.startsWith(`${route.path}/`)) {\n return plugin.id\n }\n }\n }\n\n // Also match settings sub-pages: /settings/financial → financial\n const settingsMatch = path.match(/^\\/settings\\/([^/]+)/)\n if (settingsMatch) {\n const tabId = settingsMatch[1]\n if (runtime.activePlugins.some((p) => p.id === tabId)) {\n return tabId\n }\n }\n\n return null\n}\n\nexport function useAITools(): {\n tools: PluginAITool[]\n suggestions: ResolvedSuggestion[]\n /** Suggestions from the currently active plugin only (empty on non-plugin pages) */\n contextualSuggestions: ResolvedSuggestion[]\n toolGroups: ResolvedToolGroup[]\n} {\n const runtime = usePluginRuntimeOptional()\n\n return React.useMemo(() => {\n const hasPermission = runtime?.context.hasPermission\n const verticalId = runtime?.context.tenant?.verticalId\n const activePluginId = detectActivePluginId(runtime)\n\n // Collect all tools: core + plugin-declared + auto-generated from registries\n const allTools: PluginAITool[] = [...coreAITools]\n\n if (runtime) {\n allTools.push(...runtime.aiTools)\n\n // Auto-generate registry tools for active plugins\n for (const [pluginId, registries] of runtime.registries) {\n const autoTools = generateRegistryTools(pluginId, registries)\n // Only add auto-tools that weren't explicitly declared\n const declaredIds = new Set(runtime.aiTools.map((t) => t.id))\n for (const tool of autoTools) {\n if (!declaredIds.has(tool.id)) {\n allTools.push(tool)\n }\n }\n }\n }\n\n // Filter by permission\n const tools = allTools.filter((tool) => {\n if (!tool.permission) return true\n if (!hasPermission) return true\n return hasPermission(tool.permission)\n })\n\n // Flatten suggestions, filter by vertical\n const allSuggestions: ResolvedSuggestion[] = []\n for (const tool of tools) {\n if (!tool.suggestions) continue\n for (const suggestion of tool.suggestions) {\n if (suggestion.verticalId && suggestion.verticalId !== verticalId) continue\n allSuggestions.push({\n ...suggestion,\n toolId: tool.id,\n category: tool.category ?? 'General',\n })\n }\n }\n\n // Prioritize suggestions from the active plugin's context\n const contextualSuggestions = activePluginId\n ? allSuggestions.filter((s) => s.toolId.startsWith(`${activePluginId}.`))\n : []\n let suggestions: ResolvedSuggestion[]\n if (activePluginId) {\n const others = allSuggestions.filter((s) => !s.toolId.startsWith(`${activePluginId}.`))\n suggestions = [...contextualSuggestions, ...others]\n } else {\n suggestions = allSuggestions\n }\n\n // Group tools by category with signatures\n const groupMap = new Map<string, ResolvedToolEntry[]>()\n for (const tool of tools) {\n const cat = tool.category ?? 'General'\n if (!groupMap.has(cat)) groupMap.set(cat, [])\n groupMap.get(cat)!.push({\n tool,\n signature: formatToolSignature(tool),\n })\n }\n\n // Core first, then alphabetical\n const toolGroups: ResolvedToolGroup[] = []\n if (groupMap.has('Core')) {\n toolGroups.push({ category: 'Core', tools: groupMap.get('Core')! })\n groupMap.delete('Core')\n }\n for (const [category, groupTools] of [...groupMap.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n toolGroups.push({ category, tools: groupTools })\n }\n\n return { tools, suggestions, contextualSuggestions, toolGroups }\n }, [runtime])\n}\n","import { useCallback } from 'react'\nimport { useChatStore, type ChatMessage } from '../stores/chat.store'\n\ninterface UseChatOptions {\n apiEndpoint?: string\n systemPrompt?: string\n}\n\nexport function useChat(options?: UseChatOptions) {\n const store = useChatStore()\n\n const sendMessage = useCallback(\n async (content: string) => {\n const userMsg: ChatMessage = {\n id: `msg-${Date.now()}`,\n role: 'user',\n content,\n timestamp: new Date().toISOString(),\n }\n store.addMessage(userMsg)\n\n const assistantMsg: ChatMessage = {\n id: `msg-${Date.now() + 1}`,\n role: 'assistant',\n content: '',\n timestamp: new Date().toISOString(),\n }\n store.addMessage(assistantMsg)\n store.setStreaming(true)\n\n if (!options?.apiEndpoint) {\n // Mock response if no endpoint configured\n setTimeout(() => {\n store.updateLastAssistant(\n \"I'm your AI assistant. This is a demo response — connect an API endpoint to enable real conversations.\"\n )\n store.setStreaming(false)\n }, 800)\n return\n }\n\n try {\n const response = await fetch(options.apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n messages: [\n ...(options.systemPrompt\n ? [{ role: 'system', content: options.systemPrompt }]\n : []),\n ...store.messages.map((m) => ({ role: m.role, content: m.content })),\n { role: 'user', content },\n ],\n }),\n })\n\n if (!response.ok) {\n store.updateLastAssistant('Sorry, something went wrong. Please try again.')\n store.setStreaming(false)\n return\n }\n\n const data = await response.json()\n const text = data.choices?.[0]?.message?.content ?? data.content ?? 'No response.'\n store.updateLastAssistant(text)\n } catch {\n store.updateLastAssistant('Sorry, I could not connect. Please try again later.')\n } finally {\n store.setStreaming(false)\n }\n },\n [store, options?.apiEndpoint, options?.systemPrompt]\n )\n\n return {\n messages: store.messages,\n isOpen: store.isOpen,\n isStreaming: store.isStreaming,\n sendMessage,\n toggleOpen: store.toggleOpen,\n setOpen: store.setOpen,\n reset: store.reset,\n }\n}\n","// Compat wrapper → @fayz-ai/core's unified translator. The shell calls\n// `const { t } = useTranslation()`, while @fayz-ai/core returns `t` directly — this\n// keeps the `{ t, locale }` shape so shell components resolve from the SAME\n// registry the native plugins use (registered by createSaasApp).\nimport { useTranslation as coreUseTranslation, getCurrentLocale } from '@fayz-ai/core'\n\nexport function useTranslation() {\n const t = coreUseTranslation()\n return { t, locale: getCurrentLocale() }\n}\n","import * as React from 'react'\nimport { MessageCircle, X } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useChatStore } from '../../stores/chat.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useAITools, type ResolvedSuggestion } from '../../hooks/useAITools'\nimport { useChat } from '../../hooks/useChat'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface ChatFabProps {\n className?: string\n apiEndpoint?: string\n systemPrompt?: string\n}\n\nfunction TypewriterText({ text, speed = 28, onDone }: { text: string; speed?: number; onDone?: () => void }) {\n const [displayed, setDisplayed] = React.useState('')\n const indexRef = React.useRef(0)\n\n React.useEffect(() => {\n setDisplayed('')\n indexRef.current = 0\n const interval = setInterval(() => {\n indexRef.current++\n if (indexRef.current > text.length) {\n clearInterval(interval)\n onDone?.()\n return\n }\n setDisplayed(text.slice(0, indexRef.current))\n }, speed)\n return () => clearInterval(interval)\n }, [text, speed])\n\n return (\n <span>\n {displayed}\n {displayed.length < text.length && (\n <span className=\"inline-block w-[2px] h-3 bg-current/60 animate-pulse ml-0.5 -mb-px\" />\n )}\n </span>\n )\n}\n\n/** Injected once — keyframes for pill grow/shrink */\nconst STYLE_ID = 'chat-fab-anims'\nfunction ensureStyles() {\n if (typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) return\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = `\n @keyframes fabPillGrow {\n 0% { max-width: 2.75rem; opacity: 0.6; }\n 40% { opacity: 1; }\n 100% { max-width: 22rem; opacity: 1; }\n }\n @keyframes fabPillShrink {\n 0% { max-width: 22rem; opacity: 1; }\n 60% { opacity: 0.6; }\n 100% { max-width: 2.75rem; opacity: 0; }\n }\n `\n document.head.appendChild(style)\n}\n\nexport function ChatFab({ className, apiEndpoint, systemPrompt }: ChatFabProps) {\n const { isOpen, toggleOpen, setOpen } = useChatStore()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const { contextualSuggestions } = useAITools()\n const { sendMessage } = useChat({ apiEndpoint, systemPrompt })\n const { t } = useTranslation()\n\n const [phase, setPhase] = React.useState<'idle' | 'expanding' | 'typing' | 'visible' | 'collapsing'>('idle')\n const [activeSuggestion, setActiveSuggestion] = React.useState<ResolvedSuggestion | null>(null)\n const timersRef = React.useRef<ReturnType<typeof setTimeout>[]>([])\n const prevSuggestionRef = React.useRef<string | null>(null)\n\n React.useEffect(ensureStyles, [])\n\n const clearTimers = () => { timersRef.current.forEach(clearTimeout); timersRef.current = [] }\n const addTimer = (fn: () => void, ms: number) => { timersRef.current.push(setTimeout(fn, ms)) }\n\n const topSuggestion = contextualSuggestions[0] ?? null\n const topLabel = topSuggestion?.label ?? null\n\n React.useEffect(() => {\n if (isOpen || !topSuggestion || !topLabel) {\n if (phase !== 'idle') { clearTimers(); setPhase('collapsing'); addTimer(() => setPhase('idle'), 450) }\n prevSuggestionRef.current = null\n return\n }\n if (prevSuggestionRef.current === topLabel) return\n prevSuggestionRef.current = topLabel\n clearTimers()\n\n const startExpand = () => {\n setActiveSuggestion(topSuggestion)\n setPhase('expanding')\n // Start typing while pill is still growing\n addTimer(() => setPhase('typing'), 350)\n }\n\n if (phase !== 'idle') {\n setPhase('collapsing')\n addTimer(startExpand, 500)\n } else {\n addTimer(startExpand, 800)\n }\n\n addTimer(() => {\n setPhase('collapsing')\n addTimer(() => setPhase('idle'), 450)\n }, 9000)\n\n return clearTimers\n }, [topLabel, isOpen])\n\n React.useEffect(() => {\n if (isOpen && phase !== 'idle') { clearTimers(); setPhase('idle') }\n }, [isOpen])\n\n if (!currentOrg) return null\n\n // Resolve translated label for a suggestion (same logic as ChatSuggestions)\n const resolveLabel = (s: ResolvedSuggestion, index: number) => {\n const key = `chat.suggestion.${s.toolId}.${index}`\n const translated = t(key)\n return translated === key ? s.label : translated\n }\n\n const activeLabel = activeSuggestion ? resolveLabel(activeSuggestion, 0) : ''\n\n const handleSuggestionClick = () => {\n if (!activeSuggestion) return\n clearTimers()\n setPhase('idle')\n setOpen(true)\n setTimeout(() => { sendMessage(activeSuggestion.prompt ?? activeLabel) }, 150)\n }\n\n const showPill = phase === 'expanding' || phase === 'typing' || phase === 'visible'\n\n return (\n <div className={cn('fixed bottom-4 right-4 z-50 hidden md:block', className)}>\n {/* Pill — grows from FAB circle size outward */}\n {(showPill || phase === 'collapsing') && !isOpen && (\n <button\n onClick={handleSuggestionClick}\n className=\"absolute right-0 bottom-0 flex flex-col items-start justify-center rounded-full bg-foreground text-background shadow-lg hover:opacity-95 cursor-pointer pl-5 overflow-hidden\"\n style={{\n paddingRight: '3.25rem',\n height: '2.75rem',\n animation: showPill\n ? 'fabPillGrow 650ms cubic-bezier(0.22, 1, 0.36, 1) forwards'\n : 'fabPillShrink 400ms cubic-bezier(0.55, 0, 1, 0.45) forwards',\n }}\n >\n <span className=\"text-[7px] font-semibold uppercase tracking-widest opacity-40\">\n {t('chat.fab.tryIt')}\n </span>\n <span className={cn(\n 'text-[13px] font-medium whitespace-nowrap min-h-[1.15em] transition-opacity',\n phase === 'expanding' ? 'opacity-0 duration-200' : 'opacity-100 duration-300',\n )}>\n {phase === 'typing' && activeSuggestion ? (\n <TypewriterText\n text={`\"${activeLabel}\"`}\n onDone={() => setPhase('visible')}\n />\n ) : (phase === 'visible') && activeSuggestion ? (\n `\"${activeLabel}\"`\n ) : (\n '\\u00A0'\n )}\n </span>\n </button>\n )}\n\n {/* FAB circle */}\n <button\n onClick={toggleOpen}\n className={cn(\n 'relative z-10 h-11 w-11 flex items-center justify-center transition-all hover:opacity-90 focus:outline-none',\n isOpen\n ? 'rounded-tl-none rounded-tr-lg rounded-br-full rounded-bl-full bg-card text-muted-foreground border border-border/50 border-t-0 shadow-lg'\n : 'rounded-full bg-foreground text-background shadow-lg',\n )}\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\n >\n {isOpen ? <X className=\"h-4 w-4\" /> : <MessageCircle className=\"h-4 w-4\" />}\n </button>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Sparkles, BookOpen, Pencil } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { ResolvedSuggestion, ResolvedToolGroup } from '../../hooks/useAITools'\n\ninterface ChatSuggestionsProps {\n suggestions: ResolvedSuggestion[]\n onSelect: (suggestion: ResolvedSuggestion) => void\n}\n\nconst MAX_SUGGESTIONS = 5\n\nexport function ChatSuggestions({ suggestions, onSelect }: ChatSuggestionsProps) {\n const { t } = useTranslation()\n const visible = suggestions.slice(0, MAX_SUGGESTIONS)\n\n return (\n <div className=\"flex flex-col gap-1 px-3 py-3\">\n <div className=\"flex items-center gap-1.5 px-1 pb-1\">\n <Sparkles className=\"h-3 w-3 text-muted-foreground/60\" />\n <span className=\"text-[11px] font-medium text-muted-foreground/70\">{t('chat.tryAsking')}</span>\n </div>\n {visible.map((suggestion, i) => {\n const labelKey = `chat.suggestion.${suggestion.toolId}.${i}`\n const translated = t(labelKey)\n const label = translated === labelKey ? suggestion.label : translated\n return (\n <button\n key={`${suggestion.toolId}-${i}`}\n onClick={() => onSelect(suggestion)}\n className={cn(\n 'rounded-md px-2.5 py-1.5 text-left text-xs text-muted-foreground',\n 'transition-colors hover:bg-muted hover:text-foreground'\n )}\n >\n &ldquo;{label}&rdquo;\n </button>\n )\n })}\n </div>\n )\n}\n\n// --- Tools panel (shown via config button) ---\n\ninterface ChatToolsPanelProps {\n toolGroups: ResolvedToolGroup[]\n onClose: () => void\n}\n\nexport function ChatToolsPanel({ toolGroups, onClose }: ChatToolsPanelProps) {\n const { t } = useTranslation()\n const totalTools = toolGroups.reduce((sum, g) => sum + g.tools.length, 0)\n\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className=\"sticky top-0 z-10 flex items-center justify-between border-b border-border/40 bg-card px-4 py-2\">\n <span className=\"text-[11px] font-semibold text-foreground\">\n {t('chat.toolsAvailable', { count: totalTools })}\n </span>\n <button\n onClick={onClose}\n className=\"text-[11px] text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('common.done')}\n </button>\n </div>\n <div className=\"flex flex-col gap-3 px-3 py-3\">\n {toolGroups.map((group) => (\n <div key={group.category} className=\"flex flex-col gap-0.5\">\n <span className=\"px-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/50\">\n {group.category}\n </span>\n {group.tools.map(({ tool, signature }) => {\n const ModeIcon = tool.mode === 'persist' ? Pencil : BookOpen\n return (\n <div\n key={tool.id}\n className=\"flex items-start gap-1.5 rounded-md px-2 py-1 transition-colors hover:bg-muted/50\"\n title={tool.description}\n >\n <ModeIcon className=\"mt-0.5 h-3 w-3 shrink-0 text-muted-foreground/40\" />\n <div className=\"min-w-0\">\n <code className=\"text-[11px] font-mono text-muted-foreground\">\n {signature}\n </code>\n {tool.description && (\n <p className=\"text-[10px] leading-tight text-muted-foreground/40 truncate\">\n {tool.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ArrowUp, Settings2 } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { useChatStore, type ChatMessage } from '../../stores/chat.store'\nimport { useChat } from '../../hooks/useChat'\nimport { useAITools } from '../../hooks/useAITools'\nimport { ChatSuggestions, ChatToolsPanel } from './ChatSuggestions'\n\ninterface ChatPanelProps {\n title?: string\n apiEndpoint?: string\n systemPrompt?: string\n className?: string\n}\n\nexport function ChatPanel({\n title = 'Assistant',\n apiEndpoint,\n systemPrompt,\n className,\n}: ChatPanelProps) {\n const { isOpen, messages, isStreaming } = useChatStore()\n const { sendMessage } = useChat({ apiEndpoint, systemPrompt })\n const { t } = useTranslation()\n const { suggestions, toolGroups } = useAITools()\n const [input, setInput] = React.useState('')\n const [showTools, setShowTools] = React.useState(false)\n const scrollRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const hasMessages = messages.length > 0\n const totalTools = toolGroups.reduce((sum, g) => sum + g.tools.length, 0)\n\n React.useEffect(() => {\n scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'smooth' })\n }, [messages])\n\n React.useEffect(() => {\n if (isOpen) {\n const timer = setTimeout(() => inputRef.current?.focus(), 100)\n return () => clearTimeout(timer)\n }\n setShowTools(false)\n }, [isOpen])\n\n if (!isOpen) return null\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n const text = input.trim()\n if (!text || isStreaming) return\n setInput('')\n setShowTools(false)\n sendMessage(text)\n }\n\n return (\n <div\n className={cn(\n 'fixed z-40 flex flex-col overflow-hidden bg-card shadow-2xl',\n // Mobile: below header, above bottom nav\n 'inset-x-0 top-12 bottom-16 rounded-none border-0',\n // Desktop: floating card — sits just above the FAB, touching it\n 'md:inset-auto md:bottom-[3.75rem] md:right-4 md:w-[22rem] md:max-h-[min(70vh,520px)] md:rounded-2xl md:rounded-br-none md:border md:border-border/50',\n 'animate-in slide-in-from-bottom-2 fade-in-0 duration-150',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border/40 px-4 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-1.5 w-1.5 rounded-full bg-success\" />\n <span className=\"text-xs font-semibold text-foreground\">{title}</span>\n </div>\n {totalTools > 0 && (\n <button\n onClick={() => setShowTools(!showTools)}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[10px] transition-colors',\n showTools\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n title=\"Available tools\"\n >\n <Settings2 className=\"h-3 w-3\" />\n <span className=\"font-medium\">{totalTools}</span>\n </button>\n )}\n </div>\n\n {/* Tools panel overlay */}\n {showTools ? (\n <ChatToolsPanel toolGroups={toolGroups} onClose={() => setShowTools(false)} />\n ) : (\n /* Messages / suggestions area */\n <div\n ref={scrollRef}\n className={cn(\n 'min-h-0 flex-1 overflow-y-auto',\n hasMessages && 'space-y-2 px-3 py-3'\n )}\n >\n {!hasMessages && (\n <ChatSuggestions\n suggestions={suggestions}\n onSelect={(suggestion) => {\n setInput('')\n sendMessage(suggestion.prompt ?? suggestion.label)\n }}\n />\n )}\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} />\n ))}\n {isStreaming && messages[messages.length - 1]?.content === '' && (\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse\" />\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse [animation-delay:150ms]\" />\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse [animation-delay:300ms]\" />\n </div>\n )}\n </div>\n )}\n\n {/* Input */}\n <form onSubmit={handleSubmit} className=\"border-t border-border/40 p-2\">\n <div className=\"flex items-center gap-1.5 rounded-full border border-border bg-background py-1 pl-3.5 pr-1 transition-colors focus-within:border-foreground/20\">\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={t('chat.messagePlaceholder')}\n className=\"min-w-0 flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground/50 focus:outline-none\"\n disabled={isStreaming}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || isStreaming}\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-foreground text-background transition-opacity hover:opacity-80 disabled:opacity-20\"\n aria-label=\"Send message\"\n >\n <ArrowUp className=\"h-3.5 w-3.5\" strokeWidth={2.5} />\n </button>\n </div>\n </form>\n </div>\n )\n}\n\nfunction MessageBubble({ message }: { message: ChatMessage }) {\n const isUser = message.role === 'user'\n\n return (\n <div className={cn('flex', isUser ? 'justify-end' : 'justify-start')}>\n <div\n className={cn(\n 'max-w-[85%] rounded-2xl px-3 py-1.5 text-[13px] leading-relaxed',\n isUser\n ? 'rounded-br-sm bg-foreground text-background'\n : 'rounded-bl-sm bg-muted text-foreground'\n )}\n >\n {message.content}\n </div>\n </div>\n )\n}\n","import type { ThemeTokens } from './tokens'\n\n// Polaris (Shopify Admin \"Sail\") light theme.\n// Page #f1f1f1, cards #ffffff, near-black brand #303030, light sidebar #ebebeb\n// with raised-white active items. Semantic accents only carry color.\nexport const lightTheme: ThemeTokens = {\n name: 'light',\n colors: {\n // Brand surface is near-black, not a saturated hue. Buttons get the bevel\n // shadow below; flat color is only half the look.\n primary: '0 0% 18.8%', // #303030\n primaryForeground: '0 0% 100%', // #ffffff\n secondary: '0 0% 96.9%', // #f7f7f7\n secondaryForeground: '0 0% 18.8%', // #303030\n accent: '0 0% 94.5%', // #f1f1f1 (hover/selected step)\n accentForeground: '0 0% 18.8%', // #303030\n background: '0 0% 94.5%', // #f1f1f1 — page is never white\n foreground: '0 0% 18.8%', // #303030\n card: '0 0% 100%', // #ffffff\n cardForeground: '0 0% 18.8%', // #303030\n muted: '0 0% 96.9%', // #f7f7f7\n mutedForeground: '0 0% 38%', // #616161\n border: '0 0% 89%', // #e3e3e3 (hairline, not dark gray)\n input: '0 0% 54.1%', // #8a8a8a — inputs need stronger border\n ring: '214 100% 41.4%', // #005bd3 — focus blue\n popover: '0 0% 100%',\n popoverForeground: '0 0% 18.8%',\n destructive: '354 92% 41%', // #c70a24\n destructiveForeground: '0 0% 100%',\n success: '167 95% 25.1%', // #047b5d\n successForeground: '0 0% 100%',\n warning: '43 100% 50%', // #ffb800\n warningForeground: '0 0% 18.8%',\n\n // Layout surfaces — light gray rail (Polaris \"Sail\"), raised white active items.\n sidebar: '0 0% 92.2%', // #ebebeb\n sidebarForeground: '0 0% 18.8%', // #303030\n sidebarBorder: '0 0% 86.3%', // #dcdcdc\n sidebarAccent: '0 0% 100%', // #ffffff — active item floats above rail\n sidebarAccentForeground: '0 0% 18.8%',\n sidebarMuted: '0 0% 38%', // #616161\n content: '0 0% 94.5%', // #f1f1f1\n },\n perception: {\n buttonRadius: '0.5rem', // 8px (--p-border-radius-200)\n cardRadius: '0.5rem', // 8px — Polaris cards are 8px, not 12px\n inputRadius: '0.5rem',\n modalRadius: '1rem', // 16px (--p-border-radius-400)\n fontFamily: 'Inter, ui-sans-serif, system-ui, -apple-system, sans-serif',\n fontFamilyMono: 'JetBrains Mono, ui-monospace, SFMono-Regular, monospace',\n // Polaris hairline + a touch of bottom lift so cards visibly float on the gray page.\n shadowSm: '0 1px 0 rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(26, 26, 26, 0.06), 0 1px 2px -1px rgba(26, 26, 26, 0.06)',\n shadowMd: '0 1px 1px -1px rgba(26, 26, 26, 0.07), 0 4px 8px -2px rgba(26, 26, 26, 0.10)',\n shadowLg: '0 4px 12px -2px rgba(26, 26, 26, 0.15), 0 1px 3px rgba(26, 26, 26, 0.08)',\n // Inset bevels — Polaris signature. Buttons feel physical because of these.\n shadowButton:\n 'inset 0 -1px 0 rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.50), 0 1px 0 rgba(0,0,0,0.05)',\n shadowButtonPrimary:\n 'inset 0 -1px 0 rgba(0,0,0,0.20), inset 0 1px 0 rgba(255,255,255,0.20), 0 1px 1.5px rgba(0,0,0,0.20)',\n shadowButtonInset:\n 'inset 0 2px 1px -1px rgba(0,0,0,0.20), inset 0 0 0 1px rgba(0,0,0,0.05)',\n },\n}\n","import type { ThemeTokens } from './tokens'\n\n// \"Sail midnight\" — Polaris/Shopify Admin dark companion. No upstream reference;\n// designed from the same philosophy as the light theme: neutral grayscale chrome,\n// page bg darker than cards (mirrors the light \"card floats on page\" hierarchy),\n// brand surface is the highest-contrast color (here near-white instead of near-black).\nexport const darkTheme: ThemeTokens = {\n name: 'dark',\n colors: {\n primary: '0 0% 100%', // #ffffff — inverted brand surface\n primaryForeground: '0 0% 10.2%', // #1a1a1a\n secondary: '0 0% 18.8%', // #303030\n secondaryForeground: '0 0% 89%', // #e3e3e3\n accent: '0 0% 22.7%', // #3a3a3a — hover/selected one step up from card\n accentForeground: '0 0% 100%',\n background: '0 0% 10.2%', // #1a1a1a — page\n foreground: '0 0% 89%', // #e3e3e3\n card: '0 0% 14.9%', // #262626 — one step lighter than page\n cardForeground: '0 0% 89%',\n muted: '0 0% 18.8%', // #303030\n mutedForeground: '0 0% 64.7%', // #a5a5a5\n border: '0 0% 22.7%', // #3a3a3a — hairline visible on cards\n input: '0 0% 32.2%', // #525252\n ring: '217 100% 68.4%', // #5b9bff — brighter blue for dark\n popover: '0 0% 18.8%', // popovers sit above cards\n popoverForeground: '0 0% 89%',\n destructive: '7 100% 44.9%', // #e51c00\n destructiveForeground: '0 0% 100%',\n success: '156 71% 42.5%', // #1fb87a\n successForeground: '0 0% 0%',\n warning: '41 100% 65.1%', // #ffc94d\n warningForeground: '0 0% 10.2%',\n\n // Sidebar matches page; active item is a raised dark pill.\n sidebar: '0 0% 10.2%', // #1a1a1a\n sidebarForeground: '0 0% 89%',\n sidebarBorder: '0 0% 16.5%', // #2a2a2a\n sidebarAccent: '0 0% 18.8%', // #303030\n sidebarAccentForeground: '0 0% 100%',\n sidebarMuted: '0 0% 64.7%',\n content: '0 0% 10.2%',\n },\n perception: {\n buttonRadius: '0.5rem',\n cardRadius: '0.5rem',\n inputRadius: '0.5rem',\n modalRadius: '1rem',\n fontFamily: 'Inter, ui-sans-serif, system-ui, -apple-system, sans-serif',\n fontFamilyMono: 'JetBrains Mono, ui-monospace, SFMono-Regular, monospace',\n // Shadows on dark are stronger or they disappear.\n shadowSm: '0 1px 0 rgba(0, 0, 0, 0.4), 0 1px 3px 0 rgba(0, 0, 0, 0.35), 0 1px 2px -1px rgba(0, 0, 0, 0.35)',\n shadowMd: '0 1px 1px -1px rgba(0, 0, 0, 0.5), 0 4px 8px -2px rgba(0, 0, 0, 0.6)',\n shadowLg: '0 4px 12px -2px rgba(0, 0, 0, 0.6), 0 1px 3px rgba(0, 0, 0, 0.4)',\n // Bevels — top highlight strengthens on near-white primary; on dark default\n // buttons we lean on the inset-bottom shadow for depth.\n shadowButton:\n 'inset 0 -1px 0 rgba(0,0,0,0.40), inset 0 1px 0 rgba(255,255,255,0.08), 0 1px 0 rgba(0,0,0,0.30)',\n shadowButtonPrimary:\n 'inset 0 -1px 0 rgba(0,0,0,0.20), inset 0 1px 0 rgba(255,255,255,0.40), 0 1px 1.5px rgba(0,0,0,0.40)',\n shadowButtonInset:\n 'inset 0 2px 1px -1px rgba(0,0,0,0.50), inset 0 0 0 1px rgba(0,0,0,0.20)',\n },\n}\n","import type {\n ThemeTokens,\n SemanticColors,\n UIPerceptionTokens,\n SaasTheme,\n ThemeRadius,\n ThemeShadow,\n ThemeFont,\n} from './tokens'\n\ntype SidebarTokens = Exclude<SaasTheme['sidebar'], string | undefined>\n\n/**\n * Derive a colored (\"brand\") sidebar palette from a single brand HSL string\n * (e.g. \"243 75% 59%\"). Keeps the brand hue/saturation and shifts lightness for\n * the border/active surfaces so text stays readable (light foreground on the\n * saturated rail). Falls back to undefined (→ neutral) if the value isn't HSL.\n */\nfunction deriveBrandSidebar(brand: string): SidebarTokens | undefined {\n const parts = brand.trim().split(/\\s+/)\n if (parts.length < 3) return undefined\n const [h, s, lRaw] = parts\n const l = parseFloat(lRaw)\n if (Number.isNaN(l)) return undefined\n const shiftL = (delta: number) => `${h} ${s} ${Math.max(0, Math.min(100, l + delta))}%`\n return {\n background: brand, // the brand color fills the rail\n foreground: '0 0% 100%', // white primary text — readable on the saturated rail\n border: shiftL(-12), // slightly darker hairline\n accent: shiftL(-15), // active item — a deeper shade that reads as selected\n accentForeground: '0 0% 100%',\n muted: `${h} 35% 82%`, // dimmed icons / secondary labels\n }\n}\n\n/** Resolve SaasTheme.sidebar (string preset or explicit tokens) into tokens. */\nfunction resolveSidebar(theme: SaasTheme): SidebarTokens | undefined {\n const sidebar = theme.sidebar\n if (sidebar === 'neutral') return undefined // keep the default light rail\n if (sidebar === 'brand') return deriveBrandSidebar(theme.brand)\n return sidebar\n}\nimport { lightTheme } from './light'\nimport { createFayzTheme } from '@fayz-ai/ui'\n\nexport interface CreateThemeOptions {\n name?: string\n colors?: Partial<SemanticColors>\n /** Dark mode color overrides — applied instead of `colors` when in dark mode */\n darkColors?: Partial<SemanticColors>\n perception?: Partial<UIPerceptionTokens>\n /** Shorthand: single HSL value that auto-derives primary, ring, and accent */\n brand?: string\n}\n\n/**\n * Discriminate the two theme shapes a FayzAppConfig can carry. The explicit\n * `__kind: 'saas-theme'` marker is authoritative; the structural fallback\n * exists only for hand-written configs that predate the marker. Note the\n * fallback is ambiguous for a `{ name, brand }`-only SaasTheme (it routes to\n * the CreateThemeOptions path) — set `__kind` to opt out of the ambiguity.\n */\nexport function isSaasTheme(theme: SaasTheme | CreateThemeOptions): theme is SaasTheme {\n if ('__kind' in theme && theme.__kind === 'saas-theme') return true\n return 'brand' in theme && ('radius' in theme || 'sidebar' in theme || 'font' in theme)\n}\n\n// --- Friendly preset maps ---\n\nconst RADIUS_MAP: Record<ThemeRadius, { button: string; card: string; input: string; modal: string }> = {\n sharp: { button: '0.25rem', card: '0.375rem', input: '0.25rem', modal: '0.5rem' },\n soft: { button: '0.5rem', card: '0.75rem', input: '0.5rem', modal: '0.75rem' },\n round: { button: '9999px', card: '1rem', input: '0.75rem', modal: '1.25rem' },\n}\n\nconst SHADOW_MAP: Record<ThemeShadow, { sm: string; md: string; lg: string }> = {\n none: { sm: 'none', md: 'none', lg: 'none' },\n subtle: { sm: '0 1px 2px 0 rgb(0 0 0 / 0.03)', md: '0 2px 4px -1px rgb(0 0 0 / 0.06)', lg: '0 4px 6px -2px rgb(0 0 0 / 0.05)' },\n medium: { sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)', md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)' },\n bold: { sm: '0 1px 3px 0 rgb(0 0 0 / 0.1)', md: '0 4px 8px -1px rgb(0 0 0 / 0.15), 0 2px 4px -1px rgb(0 0 0 / 0.1)', lg: '0 12px 24px -4px rgb(0 0 0 / 0.15), 0 4px 8px -2px rgb(0 0 0 / 0.1)' },\n}\n\nconst FONT_MAP: Record<ThemeFont, string> = {\n 'system': 'ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'inter': '\"Inter\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'dm-sans': '\"DM Sans\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'poppins': '\"Poppins\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'geist': '\"Geist\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'plus-jakarta': '\"Plus Jakarta Sans\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'outfit': '\"Outfit\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", sans-serif',\n 'nunito': '\"Nunito\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'source-sans': '\"Source Sans 3\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'raleway': '\"Raleway\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'manrope': '\"Manrope\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n}\n\n/**\n * Resolve a SaasTheme (friendly format) into CreateThemeOptions (internal format).\n * This is the main API for vertical themes.\n *\n * Light-only colors (content bg, card, border, etc.) go into `colors`.\n * Dark-mode overrides go into `darkColors` so the dark base theme isn't broken.\n * Sidebar colors are always applied (same in both modes — the sidebar has its own palette).\n */\nexport function resolveTheme(theme: SaasTheme): CreateThemeOptions {\n const presetId = theme.preset ?? 'classic_admin'\n const preset = createFayzTheme(presetId)\n const radius = theme.radius ? RADIUS_MAP[theme.radius] : presetId === 'classic_admin' ? RADIUS_MAP.soft : undefined\n const shadow = theme.shadow ? SHADOW_MAP[theme.shadow] : presetId === 'classic_admin' ? SHADOW_MAP.medium : undefined\n const font = theme.font ? FONT_MAP[theme.font] : presetId === 'classic_admin' ? FONT_MAP.inter : undefined\n\n // --- Light mode colors ---\n const colors: Partial<SemanticColors> = { ...theme.colors }\n\n // Content background (light mode only)\n if (theme.content) {\n colors.content = theme.content.background\n }\n\n // Sidebar colors apply in both modes (sidebar has its own palette). Resolve the\n // 'brand' | 'neutral' preset or explicit tokens first; neutral → keep defaults.\n const sidebar = resolveSidebar(theme)\n if (sidebar) {\n colors.sidebar = sidebar.background\n colors.sidebarForeground = sidebar.foreground\n colors.sidebarAccent = sidebar.accent\n colors.sidebarAccentForeground = sidebar.accentForeground\n if (sidebar.border) colors.sidebarBorder = sidebar.border\n if (sidebar.muted) colors.sidebarMuted = sidebar.muted\n }\n\n // Brand shorthand — derive primary/ring/accent here so a `{ brand, sidebar }` SaasTheme\n // still gets the branded primary, not just the preset's neutral one (regression fix).\n if (theme.brand) {\n colors.primary = theme.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = theme.brand\n const bp = theme.brand.split(' ')\n if (bp.length >= 3) {\n const hue = (parseFloat(bp[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${bp[1]} ${bp[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n // --- Dark mode colors (only sidebar + brand — let darkTheme handle the rest) ---\n const darkColors: Partial<SemanticColors> = {}\n\n // Sidebar keeps same palette in dark mode\n if (sidebar) {\n darkColors.sidebar = sidebar.background\n darkColors.sidebarForeground = sidebar.foreground\n darkColors.sidebarAccent = sidebar.accent\n darkColors.sidebarAccentForeground = sidebar.accentForeground\n if (sidebar.border) darkColors.sidebarBorder = sidebar.border\n if (sidebar.muted) darkColors.sidebarMuted = sidebar.muted\n }\n\n return {\n ...preset,\n name: theme.name,\n brand: theme.brand,\n colors: {\n ...(preset.colors ?? {}),\n ...colors,\n },\n darkColors: {\n ...(preset.darkColors ?? {}),\n ...darkColors,\n },\n perception: {\n ...(preset.perception ?? {}),\n fontFamilyMono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, monospace',\n ...(radius\n ? {\n buttonRadius: radius.button,\n cardRadius: radius.card,\n inputRadius: radius.input,\n modalRadius: radius.modal,\n }\n : {}),\n ...(font ? { fontFamily: font } : {}),\n ...(shadow\n ? {\n shadowSm: shadow.sm,\n shadowMd: shadow.md,\n shadowLg: shadow.lg,\n }\n : {}),\n },\n }\n}\n\nexport function createTheme(overrides: CreateThemeOptions): ThemeTokens {\n const colors = { ...lightTheme.colors, ...overrides.colors }\n\n // Brand shorthand: auto-derive primary, ring, accent from single HSL\n if (overrides.brand) {\n colors.primary = overrides.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = overrides.brand\n // Derive accent by shifting hue ~50 degrees\n const parts = overrides.brand.split(' ')\n if (parts.length >= 3) {\n const hue = (parseFloat(parts[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${parts[1]} ${parts[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n return {\n name: overrides.name ?? lightTheme.name,\n colors,\n perception: {\n ...lightTheme.perception,\n ...overrides.perception,\n },\n }\n}\n\nconst colorVarMap: Record<string, string> = {\n primary: '--primary',\n primaryForeground: '--primary-foreground',\n secondary: '--secondary',\n secondaryForeground: '--secondary-foreground',\n accent: '--accent',\n accentForeground: '--accent-foreground',\n background: '--background',\n foreground: '--foreground',\n card: '--card',\n cardForeground: '--card-foreground',\n muted: '--muted',\n mutedForeground: '--muted-foreground',\n border: '--border',\n input: '--input',\n ring: '--ring',\n popover: '--popover',\n popoverForeground: '--popover-foreground',\n destructive: '--destructive',\n destructiveForeground: '--destructive-foreground',\n success: '--success',\n successForeground: '--success-foreground',\n warning: '--warning',\n warningForeground: '--warning-foreground',\n // Layout surfaces\n sidebar: '--sidebar',\n sidebarForeground: '--sidebar-foreground',\n sidebarBorder: '--sidebar-border',\n sidebarAccent: '--sidebar-accent',\n sidebarAccentForeground: '--sidebar-accent-foreground',\n sidebarMuted: '--sidebar-muted',\n content: '--content',\n}\n\nconst perceptionVarMap: Record<string, string> = {\n buttonRadius: '--button-radius',\n cardRadius: '--card-radius',\n inputRadius: '--input-radius',\n modalRadius: '--modal-radius',\n fontFamily: '--font-family',\n fontFamilyMono: '--font-family-mono',\n shadowSm: '--shadow-sm',\n shadowMd: '--shadow-md',\n shadowLg: '--shadow-lg',\n shadowButton: '--shadow-button',\n shadowButtonPrimary: '--shadow-button-primary',\n shadowButtonInset: '--shadow-button-inset',\n surfaceBackdropFilter: '--surface-backdrop-filter',\n modalBackground: '--modal-bg',\n modalBorder: '--modal-border',\n modalOverlayBackground: '--modal-overlay-bg',\n modalOverlayBackdropFilter: '--modal-overlay-backdrop-filter',\n modalShadow: '--modal-shadow',\n glassEdgeGradient: '--glass-edge-gradient',\n glassPrimaryEdgeGradient: '--glass-primary-edge-gradient',\n glassInnerHighlight: '--glass-inner-highlight',\n fieldBackground: '--field-bg',\n fieldBorder: '--field-border',\n fieldShadow: '--field-shadow',\n buttonBackground: '--button-bg',\n buttonBackgroundHover: '--button-hover-bg',\n buttonBorder: '--button-border',\n buttonPrimaryBackground: '--button-primary-bg',\n buttonPrimaryBackgroundHover: '--button-primary-hover-bg',\n buttonPrimaryBorder: '--button-primary-border',\n buttonBackdropFilter: '--button-backdrop-filter',\n}\n\nexport function applyTheme(theme: ThemeTokens, element?: HTMLElement): void {\n const target = element ?? document.documentElement\n\n for (const [key, cssVar] of Object.entries(colorVarMap)) {\n const value = theme.colors[key as keyof typeof theme.colors]\n if (value) {\n target.style.setProperty(cssVar, value)\n }\n }\n\n for (const [key, cssVar] of Object.entries(perceptionVarMap)) {\n const value = theme.perception[key as keyof typeof theme.perception]\n if (value) {\n target.style.setProperty(cssVar, value)\n }\n }\n}\n\nexport function getSystemPreference(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n","import { create, type StoreApi, type UseBoundStore } from 'zustand'\nimport type { ThemeTokens } from '../config/theme/tokens'\nimport { lightTheme } from '../config/theme/light'\nimport { darkTheme } from '../config/theme/dark'\nimport { applyTheme } from '../config/theme/utils'\nimport type { CreateThemeOptions } from '../config/theme/utils'\n\ntype ThemeMode = 'light' | 'dark' | 'system'\n\nconst STORAGE_KEY = 'saas-core:theme-mode'\n\ninterface ThemeState {\n mode: ThemeMode\n resolvedMode: 'light' | 'dark'\n /** Only the user's partial overrides — NOT a full theme */\n overrides: CreateThemeOptions | null\n setMode: (mode: ThemeMode) => void\n setOverrides: (overrides: CreateThemeOptions | null) => void\n initialize: () => void\n // Keep old API name working\n setCustomTheme: (theme: ThemeTokens | null) => void\n}\n\nfunction getSystemPreference(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction getSavedMode(): ThemeMode {\n if (typeof window === 'undefined') return 'light'\n const saved = localStorage.getItem(STORAGE_KEY)\n if (saved === 'light' || saved === 'dark' || saved === 'system') return saved\n return 'light'\n}\n\nfunction resolveMode(mode: ThemeMode): 'light' | 'dark' {\n return mode === 'system' ? getSystemPreference() : mode\n}\n\n/** Merge base theme (light or dark) with user's partial overrides */\nfunction buildTheme(base: ThemeTokens, overrides: CreateThemeOptions | null): ThemeTokens {\n if (!overrides) return base\n\n const isDark = base.name === 'dark'\n const colors = { ...base.colors }\n\n // Brand shorthand: derive primary, ring, accent from single HSL\n if (overrides.brand) {\n colors.primary = overrides.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = overrides.brand\n const parts = overrides.brand.split(' ')\n if (parts.length >= 3) {\n const hue = (parseFloat(parts[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${parts[1]} ${parts[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n // Apply explicit color overrides.\n // In dark mode, use darkColors if provided; otherwise skip light-only colors.\n const colorOverrides = isDark && overrides.darkColors\n ? overrides.darkColors\n : overrides.colors\n\n if (colorOverrides) {\n for (const [key, value] of Object.entries(colorOverrides)) {\n if (value !== undefined) {\n (colors as any)[key] = value\n }\n }\n }\n\n return {\n name: overrides.name ?? base.name,\n colors,\n perception: {\n ...base.perception,\n ...(overrides.perception ?? {}),\n },\n }\n}\n\nconst STORE_KEY = '__saas_core_theme_store__'\n\nfunction createThemeStore(): UseBoundStore<StoreApi<ThemeState>> {\n // Window-level singleton to survive linked-package dual-module loading\n if (typeof window !== 'undefined' && (window as any)[STORE_KEY]) {\n return (window as any)[STORE_KEY]\n }\n\n const store = create<ThemeState>((set, get) => ({\n mode: getSavedMode(),\n resolvedMode: 'light',\n overrides: null,\n\n setMode: (mode) => {\n const resolved = resolveMode(mode)\n set({ mode, resolvedMode: resolved })\n\n // Persist to localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, mode)\n }\n\n const { overrides } = get()\n const baseTheme = resolved === 'dark' ? darkTheme : lightTheme\n const theme = buildTheme(baseTheme, overrides)\n\n if (typeof document !== 'undefined') {\n // Enable color transition before applying changes\n document.documentElement.classList.add('theme-transitioning')\n\n applyTheme(theme)\n document.documentElement.classList.toggle('dark', resolved === 'dark')\n\n // Remove transition class after animation completes\n setTimeout(() => {\n document.documentElement.classList.remove('theme-transitioning')\n }, 450)\n } else {\n applyTheme(theme)\n }\n },\n\n setOverrides: (overrides) => {\n set({ overrides })\n const { resolvedMode } = get()\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\n const theme = buildTheme(baseTheme, overrides)\n applyTheme(theme)\n },\n\n // Legacy compat — if someone passes a full ThemeTokens, store it as overrides\n setCustomTheme: (_theme) => {\n // Ignore — callers should use setOverrides now\n },\n\n initialize: () => {\n const { mode, setMode } = get()\n setMode(mode)\n\n // Listen for OS theme changes when in 'system' mode\n if (typeof window !== 'undefined') {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n const current = get()\n if (current.mode === 'system') {\n current.setMode('system')\n }\n })\n }\n },\n }))\n\n if (typeof window !== 'undefined') {\n (window as any)[STORE_KEY] = store\n }\n\n return store\n}\n\nexport const useThemeStore = createThemeStore()\n","import * as React from 'react'\nimport { useEffect, useRef, useState, useCallback } from 'react'\nimport { Command } from 'cmdk'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarCheck2,\n CalendarClock, CalendarX, Package, Activity, BarChart3, FileText, FileCheck2, Mail, Search,\n DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, User, Box, Sparkles, Loader2,\n ListPlus, FolderOpen, Boxes, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n type LucideIcon,\n} from 'lucide-react'\nimport { useTranslation } from '../../hooks/useTranslation'\n\nexport interface CommandItem {\n id: string\n label: string\n icon?: string\n action: () => void\n group?: string\n keywords?: string\n subtitle?: string\n}\n\nexport interface EntitySearchResult {\n id: string\n label: string\n subtitle?: string\n group: string\n icon?: string\n data?: Record<string, unknown>\n}\n\nexport type EntitySearchFn = (query: string) => Promise<EntitySearchResult[]>\n\ninterface CommandPaletteProps {\n commands?: CommandItem[]\n open: boolean\n onOpenChange: (open: boolean) => void\n onEntitySearch?: EntitySearchFn\n onEntitySelect?: (result: EntitySearchResult) => void\n}\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarClock, Package, Activity, BarChart3,\n CalendarCheck2, CalendarX, FileText, FileCheck2, Mail, Search, DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, ListPlus, FolderOpen, User, Box, Boxes, Sparkles, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n}\n\nconst ENTITY_ICON: Record<string, LucideIcon> = {\n person: User,\n persons: User,\n product: Box,\n products: Box,\n service: Sparkles,\n services: Sparkles,\n}\n\n// ---------------------------------------------------------------------------\n// Debounced entity search hook\n// ---------------------------------------------------------------------------\n\nfunction useEntitySearch(searchFn: EntitySearchFn | undefined, query: string, open: boolean) {\n const [results, setResults] = useState<EntitySearchResult[]>([])\n const [loading, setLoading] = useState(false)\n const abortRef = useRef(0)\n\n useEffect(() => {\n if (!open) {\n setResults([])\n setLoading(false)\n return\n }\n\n const trimmed = query.trim()\n if (!searchFn || trimmed.length < 2) {\n setResults([])\n setLoading(false)\n return\n }\n\n setLoading(true)\n const id = ++abortRef.current\n\n const timer = setTimeout(async () => {\n try {\n const data = await searchFn(trimmed)\n if (abortRef.current === id) {\n setResults(data)\n setLoading(false)\n }\n } catch {\n if (abortRef.current === id) {\n setResults([])\n setLoading(false)\n }\n }\n }, 250)\n\n return () => clearTimeout(timer)\n }, [query, searchFn, open])\n\n return { results, loading }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CommandPalette({ commands = [], open, onOpenChange, onEntitySearch, onEntitySelect }: CommandPaletteProps) {\n const { t } = useTranslation()\n const [search, setSearch] = useState('')\n const { results: entityResults, loading: entityLoading } = useEntitySearch(onEntitySearch, search, open)\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n onOpenChange(!open)\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, onOpenChange])\n\n // Reset search when closed\n useEffect(() => {\n if (!open) setSearch('')\n }, [open])\n\n const grouped = commands.reduce<Record<string, CommandItem[]>>((acc, cmd) => {\n const group = cmd.group ?? 'Actions'\n if (!acc[group]) acc[group] = []\n acc[group].push(cmd)\n return acc\n }, {})\n\n // Group entity results\n const entityGrouped = entityResults.reduce<Record<string, EntitySearchResult[]>>((acc, r) => {\n const group = r.group || 'Results'\n if (!acc[group]) acc[group] = []\n acc[group].push(r)\n return acc\n }, {})\n\n const hasSearch = search.trim().length >= 2\n const totalResults = commands.length + entityResults.length\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"saas-overlay fixed inset-0 z-50 bg-black/40 backdrop-blur-sm\" />\n <Dialog.Content className=\"fayz-glass-surface saas-cmd-palette fixed left-1/2 top-[15%] z-50 w-full max-w-xl -translate-x-1/2 overflow-hidden rounded-2xl border border-border/50 bg-popover shadow-2xl\">\n <Dialog.Title className=\"sr-only\">{t('layout.commandPalette.title')}</Dialog.Title>\n <Dialog.Description className=\"sr-only\">{t('layout.commandPalette.description')}</Dialog.Description>\n\n <Command className=\"flex flex-col\" label=\"Command palette\" shouldFilter={true}>\n <div className=\"flex items-center gap-3 border-b border-border/50 px-4\">\n <Search className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <Command.Input\n placeholder={t('layout.commandPalette.placeholder')}\n className=\"flex h-12 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n autoFocus\n value={search}\n onValueChange={setSearch}\n />\n {entityLoading && <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground\" />}\n <kbd className=\"hidden shrink-0 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground sm:inline-block\">ESC</kbd>\n </div>\n\n <Command.List className=\"max-h-[360px] overflow-y-auto p-1.5\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n {entityLoading ? t('layout.commandPalette.searching') : t('layout.commandPalette.noResults')}\n </Command.Empty>\n\n {/* Static commands (pages, actions) */}\n {Object.entries(grouped).map(([group, items]) => (\n <Command.Group\n key={group}\n heading={group}\n className=\"[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {items.map((cmd) => {\n const Icon = cmd.icon ? (ICON_MAP[cmd.icon] ?? null) : null\n return (\n <Command.Item\n key={cmd.id}\n value={`${cmd.label} ${cmd.keywords ?? ''}`}\n onSelect={() => { cmd.action(); onOpenChange(false) }}\n className=\"flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted\"\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"flex-1\">{cmd.label}</span>\n <span className=\"text-[11px] text-muted-foreground/40\">{cmd.group}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n ))}\n\n {/* Entity search results */}\n {hasSearch && Object.entries(entityGrouped).map(([group, items]) => {\n const GroupIcon = ENTITY_ICON[group.toLowerCase()] ?? User\n return (\n <Command.Group\n key={`entity:${group}`}\n heading={group}\n className=\"[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {items.map((result) => {\n const Icon = result.icon ? (ICON_MAP[result.icon] ?? GroupIcon) : GroupIcon\n return (\n <Command.Item\n key={`entity:${result.id}`}\n value={`${result.label} ${result.subtitle ?? ''} ${result.group}`}\n onSelect={() => { onEntitySelect?.(result); onOpenChange(false) }}\n className=\"flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted\"\n >\n <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"block truncate\">{result.label}</span>\n {result.subtitle && (\n <span className=\"block truncate text-[11px] text-muted-foreground\">{result.subtitle}</span>\n )}\n </div>\n <span className=\"text-[11px] text-muted-foreground/40 shrink-0\">{result.group}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n )\n })}\n </Command.List>\n\n <div className=\"flex items-center justify-between border-t border-border/50 px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {entityLoading\n ? t('layout.commandPalette.searching')\n : hasSearch\n ? t('layout.commandPalette.resultCount', { count: String(totalResults), plural: totalResults !== 1 ? 's' : '' })\n : t('layout.commandPalette.commandCount', { count: String(commands.length), plural: commands.length !== 1 ? 's' : '' })}\n </span>\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground\">\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&uarr;&darr;</kbd>\n <span>{t('layout.commandPalette.navigate')}</span>\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&crarr;</kbd>\n <span>{t('layout.commandPalette.open')}</span>\n </div>\n </div>\n </Command>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import * as React from 'react'\nimport { hashRouterAdapter } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Admin hash router — the same lightweight approach the storefront uses. The\n// admin shell collects routes from the plugin runtime + manifest pages and\n// switches on the current hash path. Deliberately not react-router: an SDK\n// shell shipping a router creates singleton hazards under source-alias dev.\n// ---------------------------------------------------------------------------\n\nconst adapter = hashRouterAdapter()\n\nexport function normalizeAdminPath(path: string): string {\n const clean = `/${path}`.replace(/\\/+/g, '/')\n return clean.length > 1 ? clean.replace(/\\/+$/, '') : clean\n}\n\nexport function navigateTo(to: string): void {\n adapter.navigate(normalizeAdminPath(to))\n}\n\nexport function useAdminPath(): string {\n const [path, setPath] = React.useState(() => normalizeAdminPath(adapter.getCurrentPath() || '/'))\n React.useEffect(() => {\n return adapter.onPathChange((p) => {\n setPath(normalizeAdminPath(p || '/'))\n if (typeof window !== 'undefined') window.scrollTo(0, 0)\n })\n }, [])\n return path\n}\n\n/** Match '/courses/:id' against '/courses/abc' → { id: 'abc' }; supports a\n * trailing '/*' wildcard (matches the base and any deeper path). */\nexport function matchRoute(pattern: string, path: string): Record<string, string> | null {\n const cleanPath = (path.split('?')[0] ?? '').replace(/\\/+$/, '') || '/'\n if (pattern.endsWith('/*')) {\n const base = pattern.slice(0, -2)\n if (cleanPath === base || cleanPath.startsWith(`${base}/`)) return {}\n return null\n }\n const patternParts = pattern.split('/').filter(Boolean)\n const pathParts = cleanPath.split('/').filter(Boolean)\n if (patternParts.length !== pathParts.length) return null\n const params: Record<string, string> = {}\n for (let i = 0; i < patternParts.length; i++) {\n const pat = patternParts[i]!\n const part = pathParts[i]!\n if (pat.startsWith(':')) params[pat.slice(1)] = decodeURIComponent(part)\n else if (pat !== part) return null\n }\n return params\n}\n\n/** Score a route pattern for specificity so the most specific match wins\n * (static segments beat params; longer beats shorter; wildcard loses). */\nexport function routeScore(pattern: string): number {\n const isWildcard = pattern.endsWith('/*')\n const routePattern = isWildcard ? pattern.slice(0, -2) : pattern\n const parts = routePattern.split('/').filter(Boolean)\n let score = parts.length * 10\n for (const p of parts) if (!p.startsWith(':')) score += 5\n if (isWildcard) score -= 1\n return score\n}\n","/**\n * Global entity route registry.\n *\n * Populated once during buildNavigation() with mappings from\n * \"archetype:kind\" (e.g. \"person:staff\") to the registered route path\n * (e.g. \"/registry/staff\"). Used by PersonLink, command palette, and\n * any component that needs to resolve an entity detail URL.\n */\n\nlet routeMap = new Map<string, string>()\n\n/** Replace the entity route map (called once at app init by buildNavigation). */\nexport function setEntityRouteMap(map: Map<string, string>): void {\n routeMap = map\n}\n\n/**\n * Resolve the route path for an entity given its archetype and kind.\n * Returns the registered path (e.g. \"/registry/staff\") or null if not found.\n *\n * Tries \"archetype:kind\" first, then \"archetype\" alone.\n */\nexport function resolveEntityRoute(archetype?: string, kind?: string): string | null {\n if (archetype && kind) {\n const specific = routeMap.get(`${archetype}:${kind}`)\n if (specific) return specific\n }\n if (archetype) {\n const general = routeMap.get(archetype)\n if (general) return general\n }\n return null\n}\n\n/**\n * Build a full URL path for an entity detail page.\n * Returns e.g. \"/registry/staff/uuid\" or \"/registry/staff/uuid/schedule\".\n * Falls back to \"/kind/uuid\" if no route registered.\n */\nexport function resolveEntityHref(id: string, archetype?: string, kind?: string, tab?: string): string {\n const route = resolveEntityRoute(archetype, kind)\n let href: string\n if (route) {\n href = `${route}/${id}`\n } else if (kind) {\n const plural = kind.endsWith('s') ? kind : kind + 's'\n href = `/${plural}/${id}`\n } else {\n href = `/${id}`\n }\n if (tab) href += `/${tab}`\n return href\n}\n","import { create } from 'zustand'\n\nconst STORAGE_KEY = 'saas-core:locale'\n\nfunction getPersistedLocale(): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? 'en'\n } catch {\n return 'en'\n }\n}\n\ninterface LocaleState {\n locale: string\n setLocale: (locale: string) => void\n}\n\nexport const useLocaleStore = create<LocaleState>((set) => ({\n locale: getPersistedLocale(),\n setLocale: (locale) => {\n try { localStorage.setItem(STORAGE_KEY, locale) } catch { /* ignore */ }\n set({ locale })\n },\n}))\n","export interface LocaleOption {\n code: string\n label: string\n flag: string\n}\n\nexport const SUPPORTED_LOCALES: LocaleOption[] = [\n { code: 'en', label: 'English', flag: '🇺🇸' },\n { code: 'pt-BR', label: 'Português (BR)', flag: '🇧🇷' },\n]\n\nexport function getLocaleOption(code: string): LocaleOption {\n return SUPPORTED_LOCALES.find((l) => l.code === code) ?? SUPPORTED_LOCALES[0]\n}\n","import * as React from 'react'\nimport { Save, Check } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { useLocaleStore } from '../../stores/locale.store'\nimport { SUPPORTED_LOCALES } from '../../lib/locale-config'\nimport type { Tenant } from '../../types'\n\ninterface CompanySettingsProps {\n tenant?: Tenant | null\n onSave?: (settings: {\n name: string\n timezone: string\n currency: string\n }) => void\n}\n\nconst TIMEZONES = [\n { value: 'America/Sao_Paulo', label: 'Brasilia (BRT)' },\n { value: 'America/New_York', label: 'Eastern (US)' },\n { value: 'America/Chicago', label: 'Central (US)' },\n { value: 'America/Denver', label: 'Mountain (US)' },\n { value: 'America/Los_Angeles', label: 'Pacific (US)' },\n { value: 'America/Mexico_City', label: 'Mexico City' },\n { value: 'America/Buenos_Aires', label: 'Buenos Aires' },\n { value: 'Europe/London', label: 'London' },\n { value: 'Europe/Paris', label: 'Paris' },\n { value: 'Europe/Berlin', label: 'Berlin' },\n { value: 'Europe/Madrid', label: 'Madrid' },\n { value: 'Europe/Lisbon', label: 'Lisbon' },\n { value: 'Asia/Tokyo', label: 'Tokyo' },\n { value: 'Asia/Shanghai', label: 'Shanghai' },\n { value: 'Australia/Sydney', label: 'Sydney' },\n { value: 'UTC', label: 'UTC' },\n]\n\nconst CURRENCIES = [\n { value: 'BRL', label: 'BRL - Real' },\n { value: 'USD', label: 'USD - US Dollar' },\n { value: 'EUR', label: 'EUR - Euro' },\n { value: 'GBP', label: 'GBP - British Pound' },\n { value: 'JPY', label: 'JPY - Japanese Yen' },\n { value: 'CAD', label: 'CAD - Canadian Dollar' },\n { value: 'AUD', label: 'AUD - Australian Dollar' },\n { value: 'MXN', label: 'MXN - Mexican Peso' },\n { value: 'ARS', label: 'ARS - Argentine Peso' },\n]\n\nexport function CompanySettings({ tenant, onSave }: CompanySettingsProps) {\n const { t } = useTranslation()\n const { locale: uiLocale, setLocale: setUiLocale } = useLocaleStore()\n const [name, setName] = React.useState(tenant?.name ?? '')\n const [timezone, setTimezone] = React.useState(tenant?.settings?.timezone ?? 'UTC')\n const [currency, setCurrency] = React.useState(tenant?.settings?.currency ?? 'USD')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (tenant) {\n setName(tenant.name)\n setTimezone(tenant.settings?.timezone ?? 'UTC')\n setCurrency(tenant.settings?.currency ?? 'USD')\n }\n }, [tenant])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({ name, timezone, currency })\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <form onSubmit={handleSubmit}>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.company.title')}</CardTitle>\n <CardDescription>\n {t('settings.company.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"company-name\" className=\"text-sm font-medium\">\n {t('settings.company.name')}\n </label>\n <Input\n id=\"company-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Acme Inc.\"\n />\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('settings.company.timezone')}</label>\n <Select value={timezone} onValueChange={setTimezone}>\n <SelectTrigger>\n <SelectValue placeholder={t('settings.company.timezonePlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {TIMEZONES.map((tz) => (\n <SelectItem key={tz.value} value={tz.value}>\n {tz.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('settings.company.currency')}</label>\n <Select value={currency} onValueChange={setCurrency}>\n <SelectTrigger>\n <SelectValue placeholder={t('settings.company.currencyPlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {CURRENCIES.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n </div>\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.save')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n\n {/* UI Language */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">{t('settings.uiLanguage')}</CardTitle>\n <CardDescription>{t('settings.uiLanguageDescription')}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {SUPPORTED_LOCALES.map((loc) => (\n <button\n key={loc.code}\n onClick={() => {\n setUiLocale(loc.code)\n window.location.reload()\n }}\n className={`flex items-center justify-between rounded-lg border-2 px-4 py-3 text-sm transition-all ${\n uiLocale === loc.code\n ? 'border-primary bg-primary/5'\n : 'border-transparent bg-muted/30 hover:bg-muted/50'\n }`}\n >\n <span className=\"flex items-center gap-3\">\n <span className=\"text-xl\">{loc.flag}</span>\n <span className=\"font-medium\">{loc.label}</span>\n </span>\n {uiLocale === loc.code && <Check className=\"h-4 w-4 text-primary\" />}\n </button>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\nimport type { OrgAdapter } from '../types/org-adapter'\n\nconst OrgAdapterContext = createContext<OrgAdapter | null>(null)\n\nexport const OrgAdapterProvider = OrgAdapterContext.Provider\n\nexport function useOrgAdapter(): OrgAdapter {\n const adapter = useContext(OrgAdapterContext)\n if (!adapter) {\n throw new Error('useOrgAdapter must be used within an OrgAdapterProvider')\n }\n return adapter\n}\n\nexport function useOrgAdapterOptional(): OrgAdapter | null {\n return useContext(OrgAdapterContext)\n}\n","import { CompanySettings } from './CompanySettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { toast } from '../notifications/ToastProvider'\nimport type { Tenant, TenantSettings } from '../../types'\n\nfunction toTenantSettings(settings: unknown): TenantSettings {\n const source = (settings && typeof settings === 'object' ? settings : {}) as Partial<TenantSettings>\n const branding = (source.branding && typeof source.branding === 'object' ? source.branding : {}) as TenantSettings['branding']\n\n return {\n timezone: source.timezone ?? 'America/Sao_Paulo',\n currency: source.currency ?? 'BRL',\n locale: source.locale ?? 'pt-BR',\n branding: {\n primaryColor: branding.primaryColor,\n accentColor: branding.accentColor,\n logoUrl: branding.logoUrl,\n faviconUrl: branding.faviconUrl,\n },\n }\n}\n\nexport function ConnectedCompanySettings() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n const adapter = useOrgAdapterOptional()\n // Map Organization to Tenant shape for the component\n const tenant: Tenant | null = currentOrg\n ? {\n id: currentOrg.id,\n name: currentOrg.name,\n slug: currentOrg.slug,\n logoUrl: currentOrg.logoUrl,\n plan: currentOrg.plan ?? 'free',\n settings: toTenantSettings(currentOrg.settings),\n createdAt: currentOrg.createdAt,\n updatedAt: currentOrg.updatedAt,\n }\n : null\n\n const handleSave = async (data: { name: string; timezone: string; currency: string }) => {\n if (!adapter || !currentOrg) return\n\n try {\n const currentSettings = toTenantSettings(currentOrg.settings)\n const updated = await adapter.updateOrg(currentOrg.id, {\n name: data.name,\n settings: {\n ...currentSettings,\n timezone: data.timezone,\n currency: data.currency,\n },\n })\n setCurrentOrg(updated)\n toast.success('Settings saved')\n } catch (err: any) {\n toast.error('Failed to save', { description: err?.message })\n }\n }\n\n return <CompanySettings tenant={tenant} onSave={handleSave} />\n}\n","import * as React from 'react'\nimport { Camera, Save } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { AuthUser } from '../../types'\n\ninterface UserProfileProps {\n user?: AuthUser | null\n onSave?: (data: { fullName: string }) => void\n onAvatarChange?: (file: File) => void\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join('')\n .toUpperCase()\n}\n\nexport function UserProfile({ user, onSave, onAvatarChange }: UserProfileProps) {\n const { t } = useTranslation()\n const [fullName, setFullName] = React.useState(user?.fullName ?? '')\n const [saving, setSaving] = React.useState(false)\n const fileInputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (user) {\n setFullName(user.fullName)\n }\n }, [user])\n\n const handleAvatarClick = () => {\n fileInputRef.current?.click()\n }\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file && onAvatarChange) {\n onAvatarChange(file)\n }\n if (e.target) {\n e.target.value = ''\n }\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({ fullName })\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.profile.title')}</CardTitle>\n <CardDescription>\n {t('settings.profile.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-6\">\n <div className=\"flex items-center gap-6\">\n <div className=\"relative\">\n <Avatar className=\"h-20 w-20\">\n <AvatarImage src={user?.avatarUrl} alt={user?.fullName} />\n <AvatarFallback className=\"text-lg\">\n {user?.fullName ? getInitials(user.fullName) : '?'}\n </AvatarFallback>\n </Avatar>\n {onAvatarChange && (\n <button\n type=\"button\"\n onClick={handleAvatarClick}\n className={cn(\n 'absolute -bottom-1 -right-1 flex h-8 w-8 items-center justify-center rounded-full',\n 'border-2 border-background bg-primary text-primary-foreground',\n 'transition-colors hover:bg-primary/90'\n )}\n aria-label=\"Change avatar\"\n >\n <Camera className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleFileChange}\n />\n </div>\n\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{user?.fullName ?? 'User'}</p>\n <p className=\"text-sm text-muted-foreground\">{user?.email}</p>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"full-name\" className=\"text-sm font-medium\">\n {t('settings.profile.fullName')}\n </label>\n <Input\n id=\"full-name\"\n value={fullName}\n onChange={(e) => setFullName(e.target.value)}\n placeholder=\"John Doe\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"email\" className=\"text-sm font-medium\">\n {t('settings.profile.email')}\n </label>\n <Input\n id=\"email\"\n type=\"email\"\n value={user?.email ?? ''}\n disabled\n className=\"bg-muted\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('settings.profile.emailHelp')}\n </p>\n </div>\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.profile.saveProfile')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n )\n}\n","// Shim → native Supabase client (unified singleton across shell + plugins).\nimport type { SupabaseClient } from '@supabase/supabase-js'\nimport { getSupabaseClientOptional as _getOpt } from '@fayz-ai/core'\nexport { createSupabaseProvider, setGlobalSupabaseClient } from '@fayz-ai/core'\n// @fayz-ai/core returns a loosely-typed client (no hard supabase coupling); the\n// shell does `.schema(...).from(...)`, so surface it as the real client type.\nexport const getSupabaseClientOptional = (): SupabaseClient | null =>\n _getOpt() as unknown as SupabaseClient | null\nexport {\n CORE_SCHEMA,\n getCoreSchemaClient as getCoreClient,\n getFayzSupabaseClient as getSupabaseClient,\n getFayzSupabaseClientOptional as getSupabaseClientSafe,\n createFayzSupabaseClient as createSupabaseClient,\n} from '../../supabase/client'\nimport { getFayzSupabaseClient } from '../../supabase/client'\nexport const getCoreSupabaseClient = getFayzSupabaseClient\nexport const getProjectSupabaseClient = getFayzSupabaseClient\nexport type { SupabaseClient }\n","import * as React from 'react'\nimport { UserProfile } from './UserProfile'\n// The signed-in user lives in @fayz-ai/auth's store (the one AuthProvider fills) —\n// the shell stores/auth.store is a separate, unpopulated store.\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { getSupabaseClient, getSupabaseClientSafe, CORE_SCHEMA } from '../../lib/supabase'\nimport { toast } from '../notifications/ToastProvider'\n\ninterface ProfileRow {\n full_name: string | null\n avatar_url: string | null\n email: string | null\n}\n\n// The \"/me\" surface: the current user's canonical profile = the auth user (id,\n// e-mail) merged with their saas_core.profiles row (name, avatar). Reads/writes go\n// to saas_core.profiles (RLS: id = auth.uid(), so a user only ever sees/edits their\n// own), and keep the auth-user metadata in sync so both stay coherent.\nexport function ConnectedUserProfile() {\n const user = useAuthStore((s) => s.user)\n const setUser = useAuthStore((s) => s.setUser)\n const [profile, setProfile] = React.useState<ProfileRow | null>(null)\n\n // Fill: load the canonical profile row on mount (falls back to auth metadata).\n React.useEffect(() => {\n const supabase = getSupabaseClientSafe()\n if (!user || !supabase) return // mock/no-backend: just use the auth-store user\n let cancelled = false\n void supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .select('full_name, avatar_url, email')\n .eq('id', user.id)\n .maybeSingle()\n .then(({ data }) => {\n if (!cancelled && data) setProfile(data as ProfileRow)\n })\n return () => {\n cancelled = true\n }\n }, [user?.id])\n\n const handleSave = async (data: { fullName: string }) => {\n if (!user) return\n try {\n const supabase = getSupabaseClient()\n // Upsert the canonical row (INSERT if the profile doesn't exist yet).\n const { error: profileError } = await supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .upsert({ id: user.id, full_name: data.fullName, email: user.email }, { onConflict: 'id' })\n if (profileError) throw profileError\n\n // Keep the auth-user metadata in sync (used across the app's session).\n const { error: metaError } = await supabase.auth.updateUser({ data: { full_name: data.fullName } })\n if (metaError) throw metaError\n\n setUser({ ...user, fullName: data.fullName })\n setProfile({ full_name: data.fullName, avatar_url: profile?.avatar_url ?? null, email: user.email })\n toast.success('Perfil atualizado')\n } catch (err: any) {\n toast.error('Falha ao atualizar', { description: err?.message })\n }\n }\n\n const handleAvatarChange = async (file: File) => {\n if (!user) return\n try {\n const supabase = getSupabaseClient()\n const ext = file.name.split('.').pop()\n const path = `avatars/${user.id}.${ext}`\n\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, file, { upsert: true })\n if (uploadError) throw uploadError\n\n const { data: urlData } = supabase.storage.from('avatars').getPublicUrl(path)\n const avatarUrl = urlData.publicUrl\n\n const { error: profileError } = await supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .upsert({ id: user.id, avatar_url: avatarUrl, email: user.email }, { onConflict: 'id' })\n if (profileError) throw profileError\n\n await supabase.auth.updateUser({ data: { avatar_url: avatarUrl } })\n setUser({ ...user, avatarUrl })\n setProfile({ full_name: profile?.full_name ?? null, avatar_url: avatarUrl, email: user.email })\n toast.success('Avatar atualizado')\n } catch (err: any) {\n toast.error('Falha ao enviar avatar', { description: err?.message })\n }\n }\n\n // Merge: prefer the canonical profile row, fall back to auth metadata.\n const merged = user\n ? { ...user, fullName: profile?.full_name ?? user.fullName, avatarUrl: profile?.avatar_url ?? user.avatarUrl }\n : null\n\n return <UserProfile user={merged as any} onSave={handleSave} onAvatarChange={handleAvatarChange} />\n}\n","import * as React from 'react'\nimport { KeyRound, Loader2, Clock, ShieldCheck, UserPlus } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { AuthUser } from '../../types'\n\nexport interface TenantSecuritySettings {\n sessionTimeoutMinutes?: number\n require2FA?: boolean\n inviteOnly?: boolean\n}\n\ninterface SecuritySettingsProps {\n user?: AuthUser | null\n tenantSecurity?: TenantSecuritySettings\n isAdmin?: boolean\n onResetPassword?: () => Promise<void>\n onTenantSecurityChange?: (settings: TenantSecuritySettings) => Promise<void>\n}\n\nconst SESSION_TIMEOUT_OPTIONS = [\n { label: '30 minutes', value: 30 },\n { label: '1 hour', value: 60 },\n { label: '4 hours', value: 240 },\n { label: '8 hours', value: 480 },\n { label: '24 hours', value: 1440 },\n { label: 'No limit', value: 0 },\n]\n\nfunction ToggleRow({\n icon,\n label,\n description,\n checked,\n onChange,\n disabled,\n}: {\n icon: React.ReactNode\n label: string\n description: string\n checked: boolean\n onChange: (val: boolean) => void\n disabled?: boolean\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4 py-3\">\n <div className=\"flex gap-3\">\n <div className=\"mt-0.5 text-muted-foreground\">{icon}</div>\n <div>\n <p className=\"text-sm font-medium\">{label}</p>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => onChange(!checked)}\n className={`relative inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${\n checked ? 'bg-primary' : 'bg-muted-foreground/30'\n }`}\n >\n <span\n className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-sm transition-transform ${\n checked ? 'translate-x-[18px]' : 'translate-x-[2px]'\n }`}\n />\n </button>\n </div>\n )\n}\n\nexport function SecuritySettings({\n user,\n tenantSecurity,\n isAdmin,\n onResetPassword,\n onTenantSecurityChange,\n}: SecuritySettingsProps) {\n const { t } = useTranslation()\n const [resetting, setResetting] = React.useState(false)\n const [resetSent, setResetSent] = React.useState(false)\n const [savingTenant, setSavingTenant] = React.useState(false)\n\n const handleResetPassword = async () => {\n if (!onResetPassword) return\n setResetting(true)\n try {\n await onResetPassword()\n setResetSent(true)\n } catch {\n // handled via toast in connected wrapper\n } finally {\n setResetting(false)\n }\n }\n\n const updateTenantSecurity = async (partial: Partial<TenantSecuritySettings>) => {\n if (!onTenantSecurityChange) return\n setSavingTenant(true)\n try {\n await onTenantSecurityChange({ ...tenantSecurity, ...partial })\n } catch {\n // handled via toast\n } finally {\n setSavingTenant(false)\n }\n }\n\n const baseClass =\n 'flex h-10 w-full rounded-input border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'\n\n return (\n <div className=\"space-y-6\">\n {/* Password reset */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.security.passwordTitle')}</CardTitle>\n <CardDescription>\n {t('settings.security.passwordSubtitle')}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between rounded-lg border p-4\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{user?.email}</p>\n <p className=\"text-xs text-muted-foreground\">\n {resetSent\n ? t('settings.security.resetLinkSent')\n : t('settings.security.resetLinkDescription')}\n </p>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={resetting || resetSent}\n onClick={handleResetPassword}\n >\n {resetting && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n <KeyRound className=\"mr-2 h-4 w-4\" />\n {resetSent ? t('settings.security.linkSent') : t('settings.security.resetPassword')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Tenant security — only visible to admins */}\n {isAdmin && (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.security.orgSecurityTitle')}</CardTitle>\n <CardDescription>\n {t('settings.security.orgSecuritySubtitle')}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-1 divide-y\">\n <ToggleRow\n icon={<ShieldCheck className=\"h-4 w-4\" />}\n label={t('settings.security.require2FA')}\n description={t('settings.security.require2FADescription')}\n checked={tenantSecurity?.require2FA ?? false}\n onChange={(val) => updateTenantSecurity({ require2FA: val })}\n disabled={savingTenant}\n />\n <ToggleRow\n icon={<UserPlus className=\"h-4 w-4\" />}\n label={t('settings.security.inviteOnly')}\n description={t('settings.security.inviteOnlyDescription')}\n checked={tenantSecurity?.inviteOnly ?? true}\n onChange={(val) => updateTenantSecurity({ inviteOnly: val })}\n disabled={savingTenant}\n />\n\n <div className=\"flex items-start justify-between gap-4 py-3\">\n <div className=\"flex gap-3\">\n <div className=\"mt-0.5 text-muted-foreground\">\n <Clock className=\"h-4 w-4\" />\n </div>\n <div>\n <p className=\"text-sm font-medium\">{t('settings.security.sessionTimeout')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('settings.security.sessionTimeoutDescription')}\n </p>\n </div>\n </div>\n <select\n value={tenantSecurity?.sessionTimeoutMinutes ?? 0}\n onChange={(e) =>\n updateTenantSecurity({ sessionTimeoutMinutes: Number(e.target.value) })\n }\n disabled={savingTenant}\n className={`${baseClass} w-36`}\n >\n {SESSION_TIMEOUT_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import { create } from 'zustand'\nimport type { AuthUser, AuthSession, AuthState } from '../types'\n\ninterface AuthStore extends AuthState {\n setUser: (user: AuthUser | null) => void\n setSession: (session: AuthSession | null) => void\n setLoading: (loading: boolean) => void\n setInitialized: (initialized: boolean) => void\n setPendingEmailVerification: (pending: boolean) => void\n reset: () => void\n}\n\nconst initialState: AuthState = {\n user: null,\n session: null,\n loading: true,\n initialized: false,\n pendingEmailVerification: false,\n}\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n ...initialState,\n setUser: (user) => set({ user }),\n setSession: (session) => set({ session, user: session?.user ?? null, pendingEmailVerification: false }),\n setLoading: (loading) => set({ loading }),\n setInitialized: (initialized) => set({ initialized }),\n setPendingEmailVerification: (pendingEmailVerification) => set({ pendingEmailVerification }),\n reset: () => set(initialState),\n}))\n","import { createContext, useContext } from 'react'\nimport type { AuthAdapter } from '../types/auth-adapter'\n\nconst AuthAdapterContext = createContext<AuthAdapter | null>(null)\n\nexport const AuthAdapterProvider = AuthAdapterContext.Provider\n\nexport function useAuthAdapter(): AuthAdapter {\n const adapter = useContext(AuthAdapterContext)\n if (!adapter) {\n throw new Error('useAuthAdapter must be used within an AuthAdapterProvider')\n }\n return adapter\n}\n\nexport function useAuthAdapterOptional(): AuthAdapter | null {\n return useContext(AuthAdapterContext)\n}\n","import { SecuritySettings } from './SecuritySettings'\nimport type { TenantSecuritySettings } from './SecuritySettings'\nimport { useAuthStore } from '../../stores/auth.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useAuthAdapterOptional } from '../../lib/auth-context'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { toast } from '../notifications/ToastProvider'\n\nexport function ConnectedSecuritySettings() {\n const user = useAuthStore((s) => s.user)\n const authAdapter = useAuthAdapterOptional()\n const orgAdapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n\n const settings = (currentOrg?.settings ?? {}) as Record<string, unknown>\n const tenantSecurity = (settings.security ?? {}) as TenantSecuritySettings\n\n // Determine if current user is admin (owner/admin role)\n const members = useOrganizationStore((s) => s.members)\n const currentMember = members.find((m) => m.userId === user?.id)\n const isAdmin = currentMember?.profileName?.toLowerCase() === 'owner' ||\n currentMember?.profileName?.toLowerCase() === 'admin'\n\n const handleResetPassword = async () => {\n if (!authAdapter || !user?.email) return\n try {\n await authAdapter.resetPassword(user.email)\n toast.success('Password reset link sent', { description: `Check ${user.email} for the reset link.` })\n } catch (err: any) {\n toast.error('Failed to send reset link', { description: err?.message })\n throw err\n }\n }\n\n const handleTenantSecurityChange = async (security: TenantSecuritySettings) => {\n if (!orgAdapter || !currentOrg) return\n try {\n const updated = await orgAdapter.updateOrg(currentOrg.id, {\n settings: { ...settings, security },\n })\n setCurrentOrg(updated)\n toast.success('Security settings updated')\n } catch (err: any) {\n toast.error('Failed to update security settings', { description: err?.message })\n throw err\n }\n }\n\n return (\n <SecuritySettings\n user={user as any}\n tenantSecurity={tenantSecurity}\n isAdmin={isAdmin}\n onResetPassword={handleResetPassword}\n onTenantSecurityChange={orgAdapter ? handleTenantSecurityChange : undefined}\n />\n )\n}\n","import * as React from 'react'\nimport { Upload, Save, X } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { TenantSettings } from '../../types'\n\ninterface BrandingSettingsProps {\n branding?: TenantSettings['branding'] | null\n onSave?: (branding: TenantSettings['branding'], assets?: {\n logoFile?: File | null\n faviconFile?: File | null\n }) => void\n}\n\ninterface FileUploadProps {\n label: string\n accept: string\n currentUrl?: string\n onFileSelect: (file: File) => void\n onClear?: () => void\n hint?: string\n}\n\nfunction FileUploadField({\n label,\n accept,\n currentUrl,\n onFileSelect,\n onClear,\n hint,\n}: FileUploadProps) {\n const { t } = useTranslation()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [preview, setPreview] = React.useState<string | null>(null)\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) {\n onFileSelect(file)\n const url = URL.createObjectURL(file)\n setPreview(url)\n }\n if (e.target) {\n e.target.value = ''\n }\n }\n\n const displayUrl = preview ?? currentUrl\n\n return (\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{label}</label>\n <div className=\"flex items-center gap-4\">\n {displayUrl ? (\n <div className=\"relative\">\n <img\n src={displayUrl}\n alt={label}\n className=\"h-16 w-16 rounded-md border object-contain p-1\"\n />\n {onClear && (\n <button\n type=\"button\"\n onClick={() => {\n onClear()\n setPreview(null)\n }}\n className=\"absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-destructive text-destructive-foreground\"\n aria-label={`Remove ${label.toLowerCase()}`}\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex h-16 w-16 items-center justify-center rounded-md border border-dashed\">\n <Upload className=\"h-5 w-5 text-muted-foreground/50\" />\n </div>\n )}\n\n <div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => inputRef.current?.click()}\n >\n {t('settings.branding.chooseFile')}\n </Button>\n {hint && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{hint}</p>\n )}\n </div>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n className=\"hidden\"\n onChange={handleChange}\n />\n </div>\n )\n}\n\nexport function BrandingSettings({ branding, onSave }: BrandingSettingsProps) {\n const { t } = useTranslation()\n const [primaryColor, setPrimaryColor] = React.useState(branding?.primaryColor ?? '#000000')\n const [accentColor, setAccentColor] = React.useState(branding?.accentColor ?? '#6366f1')\n const [logoFile, setLogoFile] = React.useState<File | null>(null)\n const [faviconFile, setFaviconFile] = React.useState<File | null>(null)\n const [logoUrl, setLogoUrl] = React.useState(branding?.logoUrl ?? '')\n const [faviconUrl, setFaviconUrl] = React.useState(branding?.faviconUrl ?? '')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (branding) {\n setPrimaryColor(branding.primaryColor ?? '#000000')\n setAccentColor(branding.accentColor ?? '#6366f1')\n setLogoUrl(branding.logoUrl ?? '')\n setFaviconUrl(branding.faviconUrl ?? '')\n }\n }, [branding])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({\n primaryColor,\n accentColor,\n logoUrl,\n faviconUrl,\n }, {\n logoFile,\n faviconFile,\n })\n setLogoFile(null)\n setFaviconFile(null)\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit}>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.branding.title')}</CardTitle>\n <CardDescription>\n {t('settings.branding.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-6\">\n <div className=\"grid gap-6 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <label htmlFor=\"primary-color\" className=\"text-sm font-medium\">\n {t('settings.branding.primaryColor')}\n </label>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n id=\"primary-color\"\n value={primaryColor}\n onChange={(e) => setPrimaryColor(e.target.value)}\n className=\"h-10 w-10 cursor-pointer rounded-md border bg-transparent p-0.5\"\n />\n <Input\n value={primaryColor}\n onChange={(e) => setPrimaryColor(e.target.value)}\n placeholder=\"#000000\"\n className=\"flex-1\"\n maxLength={7}\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"accent-color\" className=\"text-sm font-medium\">\n {t('settings.branding.accentColor')}\n </label>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n id=\"accent-color\"\n value={accentColor}\n onChange={(e) => setAccentColor(e.target.value)}\n className=\"h-10 w-10 cursor-pointer rounded-md border bg-transparent p-0.5\"\n />\n <Input\n value={accentColor}\n onChange={(e) => setAccentColor(e.target.value)}\n placeholder=\"#6366f1\"\n className=\"flex-1\"\n maxLength={7}\n />\n </div>\n </div>\n </div>\n\n <div className=\"rounded-md border p-4\">\n <p className=\"mb-3 text-sm font-medium\">{t('settings.branding.preview')}</p>\n <div className=\"flex items-center gap-3\">\n <div\n className=\"h-10 w-24 rounded-md\"\n style={{ backgroundColor: primaryColor }}\n />\n <div\n className=\"h-10 w-24 rounded-md\"\n style={{ backgroundColor: accentColor }}\n />\n </div>\n </div>\n\n <FileUploadField\n label=\"Logo\"\n accept=\"image/png,image/jpeg,image/svg+xml,image/webp\"\n currentUrl={logoUrl || undefined}\n onFileSelect={setLogoFile}\n onClear={() => {\n setLogoUrl('')\n setLogoFile(null)\n }}\n hint=\"Recommended: 200x50px, PNG or SVG\"\n />\n\n <FileUploadField\n label=\"Favicon\"\n accept=\"image/png,image/x-icon,image/svg+xml\"\n currentUrl={faviconUrl || undefined}\n onFileSelect={setFaviconFile}\n onClear={() => {\n setFaviconUrl('')\n setFaviconFile(null)\n }}\n hint=\"Recommended: 32x32px, PNG or ICO\"\n />\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.branding.saveBranding')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n )\n}\n","import { BrandingSettings } from './BrandingSettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { toast } from '../notifications/ToastProvider'\nimport { getSupabaseClient } from '../../lib/supabase'\nimport type { TenantSettings } from '../../types'\n\nexport function ConnectedBrandingSettings() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n\n const handleSave = async (\n branding: TenantSettings['branding'],\n assets?: { logoFile?: File | null; faviconFile?: File | null },\n ) => {\n if (!currentOrg) return\n\n try {\n const supabase = getSupabaseClient()\n let nextBranding = { ...branding }\n\n if (assets?.logoFile) {\n const ext = assets.logoFile.name.split('.').pop() ?? 'png'\n const path = `branding/${currentOrg.id}/logo.${ext}`\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, assets.logoFile, { upsert: true })\n if (uploadError) throw uploadError\n const { data } = supabase.storage.from('avatars').getPublicUrl(path)\n nextBranding.logoUrl = data.publicUrl\n }\n\n if (assets?.faviconFile) {\n const ext = assets.faviconFile.name.split('.').pop() ?? 'png'\n const path = `branding/${currentOrg.id}/favicon.${ext}`\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, assets.faviconFile, { upsert: true })\n if (uploadError) throw uploadError\n const { data } = supabase.storage.from('avatars').getPublicUrl(path)\n nextBranding.faviconUrl = data.publicUrl\n }\n\n const currentSettings = (currentOrg.settings ?? {}) as Record<string, unknown>\n const settings = {\n ...currentSettings,\n branding: nextBranding,\n }\n\n const { data: updatedTenant, error: updateError } = await supabase\n .from('tenants')\n .update({\n settings,\n logo_url: nextBranding.logoUrl ?? currentOrg.logoUrl ?? null,\n })\n .eq('id', currentOrg.id)\n .select()\n .single()\n\n if (updateError) throw updateError\n\n setCurrentOrg({\n ...currentOrg,\n logoUrl: updatedTenant.logo_url ?? undefined,\n settings: updatedTenant.settings ?? settings,\n updatedAt: updatedTenant.updated_at ?? currentOrg.updatedAt,\n })\n\n toast.success('Branding saved')\n } catch (err: any) {\n toast.error('Failed to save branding', { description: err?.message })\n }\n }\n\n const currentSettings = (currentOrg?.settings ?? {}) as Partial<TenantSettings>\n\n return (\n <BrandingSettings\n branding={currentSettings.branding}\n onSave={handleSave}\n />\n )\n}\n","import * as React from 'react'\nimport { Building2, User, Shield, Palette, ArrowLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ConnectedCompanySettings } from './ConnectedCompanySettings'\nimport { ConnectedUserProfile } from './ConnectedUserProfile'\nimport { ConnectedSecuritySettings } from './ConnectedSecuritySettings'\nimport { ConnectedBrandingSettings } from './ConnectedBrandingSettings'\n\ninterface SettingsTab {\n id: string\n label: string\n icon?: React.ReactNode\n component: React.ReactNode\n}\n\ninterface SettingsPageProps {\n tabs?: SettingsTab[]\n extraTabs?: SettingsTab[]\n defaultTab?: string\n className?: string\n beforeContent?: React.ReactNode\n afterContent?: React.ReactNode\n /** Show the company \"Geral\" (organization general) tab. Default: true.\n * B2C apps pass false to hide org-identity settings. Ignored when `tabs` is\n * supplied explicitly. */\n showCompany?: boolean\n /** Show the branding (\"Identidade Visual\") tab. Default: true. Ignored when\n * `tabs` is supplied explicitly. */\n showBranding?: boolean\n}\n\nexport function SettingsPage({\n tabs,\n extraTabs,\n defaultTab,\n className,\n beforeContent,\n afterContent,\n showCompany = true,\n showBranding = true,\n}: SettingsPageProps) {\n const { t } = useTranslation()\n\n const defaultTabs: SettingsTab[] = React.useMemo(() => [\n ...(showCompany ? [{ id: 'general', label: t('settings.general'), icon: <Building2 className=\"h-4 w-4\" />, component: <ConnectedCompanySettings /> }] : []),\n { id: 'profile', label: t('settings.profile'), icon: <User className=\"h-4 w-4\" />, component: <ConnectedUserProfile /> },\n { id: 'security', label: t('settings.security'), icon: <Shield className=\"h-4 w-4\" />, component: <ConnectedSecuritySettings /> },\n ...(showBranding ? [{ id: 'branding', label: t('settings.branding'), icon: <Palette className=\"h-4 w-4\" />, component: <ConnectedBrandingSettings /> }] : []),\n ], [t, showCompany, showBranding])\n\n const baseTabs = tabs ?? defaultTabs\n const resolvedTabs = extraTabs ? [...baseTabs, ...extraTabs] : baseTabs\n\n // Detect active tab from URL: /settings/financial/... → 'financial'\n function getTabFromHash(): string | null {\n const hash = typeof window !== 'undefined' ? window.location.hash.slice(1) || '/' : '/'\n if (hash.startsWith('/settings/')) {\n const tabId = hash.slice('/settings/'.length).split('/')[0]\n if (resolvedTabs.find((t) => t.id === tabId)) return tabId\n }\n return null\n }\n\n const [activeTab, setActiveTab] = React.useState<string | null>(() => {\n return getTabFromHash() ?? defaultTab ?? null\n })\n\n // Sync tab from hash changes\n React.useEffect(() => {\n const handler = () => {\n const tab = getTabFromHash()\n if (tab) setActiveTab(tab)\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [resolvedTabs])\n\n // Desktop always shows a selected tab; when none is chosen yet (landing on\n // /settings), default to the first tab — 'general'. Mobile keeps its\n // list-first master/detail behaviour (driven by the raw activeTab below).\n const desktopTab = activeTab ?? resolvedTabs[0]?.id ?? null\n const activeContent = desktopTab ? resolvedTabs.find((t) => t.id === desktopTab)?.component : null\n const activeLabel = activeTab ? resolvedTabs.find((t) => t.id === activeTab)?.label : null\n\n // On mobile: show list OR content. On desktop: show both.\n const showingContent = activeTab !== null\n\n const handleSelectTab = (tabId: string) => {\n setActiveTab(tabId)\n window.location.hash = `/settings/${tabId}`\n }\n\n const handleBack = () => {\n setActiveTab(null)\n window.location.hash = '/settings'\n }\n\n const renderNav = (activeId: string | null) => (\n <ul className=\"space-y-0.5\">\n {resolvedTabs.map((tab, i) => (\n <React.Fragment key={tab.id}>\n {(tab as any).isPlugin && (i === 0 || !(resolvedTabs[i - 1] as any)?.isPlugin) && (\n <li className=\"py-2\">\n <div className=\"border-t\" />\n <p className=\"px-3 pt-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">{t('common.plugins')}</p>\n </li>\n )}\n <li>\n <button\n onClick={() => handleSelectTab(tab.id)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n activeId === tab.id\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n >\n {tab.icon && <span className=\"shrink-0\">{tab.icon}</span>}\n <span className=\"flex-1 text-left\">{tab.label}</span>\n {/* Mobile: show chevron */}\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50 md:hidden\" />\n </button>\n </li>\n </React.Fragment>\n ))}\n </ul>\n )\n\n return (\n <div className={cn('space-y-6', className)}>\n {/* Mobile: back button + tab title when viewing content */}\n {showingContent && (\n <button\n onClick={handleBack}\n className=\"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors md:hidden\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n {t('settings.title')}\n </button>\n )}\n\n {/* Header — hidden on mobile when viewing content */}\n <div className={cn(showingContent && 'hidden md:block')}>\n <h1 className=\"text-2xl font-bold tracking-tight\">{t('settings.title')}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {t('settings.subtitle')}\n </p>\n </div>\n\n {beforeContent}\n\n {/* Desktop: side-by-side layout */}\n <div className=\"hidden md:flex md:gap-6\">\n <nav className=\"w-52 shrink-0\">{renderNav(desktopTab)}</nav>\n <div className=\"min-w-0 flex-1\">{activeContent ?? resolvedTabs[0]?.component}</div>\n </div>\n\n {/* Mobile: list or content, not both */}\n <div className=\"md:hidden\">\n {showingContent ? (\n <div>{activeContent}</div>\n ) : (\n <nav>{renderNav(activeTab)}</nav>\n )}\n </div>\n\n {afterContent}\n </div>\n )\n}\n","import { create } from 'zustand'\nimport type { Invite } from '../types/invite'\n\ninterface InviteStore {\n invites: Invite[]\n loading: boolean\n setInvites: (invites: Invite[]) => void\n setLoading: (loading: boolean) => void\n reset: () => void\n}\n\nexport const useInviteStore = create<InviteStore>((set) => ({\n invites: [],\n loading: false,\n setInvites: (invites) => set({ invites }),\n setLoading: (loading) => set({ loading }),\n reset: () => set({ invites: [], loading: false }),\n}))\n","import * as React from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { toast } from '../notifications/ToastProvider'\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useInviteStore } from '../../stores/invite.store'\n// Native org adapter (the one the app actually provides). The shell lib/org-context\n// is a separate, un-provided context that returns null here — which made the submit\n// button a no-op (handleSend bailed on `!adapter`).\nimport { useOrgAdapterOptional as useNativeOrgAdapter } from '../../../org'\nimport type { OrgAdapter } from '../../types/org-adapter'\n\n// The native adapter is the same runtime object; its Invite/Location types differ\n// from the shell's only in fields these components don't read, so a cast is safe.\nconst useOrgAdapterOptional = () => useNativeOrgAdapter() as unknown as OrgAdapter | null\n// The signed-in user lives in @fayz-ai/auth's store (what OrgProvider reads). The\n// shell stores/auth.store is a separate, unpopulated store — reading `user` from\n// it left `user` null, so handleSend bailed on `!user` (silent no-op).\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface InviteMemberDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Pre-fill the first email (e.g. from person detail Access tab) */\n defaultEmail?: string\n}\n\nexport function InviteMemberDialog({ open, onOpenChange, defaultEmail }: InviteMemberDialogProps) {\n const { t } = useTranslation()\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const profiles = usePermissionsStore((s) => s.profiles)\n const setInvites = useInviteStore((s) => s.setInvites)\n const { user } = useAuthStore()\n\n const [emails, setEmails] = React.useState<string[]>([defaultEmail ?? ''])\n const [profileId, setProfileId] = React.useState(profiles[1]?.id ?? profiles[0]?.id ?? '')\n const [sending, setSending] = React.useState(false)\n const [sent, setSent] = React.useState(false)\n\n const addEmail = () => setEmails((prev) => [...prev, ''])\n\n const updateEmail = (idx: number, value: string) => {\n setEmails((prev) => {\n const next = [...prev]\n next[idx] = value\n return next\n })\n }\n\n const removeEmail = (idx: number) => {\n setEmails((prev) => prev.filter((_, i) => i !== idx))\n }\n\n const handleSend = async () => {\n if (!adapter || !currentOrg || !user) return\n const validEmails = emails.filter((e) => e.trim() && e.includes('@'))\n if (validEmails.length === 0) return\n\n setSending(true)\n try {\n if (validEmails.length === 1) {\n await adapter.createInvite(currentOrg.id, validEmails[0].trim(), profileId, user.id)\n } else {\n await adapter.bulkInvite(currentOrg.id, validEmails.map((e) => e.trim()), profileId, user.id)\n }\n const invites = await adapter.listInvites(currentOrg.id)\n setInvites(invites)\n setSent(true)\n } catch (err: any) {\n toast.error('Failed to send invites', { description: err?.message })\n } finally {\n setSending(false)\n }\n }\n\n const handleClose = () => {\n onOpenChange(false)\n // Reset after animation\n setTimeout(() => {\n setEmails([''])\n setProfileId(profiles[1]?.id ?? profiles[0]?.id ?? '')\n setSent(false)\n }, 200)\n }\n\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalContent>\n <ModalHeader>\n <ModalTitle>{t('organization.invite.title')}</ModalTitle>\n <ModalDescription>{t('organization.invite.description')}</ModalDescription>\n </ModalHeader>\n\n {sent ? (\n <div className=\"py-8 text-center\">\n <div className=\"mx-auto mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-success/10\">\n <svg className=\"h-6 w-6 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" /></svg>\n </div>\n <p className=\"text-sm font-medium\">{t('organization.invite.sent')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('organization.invite.sentDescription')}</p>\n </div>\n ) : (\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('organization.invite.emailLabel')}</label>\n {emails.map((email, idx) => (\n <div key={idx} className=\"flex items-center gap-2\">\n <Input\n type=\"email\"\n placeholder=\"team@example.com\"\n value={email}\n onChange={(e) => updateEmail(idx, e.target.value)}\n />\n {emails.length > 1 && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => removeEmail(idx)}>\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n ))}\n <Button variant=\"ghost\" size=\"sm\" onClick={addEmail} className=\"text-xs\">\n <Plus className=\"h-3.5 w-3.5 mr-1\" />\n {t('organization.invite.addAnother')}\n </Button>\n </div>\n\n <div>\n <label className=\"text-sm font-medium\">{t('organization.invite.roleLabel')}</label>\n <Select value={profileId} onValueChange={setProfileId}>\n <SelectTrigger className=\"mt-1\">\n <SelectValue placeholder={t('organization.invite.rolePlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {profiles.map((p) => (\n <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n )}\n\n <ModalFooter>\n {sent ? (\n <Button onClick={handleClose}>{t('common.done')}</Button>\n ) : (\n <>\n <Button variant=\"outline\" onClick={handleClose}>{t('common.cancel')}</Button>\n <Button onClick={handleSend} disabled={sending || emails.every((e) => !e.trim())}>\n {sending ? t('organization.invite.sending') : t('organization.invite.sendInvites')}\n </Button>\n </>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import { create } from 'zustand'\nimport type { Tenant, TenantMember, MemberRole, TenantState } from '../types'\n\ninterface TenantStore extends TenantState {\n setTenant: (tenant: Tenant | null) => void\n setMembers: (members: TenantMember[]) => void\n setCurrentRole: (role: MemberRole | null) => void\n setLoading: (loading: boolean) => void\n reset: () => void\n}\n\nconst initialState: TenantState = {\n tenant: null,\n members: [],\n currentRole: null,\n loading: false,\n}\n\nexport const useTenantStore = create<TenantStore>((set) => ({\n ...initialState,\n setTenant: (tenant) => set({ tenant }),\n setMembers: (members) => set({ members }),\n setCurrentRole: (role) => set({ currentRole: role }),\n setLoading: (loading) => set({ loading }),\n reset: () => set(initialState),\n}))\n","import { useCallback, useMemo } from 'react'\nimport { useTenantStore } from '../stores/tenant.store'\nimport { usePermissionsStore } from '../stores/permissions.store'\nimport type { MemberRole } from '../types'\nimport type { PermissionAction, SystemPermission } from '../types/permissions'\n\n// Legacy role-based permissions (backward compat)\nconst PERMISSIONS = [\n 'manage_billing',\n 'manage_members',\n 'manage_settings',\n 'manage_content',\n 'view_content',\n 'view_analytics',\n] as const\n\nexport type Permission = (typeof PERMISSIONS)[number]\n\nconst ROLE_PERMISSIONS: Record<MemberRole, Permission[]> = {\n owner: [...PERMISSIONS],\n admin: PERMISSIONS.filter((p) => p !== 'manage_billing'),\n manager: ['manage_content', 'view_content', 'view_analytics'],\n staff: ['view_content'],\n viewer: ['view_content'],\n}\n\nconst ROLE_HIERARCHY: Record<MemberRole, number> = {\n owner: 5,\n admin: 4,\n manager: 3,\n staff: 2,\n viewer: 1,\n}\n\nexport function usePermission() {\n const currentRole = useTenantStore((s) => s.currentRole)\n const currentProfile = usePermissionsStore((s) => s.currentProfile)\n\n // Profile-based permission check (feature × action matrix)\n const can = useCallback(\n (featureId: string, action: PermissionAction): boolean => {\n if (!currentProfile) return true // no permissions configured = allow all\n // Owner bypasses all feature checks\n if (currentProfile.id === 'owner') return true\n return currentProfile.grants[featureId]?.includes(action) ?? false\n },\n [currentProfile],\n )\n\n const hasSystemPermission = useCallback(\n (perm: SystemPermission): boolean => {\n if (!currentProfile) return true\n return (currentProfile.systemPermissions ?? []).includes(perm)\n },\n [currentProfile],\n )\n\n // Legacy role-based permissions\n const permissions = useMemo<Permission[]>(() => {\n if (!currentRole) return []\n return ROLE_PERMISSIONS[currentRole]\n }, [currentRole])\n\n const hasPermission = useCallback(\n (permission: Permission | string): boolean => {\n // First try profile-based system permissions\n if (currentProfile) {\n return (currentProfile.systemPermissions ?? []).includes(permission as SystemPermission)\n }\n // Fall back to legacy role-based\n return permissions.includes(permission as Permission)\n },\n [currentProfile, permissions],\n )\n\n const requireRole = useCallback(\n (role: MemberRole): boolean => {\n if (!currentRole) return false\n return ROLE_HIERARCHY[currentRole] >= ROLE_HIERARCHY[role]\n },\n [currentRole],\n )\n\n const canAccess = useCallback(\n (requiredPermissions: Permission[]): boolean => {\n return requiredPermissions.every((p) => permissions.includes(p))\n },\n [permissions],\n )\n\n return {\n currentRole,\n currentProfile,\n permissions,\n can,\n hasSystemPermission,\n hasPermission,\n requireRole,\n canAccess,\n }\n}\n","/**\n * Request deduplication — prevents duplicate in-flight requests with the same key.\n * If a request with the same key is already in-flight, returns the existing promise.\n */\nconst inflight = new Map<string, Promise<any>>()\n\nexport function dedup<T>(key: string, fn: () => Promise<T>): Promise<T> {\n const existing = inflight.get(key)\n if (existing) return existing as Promise<T>\n\n const promise = fn().finally(() => {\n inflight.delete(key)\n })\n\n inflight.set(key, promise)\n return promise\n}\n","import * as React from 'react'\nimport { UserPlus, MoreHorizontal, Mail, Clock } from 'lucide-react'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@fayz-ai/ui'\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@fayz-ai/ui'\nimport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n} from '@fayz-ai/ui'\nimport { InviteMemberDialog } from './InviteMemberDialog'\nimport { toast } from '../notifications/ToastProvider'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useInviteStore } from '../../stores/invite.store'\n// Native org adapter (see InviteMemberDialog) — the shell context is un-provided.\nimport { useOrgAdapterOptional as useNativeOrgAdapter } from '../../../org'\nimport type { OrgAdapter } from '../../types/org-adapter'\nconst useOrgAdapterOptional = () => useNativeOrgAdapter() as unknown as OrgAdapter | null\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { usePermission } from '../../hooks/usePermission'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { dedup } from '../../lib/dedup'\n\nexport function TeamTab() {\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const members = useOrganizationStore((s) => s.members)\n const setMembers = useOrganizationStore((s) => s.setMembers)\n const profiles = usePermissionsStore((s) => s.profiles)\n const invites = useInviteStore((s) => s.invites)\n const setInvites = useInviteStore((s) => s.setInvites)\n const { user } = useAuthStore()\n const { hasSystemPermission } = usePermission()\n\n const [inviteOpen, setInviteOpen] = React.useState(false)\n\n // Load invites on mount (deduped to avoid strict mode double-fetch)\n React.useEffect(() => {\n if (adapter && currentOrg) {\n dedup('team:invites:' + currentOrg.id, () => adapter.listInvites(currentOrg.id)).then(setInvites).catch(() => {})\n }\n }, [adapter, currentOrg?.id])\n\n const handleChangeProfile = async (memberId: string, profileId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.updateMemberProfile(currentOrg.id, memberId, profileId)\n const updated = await adapter.listMembers(currentOrg.id)\n setMembers(updated)\n } catch {\n // ignore\n }\n }\n\n const handleRemoveMember = async (memberId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.removeMember(currentOrg.id, memberId)\n const updated = await adapter.listMembers(currentOrg.id)\n setMembers(updated)\n } catch {\n // ignore\n }\n }\n\n const handleRevokeInvite = async (inviteId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.revokeInvite(currentOrg.id, inviteId)\n const updated = await adapter.listInvites(currentOrg.id)\n setInvites(updated)\n toast.success(t('organization.team.inviteRevoked'))\n } catch (err: any) {\n toast.error(t('organization.team.inviteActionFailed'), { description: err?.message })\n }\n }\n\n const handleResendInvite = async (inviteId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.resendInvite(currentOrg.id, inviteId)\n const updated = await adapter.listInvites(currentOrg.id)\n setInvites(updated)\n toast.success(t('organization.team.inviteResent'))\n } catch (err: any) {\n toast.error(t('organization.team.inviteActionFailed'), { description: err?.message })\n }\n }\n\n const { t } = useTranslation()\n const canManageTeam = hasSystemPermission('manage_team')\n const pendingInvites = invites.filter((i) => i.status === 'pending')\n\n return (\n <div className=\"space-y-6\">\n {/* Members */}\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <h3 className=\"text-lg font-semibold\">{t('organization.team.title')}</h3>\n <p className=\"text-sm text-muted-foreground\">{t('organization.team.memberCount', { count: String(members.length), plural: members.length !== 1 ? 's' : '' })}</p>\n </div>\n {canManageTeam && (\n <Button size=\"sm\" onClick={() => setInviteOpen(true)}>\n <UserPlus className=\"h-4 w-4 mr-1\" />\n {t('organization.team.invite')}\n </Button>\n )}\n </div>\n\n <Card className=\"overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.member')}</th>\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.role')}</th>\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.joined')}</th>\n {canManageTeam && (\n <th className=\"text-right p-3 text-sm font-medium text-muted-foreground w-12\" />\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {members.length === 0 ? (\n // Members load via central org hydration; show skeleton rows meanwhile.\n Array.from({ length: 3 }).map((_, i) => (\n <tr key={`sk-${i}`}>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-8 w-8 shrink-0 rounded-full\" />\n <div className=\"space-y-1.5\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-3 w-40\" />\n </div>\n </div>\n </td>\n <td className=\"p-3\"><Skeleton className=\"h-6 w-24 rounded-full\" /></td>\n <td className=\"p-3\"><Skeleton className=\"h-3 w-20\" /></td>\n {canManageTeam && <td className=\"p-3\" />}\n </tr>\n ))\n ) : members.map((member) => {\n const initials = member.user.fullName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n const isCurrentUser = member.userId === user?.id\n\n return (\n <tr key={member.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-8 w-8\">\n {member.user.avatarUrl && <AvatarImage src={member.user.avatarUrl} />}\n <AvatarFallback className=\"text-xs\">{initials}</AvatarFallback>\n </Avatar>\n <div>\n <p className=\"text-sm font-medium\">\n {member.user.fullName}\n {isCurrentUser && <span className=\"text-muted-foreground ml-1\">{t('organization.team.you')}</span>}\n </p>\n <p className=\"text-xs text-muted-foreground\">{member.user.email}</p>\n </div>\n </div>\n </td>\n <td className=\"p-3\">\n {canManageTeam && !isCurrentUser ? (\n <Select\n value={member.profileId}\n onValueChange={(val) => handleChangeProfile(member.id, val)}\n >\n <SelectTrigger className=\"h-8 w-36 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {profiles.map((p) => (\n <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {profiles.find((p) => p.id === member.profileId)?.name ?? member.profileName}\n </Badge>\n )}\n </td>\n <td className=\"p-3 text-sm text-muted-foreground\">\n {new Date(member.joinedAt).toLocaleDateString()}\n </td>\n {canManageTeam && (\n <td className=\"p-3 text-right\">\n {!isCurrentUser && (\n <Dropdown>\n <DropdownTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownTrigger>\n <DropdownContent align=\"end\">\n <DropdownItem\n className=\"text-destructive\"\n onClick={() => handleRemoveMember(member.id)}\n >\n {t('organization.team.removeMember')}\n </DropdownItem>\n </DropdownContent>\n </Dropdown>\n )}\n </td>\n )}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n </Card>\n </div>\n\n {/* Pending Invites */}\n {pendingInvites.length > 0 && (\n <div>\n <h3 className=\"text-lg font-semibold mb-3\">{t('organization.team.pendingInvites')}</h3>\n <div className=\"space-y-2\">\n {pendingInvites.map((invite) => (\n <Card key={invite.id} className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted\">\n <Mail className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">{invite.email}</p>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"text-xs\">{invite.profileName}</Badge>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n Sent {new Date(invite.createdAt).toLocaleDateString()}\n </span>\n </div>\n </div>\n {canManageTeam && (\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\" onClick={() => handleResendInvite(invite.id)}>\n {t('organization.team.resend')}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs text-destructive\" onClick={() => handleRevokeInvite(invite.id)}>\n {t('organization.team.revoke')}\n </Button>\n </div>\n )}\n </div>\n </Card>\n ))}\n </div>\n </div>\n )}\n\n <InviteMemberDialog open={inviteOpen} onOpenChange={setInviteOpen} />\n </div>\n )\n}\n","import * as React from 'react'\nimport { Card } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Checkbox, type CheckboxColor } from '@fayz-ai/ui'\nimport { useSaveBar, useBackHandler } from '@fayz-ai/ui'\nimport { ArrowLeft, ChevronDown, ChevronRight, Search } from 'lucide-react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { FeatureDeclaration, PermissionAction, PermissionProfile, SystemPermission } from '../../types/permissions'\n\nconst ACTIONS: PermissionAction[] = ['read', 'create', 'edit', 'delete']\nconst ACTION_COLORS: Partial<Record<PermissionAction, CheckboxColor>> = {\n read: 'primary',\n create: 'success',\n edit: 'warning',\n delete: 'destructive',\n}\nconst SYSTEM_PERMISSIONS: { id: SystemPermission; key: string }[] = [\n { id: 'manage_team', key: 'organization.permissions.manageTeam' },\n { id: 'manage_billing', key: 'organization.permissions.manageBilling' },\n { id: 'manage_settings', key: 'organization.permissions.manageSettings' },\n { id: 'manage_permissions', key: 'organization.permissions.managePermissions' },\n]\n\ninterface PermissionMatrixEditorProps {\n features: FeatureDeclaration[]\n profile?: PermissionProfile\n onSave: (data: { name: string; description?: string; systemPermissions: SystemPermission[]; grants: Record<string, PermissionAction[]> }) => void\n onCancel: () => void\n saving?: boolean\n /** True when creating/duplicating (not editing an existing custom role). Drives\n * the SaveBar dirty state + the breadcrumb crumb. */\n isNew?: boolean\n /** Label of the parent list, shown in the back breadcrumb (e.g. \"Permissões\"). */\n parentLabel?: string\n}\n\nexport function PermissionMatrixEditor({ features, profile, onSave, onCancel, saving, isNew, parentLabel }: PermissionMatrixEditorProps) {\n const { t } = useTranslation()\n const [name, setName] = React.useState(profile?.name ?? '')\n const [description, setDescription] = React.useState(profile?.description ?? '')\n const [systemPerms, setSystemPerms] = React.useState<SystemPermission[]>(profile?.systemPermissions ?? [])\n const [grants, setGrants] = React.useState<Record<string, PermissionAction[]>>(profile?.grants ?? {})\n const [collapsed, setCollapsed] = React.useState<Set<string>>(new Set())\n const [search, setSearch] = React.useState('')\n\n // Snapshot the initial form so an EDIT only shows the SaveBar once something\n // actually changes. A NEW role (create/duplicate) is unsaved by definition, so\n // it's \"dirty\" as soon as it has a name.\n const initial = React.useRef({\n name: profile?.name ?? '',\n description: profile?.description ?? '',\n systemPerms: JSON.stringify(profile?.systemPermissions ?? []),\n grants: JSON.stringify(profile?.grants ?? {}),\n })\n const dirty = isNew\n ? name.trim() !== ''\n : name !== initial.current.name ||\n description !== initial.current.description ||\n JSON.stringify(systemPerms) !== initial.current.systemPerms ||\n JSON.stringify(grants) !== initial.current.grants\n\n const toggleSystemPerm = (perm: SystemPermission) => {\n setSystemPerms((prev) =>\n prev.includes(perm) ? prev.filter((p) => p !== perm) : [...prev, perm]\n )\n }\n\n const toggleGrant = (featureId: string, action: PermissionAction) => {\n setGrants((prev) => {\n const current = prev[featureId] ?? []\n const next = current.includes(action)\n ? current.filter((a) => a !== action)\n : [...current, action]\n return { ...prev, [featureId]: next }\n })\n }\n\n const toggleGroup = (group: string) => {\n setCollapsed((prev) => {\n const next = new Set(prev)\n next.has(group) ? next.delete(group) : next.add(group)\n return next\n })\n }\n\n const handleSave = () => {\n if (!name.trim()) return\n onSave({ name: name.trim(), description: description.trim() || undefined, systemPermissions: systemPerms, grants })\n }\n\n // Surface Save/Discard through the app-wide floating SaveBar (same pattern as\n // CRUD forms), and wire Escape → back-to-list.\n useSaveBar({\n dirty,\n saving,\n onSave: handleSave,\n onDiscard: onCancel,\n saveLabel: isNew ? t('organization.permissions.createProfile') : t('organization.permissions.updateProfile'),\n })\n useBackHandler(onCancel)\n\n // Group features, filtering by search\n const groups = React.useMemo(() => {\n const filtered = search\n ? features.filter((f) => f.label.toLowerCase().includes(search.toLowerCase()))\n : features\n const map = new Map<string, FeatureDeclaration[]>()\n for (const f of filtered) {\n const group = f.group ?? 'General'\n if (!map.has(group)) map.set(group, [])\n map.get(group)!.push(f)\n }\n return map\n }, [features, search])\n\n return (\n <div className=\"space-y-6\">\n {/* Back-to-list breadcrumb, matching the CRUD subpage pattern. */}\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={onCancel} className=\"inline-flex items-center gap-1 transition-colors hover:text-foreground\">\n <ArrowLeft className=\"h-3.5 w-3.5\" />\n {parentLabel ?? t('organization.permissions.title')}\n </button>\n <span>/</span>\n <span className=\"max-w-[240px] truncate font-medium text-foreground\">\n {name.trim() || t('organization.permissions.createCustom')}\n </span>\n </nav>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"text-sm font-medium\">{t('organization.permissions.profileName')}</label>\n <Input value={name} onChange={(e) => setName(e.target.value)} placeholder={t('organization.permissions.profileNamePlaceholder')} className=\"mt-1\" />\n </div>\n <div>\n <label className=\"text-sm font-medium\">{t('organization.permissions.description')}</label>\n <Input value={description} onChange={(e) => setDescription(e.target.value)} placeholder={t('organization.permissions.descriptionPlaceholder')} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Unified Permission Matrix */}\n <Card className=\"overflow-hidden\">\n {/* Search filter */}\n {features.length > 8 && (\n <div className=\"border-b border-border/40 px-3 py-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('organization.permissions.searchFeatures')}\n className=\"h-8 pl-8 text-xs\"\n />\n </div>\n </div>\n )}\n\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('common.feature')}</th>\n {ACTIONS.map((action) => (\n <th key={action} className=\"p-3 text-center text-sm font-medium text-muted-foreground capitalize w-20\">\n {t(`organization.permissions.action.${action}`) === `organization.permissions.action.${action}` ? action : t(`organization.permissions.action.${action}`)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {/* System permissions group */}\n <tr>\n <td colSpan={5} className=\"p-2 px-3\">\n <button\n onClick={() => toggleGroup('__system')}\n className=\"flex items-center gap-1.5 text-xs\"\n >\n {collapsed.has('__system')\n ? <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n : <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n }\n <Badge variant=\"secondary\" className=\"text-xs\">{t('organization.permissions.systemPermissions')}</Badge>\n </button>\n </td>\n </tr>\n {!collapsed.has('__system') && SYSTEM_PERMISSIONS.map((sp) => (\n <tr key={sp.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3 text-sm font-medium\">{t(sp.key)}</td>\n <td colSpan={4} className=\"p-3\">\n <div className=\"flex justify-center\">\n <Checkbox\n checked={systemPerms.includes(sp.id)}\n onChange={() => toggleSystemPerm(sp.id)}\n />\n </div>\n </td>\n </tr>\n ))}\n\n {/* Feature permission groups */}\n {Array.from(groups.entries()).map(([groupName, groupFeatures]) => (\n <React.Fragment key={groupName}>\n <tr>\n <td colSpan={5} className=\"p-2 px-3\">\n <button\n onClick={() => toggleGroup(groupName)}\n className=\"flex items-center gap-1.5 text-xs\"\n >\n {collapsed.has(groupName)\n ? <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n : <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n }\n <Badge variant=\"secondary\" className=\"text-xs\">{groupName}</Badge>\n <span className=\"text-[10px] text-muted-foreground\">{groupFeatures.length}</span>\n </button>\n </td>\n </tr>\n {!collapsed.has(groupName) && groupFeatures.map((feature) => (\n <tr key={feature.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3 text-sm font-medium\">{feature.label}</td>\n {ACTIONS.map((action) => (\n <td key={action} className=\"p-3 text-center\">\n <div className=\"flex justify-center\">\n <Checkbox\n checked={grants[feature.id]?.includes(action) ?? false}\n onChange={() => toggleGrant(feature.id, action)}\n color={ACTION_COLORS[action]}\n />\n </div>\n </td>\n ))}\n </tr>\n ))}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n </div>\n </Card>\n {/* Save / Discard are provided by the app-wide floating SaveBar (useSaveBar). */}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Shield, Pencil, Trash2, Plus, Eye, Copy } from 'lucide-react'\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { PermissionMatrixEditor } from './PermissionMatrixEditor'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\n// Use the NATIVE org adapter (the one the app actually provides). The shell\n// lib/org-context is a separate, un-provided context that returns null here.\nimport { useOrgAdapterOptional } from '../../../org'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { PermissionProfile, PermissionAction, SystemPermission } from '../../types/permissions'\n\nexport function PermissionProfilesTab() {\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const profiles = usePermissionsStore((s) => s.profiles)\n const features = usePermissionsStore((s) => s.features)\n const setProfiles = usePermissionsStore((s) => s.setProfiles)\n const members = useOrganizationStore((s) => s.members)\n const realProfile = usePermissionsStore((s) => s.realProfile)\n const startImpersonation = usePermissionsStore((s) => s.startImpersonation)\n\n const canPreview = (realProfile?.systemPermissions ?? []).includes('manage_permissions') ?? false\n\n const { t } = useTranslation()\n const [editingProfile, setEditingProfile] = React.useState<PermissionProfile | null>(null)\n const [creating, setCreating] = React.useState(false)\n // When duplicating, we open the CREATE flow pre-filled from a source role (its\n // grants/system perms), with a fresh name — system roles are static, so users\n // customize by copying rather than editing them in place.\n const [duplicateSource, setDuplicateSource] = React.useState<PermissionProfile | null>(null)\n const [saving, setSaving] = React.useState(false)\n\n const handleDuplicate = (profile: PermissionProfile) => {\n setEditingProfile(null)\n setCreating(false)\n setDuplicateSource({\n ...profile,\n name: t('organization.permissions.copyName', { name: profile.name }) || `${profile.name} (copy)`,\n isSystem: false,\n })\n }\n\n const memberCountByProfile = React.useMemo(() => {\n const counts: Record<string, number> = {}\n for (const m of members) {\n counts[m.profileId] = (counts[m.profileId] ?? 0) + 1\n }\n return counts\n }, [members])\n\n const handleSave = async (data: { name: string; description?: string; systemPermissions: SystemPermission[]; grants: Record<string, PermissionAction[]> }) => {\n if (!adapter || !currentOrg) return\n setSaving(true)\n try {\n if (editingProfile) {\n await adapter.updateProfile(currentOrg.id, editingProfile.id, data)\n } else {\n await adapter.createProfile(currentOrg.id, data)\n }\n const updated = await adapter.listProfiles(currentOrg.id)\n setProfiles(updated)\n setEditingProfile(null)\n setCreating(false)\n setDuplicateSource(null)\n } catch {\n // ignore\n } finally {\n setSaving(false)\n }\n }\n\n const handleDelete = async (profile: PermissionProfile) => {\n if (!adapter || !currentOrg || profile.isSystem) return\n try {\n await adapter.deleteProfile(currentOrg.id, profile.id)\n const updated = await adapter.listProfiles(currentOrg.id)\n setProfiles(updated)\n } catch {\n // ignore\n }\n }\n\n if (creating || editingProfile || duplicateSource) {\n return (\n <PermissionMatrixEditor\n features={features}\n profile={editingProfile ?? duplicateSource ?? undefined}\n isNew={!editingProfile}\n parentLabel={t('organization.permissions.title')}\n onSave={handleSave}\n onCancel={() => { setEditingProfile(null); setCreating(false); setDuplicateSource(null) }}\n saving={saving}\n />\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold\">{t('organization.permissions.title')}</h3>\n <p className=\"text-sm text-muted-foreground\">{t('organization.permissions.subtitle')}</p>\n </div>\n <Button onClick={() => setCreating(true)} size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('organization.permissions.createProfile')}\n </Button>\n </div>\n\n <div className=\"grid gap-3\">\n {profiles.length === 0 ? (\n // Roles load via central org hydration; show skeletons until they arrive.\n Array.from({ length: 4 }).map((_, i) => (\n <Card key={`sk-${i}`}>\n <CardContent className=\"flex items-center gap-4 p-4\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded-lg\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"h-3 w-64\" />\n </div>\n </CardContent>\n </Card>\n ))\n ) : profiles.map((profile) => (\n <Card key={profile.id}>\n <CardContent className=\"flex items-center gap-4 p-4\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10\">\n <Shield className=\"h-5 w-5 text-primary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <CardTitle className=\"text-sm\">{profile.name}</CardTitle>\n {profile.isSystem && <Badge variant=\"secondary\" className=\"text-xs\">{t('organization.permissions.system')}</Badge>}\n </div>\n {profile.description && (\n <CardDescription className=\"text-xs mt-0.5\">{profile.description}</CardDescription>\n )}\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('organization.permissions.memberCount', { count: String(memberCountByProfile[profile.id] ?? 0), plural: (memberCountByProfile[profile.id] ?? 0) !== 1 ? 's' : '' })}\n </p>\n </div>\n <div className=\"flex items-center gap-1\">\n {canPreview && profile.id !== realProfile?.id && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n title={t('organization.permissions.previewAs')}\n onClick={() => startImpersonation(profile)}\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n {/* Duplicate — always available; the primary (and only) way to\n customize a static system role. */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n title={t('organization.permissions.duplicate')}\n onClick={() => handleDuplicate(profile)}\n >\n <Copy className=\"h-3.5 w-3.5\" />\n </Button>\n {/* Edit + delete are for custom roles only — system roles are static. */}\n {!profile.isSystem && (\n <>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setEditingProfile(profile)}>\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive hover:text-destructive\"\n onClick={() => handleDelete(profile)}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </>\n )}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\ninterface ActiveToggleProps {\n active: boolean\n onChange: (active: boolean) => void\n}\n\nexport function ActiveToggle({ active, onChange }: ActiveToggleProps) {\n return (\n <button type=\"button\" onClick={() => onChange(!active)} className=\"flex items-center gap-1.5\">\n <div className={`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${\n active ? 'bg-primary' : 'bg-muted-foreground/30'\n }`}>\n <span className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-sm transition-transform ${\n active ? 'translate-x-[18px]' : 'translate-x-[2px]'\n }`} />\n </div>\n <span className={`text-xs font-medium ${active ? 'text-foreground' : 'text-muted-foreground'}`}>\n {active ? 'Active' : 'Inactive'}\n </span>\n </button>\n )\n}\n","import React from 'react'\nimport { User } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface PersonFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n compact?: boolean\n}\n\nconst IDENTITY_FIELDS = new Set(['name', 'dateOfBirth', 'documentNumber'])\nconst CONTACT_FIELDS = new Set(['email', 'phone'])\nconst ADDRESS_FIELDS = new Set(['address', 'city', 'state', 'country', 'postalCode'])\nconst SKIP_FIELDS = new Set(['isActive', 'status', 'tags', 'avatarUrl', 'notes'])\nconst ALL_PERSON_FIELDS = new Set([...IDENTITY_FIELDS, ...CONTACT_FIELDS, ...ADDRESS_FIELDS, ...SKIP_FIELDS])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan, compact }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: PersonFormLayoutProps['renderField']; colSpan?: boolean; compact?: boolean\n}) {\n return (\n <div className={`${compact ? 'space-y-1' : 'space-y-1.5'} ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function PersonFormLayout({ fields, fieldGroups, values, onChange, renderField, compact }: PersonFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const docField = fields.find((f) => f.key === 'documentNumber')\n const dobField = fields.find((f) => f.key === 'dateOfBirth')\n const contactFields = fields.filter((f) => CONTACT_FIELDS.has(f.key))\n const addressFields = fields.filter((f) => ADDRESS_FIELDS.has(f.key))\n const notesField = fields.find((f) => f.key === 'notes')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !ALL_PERSON_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n const gap = compact ? 'gap-2.5' : 'gap-3'\n const cardPad = compact ? 'pt-3' : 'pt-4'\n const sectionLabel = compact ? 'text-xs font-semibold text-foreground' : 'text-sm font-semibold text-foreground'\n\n return (\n <div className={compact ? 'space-y-2.5' : 'space-y-5'}>\n {/* Identity card — avatar + name + dob + doc + active toggle */}\n <Card>\n <CardContent className={cardPad}>\n <div className={`flex ${compact ? 'gap-3' : 'gap-5'}`}>\n <div className={`flex shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary ${compact ? 'h-10 w-10' : 'h-16 w-16'}`}>\n <User className={compact ? 'h-4 w-4' : 'h-6 w-6'} />\n </div>\n <div className={`flex-1 ${compact ? 'space-y-2' : 'space-y-4'}`}>\n {/* Row 1: Name + Document + Active toggle */}\n <div className={`flex items-start ${gap}`}>\n <div className={`flex-1 grid ${gap} sm:grid-cols-2`}>\n {nameField && (\n <div className={`${compact ? 'space-y-1' : 'space-y-1.5'} ${!docField ? 'sm:col-span-2' : ''}`}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {docField && (\n <div className={compact ? 'space-y-1' : 'space-y-1.5'}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>{docField.label}{docField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(docField, values[docField.key], (val) => onChange(docField.key, val))}\n </div>\n )}\n </div>\n {hasActive && (\n <div className={`shrink-0 ${compact ? 'mt-4' : 'mt-6'}`}>\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n </div>\n )}\n </div>\n {/* Row 2: Date of birth */}\n {dobField && (\n <div className={`grid ${gap} sm:grid-cols-2`}>\n <FieldItem field={dobField} value={values[dobField.key]} onChange={(val) => onChange(dobField.key, val)} renderField={renderField} compact={compact} />\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className={sectionLabel}>{group.label}</h3>\n {group.description && <p className={`text-muted-foreground ${compact ? 'text-[10px] mt-0.5 mb-1.5' : 'text-xs mt-0.5 mb-3'}`}>{group.description}</p>}\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <Card>\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Contact */}\n {contactFields.length > 0 && (\n <div>\n <h3 className={sectionLabel}>Contact</h3>\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {contactFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Address */}\n {addressFields.length > 0 && (\n <div>\n <h3 className={sectionLabel}>Address</h3>\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {addressFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.key === 'address'} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className={cardPad}>\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} compact={compact} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Package } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface ProductFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst PRICING_FIELDS = new Set(['price', 'cost', 'currency', 'unit'])\nconst STOCK_FIELDS = new Set(['stock', 'minStock'])\nconst SKIP_FIELDS = new Set(['status', 'isActive', 'tags', 'imageUrl', 'name', 'description', 'sku', 'category'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: ProductFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function ProductFormLayout({ fields, fieldGroups, values, onChange, renderField }: ProductFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const descField = fields.find((f) => f.key === 'description')\n const skuField = fields.find((f) => f.key === 'sku')\n const categoryField = fields.find((f) => f.key === 'category')\n const imageField = fields.find((f) => f.key === 'imageUrl')\n const pricingFields = fields.filter((f) => PRICING_FIELDS.has(f.key))\n const stockFields = fields.filter((f) => STOCK_FIELDS.has(f.key))\n const statusField = fields.find((f) => f.key === 'status')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !SKIP_FIELDS.has(f.key) && !PRICING_FIELDS.has(f.key) && !STOCK_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity card — image + name + category + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n {/* Product image or placeholder */}\n <div className=\"shrink-0 space-y-2\">\n {values.imageUrl ? (\n <img src={values.imageUrl} alt=\"\" className=\"h-24 w-24 rounded-2xl object-cover\" />\n ) : (\n <div className=\"flex h-24 w-24 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Package className=\"h-8 w-8\" />\n </div>\n )}\n {imageField && (\n <div className=\"w-24\">\n <input\n type=\"text\"\n value={values.imageUrl ?? ''}\n onChange={(e) => onChange('imageUrl', e.target.value)}\n placeholder=\"Image URL\"\n className=\"w-full rounded-md border border-input bg-background px-2 py-1 text-[10px] text-muted-foreground placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n />\n </div>\n )}\n </div>\n\n <div className=\"flex-1 space-y-4\">\n {/* Name + active toggle */}\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {(hasActive || statusField) && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle\n active={hasActive ? (values.isActive ?? true) : statusField ? values[statusField.key] === 'active' || values[statusField.key] === 'available' : true}\n onChange={(v) => {\n if (hasActive) onChange('isActive', v)\n if (statusField) {\n const opts = statusField.options?.map((o: any) => typeof o === 'string' ? o : o.value) ?? []\n const activeVal = opts.find((o: string) => o === 'active' || o === 'available') ?? 'active'\n const inactiveVal = opts.find((o: string) => o === 'inactive' || o === 'sold_out' || o === 'hidden') ?? 'inactive'\n onChange(statusField.key, v ? activeVal : inactiveVal)\n }\n }}\n />\n </div>\n )}\n </div>\n\n {/* Category + SKU */}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {categoryField && <FieldItem field={categoryField} value={values[categoryField.key]} onChange={(val) => onChange(categoryField.key, val)} renderField={renderField} />}\n {skuField && <FieldItem field={skuField} value={values[skuField.key]} onChange={(val) => onChange(skuField.key, val)} renderField={renderField} />}\n </div>\n\n {/* Description */}\n {descField && <FieldItem field={descField} value={values[descField.key]} onChange={(val) => onChange(descField.key, val)} renderField={renderField} colSpan />}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Pricing */}\n {pricingFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Pricing</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {pricingFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Stock */}\n {stockFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Inventory</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {stockFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Details</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Briefcase } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface ServiceFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst IDENTITY_FIELDS = new Set(['name', 'description', 'imageUrl', 'category'])\nconst PRICING_FIELDS = new Set(['price', 'cost', 'currency', 'durationMinutes'])\nconst SKIP_FIELDS = new Set(['status', 'isActive', 'tags'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: ServiceFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function ServiceFormLayout({ fields, fieldGroups, values, onChange, renderField }: ServiceFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const descField = fields.find((f) => f.key === 'description')\n const otherIdentity = fields.filter((f) => IDENTITY_FIELDS.has(f.key) && f.key !== 'name' && f.key !== 'description')\n const pricingFields = fields.filter((f) => PRICING_FIELDS.has(f.key))\n const statusField = fields.find((f) => f.key === 'status')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n const allKnown = new Set([...IDENTITY_FIELDS, ...PRICING_FIELDS, ...SKIP_FIELDS])\n const projectFields = fields.filter((f) => !allKnown.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Briefcase className=\"h-8 w-8\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n {/* Name + active toggle */}\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {(hasActive || statusField) && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle\n active={hasActive ? (values.isActive ?? true) : statusField ? values[statusField.key] === 'active' : true}\n onChange={(v) => {\n if (hasActive) onChange('isActive', v)\n if (statusField) onChange(statusField.key, v ? 'active' : 'inactive')\n }}\n />\n </div>\n )}\n </div>\n {/* Description */}\n {descField && <FieldItem field={descField} value={values[descField.key]} onChange={(val) => onChange(descField.key, val)} renderField={renderField} colSpan />}\n {/* Other identity */}\n {otherIdentity.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {otherIdentity.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Pricing & Duration */}\n {pricingFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Pricing & Duration</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {pricingFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Details</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { MapPin } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface LocationFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst IDENTITY_FIELDS = new Set(['name'])\nconst CONTACT_FIELDS = new Set(['phone', 'email'])\nconst ADDRESS_FIELDS = new Set(['address', 'city', 'state', 'country', 'postalCode'])\nconst SKIP_FIELDS = new Set(['isActive', 'status', 'tags', 'notes', 'isHeadquarters'])\nconst ALL_LOCATION_FIELDS = new Set([...IDENTITY_FIELDS, ...CONTACT_FIELDS, ...ADDRESS_FIELDS, ...SKIP_FIELDS])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: LocationFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function LocationFormLayout({ fields, fieldGroups, values, onChange, renderField }: LocationFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const contactFields = fields.filter((f) => CONTACT_FIELDS.has(f.key))\n const addressFields = fields.filter((f) => ADDRESS_FIELDS.has(f.key))\n const notesField = fields.find((f) => f.key === 'notes')\n const hasActive = fields.some((f) => f.key === 'isActive')\n const hqField = fields.find((f) => f.key === 'isHeadquarters')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !ALL_LOCATION_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity — icon + name + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <MapPin className=\"h-8 w-8\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n <div className=\"mt-6 flex items-center gap-3 shrink-0\">\n {hasActive && (\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n )}\n </div>\n </div>\n {hqField && (\n <label className=\"flex items-center gap-2.5 cursor-pointer text-sm\">\n <input\n type=\"checkbox\"\n checked={!!values.isHeadquarters}\n onChange={(e) => onChange('isHeadquarters', e.target.checked)}\n className=\"h-4 w-4 rounded border-input\"\n />\n Headquarters\n </label>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Address */}\n {addressFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Address</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {addressFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.key === 'address'} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Contact */}\n {contactFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Contact</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {contactFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className=\"pt-5\">\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react'\nimport { Search, Plus, X, User, Loader2, Check } from 'lucide-react'\nimport { Input } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport { useOrganizationStore } from '../../org'\n\ninterface Person {\n id: string\n name: string\n email?: string\n phone?: string\n kind: string\n}\n\ninterface PersonPickerProps {\n value?: string | null\n onChange: (personId: string | null, person?: Person) => void\n personKind?: string\n label?: string\n placeholder?: string\n onPersonData?: (data: { name: string; phone?: string; email?: string }) => void\n}\n\nexport function PersonPicker({\n value,\n onChange,\n personKind = 'customer',\n label = 'Person',\n placeholder = 'Search or type a name to add...',\n onPersonData,\n}: PersonPickerProps) {\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<Person[]>([])\n const [searching, setSearching] = useState(false)\n const [selected, setSelected] = useState<Person | null>(null)\n const [showCreate, setShowCreate] = useState(false)\n const [creating, setCreating] = useState(false)\n const searchTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // New person form\n const [newPhone, setNewPhone] = useState('')\n const [newEmail, setNewEmail] = useState('')\n\n const tenantId = useOrganizationStore((s) => s.currentOrg?.id)\n\n // Load selected person on mount\n useEffect(() => {\n if (value && !selected) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n supabase.schema('saas_core')\n .from('persons')\n .select('id, name, email, phone, kind')\n .eq('id', value)\n .single()\n .then(({ data }: any) => {\n if (data) setSelected(data as Person)\n })\n }\n }, [value])\n\n // Close on outside click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n setShowCreate(false)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const doSearch = useCallback(async (term: string) => {\n if (!term.trim() || !tenantId) { setResults([]); return }\n setSearching(true)\n try {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n const { data } = await supabase.schema('saas_core')\n .from('persons')\n .select('id, name, email, phone, kind')\n .eq('tenant_id', tenantId)\n .ilike('name', `%${term}%`)\n .limit(6)\n setResults((data ?? []) as Person[])\n } finally {\n setSearching(false)\n }\n }, [tenantId])\n\n const handleInput = (val: string) => {\n setQuery(val)\n setShowCreate(false)\n if (!open) setOpen(true)\n if (searchTimer.current) clearTimeout(searchTimer.current)\n searchTimer.current = setTimeout(() => doSearch(val), 250)\n }\n\n const handleSelect = (person: Person) => {\n setSelected(person)\n onChange(person.id, person)\n onPersonData?.({ name: person.name, phone: person.phone, email: person.email })\n setOpen(false)\n setQuery('')\n setResults([])\n setShowCreate(false)\n }\n\n const handleStartCreate = () => {\n setShowCreate(true)\n setNewPhone('')\n setNewEmail('')\n }\n\n const handleCreate = async () => {\n if (!query.trim() || !tenantId) return\n setCreating(true)\n try {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n const { data, error } = await supabase.schema('saas_core')\n .from('persons')\n .insert({\n tenant_id: tenantId,\n kind: personKind,\n name: query.trim(),\n phone: newPhone.trim() || null,\n email: newEmail.trim() || null,\n is_active: true,\n })\n .select('id, name, email, phone, kind')\n .single()\n if (error) throw error\n handleSelect(data as Person)\n } finally {\n setCreating(false)\n }\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n setSelected(null)\n setQuery('')\n onChange(null)\n onPersonData?.({ name: '', phone: '', email: '' })\n setTimeout(() => inputRef.current?.focus(), 50)\n }\n\n const noResults = query.trim().length > 1 && !searching && results.length === 0\n\n return (\n <div ref={containerRef} className=\"relative\">\n {/* Selected state */}\n {selected && !open ? (\n <button\n type=\"button\"\n onClick={() => { setOpen(true); setQuery(''); setTimeout(() => inputRef.current?.focus(), 50) }}\n className=\"flex items-center gap-3 w-full rounded-lg border px-3 py-2.5 text-left hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <User className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{selected.name}</p>\n <p className=\"text-xs text-muted-foreground truncate\">\n {[selected.phone, selected.email].filter(Boolean).join(' · ') || 'No contact info'}\n </p>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\" onClick={(e) => e.stopPropagation()}>\n <span className=\"text-[10px] text-muted-foreground\">Change</span>\n <button type=\"button\" onClick={handleClear} className=\"p-1 text-muted-foreground hover:text-destructive rounded\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </button>\n ) : (\n /* Search input */\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => handleInput(e.target.value)}\n onFocus={() => { if (query) setOpen(true) }}\n placeholder={placeholder}\n className=\"flex h-10 w-full rounded-lg border border-input bg-background pl-10 pr-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n {searching && <Loader2 className=\"absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 animate-spin text-muted-foreground\" />}\n </div>\n )}\n\n {/* Dropdown */}\n {open && (query.trim().length > 0 || showCreate) && (\n <div className=\"fayz-glass-surface absolute z-50 mt-1 w-full rounded-lg border bg-popover shadow-lg overflow-hidden\">\n {/* Results */}\n {results.length > 0 && (\n <div className=\"max-h-52 overflow-y-auto\">\n {results.map((person) => (\n <button\n key={person.id}\n type=\"button\"\n onClick={() => handleSelect(person)}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 text-left hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium truncate\">{person.name}</p>\n <span className=\"inline-flex items-center rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground capitalize shrink-0\">\n {person.kind}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground truncate\">\n {[person.phone, person.email].filter(Boolean).join(' · ')}\n </p>\n </div>\n {person.id === value && <Check className=\"h-4 w-4 text-primary shrink-0\" />}\n </button>\n ))}\n </div>\n )}\n\n {/* No results — prompt to create */}\n {noResults && !showCreate && (\n <button\n type=\"button\"\n onClick={handleStartCreate}\n className=\"flex items-center gap-3 w-full px-3 py-3 text-left hover:bg-muted/50 transition-colors border-t border-dashed\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <Plus className=\"h-4 w-4\" />\n </div>\n <div>\n <p className=\"text-sm font-medium\">Add \"<span className=\"text-primary\">{query.trim()}</span>\"</p>\n <p className=\"text-xs text-muted-foreground\">Create a new {label.toLowerCase()} with this name</p>\n </div>\n </button>\n )}\n\n {/* Also show create option when there ARE results */}\n {results.length > 0 && !showCreate && (\n <button\n type=\"button\"\n onClick={handleStartCreate}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted/50 transition-colors border-t text-xs text-muted-foreground\"\n >\n <Plus className=\"h-3 w-3\" />\n Add \"<span className=\"font-medium text-foreground\">{query.trim()}</span>\" as new {label.toLowerCase()}\n </button>\n )}\n\n {/* Inline create form */}\n {showCreate && (\n <div className=\"p-3 border-t space-y-3 bg-muted/20\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <Plus className=\"h-3 w-3\" />\n </div>\n <p className=\"text-xs font-medium\">New {label}: <span className=\"text-primary\">{query.trim()}</span></p>\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <Input\n value={newPhone}\n onChange={(e) => setNewPhone(e.target.value)}\n placeholder=\"Phone\"\n className=\"h-8 text-xs\"\n />\n <Input\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"Email\"\n type=\"email\"\n className=\"h-8 text-xs\"\n />\n </div>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\" onClick={() => setShowCreate(false)}>\n Cancel\n </Button>\n <Button type=\"button\" size=\"sm\" className=\"h-7 text-xs\" onClick={handleCreate} disabled={creating}>\n {creating ? <Loader2 className=\"h-3 w-3 mr-1 animate-spin\" /> : <Check className=\"h-3 w-3 mr-1\" />}\n {creating ? 'Saving...' : 'Save & Select'}\n </Button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport { PersonPicker } from './PersonPicker'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface SubjectFormLayoutProps {\n fields: FieldDef[]\n allFields?: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n entityIcon?: string\n}\n\nconst OWNER_FIELDS = new Set(['tutorName', 'tutorPhone', 'tutorId'])\nconst REFERRAL_FIELDS = new Set(['referringVetId', 'referringClinicId'])\nconst SKIP_FIELDS = new Set(['isActive', 'notes', 'tags', 'metadata'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: SubjectFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function SubjectFormLayout({ fields, allFields, fieldGroups, values, onChange, renderField, entityIcon }: SubjectFormLayoutProps) {\n const all = allFields ?? fields\n const nameField = fields.find((f) => f.key === 'name')\n const hasActive = fields.some((f) => f.key === 'isActive')\n const notesField = fields.find((f) => f.key === 'notes')\n const hasOwnerPicker = all.some((f) => f.key === 'tutorId' || f.key === 'tutorName')\n const referralFields = fields.filter((f) => REFERRAL_FIELDS.has(f.key))\n\n // Main subject fields = everything except name, owner, referral, skip\n const allSkip = new Set([...OWNER_FIELDS, ...REFERRAL_FIELDS, ...SKIP_FIELDS, 'name'])\n const subjectFields = fields.filter((f) => !allSkip.has(f.key))\n\n // Group subject fields\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungrouped: FieldDef[] = []\n for (const field of subjectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungrouped.push(field)\n }\n }\n\n const IconComponent = (LucideIcons as any)[entityIcon ?? 'Heart'] ?? LucideIcons.Heart\n\n return (\n <div className=\"space-y-6\">\n {/* Identity — icon + name + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n {React.createElement(IconComponent, { className: 'h-8 w-8' })}\n </div>\n <div className=\"flex-1 space-y-4\">\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {hasActive && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n </div>\n )}\n </div>\n {/* Ungrouped fields inline */}\n {ungrouped.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-3\">\n {ungrouped.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Grouped subject fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Owner / Tutor — person picker */}\n {hasOwnerPicker && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Owner / Tutor</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <PersonPicker\n value={values.tutorId}\n onChange={(personId) => onChange('tutorId', personId)}\n personKind=\"customer\"\n label=\"Tutor\"\n placeholder=\"Search or type a name to add...\"\n />\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Referral */}\n {referralFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Referral</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {referralFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className=\"pt-5\">\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Badge } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport type { FieldRelation } from '@fayz-ai/core'\n\n// Relation field support for the CRUD engine: load a select's options from a\n// table at runtime so a foreign-key column stores a real id (e.g. uuid) instead\n// of a static string. Shared by the form input (RelationSelect) and the table\n// cell (RelationCell). Options are cached per (schema, table, fields, tenant,\n// filter) so the list + every cell reuse one query.\n\ntype Option = { value: string; label: string }\n\nconst cache = new Map<string, Promise<Option[]>>()\n\nfunction keyOf(r: FieldRelation): string {\n const tenant = r.tenantScoped !== false ? (getActiveTenantId() ?? '') : ''\n return JSON.stringify([\n r.schema ?? 'public', r.table, r.valueField ?? 'id', r.labelField ?? 'name',\n tenant, r.filter ?? null,\n ])\n}\n\nasync function fetchOptions(r: FieldRelation): Promise<Option[]> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n const valueField = r.valueField ?? 'id'\n const labelField = r.labelField ?? 'name'\n let q = (r.schema ? supabase.schema(r.schema) : supabase)\n .from(r.table)\n .select(`${valueField}, ${labelField}`)\n if (r.tenantScoped !== false) {\n const tid = getActiveTenantId()\n if (tid) q = q.eq('tenant_id', tid)\n }\n if (r.filter) for (const [k, v] of Object.entries(r.filter)) q = q.eq(k, v)\n q = q.order(labelField, { ascending: true })\n const { data } = await q\n return (data ?? []).map((row: any) => ({\n value: String(row[valueField]),\n label: String(row[labelField] ?? row[valueField]),\n }))\n}\n\nexport function loadRelationOptions(r: FieldRelation): Promise<Option[]> {\n const k = keyOf(r)\n if (!cache.has(k)) {\n cache.set(k, fetchOptions(r).catch(() => { cache.delete(k); return [] }))\n }\n return cache.get(k)!\n}\n\n/** Drop cached relation options (call after creating/editing a related row). */\nexport function invalidateRelationOptions(): void {\n cache.clear()\n}\n\nexport function useRelationOptions(r: FieldRelation | undefined): {\n options: Option[]\n loading: boolean\n labelFor: (value: any) => string\n} {\n const [options, setOptions] = useState<Option[]>([])\n const [loading, setLoading] = useState(true)\n const dep = r ? keyOf(r) : 'none'\n useEffect(() => {\n let alive = true\n if (!r) { setLoading(false); return }\n setLoading(true)\n loadRelationOptions(r).then((opts) => {\n if (alive) { setOptions(opts); setLoading(false) }\n })\n return () => { alive = false }\n }, [dep]) // eslint-disable-line react-hooks/exhaustive-deps\n const labelFor = (value: any) => options.find((o) => o.value === String(value))?.label ?? ''\n return { options, loading, labelFor }\n}\n\nexport function RelationSelect({\n relation,\n value,\n onChange,\n className,\n required,\n placeholder,\n}: {\n relation?: FieldRelation\n value: any\n onChange: (value: any) => void\n className?: string\n required?: boolean\n placeholder?: string\n}) {\n const { options, loading } = useRelationOptions(relation)\n return (\n <select\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value || null)}\n required={required}\n className={className}\n >\n <option value=\"\">{loading ? 'Loading…' : (placeholder ?? 'Select...')}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n )\n}\n\nexport function RelationCell({ relation, value }: { relation?: FieldRelation; value: any }) {\n const { labelFor, loading } = useRelationOptions(relation)\n if (value == null || value === '') return <span className=\"text-muted-foreground\">—</span>\n const label = labelFor(value)\n return <Badge variant=\"secondary\">{label || (loading ? '…' : String(value))}</Badge>\n}\n","import React, { useState, useEffect } from 'react'\nimport { ArrowLeft, ImagePlus, Loader2 } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Checkbox } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { toast } from '@fayz-ai/ui'\nimport { useSaveBar, useBackHandler } from '@fayz-ai/ui'\nimport { PersonFormLayout } from './archetypes/PersonFormLayout'\nimport { ProductFormLayout } from './archetypes/ProductFormLayout'\nimport { ServiceFormLayout } from './archetypes/ServiceFormLayout'\nimport { LocationFormLayout } from './archetypes/LocationFormLayout'\nimport { SubjectFormLayout } from './archetypes/SubjectFormLayout'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FieldDef, FieldGroup, EntityDef } from '@fayz-ai/core'\nimport type { FormLayout } from '@fayz-ai/core'\nimport { RelationSelect } from './relation-field'\n\ninterface CrudFormPageProps {\n entityDef: EntityDef\n mode: 'create' | 'edit'\n initialData?: Record<string, any>\n onSubmit: (data: Record<string, any>) => void | Promise<void>\n onCancel: () => void\n namePlural: string\n /** Embedded mode — no breadcrumb, compact layout. For use inside modals/panels. */\n embedded?: boolean\n /** Hide the internal breadcrumb while keeping the full-page SaveBar/Escape flow.\n * Use when a parent already renders its own header (e.g. SubpageHeader). */\n hideBreadcrumb?: boolean\n}\n\n/** Derive a currency symbol from an ISO code (e.g. USD → \"$\") when not given. */\nfunction currencySymbolFor(code: string | undefined, locale: string): string {\n if (!code) return 'R$'\n try {\n const parts = new Intl.NumberFormat(locale, { style: 'currency', currency: code }).formatToParts(0)\n return parts.find((p) => p.type === 'currency')?.value ?? code\n } catch {\n return code\n }\n}\n\nfunction getDefaultValues(fields: FieldDef[]): Record<string, any> {\n const values: Record<string, any> = {}\n for (const field of fields) {\n if (field.showInForm === false) continue\n // Computed fields are read-only and never part of the payload.\n if (field.type === 'computed') continue\n if (field.defaultValue != null) {\n values[field.key] = field.defaultValue\n } else {\n switch (field.type) {\n case 'boolean':\n values[field.key] = false\n break\n case 'number':\n case 'currency':\n values[field.key] = ''\n break\n default:\n values[field.key] = ''\n }\n }\n }\n return values\n}\n\nfunction renderField(field: FieldDef, value: any, onChange: (val: any) => void, allValues: Record<string, any> = {}) {\n const baseClass = 'flex h-9 w-full rounded-input border border-input bg-background px-3 py-1.5 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'\n\n switch (field.type) {\n case 'currency': {\n const locale = field.currencyLocale ?? 'pt-BR'\n return (\n <CurrencyInput\n value={Number(value) || 0}\n onChange={(n) => onChange(n)}\n currencyCode={field.currency}\n locale={locale}\n symbol={field.currencySymbol ?? currencySymbolFor(field.currency, locale)}\n />\n )\n }\n case 'segmented': {\n const options = (field.options ?? []).map((o) =>\n typeof o === 'string' ? { label: o, value: o, description: undefined } : o,\n )\n return (\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-4\">\n {options.map((o) => {\n const active = value === o.value\n return (\n <button\n key={o.value}\n type=\"button\"\n onClick={() => onChange(o.value)}\n className={`rounded-lg border-2 p-3 text-left transition-all ${\n active\n ? 'border-primary bg-primary/5'\n : 'border-transparent bg-muted/20 hover:bg-muted/40'\n }`}\n >\n <p className={`text-sm font-medium ${active ? 'text-primary' : ''}`}>{o.label}</p>\n {'description' in o && o.description && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 leading-tight\">{o.description}</p>\n )}\n </button>\n )\n })}\n </div>\n )\n }\n case 'computed': {\n const result = field.compute ? field.compute(allValues) : null\n const tone = result?.tone === 'positive' ? 'text-success'\n : result?.tone === 'negative' ? 'text-destructive'\n : 'text-foreground'\n return (\n <div className=\"mt-1 rounded-lg border bg-muted/20 px-3 py-2 text-sm tabular-nums text-right\">\n {result ? <span className={tone}>{result.display}</span> : <span className=\"text-muted-foreground\">—</span>}\n </div>\n )\n }\n case 'textarea':\n return (\n <textarea\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={field.placeholder}\n required={field.required}\n rows={2}\n className={`${baseClass} min-h-[60px] py-1.5`}\n />\n )\n case 'relation':\n return (\n <RelationSelect\n relation={field.relation}\n value={value}\n onChange={onChange}\n className={baseClass}\n required={field.required}\n placeholder={field.placeholder ?? `Select ${field.label.toLowerCase()}...`}\n />\n )\n case 'select': {\n const options = (field.options ?? []).map((o) =>\n typeof o === 'string' ? { label: o, value: o } : o,\n )\n return (\n <select\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n required={field.required}\n className={baseClass}\n >\n <option value=\"\">{field.placeholder ?? `Select ${field.label.toLowerCase()}...`}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n )\n }\n case 'boolean':\n return (\n <label className=\"flex items-center gap-2.5 cursor-pointer\">\n <Checkbox\n checked={!!value}\n onChange={(checked) => onChange(checked)}\n />\n <span className=\"text-sm\">{field.label}</span>\n </label>\n )\n case 'number':\n return (\n <Input\n type=\"number\"\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n placeholder={field.placeholder}\n required={field.required}\n min={field.min}\n max={field.max}\n />\n )\n case 'date':\n return <Input type=\"date\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'datetime':\n return <Input type=\"datetime-local\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'time':\n return <Input type=\"time\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'color':\n return (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value || '#6b7280'}\n onChange={(e) => onChange(e.target.value)}\n className=\"h-9 w-12 rounded-md border border-input cursor-pointer p-0.5\"\n />\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"#000000\"\n className=\"flex-1 font-mono text-xs\"\n />\n </div>\n )\n default:\n return (\n <Input\n type={field.type === 'email' ? 'email' : field.type === 'phone' ? 'tel' : field.type === 'url' ? 'url' : 'text'}\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={field.placeholder}\n required={field.required}\n />\n )\n }\n}\n\nfunction FormFieldItem({ field, value, onChange, allValues }: { field: FieldDef; value: any; onChange: (val: any) => void; allValues?: Record<string, any> }) {\n return (\n <div className={`grid gap-1 ${field.span === 2 ? 'md:col-span-2' : ''}`}>\n {field.type !== 'boolean' && (\n <label className=\"text-sm font-medium text-foreground\">\n {field.label}\n {field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n )}\n {renderField(field, value, onChange, allValues)}\n {field.hint && <p className=\"text-[10px] text-muted-foreground mt-0.5\">{field.hint}</p>}\n </div>\n )\n}\n\nfunction FormGroup({\n group,\n fields,\n values,\n onChange,\n}: {\n group: FieldGroup\n fields: FieldDef[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n}) {\n const cols = group.columns ?? 2\n\n const grid = (\n <div className={`grid gap-3 ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {fields.map((field) => (\n <FormFieldItem\n key={field.key}\n field={field}\n value={values[field.key]}\n onChange={(val) => onChange(field.key, val)}\n allValues={values}\n />\n ))}\n </div>\n )\n\n return (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n {group.description && (\n <p className=\"text-xs text-muted-foreground mt-0.5 mb-3\">{group.description}</p>\n )}\n <Card>\n <CardContent className=\"pt-4\">\n {group.imageSlot ? (\n <div className=\"flex gap-4\">\n {/* Decorative image slot — non-functional placeholder for now. */}\n <div className=\"shrink-0\">\n <div className=\"flex h-20 w-20 cursor-pointer items-center justify-center rounded-lg border-2 border-dashed border-muted text-muted-foreground transition-colors hover:border-primary/30 hover:text-primary/50\">\n <ImagePlus className=\"h-5 w-5\" />\n </div>\n </div>\n <div className=\"flex-1\">{grid}</div>\n </div>\n ) : (\n grid\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n\nexport function CrudFormPage({ entityDef, mode, initialData, onSubmit, onCancel, namePlural, embedded, hideBreadcrumb }: CrudFormPageProps) {\n const t = useTranslation()\n const formFields = entityDef.fields.filter((f) => f.showInForm !== false)\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const computeInit = () =>\n mode === 'edit' && initialData ? { ...getDefaultValues(formFields), ...initialData } : getDefaultValues(formFields)\n const [values, setValues] = useState<Record<string, any>>(computeInit)\n const [saving, setSaving] = useState(false)\n const initialRef = React.useRef<string>(JSON.stringify(values))\n\n useEffect(() => {\n const init = computeInit()\n setValues(init)\n initialRef.current = JSON.stringify(init)\n }, [mode, initialData])\n\n const computedKeys = new Set(formFields.filter((f) => f.type === 'computed').map((f) => f.key))\n\n const submit = async () => {\n setSaving(true)\n try {\n // Sanitize: convert empty strings to null so the DB doesn't choke on e.g. empty date fields.\n // Computed fields are read-only and never persisted.\n const sanitized: Record<string, any> = {}\n for (const [key, val] of Object.entries(values)) {\n if (computedKeys.has(key)) continue\n sanitized[key] = val === '' ? null : val\n }\n await onSubmit(sanitized)\n } catch (err: any) {\n const message = err?.message || 'Something went wrong'\n toast.error(t('crud.form.failedToSave', { entity: entityDef.name.toLowerCase() }), { description: message })\n } finally {\n setSaving(false)\n }\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n void submit()\n }\n\n const dirty = JSON.stringify(values) !== initialRef.current\n\n // Discard reverts the form to its pristine state and stays on the page (the\n // SaveBar then hides). Leaving the page is a separate action — the breadcrumb\n // link, or pressing Escape again once there's nothing left to discard.\n const discard = () => { setValues(computeInit()) }\n\n // Full-page CRUD forms surface Save/Discard via the app-wide floating SaveBar.\n // Embedded forms (rendered inside other widgets) keep their inline buttons.\n useSaveBar({\n dirty: !embedded && dirty,\n saving,\n onSave: () => { void submit() },\n onDiscard: discard,\n saveLabel: mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.saveChanges'),\n })\n\n // Register \"leave to parent\" with the app-wide Escape key. While the form is\n // dirty the SaveBar owns Escape (→ discard); once pristine, Escape navigates\n // back — giving the two-step \"discard, then leave\" flow for free.\n useBackHandler(embedded ? undefined : onCancel)\n\n const handleChange = (key: string, val: any) => {\n setValues((prev) => ({ ...prev, [key]: val }))\n }\n\n const title = mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.editTitle', { entity: entityDef.name })\n const breadcrumbLabel = mode === 'create'\n ? t('crud.form.newBreadcrumb', { entity: entityDef.name })\n : (values[displayField] || initialData?.[displayField] || t('common.edit'))\n\n // Organize fields by groups\n const groups = entityDef.fieldGroups ?? []\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedFields: FieldDef[] = []\n\n for (const field of formFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedFields.push(field)\n }\n }\n\n const hasGroups = groups.length > 0 || groupFieldMap.size > 0\n\n const archetypeLayoutProps = {\n fields: formFields,\n allFields: entityDef.fields,\n fieldGroups: groups,\n values,\n onChange: handleChange,\n renderField,\n entityIcon: entityDef.icon,\n compact: embedded,\n }\n\n function renderFormBody(layout?: FormLayout) {\n switch (layout) {\n case 'person':\n return <PersonFormLayout {...archetypeLayoutProps} />\n case 'product':\n return <ProductFormLayout {...archetypeLayoutProps} />\n case 'service':\n return <ServiceFormLayout {...archetypeLayoutProps} />\n case 'location':\n return <LocationFormLayout {...archetypeLayoutProps} />\n case 'subject':\n return <SubjectFormLayout {...archetypeLayoutProps} />\n default:\n // Generic layout — ungrouped + grouped fields\n return (\n <>\n {ungroupedFields.length > 0 && (\n <Card>\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${!hasGroups ? '' : 'md:grid-cols-2'}`}>\n {ungroupedFields.map((field) => (\n <FormFieldItem\n key={field.key}\n field={field}\n value={values[field.key]}\n onChange={(val) => handleChange(field.key, val)}\n allValues={values}\n />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n {groups.map((group) => {\n const fields = groupFieldMap.get(group.id)\n if (!fields || fields.length === 0) return null\n return (\n <FormGroup\n key={group.id}\n group={group}\n fields={fields}\n values={values}\n onChange={handleChange}\n />\n )\n })}\n </>\n )\n }\n }\n\n return (\n <div className={`w-full flex flex-col items-center ${embedded ? 'text-sm' : ''}`}>\n <div className={`w-full ${embedded ? 'space-y-3' : 'max-w-3xl space-y-5'}`}>\n {/* Breadcrumb + subtitle — hidden in embedded mode or when a parent owns the header */}\n {!embedded && !hideBreadcrumb && (\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={onCancel} className=\"inline-flex items-center gap-1 hover:text-foreground transition-colors\">\n <ArrowLeft className=\"h-3.5 w-3.5\" />\n {namePlural}\n </button>\n <span>/</span>\n <span className=\"text-foreground font-medium truncate max-w-[200px]\">{breadcrumbLabel}</span>\n </nav>\n )}\n\n {/* Form */}\n <form onSubmit={handleSubmit} className={embedded ? 'space-y-3' : 'space-y-5'}>\n {renderFormBody(entityDef.layout)}\n\n {/* Submit — embedded forms keep inline buttons; full-page forms use the floating SaveBar */}\n {embedded && (\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel} disabled={saving}>{t('common.cancel')}</Button>\n <Button type=\"submit\" size=\"sm\" disabled={saving}>\n {saving && <Loader2 className=\"animate-spin mr-1.5 h-3 w-3\" />}\n {saving ? t('common.saving') : mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.saveChanges')}\n </Button>\n </div>\n )}\n </form>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport type { FieldDef } from '@fayz-ai/core'\nimport { Badge } from '@fayz-ai/ui'\nimport { RelationCell } from './relation-field'\nimport {\n formatCurrency as formatCurrencyLocale,\n formatDate as formatDateLocale,\n formatDateTime as formatDateTimeLocale,\n} from '@fayz-ai/core'\n\nfunction formatCurrency(value: any, currency?: string): string {\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return '—'\n return formatCurrencyLocale(num, currency)\n}\n\nfunction formatDate(value: any): string {\n if (!value) return '—'\n return formatDateLocale(value)\n}\n\nfunction formatDateTime(value: any): string {\n if (!value) return '—'\n return formatDateTimeLocale(value)\n}\n\nexport interface ColumnDef {\n key: string\n label: string\n sortable: boolean\n render: (value: any, row: any) => React.ReactNode\n}\n\nexport interface FieldToColumnsOptions {\n /** Callback for inline field updates (e.g. toggle active) */\n onInlineUpdate?: (id: string, field: string, value: any) => void\n}\n\nfunction InlineToggle({ checked, onChange }: { checked: boolean; onChange: (val: boolean) => void }) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n onClick={(e) => { e.stopPropagation(); onChange(!checked) }}\n className={`relative inline-flex h-5 w-9 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${\n checked ? 'bg-primary' : 'bg-muted'\n }`}\n >\n <span\n className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform ${\n checked ? 'translate-x-4' : 'translate-x-0'\n }`}\n />\n </button>\n )\n}\n\nexport function fieldToColumns(fields: FieldDef[], options?: FieldToColumnsOptions): ColumnDef[] {\n return fields\n .filter((f) => f.showInTable !== false)\n .map((field): ColumnDef => {\n const sortable = field.sortable ?? ['text', 'number', 'currency', 'date', 'datetime', 'email'].includes(field.type)\n\n const render = field.renderCell ?? ((value: any, row: any): React.ReactNode => {\n if (value == null || value === '') return <span className=\"text-muted-foreground\">—</span>\n\n switch (field.type) {\n case 'currency':\n return <span>{formatCurrency(value, field.currency)}</span>\n case 'date':\n return <span>{formatDate(value)}</span>\n case 'datetime':\n return <span>{formatDateTime(value)}</span>\n case 'boolean':\n if (field.inlineToggle && options?.onInlineUpdate) {\n const handler = options.onInlineUpdate\n return (\n <InlineToggle\n checked={!!value}\n onChange={(val) => handler(row.id, field.key, val)}\n />\n )\n }\n return value ? (\n <svg className=\"h-4 w-4 text-success\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )\n case 'color':\n return (\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"h-4 w-4 rounded-full border shrink-0\" style={{ backgroundColor: String(value) }} />\n <span className=\"text-xs text-muted-foreground\">{String(value)}</span>\n </span>\n )\n case 'relation':\n return <RelationCell relation={field.relation} value={value} />\n case 'select':\n return <Badge variant=\"secondary\">{String(value)}</Badge>\n case 'number':\n return <span>{typeof value === 'number' ? value.toLocaleString() : value}</span>\n default:\n return <span>{String(value)}</span>\n }\n })\n\n return { key: field.key, label: field.label, sortable, render }\n })\n}\n","import React from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport { Card } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport type { FieldDef, EntityDef } from '@fayz-ai/core'\nimport { formatCurrency, formatDate } from '@fayz-ai/core'\n\ninterface CrudCardGridProps<T> {\n items: T[]\n entityDef: EntityDef<T>\n onEdit: (item: T) => void\n onDelete: (item: T) => void\n}\n\nfunction formatValue(field: FieldDef, value: any): React.ReactNode {\n if (value == null || value === '') return null\n\n switch (field.type) {\n case 'currency': {\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return null\n return formatCurrency(num, field.currency)\n }\n case 'date':\n try { return formatDate(value) }\n catch { return String(value) }\n case 'boolean':\n return value ? 'Yes' : 'No'\n case 'select':\n return <Badge variant=\"secondary\" className=\"text-[10px]\">{String(value)}</Badge>\n case 'image':\n return null\n default:\n return String(value)\n }\n}\n\nexport function CrudCardGrid<T extends { id: string }>({ items, entityDef, onEdit, onDelete }: CrudCardGridProps<T>) {\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const imageField = entityDef.imageField\n const entityIcon = entityDef.icon\n const IconComponent = (LucideIcons as any)[entityIcon] ?? LucideIcons.Package\n const visibleFields = entityDef.fields.filter(\n (f) => f.showInTable !== false && f.key !== displayField && f.key !== imageField && f.type !== 'image'\n )\n\n return (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => {\n const record = item as any\n const imageUrl = imageField ? record[imageField] : null\n\n return (\n <Card\n key={record.id}\n className=\"flex items-center gap-4 p-3 cursor-pointer hover:bg-muted/30 transition-colors\"\n onClick={() => onEdit(item)}\n >\n {/* Thumbnail or icon */}\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={record[displayField] ?? ''}\n className=\"h-14 w-14 shrink-0 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"flex h-14 w-14 shrink-0 items-center justify-center rounded-lg bg-muted/50\">\n <IconComponent className=\"h-6 w-6 text-muted-foreground/40\" />\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold truncate\">{record[displayField] ?? record.id}</h3>\n <div className=\"flex items-center gap-2 mt-0.5 flex-wrap\">\n {visibleFields.slice(0, 3).map((field) => {\n const val = formatValue(field, record[field.key])\n if (val == null) return null\n return (\n <span key={field.key} className=\"text-xs text-muted-foreground\">\n {val}\n </span>\n )\n })}\n </div>\n </div>\n </Card>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport type { PermissionAction } from '@fayz-ai/core'\nimport { usePermissionOptional } from './context'\n\ninterface PermissionGateProps {\n feature: string\n action: PermissionAction\n children: React.ReactNode\n fallback?: React.ReactNode\n}\n\n/** Renders children only when the current user has the given feature+action. */\nexport function PermissionGate({ feature, action, children, fallback }: PermissionGateProps) {\n const can = usePermissionOptional()\n if (!can(feature, action)) return <>{fallback ?? null}</>\n return <>{children}</>\n}\n","import React, { useMemo } from 'react'\nimport { MoreVertical, Upload, Download } from 'lucide-react'\nimport type { ColumnDef as TanStackColumnDef } from '@tanstack/react-table'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { DataTable } from '@fayz-ai/ui'\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '@fayz-ai/ui'\nimport { fieldToColumns } from './fieldToColumn'\nimport { CrudCardGrid } from './CrudCardGrid'\nimport { PermissionGate } from '../permissions/PermissionGate'\n\n/** A resolved facet: a field plus the option pills to render. */\nexport interface CrudFacet {\n field: string\n options: { value: string; label: string }[]\n allLabel?: string\n}\n\nexport interface CrudListViewProps<T extends { id: string }> {\n entityDef: EntityDef<T>\n /** TanStack columns. When omitted, derived from entityDef.fields (no actions column). */\n columns?: TanStackColumnDef<T, any>[]\n /** null = initial load (skeleton); [] = empty state. */\n items: T[] | null\n total: number\n display?: 'table' | 'cards'\n /** Search box — rendered when onSearchChange is provided. */\n search?: string\n onSearchChange?: (value: string) => void\n searchPlaceholder?: string\n /** Facet pills below the search box. */\n facets?: CrudFacet[]\n activeFilters?: Record<string, string | undefined>\n onFacetChange?: (field: string, value: string | undefined) => void\n onNew?: () => void\n addLabel?: string\n onRowClick?: (row: T) => void\n /** Delete action for the card grid (table actions live in the columns). */\n onDelete?: (row: T) => void\n onImport?: () => void\n onExport?: () => void\n feature?: string\n readOnly?: boolean\n emptyMessage?: string\n}\n\nfunction pillClass(active: boolean): string {\n return [\n 'rounded-full px-3 py-1 text-sm font-medium transition-colors',\n active\n ? 'bg-foreground text-background'\n : 'bg-muted text-muted-foreground hover:bg-muted/70',\n ].join(' ')\n}\n\n/**\n * The canonical generic list — header (count + New + import/export), search,\n * faceted filter pills, and a DataTable/card grid. Decoupled from data and\n * routing: feed it `items` and callbacks. Used by CrudPage (store-backed) and by\n * plugins that own their data/routing (e.g. the inventory product list).\n */\nexport function CrudListView<T extends { id: string }>({\n entityDef,\n columns,\n items,\n total,\n display = 'table',\n search,\n onSearchChange,\n searchPlaceholder,\n facets,\n activeFilters,\n onFacetChange,\n onNew,\n addLabel,\n onRowClick,\n onDelete,\n onImport,\n onExport,\n feature,\n readOnly,\n emptyMessage,\n}: CrudListViewProps<T>) {\n const t = useTranslation()\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n\n const derivedColumns = useMemo<TanStackColumnDef<T, any>[]>(() => {\n return fieldToColumns(entityDef.fields).map((col) => ({\n accessorKey: col.key,\n header: col.label,\n enableSorting: col.sortable,\n cell: ({ row }: any) => {\n const value = row.original[col.key]\n const rendered = col.render(value, row.original)\n return col.key === displayField\n ? <span className=\"font-medium text-foreground\">{rendered}</span>\n : rendered\n },\n }))\n }, [entityDef.fields, displayField])\n\n const tanColumns = columns ?? derivedColumns\n\n const isInitialLoad = items === null\n const isEmpty = items !== null && items.length === 0\n const hasImportExport = Boolean(onImport || onExport)\n\n const newButton = onNew && !readOnly\n ? <Button onClick={onNew}>{addLabel ?? t('crud.list.addEntity', { entity: entityDef.name })}</Button>\n : null\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">{namePlural}</h1>\n {isInitialLoad ? (\n <div className=\"h-5 w-32 animate-pulse rounded bg-muted mt-1\" />\n ) : (\n <p className=\"text-muted-foreground\">{t('crud.list.totalCount', { count: String(total), entities: namePlural.toLowerCase() })}</p>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {newButton && (feature ? <PermissionGate feature={feature} action=\"create\">{newButton}</PermissionGate> : newButton)}\n {hasImportExport && (\n <Dropdown>\n <DropdownTrigger asChild>\n <Button variant=\"outline\" size=\"icon\" className=\"h-9 w-9 shrink-0\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n </DropdownTrigger>\n <DropdownContent align=\"end\">\n {onImport && (\n <DropdownItem onClick={onImport}>\n <Upload className=\"h-4 w-4 mr-2\" />\n {t('crud.import.action')}\n </DropdownItem>\n )}\n {onExport && (\n <DropdownItem onClick={onExport}>\n <Download className=\"h-4 w-4 mr-2\" />\n {t('crud.export.action')}\n </DropdownItem>\n )}\n </DropdownContent>\n </Dropdown>\n )}\n </div>\n </div>\n\n {onSearchChange && (\n <div className=\"relative max-w-sm\">\n <svg className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/></svg>\n <input\n type=\"text\"\n placeholder={searchPlaceholder ?? t('crud.list.search', { entities: namePlural.toLowerCase() })}\n value={search ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] pl-8 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n )}\n\n {facets?.map((facet) => {\n const active = activeFilters?.[facet.field]\n return (\n <div key={facet.field} className=\"flex flex-wrap gap-2\">\n <button type=\"button\" onClick={() => onFacetChange?.(facet.field, undefined)} className={pillClass(active == null)}>\n {facet.allLabel ?? t('crud.list.allFacet')}\n </button>\n {facet.options.map((o) => (\n <button key={o.value} type=\"button\" onClick={() => onFacetChange?.(facet.field, o.value)} className={pillClass(active === o.value)}>\n {o.label}\n </button>\n ))}\n </div>\n )\n })}\n\n {isInitialLoad ? (\n display === 'cards' ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 2 }).map((_, i) => (\n <Card key={i} className=\"overflow-hidden\">\n <div className=\"p-5 space-y-3\">\n <div className=\"h-5 w-2/3 animate-pulse rounded bg-muted\" />\n <div className=\"space-y-2\">\n <div className=\"flex justify-between\"><div className=\"h-4 w-20 animate-pulse rounded bg-muted\" /><div className=\"h-4 w-16 animate-pulse rounded bg-muted\" /></div>\n <div className=\"flex justify-between\"><div className=\"h-4 w-24 animate-pulse rounded bg-muted\" /><div className=\"h-4 w-12 animate-pulse rounded bg-muted\" /></div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n ) : (\n <DataTable columns={tanColumns} data={[]} loading skeletonRows={3} />\n )\n ) : isEmpty ? (\n <DataTable\n columns={tanColumns}\n data={[]}\n emptyMessage={emptyMessage ?? t('crud.list.empty', { entities: namePlural.toLowerCase() })}\n />\n ) : display === 'cards' ? (\n <CrudCardGrid\n items={items ?? []}\n entityDef={entityDef as EntityDef<any>}\n onEdit={(item) => onRowClick?.(item as T)}\n onDelete={(item) => onDelete?.(item as T)}\n />\n ) : (\n <DataTable\n columns={tanColumns}\n data={items ?? []}\n onRowClick={(row) => onRowClick?.(row as T)}\n />\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { usePluginRuntimeOptional, getWidgetsForZone, resolvePluginComponent } from '@fayz-ai/core'\n\n/** Renders all plugin widgets registered for a zone, in order. Plugins fill\n * these slots (detail-tab zones, page zones) without the host knowing them. */\nexport function WidgetSlot({\n zone,\n contextOverrides,\n ...props\n}: { zone: string; contextOverrides?: Record<string, unknown> } & Record<string, unknown>) {\n const runtime = usePluginRuntimeOptional()\n if (!runtime) return null\n const widgets = getWidgetsForZone(runtime, zone, contextOverrides as never)\n if (!widgets.length) return null\n return (\n <>\n {widgets.map((widget, i) => {\n const Component = resolvePluginComponent(widget) as React.ComponentType<Record<string, unknown>> | undefined\n if (!Component) return null\n const w = widget as unknown as { config?: unknown; plugin?: unknown; props?: Record<string, unknown> }\n // Pass BOTH contracts: the saas-core widget contract (config/runtime/\n // plugin/widget) the de-bridged plugins expect, AND the spread props\n // that native archetype zones use.\n return (\n <Component\n key={widget.id ?? `${zone}-${i}`}\n config={w.config}\n runtime={{ ...runtime.context, ...(contextOverrides ?? {}) }}\n plugin={w.plugin}\n widget={widget}\n {...(w.props ?? {})}\n {...props}\n />\n )\n })}\n </>\n )\n}\n","// ---------------------------------------------------------------------------\n// Standalone Schedule CRUD Service\n// Works outside the agenda plugin context — uses Supabase directly.\n// ---------------------------------------------------------------------------\n\nimport { getCoreSchemaClient as getCoreClient } from '../supabase/client'\nimport { useOrganizationStore } from '../org'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ScheduleRecord {\n id: string\n tenantId: string\n kind: string\n assigneeId: string | null\n locationId: string | null\n dayOfWeek: number | null\n specificDate: string | null\n startsAt: string\n endsAt: string\n isActive: boolean\n metadata: Record<string, unknown>\n}\n\nexport interface SaveScheduleInput {\n assigneeId: string\n locationId?: string\n dayOfWeek?: number\n specificDate?: string\n startsAt: string\n endsAt: string\n isActive?: boolean\n kind?: string\n}\n\n/** Advanced settings stored per schedule block in the metadata jsonb column. */\nexport interface BlockSettings {\n bufferMinutes?: number\n allowedServiceIds?: string[]\n maxConcurrent?: number\n minAdvanceHours?: number\n maxAdvanceDays?: number\n label?: string\n locationId?: string\n}\n\n/** Extract BlockSettings from a schedule record's metadata. */\nexport function parseBlockSettings(metadata: Record<string, unknown>): BlockSettings {\n return {\n bufferMinutes: typeof metadata.bufferMinutes === 'number' ? metadata.bufferMinutes : undefined,\n allowedServiceIds: Array.isArray(metadata.allowedServiceIds) ? metadata.allowedServiceIds : undefined,\n maxConcurrent: typeof metadata.maxConcurrent === 'number' ? metadata.maxConcurrent : undefined,\n minAdvanceHours: typeof metadata.minAdvanceHours === 'number' ? metadata.minAdvanceHours : undefined,\n maxAdvanceDays: typeof metadata.maxAdvanceDays === 'number' ? metadata.maxAdvanceDays : undefined,\n label: typeof metadata.label === 'string' ? metadata.label : undefined,\n locationId: typeof metadata.locationId === 'string' ? metadata.locationId : undefined,\n }\n}\n\n/** Merge BlockSettings into existing metadata object. */\nexport function mergeBlockSettings(metadata: Record<string, unknown>, settings: BlockSettings): Record<string, unknown> {\n const merged = { ...metadata }\n // Only set defined values, remove undefined ones to keep metadata clean\n for (const [key, value] of Object.entries(settings)) {\n if (value !== undefined && value !== null && !(Array.isArray(value) && value.length === 0)) {\n merged[key] = value\n } else {\n delete merged[key]\n }\n }\n return merged\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getTenantId(): string {\n const id = useOrganizationStore.getState().currentOrg?.id\n if (!id) throw new Error('No active tenant')\n return id\n}\n\nfunction mapRow(row: Record<string, unknown>): ScheduleRecord {\n const r: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row)) {\n r[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return r as unknown as ScheduleRecord\n}\n\n// ---------------------------------------------------------------------------\n// Service functions\n// ---------------------------------------------------------------------------\n\nexport async function getSchedules(\n assigneeId: string,\n kind = 'working_hours',\n): Promise<ScheduleRecord[]> {\n const core = getCoreClient()\n const { data, error } = await core\n .from('schedules')\n .select('*')\n .eq('kind', kind)\n .eq('assignee_id', assigneeId)\n .order('day_of_week')\n .order('starts_at')\n\n if (error) throw error\n return (data ?? []).map(mapRow)\n}\n\nexport async function saveSchedule(input: SaveScheduleInput): Promise<ScheduleRecord> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n const { data, error } = await core\n .from('schedules')\n .insert({\n tenant_id: tenantId,\n kind: input.kind ?? 'working_hours',\n assignee_id: input.assigneeId,\n location_id: input.locationId ?? null,\n day_of_week: input.dayOfWeek ?? null,\n specific_date: input.specificDate ?? null,\n starts_at: input.startsAt,\n ends_at: input.endsAt,\n is_active: input.isActive ?? true,\n })\n .select('*')\n .single()\n\n if (error) throw error\n return mapRow(data as Record<string, unknown>)\n}\n\nexport async function deleteSchedule(id: string): Promise<void> {\n const core = getCoreClient()\n const { error } = await core.from('schedules').delete().eq('id', id)\n if (error) throw error\n}\n\n/**\n * Replace all weekly schedules (day_of_week based) for an assignee.\n * Deletes existing weekly entries and creates new ones in a single flow.\n */\nexport async function replaceWeeklySchedules(\n assigneeId: string,\n week: Record<number, { enabled: boolean; periods: { startsAt: string; endsAt: string; settings?: BlockSettings }[] }>,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n // Delete existing weekly schedules (day_of_week NOT NULL, specific_date IS NULL)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .not('day_of_week', 'is', null)\n .is('specific_date', null)\n\n if (delErr) throw delErr\n\n // Build insert rows\n const rows: Record<string, unknown>[] = []\n for (const [dayStr, day] of Object.entries(week)) {\n if (!day.enabled) continue\n for (const period of day.periods) {\n const metadata = period.settings ? mergeBlockSettings({}, period.settings) : {}\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: assigneeId,\n day_of_week: Number(dayStr),\n specific_date: null,\n starts_at: period.startsAt,\n ends_at: period.endsAt,\n is_active: true,\n metadata,\n })\n }\n }\n\n if (rows.length > 0) {\n const { error: insErr } = await core.from('schedules').insert(rows)\n if (insErr) throw insErr\n }\n}\n\n/**\n * Enumerate all dates in a range (inclusive).\n */\nfunction eachDate(startDate: string, endDate: string): string[] {\n const dates: string[] = []\n const current = new Date(startDate + 'T00:00:00Z')\n const end = new Date(endDate + 'T00:00:00Z')\n while (current <= end) {\n dates.push(current.toISOString().slice(0, 10))\n current.setUTCDate(current.getUTCDate() + 1)\n }\n return dates\n}\n\n/**\n * Save a date-range exception.\n * type: 'unavailable' marks days off, 'available' sets custom hours.\n * Stores notes and range info in metadata for retrieval.\n */\nexport async function saveException(input: {\n assigneeId: string\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes?: string\n settings?: BlockSettings\n kind?: string\n}): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n const kind = input.kind ?? 'working_hours'\n const dates = eachDate(input.startDate, input.endDate)\n const isRange = dates.length > 1\n const meta = mergeBlockSettings(\n {\n ...(input.notes ? { notes: input.notes } : {}),\n ...(isRange ? { rangeStart: input.startDate, rangeEnd: input.endDate } : {}),\n exceptionType: input.type,\n },\n input.settings ?? {},\n )\n\n // Delete existing exceptions for all dates in range (single query)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', input.assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (delErr) throw delErr\n\n const rows: Record<string, unknown>[] = []\n\n if (input.type === 'unavailable') {\n // One sentinel row per date with is_active: false\n for (const date of dates) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: '00:00',\n ends_at: '00:00',\n is_active: false,\n metadata: meta,\n })\n }\n } else {\n // Custom available hours for each date\n for (const date of dates) {\n for (const p of input.periods) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: p.startsAt,\n ends_at: p.endsAt,\n is_active: true,\n metadata: meta,\n })\n }\n }\n }\n\n if (rows.length > 0) {\n const { error } = await core.from('schedules').insert(rows)\n if (error) throw error\n }\n}\n\n/**\n * Delete an exception by its start date.\n * If it was part of a range, deletes all dates in that range.\n */\nexport async function deleteException(\n assigneeId: string,\n startDate: string,\n endDate?: string,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const dates = eachDate(startDate, endDate ?? startDate)\n const { error } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (error) throw error\n}\n","// ---------------------------------------------------------------------------\n// Schedule Block Config Registry\n// Lightweight global config — set by the agenda plugin, read by ScheduleEditor.\n// No React context needed. Graceful degradation when not configured.\n// ---------------------------------------------------------------------------\n\nexport interface ScheduleBlockConfig {\n defaults: {\n bufferMinutes: number\n maxConcurrent: number\n minAdvanceHours: number\n maxAdvanceDays: number\n }\n /** Available services for the multi-select filter. */\n services?: { id: string; name: string }[]\n showServices?: boolean\n showConcurrent?: boolean\n showBookingWindow?: boolean\n /** Available locations for per-block assignment. */\n locations?: { id: string; name: string }[]\n showLocations?: boolean\n /** Lazy fetcher — called when locations are needed but not yet loaded. */\n fetchLocations?: () => Promise<{ id: string; name: string }[]>\n}\n\nlet globalConfig: ScheduleBlockConfig | null = null\nconst listeners = new Set<() => void>()\n\nexport function setScheduleBlockConfig(config: ScheduleBlockConfig): void {\n globalConfig = config\n listeners.forEach((fn) => fn())\n}\n\nexport function getScheduleBlockConfig(): ScheduleBlockConfig | null {\n return globalConfig\n}\n\n/** Subscribe to config changes. Returns unsubscribe function. */\nexport function subscribeScheduleBlockConfig(listener: () => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n","import React, { useRef, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ChevronDown } from 'lucide-react'\nimport type { BlockSettings } from '../../lib/schedule-service'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ninterface BlockSettingsPopoverProps {\n settings: BlockSettings\n onChange: (settings: BlockSettings) => void\n config: ScheduleBlockConfig\n /** Ref to the trigger element for positioning */\n triggerRef: React.RefObject<HTMLElement | null>\n open: boolean\n onClose: () => void\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function BlockSettingsPopover({\n settings,\n onChange,\n config,\n triggerRef,\n open,\n onClose,\n}: BlockSettingsPopoverProps) {\n const t = useTranslation()\n const popoverRef = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!open || !triggerRef.current) return\n const rect = triggerRef.current.getBoundingClientRect()\n const popW = 280\n let left = rect.left + rect.width / 2 - popW / 2\n if (left + popW > window.innerWidth - 12) left = window.innerWidth - popW - 12\n if (left < 8) left = 8\n setPos({ top: rect.bottom + 6, left })\n }, [open, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (popoverRef.current?.contains(e.target as Node)) return\n if (triggerRef.current?.contains(e.target as Node)) return\n onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open, onClose, triggerRef])\n\n if (!open) return null\n\n const showServices = config.showServices !== false && config.services && config.services.length > 0\n const showConcurrent = config.showConcurrent !== false\n const showBookingWindow = config.showBookingWindow !== false\n const showLocations = config.showLocations === true && config.locations && config.locations.length > 0\n\n function update(patch: Partial<BlockSettings>) {\n onChange({ ...settings, ...patch })\n }\n\n return createPortal(\n <div\n ref={popoverRef}\n style={{ position: 'fixed', top: pos.top, left: pos.left, zIndex: 9999 }}\n className=\"fayz-glass-surface w-[280px] rounded-xl border bg-popover shadow-xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b\">\n <span className=\"text-xs font-semibold\">{t('schedule.blockSettings.title')}</span>\n <button type=\"button\" onClick={onClose} className=\"p-0.5 rounded text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n <div className=\"p-3 space-y-3\">\n {/* Location select */}\n {showLocations && (\n <LocationSelect\n locations={config.locations!}\n value={settings.locationId}\n onChange={(id) => update({ locationId: id || undefined })}\n />\n )}\n\n {/* Services multi-select */}\n {showServices && (\n <ServiceSelect\n services={config.services!}\n selected={settings.allowedServiceIds ?? []}\n onChange={(ids) => update({ allowedServiceIds: ids.length > 0 ? ids : undefined })}\n />\n )}\n\n {/* Max concurrent */}\n {showConcurrent && (\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxConcurrent')}</label>\n <div className=\"flex items-center gap-2 mt-1\">\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: Math.max(1, (settings.maxConcurrent ?? config.defaults.maxConcurrent) - 1) })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n -\n </button>\n <span className=\"text-sm font-medium w-6 text-center\">\n {settings.maxConcurrent ?? config.defaults.maxConcurrent}\n </span>\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: (settings.maxConcurrent ?? config.defaults.maxConcurrent) + 1 })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n +\n </button>\n </div>\n </div>\n )}\n\n {/* Booking window */}\n {showBookingWindow && (\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.minAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={0}\n value={settings.minAdvanceHours ?? config.defaults.minAdvanceHours}\n onChange={(e) => update({ minAdvanceHours: Number(e.target.value) || 0 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.hrs')}</span>\n </div>\n </div>\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={1}\n value={settings.maxAdvanceDays ?? config.defaults.maxAdvanceDays}\n onChange={(e) => update({ maxAdvanceDays: Number(e.target.value) || 30 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.days')}</span>\n </div>\n </div>\n </div>\n )}\n\n {/* Label */}\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.label')}</label>\n <input\n type=\"text\"\n value={settings.label ?? ''}\n onChange={(e) => update({ label: e.target.value || undefined })}\n placeholder={t('schedule.blockSettings.labelPlaceholder')}\n className=\"mt-1 w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs placeholder:text-muted-foreground/40\"\n />\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Location select (custom dropdown)\n// ---------------------------------------------------------------------------\n\nfunction LocationSelect({\n locations,\n value,\n onChange,\n}: {\n locations: { id: string; name: string }[]\n value: string | undefined\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const current = value ? locations.find((l) => l.id === value) : null\n const label = current ? current.name : t('schedule.blockSettings.noLocation')\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.location')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={current ? '' : 'text-muted-foreground'}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => { onChange(''); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${!value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.noLocation')}\n </button>\n {locations.map((l) => (\n <button\n key={l.id}\n type=\"button\"\n onClick={() => { onChange(l.id); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${l.id === value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {l.name}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\nfunction ServiceSelect({\n services,\n selected,\n onChange,\n}: {\n services: { id: string; name: string }[]\n selected: string[]\n onChange: (ids: string[]) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const allSelected = selected.length === 0\n const label = allSelected\n ? t('schedule.blockSettings.allServices')\n : selected.length === 1\n ? services.find((s) => s.id === selected[0])?.name ?? t('schedule.blockSettings.oneService')\n : t('schedule.blockSettings.nServices', { count: selected.length })\n\n function toggle(id: string) {\n onChange(selected.includes(id) ? selected.filter((s) => s !== id) : [...selected, id])\n }\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.allowedServices')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={allSelected ? 'text-muted-foreground' : ''}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => onChange([])}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${allSelected ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.allServices')}\n </button>\n {services.map((s) => {\n const checked = selected.includes(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => toggle(s.id)}\n className={`flex items-center gap-2 w-full px-2.5 py-1.5 text-xs text-left transition-colors ${checked ? 'bg-primary/5' : 'hover:bg-muted/50'}`}\n >\n <span className={`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border ${\n checked ? 'border-primary bg-primary text-primary-foreground' : 'border-muted-foreground/30'\n }`}>\n {checked && <svg className=\"h-2.5 w-2.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>}\n </span>\n <span className=\"truncate\">{s.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback, useRef, useSyncExternalStore } from 'react'\nimport { Clock, Plus, Trash2, Copy, Save, CalendarOff, CalendarPlus, Check, Settings, X } from 'lucide-react'\nimport { toast } from '@fayz-ai/ui'\nimport {\n getSchedules,\n replaceWeeklySchedules,\n saveException,\n deleteException,\n parseBlockSettings,\n} from '../../lib/schedule-service'\nimport type { ScheduleRecord, BlockSettings } from '../../lib/schedule-service'\nimport { getScheduleBlockConfig, subscribeScheduleBlockConfig } from '../../lib/schedule-config'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\nimport { BlockSettingsPopover } from './BlockSettingsPopover'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { TimePicker } from '@fayz-ai/ui'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@fayz-ai/ui'\nimport { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter, ModalTitle, ModalDescription } from '@fayz-ai/ui'\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DAY_KEYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']\nconst WEEK_ORDER = [1, 2, 3, 4, 5, 6, 0] // Mon–Sun display order\n\ninterface Period {\n id?: string\n startsAt: string\n endsAt: string\n settings?: BlockSettings\n}\n\ninterface DaySchedule {\n enabled: boolean\n periods: Period[]\n}\n\ntype WeekSchedule = Record<number, DaySchedule>\n\ninterface ExceptionEntry {\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction schedulesToWeek(schedules: ScheduleRecord[]): WeekSchedule {\n const week: WeekSchedule = {}\n for (let i = 0; i < 7; i++) {\n week[i] = { enabled: false, periods: [] }\n }\n for (const s of schedules) {\n if (s.dayOfWeek == null || s.specificDate != null) continue\n const day = week[s.dayOfWeek]\n if (s.isActive) {\n day.enabled = true\n const settings = parseBlockSettings(s.metadata ?? {})\n const hasSettings = Object.values(settings).some((v) => v !== undefined)\n day.periods.push({\n id: s.id,\n startsAt: s.startsAt,\n endsAt: s.endsAt,\n settings: hasSettings ? settings : undefined,\n })\n }\n }\n for (const day of Object.values(week)) {\n day.periods.sort((a, b) => a.startsAt.localeCompare(b.startsAt))\n }\n return week\n}\n\nfunction schedulesToExceptions(schedules: ScheduleRecord[]): ExceptionEntry[] {\n // Group by range key (rangeStart–rangeEnd or single date)\n const map = new Map<string, ExceptionEntry>()\n for (const s of schedules) {\n if (!s.specificDate) continue\n const meta = (s.metadata ?? {}) as Record<string, unknown>\n const rangeStart = (meta.rangeStart as string) ?? s.specificDate\n const rangeEnd = (meta.rangeEnd as string) ?? s.specificDate\n const key = `${rangeStart}__${rangeEnd}`\n const exType = (meta.exceptionType as string) === 'available' ? 'available' : 'unavailable'\n const notes = (meta.notes as string) ?? ''\n\n const existing = map.get(key)\n if (!existing) {\n map.set(key, {\n startDate: rangeStart,\n endDate: rangeEnd,\n type: exType,\n periods: s.isActive ? [{ startsAt: s.startsAt, endsAt: s.endsAt }] : [],\n notes,\n })\n } else if (s.isActive && s.specificDate === rangeStart) {\n existing.periods.push({ startsAt: s.startsAt, endsAt: s.endsAt })\n }\n }\n return Array.from(map.values()).sort((a, b) => a.startDate.localeCompare(b.startDate))\n}\n\nfunction formatDate(dateStr: string): string {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// PeriodRow — single time block as a horizontal row\n// ---------------------------------------------------------------------------\n\ninterface PeriodRowProps {\n period: Period\n dayOfWeek: number\n blockConfig: ScheduleBlockConfig | null\n settingsOpen: boolean\n onUpdateTime: (field: 'startsAt' | 'endsAt', value: string) => void\n onUpdateBuffer: (value: number) => void\n onUpdateSettings: (settings: BlockSettings) => void\n onRemove: () => void\n onAddBlock: () => void\n onCopyToAll: () => void\n onToggleSettings: () => void\n onCloseSettings: () => void\n}\n\nfunction PeriodRow({\n period, blockConfig, dayOfWeek,\n settingsOpen, onUpdateTime, onUpdateBuffer, onUpdateSettings,\n onRemove, onCopyToAll, onToggleSettings, onCloseSettings,\n onAddBlock,\n}: PeriodRowProps) {\n const t = useTranslation()\n const gearRef = useRef<HTMLButtonElement>(null)\n const bufferValue = period.settings?.bufferMinutes ?? blockConfig?.defaults.bufferMinutes ?? 0\n const hasCustomSettings = period.settings && Object.entries(period.settings).some(\n ([k, v]) => k !== 'bufferMinutes' && v !== undefined,\n )\n const dayName = t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-1.5 group\">\n {/* Label */}\n {period.settings?.label && (\n <span className=\"text-[10px] font-medium text-primary bg-primary/10 rounded-full px-2 py-0.5 shrink-0\">\n {period.settings.label}\n </span>\n )}\n\n {/* Time range */}\n <TimePicker value={period.startsAt} onChange={(v) => onUpdateTime('startsAt', v)} interval={30} className=\"w-[90px]\" />\n <span className=\"text-xs text-muted-foreground/50\">-</span>\n <TimePicker value={period.endsAt} onChange={(v) => onUpdateTime('endsAt', v)} interval={30} min={period.startsAt} className=\"w-[90px]\" />\n\n {/* Buffer pill */}\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1 rounded-full border bg-muted/30 px-2 py-1 shrink-0\">\n <input\n type=\"number\"\n min={0}\n max={120}\n value={bufferValue}\n onChange={(e) => onUpdateBuffer(Number(e.target.value) || 0)}\n className=\"w-8 bg-transparent text-xs text-center tabular-nums outline-none\"\n />\n <span className=\"text-[10px] text-muted-foreground\">{t('schedule.editor.min')}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.bufferTooltip')}</TooltipContent>\n </Tooltip>\n\n {/* Actions */}\n <div className=\"flex items-center gap-0.5 shrink-0 ml-auto\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onRemove}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-destructive hover:bg-destructive/5 transition-colors\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.removeInterval')}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onAddBlock}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.newInterval', { day: dayName })}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onCopyToAll}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Copy className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.copyToAll')}</TooltipContent>\n </Tooltip>\n\n {blockConfig && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button ref={gearRef} type=\"button\" onClick={onToggleSettings}\n className={`p-1.5 rounded-md transition-colors ${\n hasCustomSettings\n ? 'text-primary bg-primary/5'\n : 'text-muted-foreground/30 hover:text-foreground hover:bg-muted'\n }`}>\n <Settings className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.blockSettings.title')}</TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {/* Settings popover */}\n {blockConfig && (\n <BlockSettingsPopover\n settings={period.settings ?? {}}\n onChange={onUpdateSettings}\n config={blockConfig}\n triggerRef={gearRef}\n open={settingsOpen}\n onClose={onCloseSettings}\n />\n )}\n </div>\n </TooltipProvider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main Component\n// ---------------------------------------------------------------------------\n\ninterface ScheduleEditorProps {\n assigneeId: string\n}\n\nexport function ScheduleEditor({ assigneeId }: ScheduleEditorProps) {\n const t = useTranslation()\n const [week, setWeek] = useState<WeekSchedule>({})\n const [exceptions, setExceptions] = useState<ExceptionEntry[]>([])\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [showAddException, setShowAddException] = useState(false)\n const blockConfig = useSyncExternalStore(subscribeScheduleBlockConfig, getScheduleBlockConfig)\n const [settingsPopover, setSettingsPopover] = useState<{ dayOfWeek: number; idx: number } | null>(null)\n const [weekDirty, setWeekDirty] = useState(false)\n\n // Lazy-fetch locations when showLocations is enabled but locations aren't loaded yet\n useEffect(() => {\n if (blockConfig?.showLocations && (!blockConfig.locations || blockConfig.locations.length === 0) && blockConfig.fetchLocations) {\n blockConfig.fetchLocations().catch(() => {})\n }\n }, [blockConfig?.showLocations, blockConfig?.locations?.length])\n\n // New exception form state\n const [newExStartDate, setNewExStartDate] = useState('')\n const [newExEndDate, setNewExEndDate] = useState('')\n const [newExType, setNewExType] = useState<'unavailable' | 'available'>('unavailable')\n const [newExPeriods, setNewExPeriods] = useState([{ startsAt: '09:00', endsAt: '17:00' }])\n const [newExNotes, setNewExNotes] = useState('')\n const [savingException, setSavingException] = useState(false)\n\n const loadData = useCallback(async () => {\n setLoading(true)\n try {\n const data = await getSchedules(assigneeId)\n setWeek(schedulesToWeek(data))\n setExceptions(schedulesToExceptions(data))\n setWeekDirty(false)\n } catch {\n toast.error(t('schedule.editor.failedToLoad'))\n }\n setLoading(false)\n }, [assigneeId])\n\n useEffect(() => {\n loadData()\n }, [loadData])\n\n // --- Weekly hours handlers ---\n\n function markDirty() { setWeekDirty(true) }\n\n function toggleDay(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => ({\n ...prev,\n [dayOfWeek]: {\n ...prev[dayOfWeek],\n enabled: !prev[dayOfWeek]?.enabled,\n periods: prev[dayOfWeek]?.enabled ? [] : [{ startsAt: '09:00', endsAt: '18:00' }],\n },\n }))\n }\n\n function updatePeriod(dayOfWeek: number, idx: number, field: 'startsAt' | 'endsAt', value: string) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], [field]: value }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function addPeriod(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const last = day.periods[day.periods.length - 1]\n day.periods = [...day.periods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }]\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function removePeriod(dayOfWeek: number, idx: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n day.periods = day.periods.filter((_, i) => i !== idx)\n if (day.periods.length === 0) day.enabled = false\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function updatePeriodSettings(dayOfWeek: number, idx: number, settings: BlockSettings) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], settings }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function updateBufferMinutes(dayOfWeek: number, idx: number, value: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n const existing = periods[idx].settings ?? {}\n periods[idx] = { ...periods[idx], settings: { ...existing, bufferMinutes: value || undefined } }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function copyToAll(sourceDayOfWeek: number) {\n markDirty()\n const source = week[sourceDayOfWeek]\n if (!source) return\n setWeek((prev) => {\n const next = { ...prev }\n for (let i = 0; i < 7; i++) {\n if (i === sourceDayOfWeek) continue\n next[i] = {\n enabled: source.enabled,\n periods: source.periods.map((p) => ({ startsAt: p.startsAt, endsAt: p.endsAt, settings: p.settings ? { ...p.settings } : undefined })),\n }\n }\n return next\n })\n }\n\n async function handleSaveWeekly() {\n setSaving(true)\n try {\n await replaceWeeklySchedules(assigneeId, week)\n toast.success(t('schedule.editor.saved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSave'), { description: err?.message })\n }\n setSaving(false)\n }\n\n // --- Exception handlers ---\n\n async function handleAddException() {\n if (!newExStartDate) {\n toast.error(t('schedule.editor.selectStartDate'))\n return\n }\n const endDate = newExEndDate || newExStartDate\n if (endDate < newExStartDate) {\n toast.error(t('schedule.editor.endDateAfterStart'))\n return\n }\n setSavingException(true)\n try {\n await saveException({\n assigneeId,\n startDate: newExStartDate,\n endDate,\n type: newExType,\n periods: newExType === 'unavailable' ? [] : newExPeriods,\n notes: newExNotes || undefined,\n })\n toast.success(t('schedule.editor.exceptionAdded'))\n setShowAddException(false)\n setNewExStartDate('')\n setNewExEndDate('')\n setNewExType('unavailable')\n setNewExPeriods([{ startsAt: '09:00', endsAt: '17:00' }])\n setNewExNotes('')\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSaveException'), { description: err?.message })\n }\n setSavingException(false)\n }\n\n async function handleDeleteException(startDate: string, endDate: string) {\n try {\n await deleteException(assigneeId, startDate, endDate)\n toast.success(t('schedule.editor.exceptionRemoved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToDelete'), { description: err?.message })\n }\n }\n\n // --- Render ---\n\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-36\" /><Skeleton className=\"h-3 w-48\" /></div>\n </div>\n <Skeleton className=\"h-8 w-20 rounded-md\" />\n </div>\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {Array.from({ length: 7 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <Skeleton className=\"h-5 w-5 rounded-full\" />\n <Skeleton className=\"h-4 w-8\" />\n {i < 5 ? (\n <>\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n </>\n ) : (\n <Skeleton className=\"h-4 w-20\" />\n )}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-32\" /><Skeleton className=\"h-3 w-44\" /></div>\n </div>\n <Skeleton className=\"h-8 w-32 rounded-md\" />\n </div>\n <Card><CardContent className=\"flex items-center justify-center py-8\"><Skeleton className=\"h-3 w-48\" /></CardContent></Card>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* ---- Weekly Working Hours ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10\">\n <Clock className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.weeklyTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.weeklyDescription')}</p>\n </div>\n </div>\n {weekDirty && (\n <Button size=\"sm\" onClick={handleSaveWeekly} disabled={saving}>\n <Save className=\"h-4 w-4 mr-1.5\" />\n {saving ? t('common.saving') : t('common.save')}\n </Button>\n )}\n </div>\n\n {/* Day rows */}\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {WEEK_ORDER.map((dayOfWeek) => {\n const day = week[dayOfWeek] ?? { enabled: false, periods: [] }\n return (\n <div\n key={dayOfWeek}\n className={`flex items-start gap-4 px-4 py-3 transition-colors ${day.enabled ? '' : 'bg-muted/20'}`}\n >\n {/* Day toggle checkbox + label */}\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex items-center gap-2.5 w-20 shrink-0 pt-1.5\"\n >\n <span className={`flex h-5 w-5 shrink-0 items-center justify-center rounded-full transition-all ${\n day.enabled\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'border-2 border-muted-foreground/25 hover:border-muted-foreground/40'\n }`}>\n {day.enabled && <Check className=\"h-3 w-3\" strokeWidth={3} />}\n </span>\n <span className={`text-sm font-medium ${day.enabled ? '' : 'text-muted-foreground/40'}`}>\n {t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)}\n </span>\n </button>\n\n {/* Content */}\n {day.enabled ? (\n <div className=\"flex-1 space-y-2\">\n {day.periods.map((period, idx) => (\n <PeriodRow\n key={idx}\n period={period}\n dayOfWeek={dayOfWeek}\n blockConfig={blockConfig}\n settingsOpen={settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx}\n onUpdateTime={(field, v) => updatePeriod(dayOfWeek, idx, field, v)}\n onUpdateBuffer={(v) => updateBufferMinutes(dayOfWeek, idx, v)}\n onUpdateSettings={(s) => updatePeriodSettings(dayOfWeek, idx, s)}\n onRemove={() => removePeriod(dayOfWeek, idx)}\n onAddBlock={() => addPeriod(dayOfWeek)}\n onCopyToAll={() => copyToAll(dayOfWeek)}\n onToggleSettings={() => setSettingsPopover(\n settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx ? null : { dayOfWeek, idx }\n )}\n onCloseSettings={() => setSettingsPopover(null)}\n />\n ))}\n </div>\n ) : (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-2 pt-1.5\">\n <span className=\"text-sm text-muted-foreground/40\">{t('schedule.editor.unavailable')}</span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex h-6 w-6 items-center justify-center rounded-full border border-muted-foreground/25 text-muted-foreground/40 hover:border-foreground/40 hover:text-foreground hover:bg-muted transition-colors\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.addHoursFor', { day: t(`schedule.days.${DAY_KEYS[dayOfWeek]}`) })}</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n )}\n </div>\n )\n })}\n </CardContent>\n </Card>\n </div>\n\n {/* ---- Date Exceptions ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-orange-500/10\">\n <CalendarOff className=\"h-4 w-4 text-orange-600\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.exceptionsTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.exceptionsDescription')}</p>\n </div>\n </div>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setShowAddException(true)}\n >\n <CalendarPlus className=\"h-4 w-4 mr-1.5\" />\n {t('schedule.editor.addException')}\n </Button>\n </div>\n\n {/* Add exception modal */}\n <Modal open={showAddException} onOpenChange={setShowAddException}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle>{t('schedule.editor.addException')}</ModalTitle>\n <ModalDescription>{t('schedule.editor.exceptionsDescription')}</ModalDescription>\n </ModalHeader>\n\n <ModalBody className=\"space-y-5\">\n {/* Date range */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.startDate')}</label>\n <DatePicker\n value={newExStartDate}\n onChange={(v) => {\n setNewExStartDate(v)\n if (!newExEndDate || v > newExEndDate) setNewExEndDate(v)\n }}\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.endDate')}</label>\n <DatePicker\n value={newExEndDate || newExStartDate}\n onChange={setNewExEndDate}\n />\n </div>\n </div>\n\n {/* Type — segmented tabs */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.type')}</label>\n <Tabs value={newExType} onValueChange={(v) => setNewExType(v as 'unavailable' | 'available')}>\n <TabsList className=\"h-9 w-full\">\n <TabsTrigger value=\"unavailable\" className=\"text-xs gap-1.5 flex-1\">\n <CalendarOff className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.unavailable')}\n </TabsTrigger>\n <TabsTrigger value=\"available\" className=\"text-xs gap-1.5 flex-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.customHours')}\n </TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {/* Custom hours — only when type=available */}\n {newExType === 'available' && (\n <div className=\"space-y-3\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('schedule.editor.workingHours')}</label>\n {newExPeriods.map((period, idx) => (\n <div key={idx} className=\"flex items-center gap-3\">\n <TimePicker\n value={period.startsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], startsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n className=\"flex-1\"\n />\n <span className=\"text-xs text-muted-foreground shrink-0\">{t('schedule.editor.to')}</span>\n <TimePicker\n value={period.endsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], endsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n min={period.startsAt}\n className=\"flex-1\"\n />\n {newExPeriods.length > 1 && (\n <button\n type=\"button\"\n onClick={() => setNewExPeriods(newExPeriods.filter((_, i) => i !== idx))}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n ))}\n <button\n type=\"button\"\n onClick={() => {\n const last = newExPeriods[newExPeriods.length - 1]\n setNewExPeriods([...newExPeriods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }])\n }}\n className=\"flex items-center gap-1 text-xs text-primary hover:underline\"\n >\n <Plus className=\"h-3 w-3\" /> {t('schedule.editor.addTimeBlock')}\n </button>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.notes')}</label>\n <input\n type=\"text\"\n value={newExNotes}\n onChange={(e) => setNewExNotes(e.target.value)}\n placeholder={t('schedule.editor.notesPlaceholder')}\n className=\"block w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm placeholder:text-muted-foreground/40 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1\"\n />\n </div>\n </ModalBody>\n\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => setShowAddException(false)}>\n {t('common.cancel')}\n </Button>\n <Button onClick={handleAddException} disabled={savingException}>\n <Save className=\"h-3.5 w-3.5 mr-1.5\" />\n {savingException ? t('common.saving') : t('schedule.editor.saveException')}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n\n {/* Exception list */}\n {exceptions.length > 0 ? (\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {exceptions.map((ex) => {\n const isRange = ex.startDate !== ex.endDate\n const dateLabel = isRange\n ? `${formatDate(ex.startDate)} — ${formatDate(ex.endDate)}`\n : formatDate(ex.startDate)\n return (\n <div key={ex.startDate + ex.endDate} className=\"flex items-center justify-between px-4 py-3 group\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {/* Type indicator dot */}\n <span className={`h-2.5 w-2.5 shrink-0 rounded-full ${\n ex.type === 'unavailable' ? 'bg-destructive' : 'bg-success'\n }`} />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"text-sm font-medium\">{dateLabel}</span>\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {ex.type === 'unavailable' ? t('schedule.editor.unavailable') : t('schedule.editor.customHours')}\n </Badge>\n {ex.type === 'available' && ex.periods.length > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {ex.periods.map((p) => `${p.startsAt} — ${p.endsAt}`).join(', ')}\n </span>\n )}\n </div>\n {ex.notes && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{ex.notes}</p>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => handleDeleteException(ex.startDate, ex.endDate)}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0 ml-2\"\n title={t('schedule.editor.removeException')}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n })}\n </CardContent>\n </Card>\n ) : (\n !showAddException && (\n <Card>\n <CardContent className=\"flex items-center justify-center py-8 text-sm text-muted-foreground\">\n {t('schedule.editor.noExceptions')}\n </CardContent>\n </Card>\n )\n )}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Clock, FileText, CalendarDays } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { ScheduleEditor } from './ScheduleEditor'\nimport { useTranslation } from '@fayz-ai/core'\nimport { usePluginRuntimeOptional as usePluginsOptional } from '@fayz-ai/core'\nimport { getWidgetsForZone } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\n// AccessTab is imported from ./AccessTab\n\nexport function ActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.activity.title')}\n description={t('crud.archetype.activity.description')}\n />\n )\n}\n\nexport function DocumentsTab({ item }: { item?: any }) {\n const t = useTranslation()\n const runtime = usePluginsOptional()\n\n // Check if a plugin provides a documents widget (e.g., custom_forms)\n const widgets = runtime ? getWidgetsForZone(runtime, 'person.detail.documents') : []\n\n if (widgets.length > 0 && item) {\n const w = widgets[0]\n const Widget = w.component as React.ComponentType<any>\n return (\n <Widget\n item={item}\n config={w.config}\n runtime={runtime?.context}\n plugin={w.plugin}\n widget={w}\n />\n )\n }\n\n return (\n <ComingSoon\n icon={FileText}\n title={t('crud.archetype.documents.title')}\n description={t('crud.archetype.documents.description')}\n />\n )\n}\n\nexport function FinancialTab({ item }: { item?: any }) {\n const runtime = usePluginsOptional()\n const widgets = runtime ? getWidgetsForZone(runtime, 'person.detail.financial') : []\n if (widgets.length > 0 && item) {\n const w = widgets[0]\n const Widget = w.component as React.ComponentType<any>\n return (\n <Widget\n item={item}\n config={w.config}\n runtime={runtime?.context}\n plugin={w.plugin}\n widget={w}\n />\n )\n }\n return null\n}\n\nexport function ScheduleTab({ item }: { item: any }) {\n const t = useTranslation()\n if (!item?.id) {\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.schedule.title')}\n description={t('crud.archetype.schedule.description')}\n />\n )\n }\n return <ScheduleEditor assigneeId={item.id} />\n}\n\nexport const PERSON_DETAIL_TABS = [\n { id: 'schedule', label: 'Schedule', icon: 'CalendarDays', component: ScheduleTab, visibleFor: ['staff'] },\n { id: 'documents', label: 'Documents', icon: 'FileText', component: DocumentsTab },\n // Per-person financial statement — only shown when the financial plugin contributes\n // its widget (see requiresWidgetZone). Clients = paid invoices; staff = commissions.\n { id: 'financial', label: 'Statement', icon: 'DollarSign', component: FinancialTab, requiresWidgetZone: 'person.detail.financial' },\n { id: 'activity', label: 'Activity', icon: 'Clock', component: ActivityTab },\n]\n","import React from 'react'\nimport { BarChart3, Truck, Tag, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function InventoryTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={BarChart3}\n title={t('crud.archetype.inventory.title')}\n description={t('crud.archetype.inventory.description')}\n />\n )\n}\n\nexport function SuppliersTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Truck}\n title={t('crud.archetype.suppliers.title')}\n description={t('crud.archetype.suppliers.description')}\n />\n )\n}\n\nexport function PricingTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Tag}\n title={t('crud.archetype.pricing.title')}\n description={t('crud.archetype.pricing.description')}\n />\n )\n}\n\nexport function ProductActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.productActivity.title')}\n description={t('crud.archetype.productActivity.description')}\n />\n )\n}\n\nexport const PRODUCT_DETAIL_TABS = [\n { id: 'inventory', label: 'Inventory', component: InventoryTab },\n { id: 'suppliers', label: 'Suppliers', component: SuppliersTab },\n { id: 'pricing', label: 'Pricing', component: PricingTab },\n { id: 'activity', label: 'Activity', component: ProductActivityTab },\n]\n","import React from 'react'\nimport { CalendarDays, Tag, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function AvailabilityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.availability.title')}\n description={t('crud.archetype.availability.description')}\n />\n )\n}\n\nexport function ServicePricingTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Tag}\n title={t('crud.archetype.servicePricing.title')}\n description={t('crud.archetype.servicePricing.description')}\n />\n )\n}\n\nexport function ServiceActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.serviceActivity.title')}\n description={t('crud.archetype.serviceActivity.description')}\n />\n )\n}\n\nexport const SERVICE_DETAIL_TABS = [\n { id: 'availability', label: 'Availability', component: AvailabilityTab },\n { id: 'pricing', label: 'Pricing', component: ServicePricingTab },\n { id: 'activity', label: 'Activity', component: ServiceActivityTab },\n]\n","import React from 'react'\nimport { Users, CalendarDays, BarChart3, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function MembersTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Users}\n title={t('crud.archetype.members.title')}\n description={t('crud.archetype.members.description')}\n />\n )\n}\n\nexport function LocationScheduleTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.locationSchedule.title')}\n description={t('crud.archetype.locationSchedule.description')}\n />\n )\n}\n\nexport function LocationStatsTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={BarChart3}\n title={t('crud.archetype.locationStats.title')}\n description={t('crud.archetype.locationStats.description')}\n />\n )\n}\n\nexport function LocationActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.locationActivity.title')}\n description={t('crud.archetype.locationActivity.description')}\n />\n )\n}\n\nexport const LOCATION_DETAIL_TABS = [\n { id: 'members', label: 'Team', component: MembersTab },\n { id: 'schedule', label: 'Hours', component: LocationScheduleTab },\n { id: 'stats', label: 'Statistics', component: LocationStatsTab },\n { id: 'activity', label: 'Activity', component: LocationActivityTab },\n]\n","import React from 'react'\nimport { ExternalLink } from 'lucide-react'\n\ninterface EntityLinkProps {\n /** The entity ID to link to */\n entityId: string\n /** The base path of the CRUD page (e.g. '/registry/tutors') */\n basePath: string\n /** Display label */\n children: React.ReactNode\n /** Optional className */\n className?: string\n}\n\n/**\n * Reusable link to a CRUD entity detail page.\n * Uses hash-based routing: navigates to `#basePath/entityId`\n */\nexport function EntityLink({ entityId, basePath, children, className }: EntityLinkProps) {\n const href = `#${basePath}/${entityId}`\n\n return (\n <a\n href={href}\n className={`inline-flex items-center gap-1 text-primary hover:underline transition-colors ${className ?? ''}`}\n >\n {children}\n <ExternalLink className=\"h-3 w-3 opacity-50\" />\n </a>\n )\n}\n\n/**\n * Registry of known entity paths by person kind.\n * Projects can extend this via the `registerEntityPath` function.\n */\nconst ENTITY_PATHS: Record<string, string> = {\n customer: '/registry/tutors',\n professional: '/registry/veterinarians',\n organization: '/registry/clinics',\n supplier: '/registry/suppliers',\n staff: '/registry/staff',\n}\n\n/** Register a custom path for a person kind */\nexport function registerEntityPath(kind: string, basePath: string) {\n ENTITY_PATHS[kind] = basePath\n}\n\n/** Get the CRUD base path for a person kind */\nexport function getPersonPath(kind: string): string | null {\n return ENTITY_PATHS[kind] ?? null\n}\n\n/**\n * Smart link that auto-resolves the path based on person kind.\n * Falls back to non-linked text if no path is registered.\n */\nexport function PersonLink({ personId, kind, children, className }: {\n personId: string\n kind: string\n children: React.ReactNode\n className?: string\n}) {\n const basePath = getPersonPath(kind)\n if (!basePath) {\n return <span className={className}>{children}</span>\n }\n return (\n <EntityLink entityId={personId} basePath={basePath} className={className}>\n {children}\n </EntityLink>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { User, Clock, FileText } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { PersonLink } from './EntityLink'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function OwnerTab({ item }: { item: any }) {\n const t = useTranslation()\n const [person, setPerson] = useState<any>(null)\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n const tutorId = item?.tutorId\n if (!tutorId) { setLoading(false); return }\n\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) { setLoading(false); return }\n\n supabase.schema('saas_core')\n .from('persons')\n .select('*')\n .eq('id', tutorId)\n .single()\n .then(({ data }: any) => {\n setPerson(data)\n setLoading(false)\n }, () => setLoading(false))\n }, [item?.tutorId])\n\n if (loading) {\n return (\n <Card>\n <CardContent className=\"py-8 flex justify-center\">\n <div className=\"h-5 w-5 animate-spin rounded-full border-2 border-muted border-t-primary\" />\n </CardContent>\n </Card>\n )\n }\n\n if (!person) {\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <User className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{t('crud.archetype.owner.noOwner')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('crud.archetype.owner.assignHint')}</p>\n </CardContent>\n </Card>\n )\n }\n\n const fields = [\n { label: t('crud.archetype.owner.name'), value: person.name },\n { label: t('crud.archetype.owner.phone'), value: person.phone, href: person.phone ? `tel:${person.phone}` : undefined },\n { label: t('crud.archetype.owner.email'), value: person.email, href: person.email ? `mailto:${person.email}` : undefined },\n { label: t('crud.archetype.owner.document'), value: person.document_number },\n { label: t('crud.archetype.owner.address'), value: [person.address, person.city, person.state].filter(Boolean).join(', ') },\n ].filter((f) => f.value)\n\n return (\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex items-start gap-4 mb-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <User className=\"h-5 w-5\" />\n </div>\n <div className=\"flex-1\">\n <PersonLink personId={person.id} kind={person.kind} className=\"text-base font-semibold\">\n {person.name}\n </PersonLink>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <Badge variant=\"secondary\" className=\"text-[10px] capitalize\">{person.kind}</Badge>\n <Badge variant={person.is_active ? 'default' : 'secondary'} className=\"text-[10px]\">\n {person.is_active ? t('crud.archetype.owner.active') : t('crud.archetype.owner.inactive')}\n </Badge>\n </div>\n </div>\n </div>\n <dl className=\"divide-y\">\n {fields.map((f) => (\n <div key={f.label} className=\"grid grid-cols-3 gap-4 py-2.5\">\n <dt className=\"text-sm text-muted-foreground\">{f.label}</dt>\n <dd className=\"col-span-2 text-sm\">\n {f.href ? (\n <a href={f.href} className=\"text-primary hover:underline\">{f.value}</a>\n ) : f.value}\n </dd>\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n )\n}\n\nexport function SubjectHistoryTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.history.title')}\n description={t('crud.archetype.history.description')}\n />\n )\n}\n\nexport function SubjectDocumentsTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={FileText}\n title={t('crud.archetype.subjectDocuments.title')}\n description={t('crud.archetype.subjectDocuments.description')}\n />\n )\n}\n\nexport const SUBJECT_DETAIL_TABS = [\n { id: 'owner', label: 'Owner', component: OwnerTab },\n { id: 'history', label: 'History', component: SubjectHistoryTab },\n { id: 'documents', label: 'Documents', component: SubjectDocumentsTab },\n]\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Edit, Trash2, Eye, Shield, CalendarDays, FileText, Clock, Package, Users, DollarSign, MapPin, BarChart3, Briefcase, ShoppingBag, FolderOpen, MessageSquare, Route } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Breadcrumb } from '@fayz-ai/ui'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@fayz-ai/ui'\nimport { Separator } from '@fayz-ai/ui'\nimport { WidgetSlot } from '../plugins/WidgetSlot'\nimport { formatCurrency } from '@fayz-ai/core'\nimport { PERSON_DETAIL_TABS } from './archetypes/PersonDetailTabs'\nimport { PRODUCT_DETAIL_TABS } from './archetypes/ProductDetailTabs'\nimport { SERVICE_DETAIL_TABS } from './archetypes/ServiceDetailTabs'\nimport { LOCATION_DETAIL_TABS } from './archetypes/LocationDetailTabs'\nimport { SUBJECT_DETAIL_TABS } from './archetypes/SubjectDetailTabs'\nimport { useTranslation } from '@fayz-ai/core'\nimport { usePluginRuntimeOptional, getWidgetsForZone } from '@fayz-ai/core'\nimport type { EntityDef, FieldDef, FieldGroup, FormLayout, DetailTab } from '@fayz-ai/core'\n\ninterface CrudDetailPageProps {\n entityDef: EntityDef\n item: Record<string, any>\n namePlural: string\n basePath: string\n initialTab?: string\n onBack: () => void\n onEdit?: () => void\n onDelete?: () => void\n feature?: string\n /** Embedded mode — compact hero, no breadcrumb, no hash nav. For use inside modals/panels. */\n embedded?: boolean\n}\n\nfunction formatValue(field: FieldDef, value: any, t?: (key: string) => string): React.ReactNode {\n if (value == null || value === '') return <span className=\"text-muted-foreground/50\">—</span>\n\n if (field.renderCell) return field.renderCell(value, {})\n\n switch (field.type) {\n case 'boolean':\n return (\n <Badge variant={value ? 'default' : 'secondary'}>\n {value ? (t?.('common.yes') ?? 'Yes') : (t?.('common.no') ?? 'No')}\n </Badge>\n )\n case 'currency': {\n const num = typeof value === 'number' ? value : parseFloat(value)\n return isNaN(num) ? value : formatCurrency(num, field.currency)\n }\n case 'color':\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className=\"h-5 w-5 rounded-full border shrink-0\" style={{ backgroundColor: String(value) }} />\n <span className=\"text-xs font-mono text-muted-foreground\">{String(value)}</span>\n </span>\n )\n case 'date':\n try { return new Date(value).toLocaleDateString() } catch { return value }\n case 'datetime':\n try { return new Date(value).toLocaleString() } catch { return value }\n case 'select': {\n const options = (field.options ?? []).map((o) => typeof o === 'string' ? { label: o, value: o } : o)\n const match = options.find((o) => o.value === value)\n return <Badge variant=\"secondary\">{match?.label ?? value}</Badge>\n }\n case 'image':\n return value ? (\n <img src={value} alt=\"\" className=\"h-16 w-16 rounded-lg object-cover\" />\n ) : null\n case 'email':\n return <a href={`mailto:${value}`} className=\"text-primary hover:underline\">{value}</a>\n case 'phone':\n return <a href={`tel:${value}`} className=\"text-primary hover:underline\">{value}</a>\n case 'url':\n return <a href={value} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-primary hover:underline\">{value}</a>\n case 'textarea':\n return <p className=\"whitespace-pre-wrap\">{value}</p>\n default:\n return String(value)\n }\n}\n\nfunction FieldRow({ field, value, t, compact }: { field: FieldDef; value: any; t?: (key: string) => string; compact?: boolean }) {\n return (\n <div className={`grid grid-cols-3 gap-4 ${compact ? 'py-1.5' : 'py-3'}`}>\n <dt className={`font-medium text-muted-foreground ${compact ? 'text-xs' : 'text-sm'}`}>{field.label}</dt>\n <dd className={`col-span-2 text-foreground ${compact ? 'text-xs' : 'text-sm'}`}>{formatValue(field, value, t)}</dd>\n </div>\n )\n}\n\nfunction FieldGroupSection({\n group,\n fields,\n item,\n compact,\n}: {\n group: FieldGroup\n fields: FieldDef[]\n item: Record<string, any>\n compact?: boolean\n}) {\n const tFn = useTranslation()\n const cols = group.columns ?? 2\n\n return (\n <div>\n <h3 className={`font-semibold text-foreground ${compact ? 'text-xs mb-0.5' : 'text-sm mb-1'}`}>{group.label}</h3>\n {group.description && (\n <p className={`text-muted-foreground ${compact ? 'text-[10px] mb-1.5' : 'text-xs mb-3'}`}>{group.description}</p>\n )}\n <Card>\n <CardContent className=\"p-0\">\n <dl className={`grid divide-y ${cols >= 2 ? 'md:grid-cols-2 md:divide-y-0' : ''}`}>\n {fields.map((field) => (\n <div key={field.key} className={compact ? 'px-3' : 'px-5'}>\n <FieldRow field={field} value={item[field.key]} t={tFn} compact={compact} />\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n </div>\n )\n}\n\nfunction OverviewTab({\n entityDef,\n item,\n compact,\n}: {\n entityDef: EntityDef\n item: Record<string, any>\n compact?: boolean\n}) {\n const tFn = useTranslation()\n const detailFields = entityDef.fields.filter(\n (f) => f.showInDetail !== false && f.key !== 'id' && f.key !== entityDef.displayField && f.key !== entityDef.imageField\n )\n\n // Group fields\n const groups = entityDef.fieldGroups ?? []\n const ungroupedFields = detailFields.filter((f) => !f.group)\n\n // Build group → fields map\n const groupFieldMap = new Map<string, FieldDef[]>()\n for (const field of detailFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n }\n }\n\n return (\n <div className={compact ? 'space-y-3' : 'space-y-6'}>\n {/* Ungrouped fields */}\n {ungroupedFields.length > 0 && (\n <Card>\n <CardContent className=\"p-0\">\n <dl className=\"divide-y\">\n {ungroupedFields.map((field) => (\n <div key={field.key} className={compact ? 'px-3' : 'px-5'}>\n <FieldRow field={field} value={item[field.key]} t={tFn} compact={compact} />\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n )}\n\n {/* Grouped fields */}\n {groups.map((group) => {\n const fields = groupFieldMap.get(group.id)\n if (!fields || fields.length === 0) return null\n return (\n <FieldGroupSection key={group.id} group={group} fields={fields} item={item} compact={compact} />\n )\n })}\n\n {/* Catch any grouped fields without a matching FieldGroup definition */}\n {Array.from(groupFieldMap.entries()).map(([groupId, fields]) => {\n if (groups.some((g) => g.id === groupId)) return null\n return (\n <FieldGroupSection\n key={groupId}\n group={{ id: groupId, label: groupId.charAt(0).toUpperCase() + groupId.slice(1) }}\n fields={fields}\n item={item}\n compact={compact}\n />\n )\n })}\n </div>\n )\n}\n\nfunction getArchetypeTabs(layout?: FormLayout, archetypeKind?: string): DetailTab[] {\n let tabs: DetailTab[]\n switch (layout) {\n case 'person':\n tabs = PERSON_DETAIL_TABS\n break\n case 'product':\n tabs = PRODUCT_DETAIL_TABS\n break\n case 'service':\n tabs = SERVICE_DETAIL_TABS\n break\n case 'location':\n tabs = LOCATION_DETAIL_TABS\n break\n case 'subject':\n tabs = SUBJECT_DETAIL_TABS\n break\n default:\n tabs = []\n }\n if (archetypeKind) {\n tabs = tabs.filter((tab) => !tab.visibleFor || tab.visibleFor.includes(archetypeKind))\n }\n return tabs\n}\n\nfunction mergeDetailTabs(archetypeTabs: DetailTab[], entityTabs: DetailTab[]): DetailTab[] {\n const merged = new Map<string, DetailTab>()\n\n for (const tab of entityTabs) merged.set(tab.id, tab)\n for (const tab of archetypeTabs) {\n if (!merged.has(tab.id)) merged.set(tab.id, tab)\n }\n\n return Array.from(merged.values())\n}\n\nfunction normalizeTabId(value?: string): string | undefined {\n return value?.split('?')[0]\n}\n\nfunction resolveActiveTab(initialTab: string | undefined, tabs: DetailTab[]): string {\n const normalized = normalizeTabId(initialTab)\n if (!normalized) return 'overview'\n if (normalized === 'overview') return 'overview'\n\n const direct = tabs.find((tab) => tab.id === normalized)\n if (direct) return direct.id\n\n const alias = tabs.find((tab) => (tab as DetailTab & { aliases?: string[] }).aliases?.includes(normalized))\n return alias?.id ?? 'overview'\n}\n\nconst TAB_ICONS: Record<string, LucideIcon> = {\n Shield, CalendarDays, FileText, Clock, Package, Users, DollarSign, MapPin, BarChart3, Briefcase, ShoppingBag, FolderOpen, MessageSquare, Route,\n}\n\nexport function CrudDetailPage({\n entityDef,\n item,\n namePlural,\n basePath,\n initialTab,\n onBack,\n onEdit,\n onDelete,\n feature,\n embedded,\n}: CrudDetailPageProps) {\n const t = useTranslation()\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const displayValue = item[displayField] ?? 'Untitled'\n const subtitleValue = entityDef.subtitleField ? item[entityDef.subtitleField] : null\n const imageValue = entityDef.imageField ? item[entityDef.imageField] : null\n const initial = typeof displayValue === 'string' ? displayValue.charAt(0).toUpperCase() : '?'\n\n // Merge archetype tabs + custom entity tabs. Entity-specific tabs win by id\n // so vertical apps can replace generic person/product tabs without duplicates.\n const runtime = usePluginRuntimeOptional()\n const archetypeTabs = getArchetypeTabs(entityDef.layout, entityDef.data?.archetypeKind)\n const customTabs = mergeDetailTabs(archetypeTabs, entityDef.detailTabs ?? [])\n // Drop tabs that require a plugin-contributed widget when none is registered\n // (e.g. the financial statement tab only appears when the financial plugin is active).\n .filter((tab) => !tab.requiresWidgetZone || (runtime ? getWidgetsForZone(runtime, tab.requiresWidgetZone).length > 0 : false))\n .filter((tab) => !(tab as DetailTab & { hidden?: boolean }).hidden)\n const entityId = entityDef.name.toLowerCase().replace(/\\s+/g, '-')\n const widgetZone = `${entityId}.detail.tabs`\n\n // Resolve initial tab — allow compatibility aliases, fallback to \"overview\".\n const activeTab = resolveActiveTab(initialTab, customTabs)\n const [selectedTab, setSelectedTab] = useState(activeTab)\n\n useEffect(() => {\n setSelectedTab(activeTab)\n }, [activeTab])\n\n const handleTabChange = useCallback((value: string) => {\n setSelectedTab(value)\n if (embedded) return\n const detailPath = `${basePath}/${item.id}`\n const newHash = value === 'overview' ? detailPath : `${detailPath}/${value}`\n window.history.replaceState(null, '', `#${newHash}`)\n }, [basePath, item.id, embedded])\n\n return (\n <div className={embedded ? 'space-y-4' : 'space-y-6'}>\n {/* Breadcrumb — hidden in embedded mode */}\n {!embedded && <Breadcrumb parent={namePlural} current={displayValue} onBack={onBack} />}\n\n {/* Hero */}\n <div className={`flex items-start ${embedded ? 'gap-3' : 'gap-5'}`}>\n {/* Avatar / Image */}\n {imageValue ? (\n <img\n src={imageValue}\n alt={displayValue}\n className={`shrink-0 object-cover shadow-sm ${embedded ? 'h-10 w-10 rounded-xl' : 'h-20 w-20 rounded-2xl'}`}\n />\n ) : (\n <div className={`flex shrink-0 items-center justify-center bg-primary/10 text-primary font-bold shadow-sm ${embedded ? 'h-10 w-10 rounded-xl text-sm' : 'h-20 w-20 rounded-2xl text-2xl'}`}>\n {initial}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h1 className={`font-bold text-foreground truncate ${embedded ? 'text-base' : 'text-2xl'}`}>{displayValue}</h1>\n {item.status && (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n {typeof item.status === 'string' ? item.status.charAt(0).toUpperCase() + item.status.slice(1) : item.status}\n </Badge>\n )}\n {item.is_active !== undefined && (\n <Badge variant={item.is_active ? 'default' : 'secondary'} className=\"shrink-0\">\n {item.is_active ? t('common.active') : t('common.inactive')}\n </Badge>\n )}\n </div>\n {subtitleValue && (\n <p className={`text-muted-foreground mt-0.5 ${embedded ? 'text-xs' : ''}`}>{subtitleValue}</p>\n )}\n </div>\n\n {(onEdit || onDelete) && (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {onEdit && (\n <Button variant=\"outline\" size={embedded ? 'xs' as any : 'sm'} onClick={onEdit} className={embedded ? 'h-7 px-2 text-xs gap-1' : ''}>\n <Edit className={embedded ? 'h-3 w-3' : 'h-4 w-4 mr-1.5'} />\n {t('common.edit')}\n </Button>\n )}\n {onDelete && (\n <Button variant=\"outline\" size={embedded ? 'xs' as any : 'sm'} className={`text-destructive hover:text-destructive ${embedded ? 'h-7 w-7 p-0' : ''}`} onClick={onDelete}>\n <Trash2 className={embedded ? 'h-3 w-3' : 'h-4 w-4'} />\n </Button>\n )}\n </div>\n )}\n </div>\n\n {!embedded && <Separator />}\n\n {/* Tabs */}\n <Tabs value={selectedTab} onValueChange={handleTabChange}>\n <TabsList className={`max-w-full justify-start overflow-x-auto scrollbar-none${embedded ? ' h-8' : ''}`}>\n <TabsTrigger value=\"overview\" className={`gap-1.5 ${embedded ? 'text-xs px-2 py-1' : ''}`}>\n <Eye className={embedded ? 'h-3 w-3' : 'h-3.5 w-3.5'} />\n {t('common.overview')}\n </TabsTrigger>\n {customTabs.map((tab) => {\n const translated = t(`crud.tabs.${tab.id}`)\n const label = translated.startsWith('crud.tabs.') ? tab.label : translated\n const TabIcon = tab.icon ? (TAB_ICONS[tab.icon] ?? null) : null\n return (\n <TabsTrigger key={tab.id} value={tab.id} className={`gap-1.5 ${embedded ? 'text-xs px-2 py-1' : ''}`}>\n {TabIcon && <TabIcon className={embedded ? 'h-3 w-3' : 'h-3.5 w-3.5'} />}\n {label}\n </TabsTrigger>\n )\n })}\n </TabsList>\n\n <TabsContent value=\"overview\" className={embedded ? 'mt-2' : 'mt-4'}>\n <OverviewTab entityDef={entityDef} item={item} compact={embedded} />\n </TabsContent>\n\n {customTabs.map((tab) => (\n <TabsContent key={tab.id} value={tab.id} className=\"mt-4\">\n {tab.component ? (\n React.createElement(tab.component, { item, entityDef, ...(tab.props ?? {}) })\n ) : (\n <Card>\n <CardContent className=\"flex items-center justify-center py-12\">\n <p className=\"text-muted-foreground\">{t('common.noContent')}</p>\n </CardContent>\n </Card>\n )}\n </TabsContent>\n ))}\n </Tabs>\n\n {/* Widget zone for plugin tab injection */}\n <WidgetSlot zone={widgetZone} />\n </div>\n )\n}\n","import React from 'react'\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\ninterface DeleteConfirmDialogProps {\n open: boolean\n onClose: () => void\n onConfirm: () => void\n entityName: string\n displayValue?: string\n}\n\nexport function DeleteConfirmDialog({ open, onClose, onConfirm, entityName, displayValue }: DeleteConfirmDialogProps) {\n const t = useTranslation()\n return (\n <Modal open={open} onOpenChange={(isOpen) => { if (!isOpen) onClose() }}>\n <ModalContent>\n <ModalHeader>\n <ModalTitle>{t('crud.delete.title', { entity: entityName })}</ModalTitle>\n <ModalDescription>\n {displayValue\n ? t('crud.delete.confirmNamed', { name: displayValue })\n : t('crud.delete.confirmGeneric', { entity: entityName.toLowerCase() })}\n </ModalDescription>\n </ModalHeader>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>{t('common.cancel')}</Button>\n <Button variant=\"destructive\" onClick={onConfirm}>{t('common.delete')}</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React, { useState, useRef, useMemo, useCallback } from 'react'\nimport {\n Download, Upload, ArrowRight, ArrowLeft, Check, AlertCircle,\n Loader2, FileSpreadsheet, X, ChevronDown,\n} from 'lucide-react'\nimport {\n Modal, ModalContent, ModalHeader, ModalBody,\n ModalTitle,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { cn } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FieldDef, EntityDef } from '@fayz-ai/core'\n\ntype ImportStep = 'download' | 'upload' | 'mapping' | 'importing' | 'done'\n\ninterface ImportWizardProps {\n open: boolean\n onClose: () => void\n entityDef: EntityDef\n onImport: (\n rows: Record<string, any>[],\n onProgress: (processed: number, total: number) => void,\n ) => Promise<{ success: number; errors: ImportRowError[] }>\n}\n\nexport interface ImportRowError {\n row: number\n message: string\n}\n\ninterface ParsedCSV {\n headers: string[]\n rows: string[][]\n}\n\n// ---------------------------------------------------------------------------\n// CSV utilities\n// ---------------------------------------------------------------------------\n\nfunction getImportableFields(entityDef: EntityDef): FieldDef[] {\n return entityDef.fields.filter(\n (f) => f.showInForm !== false && f.key !== 'id' && f.type !== 'image',\n )\n}\n\nfunction generateSampleCSV(fields: FieldDef[]): string {\n const headers = fields.map((f) => f.label)\n const sampleRow = fields.map((f) => {\n switch (f.type) {\n case 'email': return 'example@email.com'\n case 'phone': return '+5511999999999'\n case 'number': return '0'\n case 'currency': return '0.00'\n case 'date': return '2025-01-01'\n case 'datetime': return '2025-01-01T09:00'\n case 'time': return '09:00'\n case 'boolean': return 'true'\n case 'select': {\n const opts = f.options ?? []\n const first = typeof opts[0] === 'string' ? opts[0] : opts[0]?.value\n return first ?? ''\n }\n default: return ''\n }\n })\n return [headers.join(','), sampleRow.join(',')].join('\\n')\n}\n\nfunction downloadCSV(content: string, filename: string) {\n const bom = '\\uFEFF'\n const blob = new Blob([bom + content], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n}\n\nfunction parseCSV(text: string): ParsedCSV {\n const lines = text.split(/\\r?\\n/).filter((l) => l.trim().length > 0)\n if (lines.length === 0) return { headers: [], rows: [] }\n\n const parse = (line: string): string[] => {\n const result: string[] = []\n let current = ''\n let inQuotes = false\n for (let i = 0; i < line.length; i++) {\n const ch = line[i]\n if (ch === '\"') {\n if (inQuotes && line[i + 1] === '\"') {\n current += '\"'\n i++\n } else {\n inQuotes = !inQuotes\n }\n } else if (ch === ',' && !inQuotes) {\n result.push(current.trim())\n current = ''\n } else {\n current += ch\n }\n }\n result.push(current.trim())\n return result\n }\n\n const headers = parse(lines[0])\n const rows = lines.slice(1).map(parse)\n return { headers, rows }\n}\n\nfunction coerceValue(value: string, field: FieldDef): any {\n const trimmed = value.trim()\n if (trimmed === '') return null\n switch (field.type) {\n case 'number':\n case 'currency': {\n const num = Number(trimmed.replace(',', '.'))\n return isNaN(num) ? null : num\n }\n case 'boolean':\n return ['true', '1', 'yes', 'sim', 'verdadeiro'].includes(trimmed.toLowerCase())\n default:\n return trimmed\n }\n}\n\n// ---------------------------------------------------------------------------\n// Step indicator\n// ---------------------------------------------------------------------------\n\nconst STEPS: ImportStep[] = ['download', 'upload', 'mapping', 'importing']\n\nfunction StepIndicator({ current }: { current: ImportStep }) {\n const t = useTranslation()\n const labels: Record<ImportStep, string> = {\n download: t('crud.import.step.download'),\n upload: t('crud.import.step.upload'),\n mapping: t('crud.import.step.mapping'),\n importing: t('crud.import.step.importing'),\n done: '',\n }\n const currentIdx = STEPS.indexOf(current === 'done' ? 'importing' : current)\n\n return (\n <div className=\"flex items-center gap-1.5\">\n {STEPS.map((step, i) => {\n const isDone = i < currentIdx || current === 'done'\n const isActive = step === current\n return (\n <React.Fragment key={step}>\n {i > 0 && <div className={cn('h-px w-6', isDone ? 'bg-primary' : 'bg-border')} />}\n <div className=\"flex items-center gap-1.5\">\n <div\n className={cn(\n 'flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium',\n isDone\n ? 'bg-primary text-primary-foreground'\n : isActive\n ? 'border-2 border-primary text-primary'\n : 'border-2 border-muted-foreground/30 text-muted-foreground',\n )}\n >\n {isDone ? <Check className=\"h-3 w-3\" /> : i + 1}\n </div>\n <span className={cn('text-xs hidden sm:inline', isActive ? 'text-foreground font-medium' : 'text-muted-foreground')}>\n {labels[step]}\n </span>\n </div>\n </React.Fragment>\n )\n })}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 1: Download sample\n// ---------------------------------------------------------------------------\n\nfunction DownloadStep({\n entityDef,\n fields,\n onNext,\n}: {\n entityDef: EntityDef\n fields: FieldDef[]\n onNext: () => void\n}) {\n const t = useTranslation()\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n\n const handleDownload = () => {\n const csv = generateSampleCSV(fields)\n downloadCSV(csv, `${namePlural.toLowerCase().replace(/\\s+/g, '-')}-template.csv`)\n }\n\n return (\n <div className=\"flex flex-col items-center text-center gap-6 py-4\">\n <div className=\"h-16 w-16 rounded-2xl bg-primary/10 flex items-center justify-center\">\n <FileSpreadsheet className=\"h-8 w-8 text-primary\" />\n </div>\n <div className=\"space-y-2 max-w-sm\">\n <h3 className=\"text-base font-semibold\">{t('crud.import.downloadTitle')}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('crud.import.downloadDescription', { entity: namePlural.toLowerCase() })}\n </p>\n </div>\n <div className=\"flex flex-col gap-3 w-full max-w-xs\">\n <Button variant=\"outline\" onClick={handleDownload} className=\"w-full\">\n <Download className=\"h-4 w-4 mr-2\" />\n {t('crud.import.downloadTemplate')}\n </Button>\n <p className=\"text-xs text-muted-foreground\">\n {t('crud.import.downloadHint', { count: String(fields.length) })}\n </p>\n </div>\n <Button onClick={onNext} className=\"mt-2\">\n {t('crud.import.alreadyHaveFile')}\n <ArrowRight className=\"h-4 w-4 ml-2\" />\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 2: Upload file\n// ---------------------------------------------------------------------------\n\nfunction UploadStep({\n onParsed,\n onBack,\n}: {\n onParsed: (csv: ParsedCSV, fileName: string) => void\n onBack: () => void\n}) {\n const t = useTranslation()\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const processFile = (file: File) => {\n setError(null)\n if (!file.name.endsWith('.csv')) {\n setError(t('crud.import.invalidFile'))\n return\n }\n const reader = new FileReader()\n reader.onload = (e) => {\n const text = e.target?.result as string\n const parsed = parseCSV(text)\n if (parsed.headers.length === 0) {\n setError(t('crud.import.emptyFile'))\n return\n }\n if (parsed.rows.length === 0) {\n setError(t('crud.import.noRows'))\n return\n }\n onParsed(parsed, file.name)\n }\n reader.readAsText(file)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n const file = e.dataTransfer.files[0]\n if (file) processFile(file)\n }\n\n return (\n <div className=\"flex flex-col items-center gap-6 py-4\">\n <div\n onDragOver={(e) => { e.preventDefault(); setDragOver(true) }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => inputRef.current?.click()}\n className={cn(\n 'flex flex-col items-center justify-center gap-3 w-full max-w-sm rounded-xl border-2 border-dashed p-8 cursor-pointer transition-colors',\n dragOver ? 'border-primary bg-primary/5' : 'border-muted-foreground/25 hover:border-muted-foreground/50',\n )}\n >\n <Upload className=\"h-8 w-8 text-muted-foreground\" />\n <div className=\"text-center\">\n <p className=\"text-sm font-medium\">{t('crud.import.uploadTitle')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('crud.import.uploadHint')}</p>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\".csv\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) processFile(file)\n }}\n />\n </div>\n {error && (\n <div className=\"flex items-center gap-2 text-sm text-destructive\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n {error}\n </div>\n )}\n <Button variant=\"ghost\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4 mr-2\" />\n {t('common.back')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 3: Column mapping\n// ---------------------------------------------------------------------------\n\nfunction MappingStep({\n csv,\n fileName,\n fields,\n onConfirm,\n onBack,\n}: {\n csv: ParsedCSV\n fileName: string\n fields: FieldDef[]\n onConfirm: (mapping: Map<number, FieldDef>) => void\n onBack: () => void\n}) {\n const t = useTranslation()\n\n // Auto-map by label match (case-insensitive)\n const initialMapping = useMemo(() => {\n const map = new Map<number, FieldDef | null>()\n for (let i = 0; i < csv.headers.length; i++) {\n const header = csv.headers[i].toLowerCase().trim()\n const match = fields.find(\n (f) => f.label.toLowerCase() === header || f.key.toLowerCase() === header,\n )\n map.set(i, match ?? null)\n }\n return map\n }, [csv.headers, fields])\n\n const [mapping, setMapping] = useState(initialMapping)\n\n const mappedCount = Array.from(mapping.values()).filter(Boolean).length\n const previewRows = csv.rows.slice(0, 3)\n\n const handleSelect = (colIdx: number, fieldKey: string) => {\n setMapping((prev) => {\n const next = new Map(prev)\n if (fieldKey === '__ignore__') {\n next.set(colIdx, null)\n } else {\n const field = fields.find((f) => f.key === fieldKey) ?? null\n // Remove this field from any other column\n for (const [idx, f] of next) {\n if (f?.key === fieldKey) next.set(idx, null)\n }\n next.set(colIdx, field)\n }\n return next\n })\n }\n\n const handleConfirm = () => {\n const validMapping = new Map<number, FieldDef>()\n for (const [idx, field] of mapping) {\n if (field) validMapping.set(idx, field)\n }\n onConfirm(validMapping)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{t('crud.import.mappingTitle')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('crud.import.mappingDescription', {\n file: fileName,\n columns: String(csv.headers.length),\n rows: String(csv.rows.length),\n })}\n </p>\n </div>\n <span className=\"text-xs text-muted-foreground tabular-nums\">\n {t('crud.import.mappedCount', { count: String(mappedCount), total: String(csv.headers.length) })}\n </span>\n </div>\n\n <div className=\"overflow-x-auto border rounded-lg\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[35%]\">\n {t('crud.import.csvColumn')}\n </th>\n <th className=\"text-center w-[10%] px-2\">\n <ArrowRight className=\"h-3.5 w-3.5 mx-auto text-muted-foreground\" />\n </th>\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[35%]\">\n {t('crud.import.mapsTo')}\n </th>\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[20%]\">\n {t('crud.import.preview')}\n </th>\n </tr>\n </thead>\n <tbody>\n {csv.headers.map((header, idx) => {\n const mapped = mapping.get(idx)\n return (\n <tr key={idx} className=\"border-b last:border-0\">\n <td className=\"py-2 px-3\">\n <span className=\"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\">{header}</span>\n </td>\n <td className=\"text-center px-2\">\n <ArrowRight className=\"h-3 w-3 mx-auto text-muted-foreground/50\" />\n </td>\n <td className=\"py-2 px-3\">\n <div className=\"relative\">\n <select\n value={mapped?.key ?? '__ignore__'}\n onChange={(e) => handleSelect(idx, e.target.value)}\n className={cn(\n 'w-full appearance-none rounded-md border bg-background px-2.5 py-1.5 pr-8 text-sm',\n 'focus:outline-none focus:ring-2 focus:ring-ring',\n mapped ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n <option value=\"__ignore__\">{t('crud.import.skip')}</option>\n {fields.map((f) => (\n <option key={f.key} value={f.key}>{f.label}</option>\n ))}\n </select>\n <ChevronDown className=\"absolute right-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none\" />\n </div>\n </td>\n <td className=\"py-2 px-3\">\n <span className=\"text-xs text-muted-foreground truncate block max-w-[140px]\">\n {previewRows[0]?.[idx] ?? '—'}\n </span>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n <div className=\"flex items-center justify-between pt-2\">\n <Button variant=\"ghost\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4 mr-2\" />\n {t('common.back')}\n </Button>\n <Button onClick={handleConfirm} disabled={mappedCount === 0}>\n {t('crud.import.startImport')}\n <ArrowRight className=\"h-4 w-4 ml-2\" />\n </Button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 4: Importing + Done\n// ---------------------------------------------------------------------------\n\nfunction ImportingStep({\n result,\n progress,\n totalRows,\n onClose,\n}: {\n result: { success: number; errors: ImportRowError[] } | null\n progress: { processed: number; total: number } | null\n totalRows: number\n onClose: () => void\n}) {\n const t = useTranslation()\n\n if (!result) {\n const processed = progress?.processed ?? 0\n const total = progress?.total ?? totalRows\n const percent = total > 0 ? Math.round((processed / total) * 100) : 0\n\n return (\n <div className=\"flex flex-col items-center gap-6 py-8\">\n <div className=\"relative h-16 w-16 flex items-center justify-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n </div>\n\n <div className=\"text-center space-y-1\">\n <p className=\"text-sm font-medium\">{t('crud.import.importing')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('crud.import.progressCount', { processed: String(processed), total: String(total) })}\n </p>\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full max-w-xs space-y-2\">\n <div className=\"h-2 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-primary transition-all duration-500 ease-out\"\n style={{ width: `${percent}%` }}\n />\n </div>\n <p className=\"text-xs text-muted-foreground text-center tabular-nums\">\n {percent}%\n </p>\n </div>\n </div>\n )\n }\n\n const hasErrors = result.errors.length > 0\n\n return (\n <div className=\"flex flex-col items-center gap-5 py-4\">\n <div className={cn(\n 'h-16 w-16 rounded-2xl flex items-center justify-center',\n hasErrors ? 'bg-warning/10' : 'bg-success/10',\n )}>\n {hasErrors ? (\n <AlertCircle className=\"h-8 w-8 text-warning\" />\n ) : (\n <Check className=\"h-8 w-8 text-success\" />\n )}\n </div>\n\n <div className=\"text-center space-y-1\">\n <h3 className=\"text-base font-semibold\">\n {hasErrors ? t('crud.import.doneWithErrors') : t('crud.import.doneSuccess')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('crud.import.doneCount', {\n success: String(result.success),\n total: String(totalRows),\n })}\n </p>\n </div>\n\n {/* Completed progress bar */}\n <div className=\"w-full max-w-xs\">\n <div className=\"h-2 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full transition-all duration-300',\n hasErrors ? 'bg-warning' : 'bg-success',\n )}\n style={{ width: '100%' }}\n />\n </div>\n </div>\n\n {hasErrors && (\n <div className=\"w-full max-w-sm max-h-40 overflow-y-auto rounded-lg border\">\n <div className=\"divide-y\">\n {result.errors.slice(0, 20).map((err, i) => (\n <div key={i} className=\"flex items-start gap-2 px-3 py-2 text-xs\">\n <span className=\"text-muted-foreground shrink-0 tabular-nums\">\n {t('crud.import.rowNumber', { row: String(err.row) })}\n </span>\n <span className=\"text-destructive\">{err.message}</span>\n </div>\n ))}\n {result.errors.length > 20 && (\n <div className=\"px-3 py-2 text-xs text-muted-foreground text-center\">\n +{result.errors.length - 20} more\n </div>\n )}\n </div>\n </div>\n )}\n\n <Button onClick={onClose}>{t('common.done')}</Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main wizard\n// ---------------------------------------------------------------------------\n\nexport function ImportWizard({ open, onClose, entityDef, onImport }: ImportWizardProps) {\n const t = useTranslation()\n const [step, setStep] = useState<ImportStep>('download')\n const [csv, setCsv] = useState<ParsedCSV | null>(null)\n const [fileName, setFileName] = useState('')\n const [result, setResult] = useState<{ success: number; errors: ImportRowError[] } | null>(null)\n const [progress, setProgress] = useState<{ processed: number; total: number } | null>(null)\n\n const fields = useMemo(() => getImportableFields(entityDef), [entityDef])\n\n const handleClose = () => {\n setStep('download')\n setCsv(null)\n setFileName('')\n setResult(null)\n setProgress(null)\n onClose()\n }\n\n const handleParsed = (parsed: ParsedCSV, name: string) => {\n setCsv(parsed)\n setFileName(name)\n setStep('mapping')\n }\n\n const handleConfirmMapping = useCallback(async (mapping: Map<number, FieldDef>) => {\n if (!csv) return\n setStep('importing')\n setResult(null)\n setProgress(null)\n\n // Transform CSV rows → record objects using mapping\n const rows: Record<string, any>[] = csv.rows.map((row) => {\n const record: Record<string, any> = {}\n for (const [colIdx, field] of mapping) {\n const rawValue = row[colIdx] ?? ''\n record[field.key] = coerceValue(rawValue, field)\n }\n return record\n })\n\n try {\n const res = await onImport(rows, (processed, total) => {\n setProgress({ processed, total })\n })\n setResult(res)\n setStep('done')\n } catch (err: any) {\n setResult({ success: 0, errors: [{ row: 0, message: err?.message ?? 'Import failed' }] })\n setStep('done')\n }\n }, [csv, onImport])\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n\n return (\n <Modal open={open} onOpenChange={(o) => { if (!o) handleClose() }}>\n <ModalContent size=\"xl\">\n <ModalHeader>\n <ModalTitle>{t('crud.import.title', { entity: namePlural })}</ModalTitle>\n <div className=\"pt-2\">\n <StepIndicator current={step} />\n </div>\n </ModalHeader>\n\n <ModalBody>\n {step === 'download' && (\n <DownloadStep\n entityDef={entityDef}\n fields={fields}\n onNext={() => setStep('upload')}\n />\n )}\n {step === 'upload' && (\n <UploadStep\n onParsed={handleParsed}\n onBack={() => setStep('download')}\n />\n )}\n {step === 'mapping' && csv && (\n <MappingStep\n csv={csv}\n fileName={fileName}\n fields={fields}\n onConfirm={handleConfirmMapping}\n onBack={() => setStep('upload')}\n />\n )}\n {(step === 'importing' || step === 'done') && (\n <ImportingStep\n result={result}\n progress={progress}\n totalRows={csv?.rows.length ?? 0}\n onClose={handleClose}\n />\n )}\n </ModalBody>\n </ModalContent>\n </Modal>\n )\n}\n","import { exportCSV } from '@fayz-ai/core'\nimport type { CSVColumn } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\nexport function exportToCSV<T extends Record<string, any>>(\n items: T[],\n entityDef: EntityDef,\n): void {\n const columns: CSVColumn[] = entityDef.fields\n .filter((f) => f.showInTable !== false)\n .map((f) => ({ key: f.key, label: f.label }))\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const filename = `${namePlural.toLowerCase().replace(/\\s+/g, '-')}-export`\n\n exportCSV(columns, items, filename)\n}\n","import type { FieldDef } from '@fayz-ai/core'\n\n// Tenant field-rule overrides (required / visibility / custom fields). Currently\n// a permissive identity pass-through; tenant-level customization (blueprint\n// §4.11 \"Regras de Campos\") plugs in here later without changing call sites.\nexport function useFieldRules(_entityKey: string): {\n applyRules: (fields: FieldDef[]) => FieldDef[]\n} {\n return { applyRules: (fields) => fields }\n}\n","import React, { useEffect, useState, useRef, useCallback, useMemo } from 'react'\nimport { Pencil, Trash2 } from 'lucide-react'\nimport type { ColumnDef as TanStackColumnDef } from '@tanstack/react-table'\nimport { useOrganizationStore } from '../org'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { CrudFormPage } from './CrudFormPage'\nimport { CrudListView, type CrudFacet } from './CrudListView'\nimport { CrudDetailPage } from './CrudDetailPage'\nimport { DeleteConfirmDialog } from './DeleteConfirmDialog'\nimport { ImportWizard } from './ImportWizard'\nimport { exportToCSV } from './csv-export'\nimport { fieldToColumns } from './fieldToColumn'\nimport { PermissionGate } from '../permissions/PermissionGate'\nimport { useFieldRules } from '../hooks/useFieldRules'\nimport { deriveEntityKey } from '@fayz-ai/core'\nimport { toast } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport type { CrudStore } from '../stores/createCrudStore'\nimport type { ImportRowError } from './ImportWizard'\n\ntype CrudDisplay = 'table' | 'cards'\n\ninterface CrudPageProps<T extends { id: string }> {\n entityDef: EntityDef<T>\n useStore: () => CrudStore<T>\n basePath: string\n display: CrudDisplay\n feature?: string\n /** If true, hides create/edit/delete actions — list and detail view only */\n readOnly?: boolean\n}\n\nfunction getRouteDepth(sub: string): number {\n if (sub === '' || sub === '/') return 0 // list\n if (sub === '/new') return 1 // create\n if (sub.endsWith('/edit')) return 2 // edit\n return 1 // detail\n}\n\nfunction normalizeCrudBasePath(basePath: string): string {\n const normalized = `/${basePath}`.replace(/\\/+/g, '/')\n return normalized.length > 1 ? normalized.replace(/\\/+$/, '') : normalized\n}\n\nfunction crudPath(basePath: string, ...parts: Array<string | undefined>): string {\n return normalizeCrudBasePath([basePath, ...parts.filter(Boolean)].join('/'))\n}\n\nfunction setCrudHash(basePath: string, ...parts: Array<string | undefined>): void {\n window.location.hash = crudPath(basePath, ...parts)\n}\n\nfunction useSubRoute(basePath: string) {\n const normalizedBasePath = normalizeCrudBasePath(basePath)\n const getSub = () => {\n const hash = normalizeCrudBasePath(window.location.hash.slice(1) || '/')\n if (hash === normalizedBasePath) return ''\n return hash.startsWith(`${normalizedBasePath}/`) ? hash.slice(normalizedBasePath.length) : ''\n }\n\n const [sub, setSub] = useState(getSub)\n const [direction, setDirection] = useState<'forward' | 'back'>('forward')\n const prevDepthRef = useRef(getRouteDepth(getSub()))\n\n useEffect(() => {\n const handler = () => {\n const next = getSub()\n const nextDepth = getRouteDepth(next)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setSub(next)\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [normalizedBasePath])\n\n return { sub, direction }\n}\n\n/** Convert our FieldDef-based columns to TanStack ColumnDef for DataTable */\nfunction useCrudColumns<T extends { id: string }>(\n entityDef: EntityDef<T>,\n options?: {\n basePath?: string\n onDelete?: (item: T) => void\n onInlineUpdate?: (id: string, field: string, value: any) => void\n feature?: string\n readOnly?: boolean\n },\n): TanStackColumnDef<T, any>[] {\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const cols = fieldToColumns(entityDef.fields, { onInlineUpdate: options?.onInlineUpdate })\n\n return useMemo(() => {\n const tanCols: TanStackColumnDef<T, any>[] = cols.map((col) => ({\n accessorKey: col.key,\n header: col.label,\n enableSorting: col.sortable,\n cell: ({ row }: any) => {\n const value = row.original[col.key]\n const rendered = col.render(value, row.original)\n return col.key === displayField\n ? <span className=\"font-medium text-foreground\">{rendered}</span>\n : rendered\n },\n }))\n\n // Actions column\n if (!options?.readOnly && options?.basePath) {\n tanCols.push({\n id: 'actions',\n header: '',\n enableSorting: false,\n cell: ({ row }: any) => {\n const id = row.original.id\n const editBtn = (\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\"\n onClick={(e: React.MouseEvent) => { e.stopPropagation(); setCrudHash(options.basePath!, id, 'edit') }}>\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )\n const deleteBtn = options.onDelete ? (\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={(e: React.MouseEvent) => { e.stopPropagation(); options.onDelete!(row.original) }}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ) : null\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {options.feature ? (\n <>\n <PermissionGate feature={options.feature} action=\"edit\">{editBtn}</PermissionGate>\n {deleteBtn && <PermissionGate feature={options.feature} action=\"delete\">{deleteBtn}</PermissionGate>}\n </>\n ) : (\n <>{editBtn}{deleteBtn}</>\n )}\n </div>\n )\n },\n })\n }\n\n return tanCols\n }, [cols, displayField, options?.basePath, options?.onDelete, options?.feature, options?.readOnly])\n}\n\nexport function CrudPage<T extends { id: string }>({ entityDef: rawEntityDef, useStore, basePath, display, feature, readOnly }: CrudPageProps<T>) {\n const store = useStore()\n const t = useTranslation()\n const normalizedBasePath = normalizeCrudBasePath(basePath)\n const { sub, direction } = useSubRoute(normalizedBasePath)\n\n // Apply tenant field-rule overrides (required / visibility) before passing down\n const entityKey = deriveEntityKey(rawEntityDef)\n const { applyRules } = useFieldRules(entityKey)\n const entityDef = useMemo(() => ({\n ...rawEntityDef,\n fields: applyRules(rawEntityDef.fields),\n }), [rawEntityDef, applyRules]) as EntityDef<T>\n const [deleteItem, setDeleteItem] = useState<T | null>(null)\n const [searchInput, setSearchInput] = useState('')\n const [importOpen, setImportOpen] = useState(false)\n const [activeFilters, setActiveFilters] = useState<Record<string, string | undefined>>({})\n const activeFiltersRef = useRef<Record<string, string | undefined>>({})\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n\n // Resolve declared facets (entityDef.facets) into pill options from each field.\n const resolvedFacets = useMemo<CrudFacet[]>(() => {\n return (entityDef.facets ?? []).map((f) => {\n const field = entityDef.fields.find((x) => x.key === f.field)\n const options = (field?.options ?? []).map((o) =>\n typeof o === 'string' ? { value: o, label: o } : { value: o.value, label: o.label },\n )\n return { field: f.field, options, allLabel: f.allLabel }\n })\n }, [entityDef])\n\n const handleFacetChange = useCallback((field: string, value: string | undefined) => {\n const next = { ...activeFiltersRef.current }\n if (value == null) delete next[field]\n else next[field] = value\n activeFiltersRef.current = next\n setActiveFilters(next)\n store.setQuery({ filters: next })\n }, [store])\n\n const searchTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const handleInlineUpdate = useCallback(async (id: string, field: string, value: any) => {\n await store.update(id, { [field]: value } as any)\n }, [store])\n const tanColumns = useCrudColumns(entityDef, { basePath: normalizedBasePath, onDelete: readOnly ? undefined : (item) => setDeleteItem(item), onInlineUpdate: handleInlineUpdate, feature, readOnly })\n const currentOrgId = useOrganizationStore((s) => s.currentOrg?.id)\n\n useEffect(() => {\n if (currentOrgId) store.fetch()\n }, [currentOrgId])\n\n const navigateToList = () => { setCrudHash(normalizedBasePath) }\n const animClass = direction === 'forward' ? 'saas-nav-forward' : 'saas-nav-back'\n\n const handleImport = useCallback(async (\n rows: Record<string, any>[],\n onProgress: (processed: number, total: number) => void,\n ): Promise<{ success: number; errors: ImportRowError[] }> => {\n // Guard: refuse import if not connected to Supabase (would silently go to mock)\n if (!getSupabaseClientOptional() as any) {\n return {\n success: 0,\n errors: [{ row: 0, message: t('crud.import.noConnection') }],\n }\n }\n\n const { success, results } = await store.createMany(rows, {\n batchSize: 10,\n onProgress,\n })\n\n const errors: ImportRowError[] = []\n for (let i = 0; i < results.length; i++) {\n if (results[i].error) {\n errors.push({ row: i + 2, message: results[i].error! })\n }\n }\n\n if (success > 0) {\n toast.success(t('crud.import.toastSuccess', { count: String(success) }))\n }\n return { success, errors }\n }, [store, t])\n\n const handleExport = useCallback(() => {\n const items = store.items\n if (!items || items.length === 0) {\n toast.error(t('crud.export.noData'))\n return\n }\n exportToCSV(items as any, entityDef)\n toast.success(t('crud.export.toastSuccess', { count: String(items.length) }))\n }, [store.items, entityDef, t])\n\n // Determine which view to show\n let viewKey = 'list'\n let content: React.ReactNode = null\n\n if (sub === '/new' && !readOnly) {\n viewKey = 'new'\n content = (\n <CrudFormPage\n entityDef={entityDef}\n mode=\"create\"\n namePlural={namePlural}\n onCancel={navigateToList}\n onSubmit={async (data) => {\n await store.create(data)\n navigateToList()\n }}\n />\n )\n } else if (sub === '/new' && readOnly) {\n // readOnly — redirect back to list\n navigateToList()\n } else if (sub.endsWith('/edit') && !readOnly) {\n const id = sub.slice(1, -5)\n const item = store.getById(id)\n viewKey = `edit-${id}`\n\n if (!item && store.items === null) {\n content = (\n <div className=\"space-y-6 animate-pulse\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <span className=\"text-muted-foreground\">/</span>\n <div className=\"h-4 w-28 rounded bg-muted\" />\n </div>\n {/* Hero skeleton */}\n <div className=\"flex items-start gap-5\">\n <div className=\"h-20 w-20 shrink-0 rounded-2xl bg-muted\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <div className=\"h-7 w-48 rounded bg-muted\" />\n <div className=\"h-4 w-32 rounded bg-muted\" />\n <div className=\"h-5 w-16 rounded-full bg-muted mt-1\" />\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <div className=\"h-9 w-20 rounded-md bg-muted\" />\n <div className=\"h-9 w-9 rounded-md bg-muted\" />\n </div>\n </div>\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n {/* Tabs skeleton */}\n <div className=\"flex gap-2\">\n <div className=\"h-8 w-20 rounded bg-muted\" />\n <div className=\"h-8 w-24 rounded bg-muted\" />\n </div>\n {/* Field rows skeleton */}\n <Card>\n <div className=\"divide-y\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"grid grid-cols-3 gap-4 px-5 py-3\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <div className=\"col-span-2 h-4 w-32 rounded bg-muted\" />\n </div>\n ))}\n </div>\n </Card>\n </div>\n )\n } else if (!item) {\n content = (\n <div className=\"space-y-6\">\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={navigateToList} className=\"hover:text-foreground transition-colors\">{namePlural}</button>\n <span>/</span>\n <span className=\"text-foreground font-medium\">{t('common.notFound')}</span>\n </nav>\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground mb-4\">{t('crud.detail.notFound', { entity: entityDef.name })}</p>\n <Button onClick={navigateToList}>{t('crud.detail.backTo', { entities: namePlural })}</Button>\n </div>\n </div>\n )\n } else {\n content = (\n <CrudFormPage\n entityDef={entityDef}\n mode=\"edit\"\n initialData={item as any}\n namePlural={namePlural}\n onCancel={() => { setCrudHash(normalizedBasePath, id) }}\n onSubmit={async (data) => {\n await store.update(id, data as Partial<T>)\n setCrudHash(normalizedBasePath, id)\n }}\n />\n )\n }\n } else if (sub.endsWith('/edit') && readOnly) {\n // readOnly — redirect to detail view\n const id = sub.slice(1, -5)\n setCrudHash(normalizedBasePath, id)\n } else if (sub.startsWith('/') && sub.length > 1) {\n // Parse /uuid or /uuid/tab-name\n const subParts = sub.slice(1).split('/')\n const id = subParts[0]\n const initialTab = subParts[1]?.split('?')[0] || undefined\n const item = store.getById(id)\n viewKey = `detail-${id}`\n\n if (!item && store.items === null) {\n content = (\n <div className=\"space-y-6 animate-pulse\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <span className=\"text-muted-foreground\">/</span>\n <div className=\"h-4 w-28 rounded bg-muted\" />\n </div>\n {/* Hero skeleton */}\n <div className=\"flex items-start gap-5\">\n <div className=\"h-20 w-20 shrink-0 rounded-2xl bg-muted\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <div className=\"h-7 w-48 rounded bg-muted\" />\n <div className=\"h-4 w-32 rounded bg-muted\" />\n <div className=\"h-5 w-16 rounded-full bg-muted mt-1\" />\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <div className=\"h-9 w-20 rounded-md bg-muted\" />\n <div className=\"h-9 w-9 rounded-md bg-muted\" />\n </div>\n </div>\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n {/* Tabs skeleton */}\n <div className=\"flex gap-2\">\n <div className=\"h-8 w-20 rounded bg-muted\" />\n <div className=\"h-8 w-24 rounded bg-muted\" />\n </div>\n {/* Field rows skeleton */}\n <Card>\n <div className=\"divide-y\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"grid grid-cols-3 gap-4 px-5 py-3\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <div className=\"col-span-2 h-4 w-32 rounded bg-muted\" />\n </div>\n ))}\n </div>\n </Card>\n </div>\n )\n } else if (!item) {\n content = (\n <div className=\"space-y-6\">\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={navigateToList} className=\"hover:text-foreground transition-colors\">{namePlural}</button>\n <span>/</span>\n <span className=\"text-foreground font-medium\">{t('common.notFound')}</span>\n </nav>\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground mb-4\">{t('crud.detail.notFound', { entity: entityDef.name })}</p>\n <Button onClick={navigateToList}>{t('crud.detail.backTo', { entities: namePlural })}</Button>\n </div>\n </div>\n )\n } else {\n content = (\n <CrudDetailPage\n entityDef={entityDef}\n item={item as any}\n namePlural={namePlural}\n basePath={normalizedBasePath}\n initialTab={initialTab}\n onBack={navigateToList}\n onEdit={readOnly ? undefined : () => { setCrudHash(normalizedBasePath, id, 'edit') }}\n onDelete={readOnly ? undefined : () => setDeleteItem(item)}\n feature={feature}\n />\n )\n }\n } else {\n // List view — delegated to the shared CrudListView (header, search, facet\n // pills, table/cards). Data + routing stay here (store-backed).\n const handleSearch = (value: string) => {\n setSearchInput(value)\n if (searchTimer.current) clearTimeout(searchTimer.current)\n searchTimer.current = setTimeout(() => {\n store.setQuery({ search: value || undefined })\n }, 350)\n }\n\n const hasSearch = entityDef.fields.some((f) => f.searchable)\n\n content = (\n <CrudListView\n entityDef={entityDef}\n columns={tanColumns}\n items={store.items}\n total={store.total}\n display={display}\n search={searchInput}\n onSearchChange={hasSearch ? handleSearch : undefined}\n facets={resolvedFacets}\n activeFilters={activeFilters}\n onFacetChange={handleFacetChange}\n onNew={() => setCrudHash(normalizedBasePath, 'new')}\n onRowClick={(row) => setCrudHash(normalizedBasePath, (row as any).id)}\n onDelete={(item) => setDeleteItem(item)}\n onImport={() => setImportOpen(true)}\n onExport={handleExport}\n feature={feature}\n readOnly={readOnly}\n />\n )\n }\n\n const handleDeleteConfirm = () => {\n if (deleteItem) {\n store.remove((deleteItem as any).id)\n setDeleteItem(null)\n navigateToList()\n }\n }\n\n return (\n <>\n <div key={viewKey} className={animClass}>\n {content}\n </div>\n <DeleteConfirmDialog\n open={deleteItem !== null}\n onClose={() => setDeleteItem(null)}\n onConfirm={handleDeleteConfirm}\n entityName={entityDef.name}\n displayValue={deleteItem ? (deleteItem as any)[displayField] : undefined}\n />\n <ImportWizard\n open={importOpen}\n onClose={() => setImportOpen(false)}\n entityDef={entityDef as EntityDef<any>}\n onImport={handleImport}\n />\n </>\n )\n}\n","import { create } from 'zustand'\nimport type { DataProvider, CrudQuery } from '@fayz-ai/core'\n\nexport interface CrudState<T> {\n items: T[] | null\n total: number\n loading: boolean\n query: CrudQuery\n}\n\nexport interface ImportBatchResult<T> {\n item?: T\n error?: string\n}\n\nexport interface CrudActions<T> {\n fetch: () => Promise<void>\n create: (data: any) => Promise<T>\n /** Batch create without per-item list refetch. Calls onProgress after each batch. Single fetch at the end. */\n createMany: (\n rows: any[],\n options?: { batchSize?: number; onProgress?: (processed: number, total: number) => void },\n ) => Promise<{ success: number; results: ImportBatchResult<T>[] }>\n update: (id: string, data: Partial<T>) => Promise<T>\n remove: (id: string) => Promise<void>\n setQuery: (query: Partial<CrudQuery>) => void\n getById: (id: string) => T | undefined\n}\n\nexport type CrudStore<T> = CrudState<T> & CrudActions<T>\n\nexport function createCrudStore<T extends { id: string }>(\n dataProvider: DataProvider<T>,\n) {\n // Dedup: track the current in-flight fetch to avoid duplicate requests\n let inflightFetch: Promise<void> | null = null\n let lastQueryKey = ''\n\n function queryKey(query: CrudQuery): string {\n return JSON.stringify(query)\n }\n\n return create<CrudStore<T>>((set, get) => ({\n items: null,\n total: 0,\n loading: false,\n query: {},\n\n async fetch() {\n const currentKey = queryKey(get().query)\n\n // If we already have an in-flight request for the same query, reuse it\n if (inflightFetch && currentKey === lastQueryKey) {\n return inflightFetch\n }\n\n lastQueryKey = currentKey\n set({ loading: true })\n\n const promise = (async () => {\n try {\n const result = await dataProvider.list(get().query)\n set({ items: result.data, total: result.total, loading: false })\n } catch {\n set({ items: get().items ?? [], loading: false })\n } finally {\n inflightFetch = null\n }\n })()\n\n inflightFetch = promise\n return promise\n },\n\n async create(data) {\n const item = await dataProvider.create(data)\n inflightFetch = null // invalidate dedup cache\n lastQueryKey = ''\n await get().fetch()\n return item\n },\n\n async createMany(rows, options) {\n const batchSize = options?.batchSize ?? 10\n let success = 0\n const results: ImportBatchResult<T>[] = new Array(rows.length)\n\n for (let i = 0; i < rows.length; i += batchSize) {\n const batch = rows.slice(i, i + batchSize)\n const settled = await Promise.allSettled(\n batch.map((row) => dataProvider.create(row)),\n )\n for (let j = 0; j < settled.length; j++) {\n const r = settled[j]\n if (r.status === 'fulfilled' && r.value?.id) {\n success++\n results[i + j] = { item: r.value }\n } else {\n const msg = r.status === 'rejected' ? (r.reason?.message ?? 'Error') : 'No record returned'\n results[i + j] = { error: msg }\n }\n }\n options?.onProgress?.(Math.min(i + batch.length, rows.length), rows.length)\n }\n\n // Single list refresh after all inserts\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n\n return { success, results }\n },\n\n async update(id, data) {\n const item = await dataProvider.update(id, data)\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n return item\n },\n\n async remove(id) {\n await dataProvider.remove(id)\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n },\n\n setQuery(partial) {\n set((s) => ({ query: { ...s.query, ...partial } }))\n queueMicrotask(() => get().fetch())\n },\n\n getById(id) {\n return (get().items ?? []).find((item) => item.id === id)\n },\n }))\n}\n","import React, { useMemo } from 'react'\nimport { CrudPage } from './CrudPage'\nimport { createCrudStore } from '../stores/createCrudStore'\nimport { resolveDataProvider } from '@fayz-ai/core'\nimport { registerEntity, deriveEntityKey } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport type { DataProvider } from '@fayz-ai/core'\n\ninterface CreateCrudPageOptions<T extends { id: string }> {\n mockData?: T[]\n dataProvider?: DataProvider<T>\n /** List display mode: 'table' (default) or 'cards' */\n display?: 'table' | 'cards'\n /** Feature ID for permission gating on CRUD actions */\n feature?: string\n}\n\nexport function createCrudPage<T extends { id: string }>(\n entityDef: EntityDef<T>,\n options?: CreateCrudPageOptions<T>,\n): React.ComponentType & { __crudBasePath?: string } {\n const display = options?.display ?? 'table'\n\n // If an explicit dataProvider was given, use it eagerly (no lazy resolution needed)\n let eagerStore: ReturnType<typeof createCrudStore<T>> | null = null\n if (options?.dataProvider) {\n eagerStore = createCrudStore(options.dataProvider)\n }\n\n const GeneratedCrudPage: React.FC & { __crudBasePath?: string } = () => {\n // Lazy provider resolution — runs at render time when Supabase is already initialized\n const useStore = useMemo(() => {\n if (eagerStore) return eagerStore\n const provider = resolveDataProvider(entityDef, options?.mockData)\n return createCrudStore(provider)\n }, [])\n\n const basePath = GeneratedCrudPage.__crudBasePath ?? '/'\n return (\n <CrudPage\n entityDef={entityDef as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={display}\n feature={options?.feature}\n />\n )\n }\n\n GeneratedCrudPage.displayName = `CrudPage(${entityDef.name})`\n ;(GeneratedCrudPage as any).__isCrudPage = true\n ;(GeneratedCrudPage as any).__entityDef = entityDef\n\n registerEntity({\n entityKey: deriveEntityKey(entityDef),\n label: entityDef.name,\n labelPlural: entityDef.namePlural ?? entityDef.name,\n icon: entityDef.icon,\n fields: entityDef.fields,\n source: 'app',\n archetype: entityDef.data?.archetype,\n })\n\n return GeneratedCrudPage\n}\n","import { createCrudPage } from '../../../crud/createCrudPage'\nimport type { EntityDef } from '../../types/crud'\n\nexport const locationEntityDef: EntityDef = {\n name: 'Location',\n namePlural: 'Locations',\n icon: 'MapPin',\n layout: 'location',\n displayField: 'name',\n subtitleField: 'city',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, searchable: true },\n { key: 'phone', label: 'Phone', type: 'phone', showInTable: true },\n { key: 'city', label: 'City', type: 'text', showInTable: true },\n { key: 'state', label: 'State', type: 'text', showInTable: true },\n { key: 'address', label: 'Address', type: 'text' },\n { key: 'country', label: 'Country', type: 'text', defaultValue: 'BR' },\n { key: 'postalCode', label: 'Postal Code', type: 'text' },\n { key: 'email', label: 'Email', type: 'email' },\n { key: 'isHeadquarters', label: 'Headquarters', type: 'boolean', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true, inlineToggle: true },\n { key: 'notes', label: 'Notes', type: 'textarea' },\n ],\n data: {\n table: 'locations',\n schema: 'saas_core',\n tenantScoped: true,\n searchColumns: ['name', 'city', 'state'],\n defaults: { kind: 'branch' },\n },\n}\n\nexport const LocationsCrudPage = createCrudPage(locationEntityDef)\n// Set basePath for hash-based sub-routing inside settings tab\n;(LocationsCrudPage as any).__crudBasePath = '/settings/locations'\n","import * as React from 'react'\nimport { useState, useMemo, useCallback } from 'react'\nimport { ChevronDown, ChevronRight, RotateCcw, Loader2, Search, ChevronsUpDown } from 'lucide-react'\nimport * as LucideIcons from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Checkbox } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { RegisteredEntity } from '../../lib/entity-registry'\nimport type { TenantFieldRules, EntityFieldRules, FieldRuleOverride, FieldDef } from '../../types/crud'\n\ninterface FieldRulesSettingsProps {\n entities: RegisteredEntity[]\n rules: TenantFieldRules\n onSave: (rules: TenantFieldRules) => Promise<void>\n}\n\ntype OverrideKey = keyof FieldRuleOverride\n\nconst RULE_COLUMNS: { key: OverrideKey; labelKey: string }[] = [\n { key: 'required', labelKey: 'settings.fieldRules.required' },\n { key: 'showInForm', labelKey: 'settings.fieldRules.inForm' },\n { key: 'showInTable', labelKey: 'settings.fieldRules.inTable' },\n { key: 'showInDetail', labelKey: 'settings.fieldRules.inDetail' },\n]\n\n/** Core SaaS archetypes — shown in the main section */\nconst CORE_ARCHETYPES = new Set([\n 'person', 'product', 'service', 'category', 'order', 'location',\n])\n\n/** Priority order for sorting core entities */\nconst ARCHETYPE_ORDER: Record<string, number> = {\n person: 0,\n service: 1,\n product: 2,\n category: 3,\n order: 4,\n location: 5,\n}\n\nfunction isCoreEntity(entity: RegisteredEntity): boolean {\n if (entity.archetype && CORE_ARCHETYPES.has(entity.archetype)) return true\n const prefix = entity.entityKey.split(':')[0]\n return CORE_ARCHETYPES.has(prefix)\n}\n\nfunction entitySortKey(entity: RegisteredEntity): number {\n const prefix = entity.archetype ?? entity.entityKey.split(':')[0]\n return ARCHETYPE_ORDER[prefix] ?? 99\n}\n\n/** Group structure for plugin entities */\ninterface PluginGroup {\n pluginId: string\n pluginName: string\n pluginIcon: string\n entities: RegisteredEntity[]\n}\n\n// ---------------------------------------------------------------------------\n// Field helpers\n// ---------------------------------------------------------------------------\n\nfunction getDefaultValue(field: FieldDef, key: OverrideKey): boolean {\n switch (key) {\n case 'required':\n return field.required ?? false\n case 'showInForm':\n return field.showInForm !== false\n case 'showInTable':\n return field.showInTable !== false\n case 'showInDetail':\n return field.showInDetail !== false\n }\n}\n\nfunction getEffectiveValue(\n field: FieldDef,\n key: OverrideKey,\n rules: EntityFieldRules | undefined,\n): boolean {\n const override = rules?.[field.key]?.[key]\n if (override != null) return override\n return getDefaultValue(field, key)\n}\n\nfunction isFieldModified(\n field: FieldDef,\n rules: EntityFieldRules | undefined,\n): boolean {\n if (!rules?.[field.key]) return false\n return RULE_COLUMNS.some((col) => {\n const override = rules[field.key]?.[col.key]\n return override != null && override !== getDefaultValue(field, col.key)\n })\n}\n\nfunction countModified(\n fields: FieldDef[],\n rules: EntityFieldRules | undefined,\n): number {\n if (!rules) return 0\n return fields.filter((f) => isFieldModified(f, rules)).length\n}\n\nfunction resolveIcon(iconName: string): React.ComponentType<any> | null {\n return (LucideIcons as any)[iconName] ?? null\n}\n\nfunction matchesSearch(entity: RegisteredEntity, q: string): boolean {\n return (\n entity.label.toLowerCase().includes(q) ||\n entity.labelPlural.toLowerCase().includes(q) ||\n entity.entityKey.toLowerCase().includes(q)\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityAccordion\n// ---------------------------------------------------------------------------\n\nfunction EntityAccordion({\n entity,\n rules,\n onToggle,\n onReset,\n}: {\n entity: RegisteredEntity\n rules: EntityFieldRules | undefined\n onToggle: (entityKey: string, fieldKey: string, ruleKey: OverrideKey, value: boolean) => void\n onReset: (entityKey: string) => void\n}) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const modified = countModified(entity.fields, rules)\n const Icon = resolveIcon(entity.icon)\n\n return (\n <Card>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex w-full items-center gap-3 px-5 py-3.5 text-left\"\n >\n {open ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n )}\n {Icon && <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"text-sm font-semibold flex-1\">{entity.labelPlural || entity.label}</span>\n {modified > 0 && (\n <span className=\"text-xs text-primary font-medium tabular-nums\">\n {t('settings.fieldRules.modified', { count: String(modified) })}\n </span>\n )}\n </button>\n\n {open && (\n <CardContent className=\"pt-0 pb-4 px-5\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"text-left font-medium text-muted-foreground py-2 pr-4 w-[40%]\">\n {t('settings.fieldRules.field')}\n </th>\n {RULE_COLUMNS.map((col) => (\n <th\n key={col.key}\n className=\"text-center font-medium text-muted-foreground py-2 px-3 w-[15%]\"\n >\n {t(col.labelKey)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entity.fields.map((field) => {\n const fieldModified = isFieldModified(field, rules)\n return (\n <tr\n key={field.key}\n className={cn(\n 'border-b last:border-0',\n fieldModified && 'bg-primary/[0.03]',\n )}\n >\n <td className=\"py-2.5 pr-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-foreground\">{field.label}</span>\n {fieldModified && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </div>\n </td>\n {RULE_COLUMNS.map((col) => {\n const effective = getEffectiveValue(field, col.key, rules)\n const defaultVal = getDefaultValue(field, col.key)\n const overridden = rules?.[field.key]?.[col.key]\n const isModified = overridden != null && overridden !== defaultVal\n return (\n <td key={col.key} className=\"text-center py-2.5 px-3\">\n <div className=\"inline-flex items-center gap-1\">\n <Checkbox\n checked={effective}\n onChange={(val) =>\n onToggle(entity.entityKey, field.key, col.key, val)\n }\n />\n {isModified && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </div>\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n {modified > 0 && (\n <div className=\"flex justify-end pt-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n onReset(entity.entityKey)\n }}\n >\n <RotateCcw className=\"h-3.5 w-3.5 mr-1.5\" />\n {t('settings.fieldRules.resetDefaults')}\n </Button>\n </div>\n )}\n </CardContent>\n )}\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Section components\n// ---------------------------------------------------------------------------\n\nfunction SectionHeader({ label }: { label: string }) {\n return (\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground px-1\">\n {label}\n </h3>\n )\n}\n\nfunction PluginSectionHeader({ name, iconName }: { name: string; iconName: string }) {\n const Icon = resolveIcon(iconName)\n return (\n <div className=\"flex items-center gap-2 px-1\">\n {Icon && <Icon className=\"h-3.5 w-3.5 text-muted-foreground\" />}\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {name}\n </h3>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport function FieldRulesSettings({ entities, rules: initialRules, onSave }: FieldRulesSettingsProps) {\n const { t } = useTranslation()\n const [draft, setDraft] = useState<TenantFieldRules>(initialRules)\n const [saving, setSaving] = useState(false)\n const [search, setSearch] = useState('')\n const [showMore, setShowMore] = useState(false)\n\n React.useEffect(() => {\n setDraft(initialRules)\n }, [initialRules])\n\n const isDirty = useMemo(\n () => JSON.stringify(draft) !== JSON.stringify(initialRules),\n [draft, initialRules],\n )\n\n // Split entities: core standalone → standalone non-core → grouped by plugin\n const { coreEntities, standaloneEntities, pluginGroups } = useMemo(() => {\n const q = search.trim().toLowerCase()\n\n const core: RegisteredEntity[] = []\n const standalone: RegisteredEntity[] = []\n const pluginMap = new Map<string, PluginGroup>()\n\n for (const entity of entities) {\n if (q && !matchesSearch(entity, q)) continue\n\n if (entity.source === 'plugin' && entity.pluginId) {\n // Group under plugin\n let group = pluginMap.get(entity.pluginId)\n if (!group) {\n group = {\n pluginId: entity.pluginId,\n pluginName: entity.pluginName ?? entity.pluginId,\n pluginIcon: entity.pluginIcon ?? 'Puzzle',\n entities: [],\n }\n pluginMap.set(entity.pluginId, group)\n }\n group.entities.push(entity)\n } else if (isCoreEntity(entity)) {\n core.push(entity)\n } else {\n standalone.push(entity)\n }\n }\n\n // Sort core by archetype priority, then alphabetically\n core.sort((a, b) => {\n const orderDiff = entitySortKey(a) - entitySortKey(b)\n if (orderDiff !== 0) return orderDiff\n return (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label)\n })\n\n standalone.sort((a, b) =>\n (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label),\n )\n\n // Sort entities within each plugin group alphabetically\n const groups = Array.from(pluginMap.values())\n for (const group of groups) {\n group.entities.sort((a, b) =>\n (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label),\n )\n }\n // Sort plugin groups by plugin name\n groups.sort((a, b) => a.pluginName.localeCompare(b.pluginName))\n\n return {\n coreEntities: core,\n standaloneEntities: standalone,\n pluginGroups: groups,\n }\n }, [entities, search])\n\n const isSearching = search.trim().length > 0\n const hasExtras = standaloneEntities.length > 0 || pluginGroups.length > 0\n const showExtras = hasExtras && (showMore || isSearching)\n const extraCount = standaloneEntities.length + pluginGroups.reduce((sum, g) => sum + g.entities.length, 0)\n const hasNoResults = coreEntities.length === 0 && !hasExtras\n\n const handleToggle = useCallback(\n (entityKey: string, fieldKey: string, ruleKey: OverrideKey, value: boolean) => {\n setDraft((prev) => {\n const entityRules = { ...prev[entityKey] }\n const fieldOverride = { ...entityRules[fieldKey] }\n fieldOverride[ruleKey] = value\n entityRules[fieldKey] = fieldOverride\n return { ...prev, [entityKey]: entityRules }\n })\n },\n [],\n )\n\n const handleReset = useCallback((entityKey: string) => {\n setDraft((prev) => {\n const next = { ...prev }\n delete next[entityKey]\n return next\n })\n }, [])\n\n const handleSave = async () => {\n setSaving(true)\n try {\n const cleaned: TenantFieldRules = {}\n for (const [entityKey, entityRules] of Object.entries(draft)) {\n const entity = entities.find((e) => e.entityKey === entityKey)\n if (!entity) continue\n\n const cleanedEntity: EntityFieldRules = {}\n for (const [fieldKey, override] of Object.entries(entityRules)) {\n const field = entity.fields.find((f) => f.key === fieldKey)\n if (!field) continue\n\n const cleanedOverride: FieldRuleOverride = {}\n let hasOverride = false\n for (const col of RULE_COLUMNS) {\n const val = override[col.key]\n if (val != null && val !== getDefaultValue(field, col.key)) {\n cleanedOverride[col.key] = val\n hasOverride = true\n }\n }\n if (hasOverride) {\n cleanedEntity[fieldKey] = cleanedOverride\n }\n }\n if (Object.keys(cleanedEntity).length > 0) {\n cleaned[entityKey] = cleanedEntity\n }\n }\n\n await onSave(cleaned)\n } finally {\n setSaving(false)\n }\n }\n\n const renderAccordions = (list: RegisteredEntity[]) =>\n list.map((entity) => (\n <EntityAccordion\n key={entity.entityKey}\n entity={entity}\n rules={draft[entity.entityKey]}\n onToggle={handleToggle}\n onReset={handleReset}\n />\n ))\n\n return (\n <div className=\"space-y-6\">\n {/* Header + Save */}\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n <h2 className=\"text-lg font-semibold\">{t('settings.fieldRules')}</h2>\n <p className=\"text-sm text-muted-foreground mt-0.5\">\n {t('settings.fieldRules.subtitle')}\n </p>\n </div>\n <Button onClick={handleSave} disabled={!isDirty || saving} className=\"shrink-0\">\n {saving && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n {t('common.save')}\n </Button>\n </div>\n\n {/* Search */}\n {entities.length > 4 && (\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder={t('settings.fieldRules.searchPlaceholder')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] pl-8 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n )}\n\n {hasNoResults ? (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t('settings.fieldRules.noEntities')}\n </p>\n ) : (\n <div className=\"space-y-6\">\n {/* Core register types — always visible */}\n {coreEntities.length > 0 && (\n <div className=\"space-y-2\">\n <SectionHeader label={t('settings.fieldRules.coreRegisters')} />\n {renderAccordions(coreEntities)}\n </div>\n )}\n\n {/* Extras: standalone + plugin groups — behind \"Load more\" */}\n {showExtras && (\n <>\n {/* Standalone non-core, non-plugin entities */}\n {standaloneEntities.length > 0 && (\n <div className=\"space-y-2\">\n <SectionHeader label={t('settings.fieldRules.otherRegisters')} />\n {renderAccordions(standaloneEntities)}\n </div>\n )}\n\n {/* Plugin groups — each with plugin name + icon header */}\n {pluginGroups.map((group) => (\n <div key={group.pluginId} className=\"space-y-2\">\n <PluginSectionHeader\n name={group.pluginName}\n iconName={group.pluginIcon}\n />\n {renderAccordions(group.entities)}\n </div>\n ))}\n </>\n )}\n\n {/* Load more / show less toggle */}\n {hasExtras && !isSearching && (\n <button\n type=\"button\"\n onClick={() => setShowMore(!showMore)}\n className=\"flex w-full items-center justify-center gap-2 rounded-lg border border-dashed py-3 text-sm text-muted-foreground hover:text-foreground hover:border-border transition-colors\"\n >\n <ChevronsUpDown className=\"h-4 w-4\" />\n {showMore\n ? t('settings.fieldRules.showLess')\n : t('settings.fieldRules.showMore', { count: String(extraCount) })}\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","import type { FieldDef, EntityDef } from '../types/crud'\nimport type { EntityArchetype } from '../types/entities'\n\nexport interface RegisteredEntity {\n entityKey: string\n label: string\n labelPlural: string\n icon: string\n fields: FieldDef[]\n source: 'page' | 'plugin'\n archetype?: EntityArchetype\n pluginId?: string\n pluginName?: string\n pluginIcon?: string\n}\n\nconst registry = new Map<string, RegisteredEntity>()\n\nexport function deriveEntityKey(entityDef: EntityDef): string {\n if (entityDef.data?.archetypeKind) {\n return `${entityDef.data.archetype ?? ''}:${entityDef.data.archetypeKind}`\n }\n if (entityDef.data?.archetype) {\n return entityDef.data.archetype\n }\n return entityDef.data?.table ?? entityDef.name\n}\n\nexport function registerEntity(entity: RegisteredEntity): void {\n registry.set(entity.entityKey, entity)\n}\n\nexport function getRegisteredEntities(): RegisteredEntity[] {\n return Array.from(registry.values())\n}\n\nexport function getEntityByKey(key: string): RegisteredEntity | undefined {\n return registry.get(key)\n}\n","import { FieldRulesSettings } from './FieldRulesSettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { getRegisteredEntities } from '../../lib/entity-registry'\nimport { toast } from '../notifications/ToastProvider'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { TenantFieldRules, TenantSettings } from '../../types'\n\nfunction extractFieldRules(settings: unknown): TenantFieldRules {\n if (!settings || typeof settings !== 'object') return {}\n return (settings as Record<string, unknown>).fieldRules as TenantFieldRules ?? {}\n}\n\nexport function ConnectedFieldRulesSettings() {\n const { t } = useTranslation()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n const adapter = useOrgAdapterOptional()\n const entities = getRegisteredEntities()\n const rules = extractFieldRules(currentOrg?.settings)\n\n const handleSave = async (newRules: TenantFieldRules) => {\n if (!adapter || !currentOrg) return\n\n try {\n const currentSettings = (currentOrg.settings ?? {}) as Record<string, unknown>\n const updated = await adapter.updateOrg(currentOrg.id, {\n settings: {\n ...currentSettings,\n fieldRules: newRules,\n },\n })\n setCurrentOrg(updated)\n toast.success(t('settings.fieldRules.saved'))\n } catch (err: any) {\n toast.error(t('settings.fieldRules.saveFailed'), { description: err?.message })\n }\n }\n\n return (\n <FieldRulesSettings\n entities={entities}\n rules={rules}\n onSave={handleSave}\n />\n )\n}\n","import * as React from 'react'\nimport {\n AppShell,\n type NavigationItem,\n type BottomNavItem,\n type MobileHeaderVariant,\n ModuleLayoutProvider,\n PageTransition,\n type ModuleNavVariant,\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownLabel,\n DropdownSeparator,\n Avatar,\n AvatarImage,\n AvatarFallback,\n useLayoutStore,\n} from '@fayz-ai/ui'\nimport { CommandPalette, type CommandItem } from '../shell/components/layout/CommandPalette'\nimport { useOrganizationStore } from '../org/store'\nimport { useAuth } from '@fayz-ai/auth'\nimport { AuthGate } from '@fayz-ai/plugin-auth'\nimport { usePluginRuntime, resolvePluginComponent, useTranslation } from '@fayz-ai/core'\nimport type { PermissionAction, PluginNavigationEntry, PluginRouteDefinition, PluginSettingsTab } from '@fayz-ai/core'\nimport { useAdminPath, navigateTo, matchRoute, routeScore } from './routing'\nimport type { CustomPage } from './config'\nimport type { AuthProvider } from '@fayz-ai/core'\nimport { setEntityRouteMap } from '../lib/entity-routes'\nimport { usePermissionOptional } from '../permissions/context'\nimport { SettingsPage } from '../shell/components/settings/SettingsPage'\nimport { TeamTab } from '../shell/components/organization/TeamTab'\nimport { PermissionProfilesTab } from '../shell/components/organization/PermissionProfilesTab'\nimport { LocationsCrudPage } from '../shell/components/settings/LocationsCrudPage'\nimport { ConnectedFieldRulesSettings } from '../shell/components/settings/ConnectedFieldRulesSettings'\nimport { MapPin, Puzzle, ShieldCheck, SlidersHorizontal, Users } from 'lucide-react'\nimport * as LucideIcons from 'lucide-react'\n\n// ---------------------------------------------------------------------------\n// AdminShell — the working admin surface. Mounted INSIDE the providers (see\n// AdminProviders). Reads the resolved plugin runtime for navigation + routes,\n// wires the @fayz-ai/ui AppShell, and switches the main content on the hash path.\n// Custom pages (config.pages / manifest pages already resolved to components)\n// are merged into the same nav + route table.\n// ---------------------------------------------------------------------------\n\nexport interface AdminShellProps {\n appName: string\n layout?: 'sidebar' | 'topbar' | 'minimal'\n logo?: React.ReactNode\n pages?: CustomPage[]\n requireAuth?: boolean\n loginTagline?: string\n loginDescription?: string\n loginLogo?: React.ReactNode\n loginLayout?: 'split' | 'centered'\n showOAuth?: boolean\n oauthProviders?: Exclude<AuthProvider, 'email'>[]\n showSettings?: boolean\n showOrgSettings?: boolean\n /** Show the workspace/org switcher at the sidebar top. Default: true.\n * Single-org apps (config.org.multiOrg === false) get false from the\n * scaffold so B2C users never see an organization concept. */\n showOrgSwitcher?: boolean\n /** Show the branding (\"Identidade Visual\") + company \"Geral\" settings tabs.\n * Default: true. B2C apps pass false to hide org-identity settings. */\n showBranding?: boolean\n /** Wrap the main content in an inset \"framed\" card (default: true). The\n * sidebar is always flush/full-height. */\n contentFrame?: boolean\n /** How module-internal navigation renders. Defaults to 'tabs' for the\n * 'sidebar' layout and 'rail' for 'topbar'. */\n moduleNav?: ModuleNavVariant\n /** Mobile bottom tab bar, passed straight through to AppShell. */\n bottomNav?: BottomNavItem[]\n /** Fired when a bottom-nav `action` item (e.g. the center \"+\") is tapped. */\n onBottomNavAction?: (id: string) => void\n /** Mobile header treatment (<md), passed straight through to AppShell. */\n mobileHeader?: MobileHeaderVariant\n}\n\n// ---------------------------------------------------------------------------\n// WorkspaceSwitcher — sub-account / workspace selector at the sidebar top.\n// Reads the native org store (the one AdminProviders populates).\n// ---------------------------------------------------------------------------\n\nfunction WorkspaceSwitcher() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const userOrgs = useOrganizationStore((s) => s.userOrgs)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n if (!currentOrg) return null\n\n const Building = LucideIcons.Building2\n const Chevron = LucideIcons.ChevronsUpDown\n const Check = LucideIcons.Check\n const options = userOrgs.length\n ? userOrgs\n : [{ orgId: currentOrg.id, orgName: currentOrg.name, orgSlug: currentOrg.slug }]\n\n return (\n <Dropdown>\n <DropdownTrigger asChild>\n <button className=\"flex w-full items-center gap-2 rounded-md border border-sidebar-border/60 bg-sidebar-accent/30 px-2 py-1.5 text-left transition-colors hover:bg-sidebar-accent\">\n <span className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-sidebar-accent text-sidebar-accent-foreground\">\n <Building className=\"h-3.5 w-3.5\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-sidebar-foreground\">{currentOrg.name}</span>\n <Chevron className=\"h-3.5 w-3.5 shrink-0 text-sidebar-muted\" />\n </button>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-56 bg-sidebar text-sidebar-foreground border-sidebar-border\">\n <DropdownLabel className=\"text-sidebar-muted\">Workspaces</DropdownLabel>\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {options.map((m) => (\n <DropdownItem\n key={m.orgId}\n onClick={() => setCurrentOrg({ id: m.orgId, name: m.orgName, slug: m.orgSlug, createdAt: '', updatedAt: '' })}\n className=\"flex items-center gap-2 focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{m.orgName}</span>\n {currentOrg.id === m.orgId && <Check className=\"h-4 w-4 shrink-0\" />}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n )\n}\n\n// ---------------------------------------------------------------------------\n// AdminUserMenu — user dropdown rendered in the sidebar bottom row.\n// ---------------------------------------------------------------------------\n\nfunction AdminUserMenu({\n user,\n onProfile,\n onSettings,\n onSignOut,\n}: {\n user?: { fullName?: string; email: string; avatarUrl?: string }\n onProfile?: () => void\n onSettings?: () => void\n onSignOut?: () => void\n}) {\n if (!user) return null\n const name = user.fullName ?? user.email\n const initials = name.replace(/[^A-Za-z0-9]/g, ' ').trim().split(/\\s+/).map((w) => w[0]).slice(0, 2).join('').toUpperCase() || '?'\n return (\n <Dropdown>\n <DropdownTrigger asChild>\n <button className=\"flex min-w-0 flex-1 items-center gap-2 rounded-md px-1.5 py-1 text-left transition-colors hover:bg-sidebar-accent/50\">\n <Avatar className=\"h-7 w-7 shrink-0\">\n {user.avatarUrl && <AvatarImage src={user.avatarUrl} alt={name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <span className=\"min-w-0 truncate text-xs font-medium text-sidebar-foreground\">{name}</span>\n </button>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-56 bg-sidebar text-sidebar-foreground border-sidebar-border\">\n <DropdownLabel className=\"truncate text-sidebar-muted\">{user.email}</DropdownLabel>\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {onProfile && (\n <DropdownItem onClick={onProfile} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Profile</DropdownItem>\n )}\n {onSettings && (\n <DropdownItem onClick={onSettings} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Settings</DropdownItem>\n )}\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {onSignOut && (\n <DropdownItem onClick={onSignOut} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Sign out</DropdownItem>\n )}\n </DropdownContent>\n </Dropdown>\n )\n}\n\nfunction navEntryToItem(entry: PluginNavigationEntry): NavigationItem {\n return {\n id: entry.id ?? `${entry.route}`,\n label: entry.label,\n icon: entry.icon ?? 'LayoutTemplate',\n route: entry.route,\n section: entry.section,\n badge: entry.badge,\n }\n}\n\ntype OrderedNavigationItem = NavigationItem & { position: number }\n\ninterface RouteEntry {\n path: string\n Component: React.ComponentType<Record<string, unknown>>\n /** Render edge-to-edge with no page padding wrapper (chat, kanban, canvas). */\n fullBleed?: boolean\n}\n\nfunction registerEntityRoute(\n component: unknown,\n path: string,\n entityRouteMap: Map<string, string>,\n): void {\n const entityDef = (component as any)?.__entityDef\n if (!entityDef?.data) return\n\n if (entityDef.data.archetypeKind) {\n entityRouteMap.set(`${entityDef.data.archetype ?? ''}:${entityDef.data.archetypeKind}`, path)\n } else if (entityDef.data.archetype) {\n entityRouteMap.set(entityDef.data.archetype, path)\n }\n}\n\nfunction sectionOrder(section: NavigationItem['section']): number {\n return section === 'main' ? 0 : section === 'secondary' ? 1 : 2\n}\n\nfunction compareNavigation(a: NavigationItem & { position?: number }, b: NavigationItem & { position?: number }): number {\n const sectionDelta = sectionOrder(a.section) - sectionOrder(b.section)\n if (sectionDelta !== 0) return sectionDelta\n return (a.position ?? 0) - (b.position ?? 0)\n}\n\nfunction findModuleParent(\n item: OrderedNavigationItem,\n items: OrderedNavigationItem[],\n): OrderedNavigationItem | null {\n const candidates = items\n .filter((candidate) =>\n candidate.section === item.section &&\n candidate.route !== item.route &&\n item.route.startsWith(`${candidate.route}/`)\n )\n .sort((a, b) => b.route.length - a.route.length)\n\n return candidates[0] ?? null\n}\n\nfunction pageToNavigationItem(page: CustomPage, fallbackPosition: number): OrderedNavigationItem | null {\n if (!page.label) return null\n return {\n id: `page:${page.path}`,\n label: page.label,\n icon: page.icon ?? 'FileText',\n route: page.path,\n section: page.section ?? 'main',\n badge: page.badge,\n permission: page.permission,\n position: page.position ?? fallbackPosition,\n children: page.children\n ?.filter((child) => child.nav !== false)\n .map((child, index) => pageToNavigationItem(child, index))\n .filter((item): item is OrderedNavigationItem => Boolean(item)),\n }\n}\n\nfunction collectPageRoutes(\n pages: CustomPage[],\n out: RouteEntry[] = [],\n entityRouteMap: Map<string, string> = new Map(),\n): RouteEntry[] {\n for (const page of pages) {\n if (page.component && page.path !== '/settings') {\n if ((page.component as any).__isCrudPage) {\n ;(page.component as any).__crudBasePath = page.path\n registerEntityRoute(page.component, page.path, entityRouteMap)\n }\n out.push({ path: page.path, Component: page.component as React.ComponentType<Record<string, unknown>> })\n out.push({ path: `${page.path}/*`, Component: page.component as React.ComponentType<Record<string, unknown>> })\n }\n if (page.children?.length) collectPageRoutes(page.children, out, entityRouteMap)\n }\n return out\n}\n\nfunction buildSettingsTabs(\n pluginTabs: PluginSettingsTab[],\n can: (feature: string, action?: PermissionAction) => boolean,\n t: (key: string, params?: Record<string, string | number>) => string,\n showOrgSettings: boolean,\n): { id: string; label: string; icon?: React.ReactNode; component: React.ReactNode }[] {\n const settingsTabs: { id: string; label: string; icon?: React.ReactNode; component: React.ReactNode }[] = []\n\n if (showOrgSettings) {\n settingsTabs.push(\n { id: 'team', label: t('settings.team'), icon: <Users className=\"h-4 w-4\" />, component: <TeamTab /> },\n { id: 'permissions', label: t('settings.permissions'), icon: <ShieldCheck className=\"h-4 w-4\" />, component: <PermissionProfilesTab /> },\n { id: 'locations', label: t('settings.locations'), icon: <MapPin className=\"h-4 w-4\" />, component: <LocationsCrudPage /> },\n { id: 'field-rules', label: t('settings.fieldRules'), icon: <SlidersHorizontal className=\"h-4 w-4\" />, component: <ConnectedFieldRulesSettings /> },\n )\n }\n\n for (const tab of pluginTabs) {\n if (tab.permission && !can(tab.permission.feature, tab.permission.action)) continue\n if (!tab.component) continue\n\n const IconComp = tab.icon ? (LucideIcons as any)[tab.icon] ?? Puzzle : Puzzle\n const labelKey = `settings.plugin.${tab.id}`\n const translated = t(labelKey)\n settingsTabs.push({\n id: tab.id,\n label: translated === labelKey ? tab.label : translated,\n icon: React.createElement(IconComp as React.ComponentType<{ className?: string }>, { className: 'h-4 w-4' }),\n component: React.createElement(tab.component),\n // Flag plugin-contributed tabs so SettingsPage draws the core/plugins divider.\n isPlugin: true,\n } as any)\n }\n\n return settingsTabs\n}\n\nfunction AdminShellInner({ appName, layout = 'sidebar', logo, pages = [], showSettings = true, showOrgSettings = false, showBranding = true, showOrgSwitcher = true, contentFrame = true, moduleNav, bottomNav, onBottomNavAction, mobileHeader }: AdminShellProps) {\n const runtime = usePluginRuntime()\n const t = useTranslation()\n const can = usePermissionOptional()\n const tr = (key: string, fallback: string) => {\n const v = t(key)\n return !v || v === key ? fallback : v\n }\n const path = useAdminPath()\n const { user, signOut } = useAuth()\n\n // Navigation: plugin entries + custom pages (deduped, plugin order preserved).\n const navigation = React.useMemo<NavigationItem[]>(() => {\n const items: OrderedNavigationItem[] = runtime.navigation.map((entry) => ({\n ...navEntryToItem(entry),\n position: entry.position,\n }))\n for (const [index, page] of pages.entries()) {\n // `nav: false` routes the page but keeps it out of the sidebar/topbar nav\n // (mobile-only pages reached via bottomNav/avatar). Routes are still built\n // from `pages` in collectPageRoutes below, so the page remains navigable.\n if (page.nav === false) continue\n const item = pageToNavigationItem(page, index + 1000)\n if (!item) continue\n\n const parent = findModuleParent(item, items)\n if (parent) {\n const children = parent.children ?? [{\n ...parent,\n id: `${parent.id}:index`,\n children: undefined,\n position: -1,\n }]\n if (!children.some((child) => child.route === item.route)) {\n parent.children = [...children, item].sort(compareNavigation)\n }\n continue\n }\n\n items.push(item)\n }\n return items.sort(compareNavigation)\n }, [runtime.navigation, pages])\n\n // Command palette (⌘K + the topbar Search button). The palette owns the ⌘K\n // key listener, so it must be MOUNTED for the shortcut to work — the topbar\n // Search button drives the same shared layout store.\n const commandPaletteOpen = useLayoutStore((s) => s.commandPaletteOpen)\n const setCommandPaletteOpen = useLayoutStore((s) => s.setCommandPaletteOpen)\n const commandItems = React.useMemo<CommandItem[]>(() => {\n const navGroup = tr('layout.commandPalette.navigation', 'Navigation')\n const items: CommandItem[] = []\n for (const nav of navigation) {\n items.push({ id: nav.id, label: nav.label, icon: nav.icon, group: navGroup, action: () => navigateTo(nav.route) })\n for (const child of nav.children ?? []) {\n items.push({ id: child.id, label: `${nav.label} · ${child.label}`, icon: child.icon, group: navGroup, action: () => navigateTo(child.route) })\n }\n }\n return items\n }, [navigation])\n\n // Route table: plugin routes + custom pages, most-specific-first.\n const routes = React.useMemo<RouteEntry[]>(() => {\n const list: RouteEntry[] = []\n const entityRouteMap = new Map<string, string>()\n for (const r of runtime.routes as PluginRouteDefinition[]) {\n const Component = resolvePluginComponent(r) as React.ComponentType<Record<string, unknown>> | undefined\n if (Component) {\n list.push({ path: r.path, Component, fullBleed: r.fullBleed })\n list.push({ path: `${r.path}/*`, Component, fullBleed: r.fullBleed })\n }\n }\n if (showSettings) list.push({ path: '/settings/*', Component: SettingsPage as React.ComponentType<Record<string, unknown>> })\n if (showSettings) list.push({ path: '/settings', Component: SettingsPage as React.ComponentType<Record<string, unknown>> })\n collectPageRoutes(pages, list, entityRouteMap)\n setEntityRouteMap(entityRouteMap)\n return list.sort((a, b) => routeScore(b.path) - routeScore(a.path))\n }, [runtime.routes, pages, showSettings])\n\n const match = React.useMemo(() => {\n for (const r of routes) {\n const params = matchRoute(r.path, path)\n if (params) return { route: r, params }\n }\n return null\n }, [routes, path])\n\n // Treat '/' as the index: redirect to the first nav entry once it's known.\n React.useEffect(() => {\n if (!match && (path === '/' || path === '') && navigation.length > 0) {\n navigateTo(navigation[0]!.route)\n }\n }, [match, path, navigation])\n\n const ActiveComponent = match?.route.Component\n const activeParams = match?.params ?? {}\n const settingsTabs = React.useMemo(\n () => buildSettingsTabs(runtime.settingsTabs as PluginSettingsTab[], can, t, showOrgSettings),\n [runtime.settingsTabs, can, t, showOrgSettings],\n )\n\n const shellUser = user\n ? { fullName: user.fullName ?? user.email, email: user.email, avatarUrl: user.avatarUrl }\n : undefined\n\n // Module-internal nav style: explicit override, else by layout (GHL-style\n // tabs for sidebar products, left rail for topbar products).\n const moduleVariant: ModuleNavVariant = moduleNav ?? (layout === 'sidebar' ? 'tabs' : 'rail')\n\n // The layout owns the page title (shown in the top header), derived from the\n // active navigation entry — individual pages don't render their own title.\n const activePageTitle = React.useMemo(() => {\n if (path === '/settings' || path.startsWith('/settings/')) return tr('common.settings', 'Settings')\n const candidates = navigation\n .filter((n) => n.route)\n .sort((a, b) => b.route.length - a.route.length)\n const hit = candidates.find((n) =>\n n.route === '/' ? path === '/' || path === '' : path === n.route || path.startsWith(n.route + '/') || path.startsWith(n.route),\n )\n return hit?.label ?? candidates.find((n) => n.route === '/')?.label ?? ''\n }, [navigation, path, tr])\n\n const activeContent = ActiveComponent ? (\n match.route.path === '/settings' || match.route.path === '/settings/*'\n ? <SettingsPage extraTabs={settingsTabs} showCompany={showBranding} showBranding={showBranding} />\n : <ActiveComponent {...activeParams} />\n ) : null\n\n return (\n <ModuleLayoutProvider variant={moduleVariant}>\n <AppShell\n variant={layout}\n contentFrame={contentFrame}\n navigation={navigation}\n logo={logo ?? <span className=\"text-lg font-bold\">{appName}</span>}\n user={shellUser}\n pageTitle={activePageTitle}\n currentPath={path}\n bottomNav={bottomNav}\n onBottomNavAction={onBottomNavAction}\n mobileHeader={mobileHeader}\n onNavigate={(route) => navigateTo(route)}\n onSignOut={() => { void signOut() }}\n onProfile={() => navigateTo('/perfil')}\n onSettings={() => navigateTo('/settings')}\n sidebarTopContent={showOrgSwitcher ? <WorkspaceSwitcher /> : undefined}\n userMenuSlot={\n <AdminUserMenu\n user={shellUser}\n onSettings={() => navigateTo('/settings')}\n onSignOut={() => { void signOut() }}\n />\n }\n >\n {activeContent ? (\n <PageTransition\n transitionKey={match?.route.path ?? path}\n className={match?.route.fullBleed ? 'h-full min-h-0' : undefined}\n >\n {match?.route.fullBleed\n ? <div className=\"h-full min-h-0 overflow-hidden\">{activeContent}</div>\n : <div className=\"space-y-4 p-3 md:space-y-6 md:p-6\">{activeContent}</div>}\n </PageTransition>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center p-12 text-center\">\n <p className=\"text-lg font-semibold text-foreground\">\n {navigation.length ? tr('common.notFound', 'Page not found') : tr('common.welcome', 'Welcome')}\n </p>\n {navigation.length > 0 && (\n <button\n className=\"mt-3 text-sm text-primary underline\"\n onClick={() => navigateTo(navigation[0]!.route)}\n >\n {navigation[0]!.label}\n </button>\n )}\n </div>\n )}\n </AppShell>\n <CommandPalette\n commands={commandItems}\n open={commandPaletteOpen}\n onOpenChange={setCommandPaletteOpen}\n />\n </ModuleLayoutProvider>\n )\n}\n\n/** The shell + an auth gate in front of it. */\nexport function AdminShell(props: AdminShellProps) {\n return (\n <AuthGate\n requireAuth={props.requireAuth ?? true}\n appName={props.appName}\n logo={props.logo}\n loginLogo={props.loginLogo}\n layout={props.loginLayout}\n tagline={props.loginTagline}\n description={props.loginDescription}\n showOAuth={props.showOAuth}\n oauthProviders={props.oauthProviders}\n >\n <AdminShellInner {...props} />\n </AuthGate>\n )\n}\nAdminShell.displayName = 'AdminShell'\n","import * as React from 'react'\nimport type { OrgAdapter, AuthAdapter } from '@fayz-ai/core'\nimport {\n PluginRuntimeProvider,\n resolvePluginRuntime,\n I18nProvider,\n coreTranslations,\n mergeTranslations,\n setCurrentLocale,\n} from '@fayz-ai/core'\nimport {\n AuthProvider,\n createAuthRuntime,\n type AuthLayout,\n type AuthPluginOptions,\n type ResolvedAuthPlugin,\n} from '@fayz-ai/plugin-auth'\nimport { NavTransitionProvider } from '@fayz-ai/ui'\nimport { createFayzSupabaseClient, getFayzSupabaseClientOptional } from '../supabase/client'\nimport { OrgProvider } from '../org/context'\nimport { createSupabaseOrgAdapter } from '../org/adapters/supabase'\nimport { createMockOrgAdapter } from '../org/adapters/mock'\nimport { useOrganizationStore } from '../org/store'\nimport { PermissionsProvider } from '../permissions/context'\nimport { ToastProvider } from '../shell/components/notifications/ToastProvider'\nimport { ChatFab, ChatPanel } from '../shell/components/chat'\nimport { useBillingStore } from '../billing/store'\nimport type { Plan } from '@fayz-ai/core'\nimport type { PlanConfig } from '../shell/types/billing'\nimport { useThemeStore } from '../shell/stores/theme.store'\nimport { resolveTheme, isSaasTheme } from '../shell/config/theme/utils'\nimport { AdminShell } from './AdminShell'\nimport { useAdminPath } from './routing'\nimport type { FayzAppConfig } from './config'\n\n// ---------------------------------------------------------------------------\n// Adapter resolution\n// ---------------------------------------------------------------------------\n\nfunction isResolvedAuthPlugin(value: FayzAppConfig['auth']): value is ResolvedAuthPlugin {\n return Boolean(value && 'kind' in value && value.kind === 'auth')\n}\n\nfunction resolveAuthRuntime(config: FayzAppConfig): ResolvedAuthPlugin {\n const auth = config.auth\n if (isResolvedAuthPlugin(auth)) return auth\n\n const provider = auth?.provider ?? auth?.adapter ?? (config.supabaseUrl ? 'supabase' : 'mock')\n const oauth = auth?.oauth ?? {\n enabled: auth?.showOAuth ?? false,\n providers: auth?.oauthProviders ?? ['google'],\n }\n\n return createAuthRuntime({\n provider,\n requireAuth: auth?.requireAuth ?? true,\n layout: auth?.layout ?? auth?.loginLayout,\n logo: auth?.logo ?? auth?.loginLogo,\n tagline: auth?.tagline ?? auth?.loginTagline,\n description: auth?.description ?? auth?.loginDescription,\n oauth,\n routes: auth?.routes,\n supabase: {\n url: auth?.supabase?.url ?? config.supabaseUrl,\n anonKey: auth?.supabase?.anonKey ?? config.supabaseAnonKey,\n client: auth?.supabase?.client ?? getFayzSupabaseClientOptional() ?? undefined,\n callbackUrl: auth?.supabase?.callbackUrl,\n resetPasswordUrl: auth?.supabase?.resetPasswordUrl,\n },\n } satisfies AuthPluginOptions)\n}\n\nexport function getAuthShellProps(auth: FayzAppConfig['auth']): {\n requireAuth?: boolean\n loginTagline?: string\n loginDescription?: string\n loginLogo?: React.ReactNode\n loginLayout?: AuthLayout\n showOAuth?: boolean\n oauthProviders?: Exclude<import('@fayz-ai/core').AuthProvider, 'email'>[]\n} {\n if (!auth) return {}\n if (isResolvedAuthPlugin(auth)) {\n return {\n requireAuth: auth.requireAuth,\n loginTagline: auth.tagline,\n loginDescription: auth.description,\n loginLogo: auth.logo,\n loginLayout: auth.layout,\n showOAuth: auth.oauth.enabled,\n oauthProviders: auth.oauth.providers,\n }\n }\n return {\n requireAuth: auth.requireAuth,\n loginTagline: auth.tagline ?? auth.loginTagline,\n loginDescription: auth.description ?? auth.loginDescription,\n loginLogo: auth.logo ?? auth.loginLogo,\n loginLayout: auth.layout ?? auth.loginLayout,\n showOAuth: auth.oauth?.enabled ?? auth.showOAuth,\n oauthProviders: auth.oauth?.providers ?? auth.oauthProviders,\n }\n}\n\nfunction resolveOrgAdapter(config: FayzAppConfig, authAdapter?: AuthAdapter): OrgAdapter {\n const org = config.org\n if (org?.adapter && typeof org.adapter === 'object') return org.adapter as OrgAdapter\n\n const strategy = org?.adapter ?? (config.supabaseUrl ? 'supabase' : 'mock')\n // The app declares its own business roles via permissions.defaultProfiles; pass\n // their identity (id/name/description) to both adapters so the role SET is\n // app-owned, not baked into the SDK.\n const declaredRoles = config.permissions?.defaultProfiles?.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n }))\n // Inject the resolved auth adapter so the org adapter can DELIVER invites (send\n // the e-mail + create the auth user) — org owns the audit row + role, auth owns delivery.\n if (strategy === 'supabase') return createSupabaseOrgAdapter({ roles: declaredRoles, authAdapter })\n return createMockOrgAdapter(config.permissions?.defaultProfiles)\n}\n\nfunction buildI18nConfig(config: FayzAppConfig): {\n defaultLocale: string\n supported: string[]\n translations: Record<string, Record<string, string>>\n} {\n const defaultLocale = config.locale?.default ?? 'en'\n const supported = config.locale?.supported ?? [defaultLocale, 'pt-BR']\n\n const pluginTranslations: Array<Record<string, Record<string, string>>> = []\n for (const plugin of config.plugins ?? []) {\n if (plugin.locales) pluginTranslations.push(plugin.locales)\n }\n\n const translations = mergeTranslations(\n coreTranslations,\n ...pluginTranslations,\n config.locale?.translations,\n )\n\n return { defaultLocale, supported, translations }\n}\n\n// ---------------------------------------------------------------------------\n// BillingInitializer — seeds the billing store from config on mount\n// ---------------------------------------------------------------------------\n\nfunction BillingInitializer({ config }: { config: FayzAppConfig }) {\n const setPlans = useBillingStore((s) => s.setPlans)\n React.useEffect(() => {\n if (config.billing?.plans) setPlans(config.billing.plans.map(normalizeBillingPlan))\n }, [config.billing, setPlans])\n return null\n}\n\nfunction normalizeBillingPlan(plan: PlanConfig): Plan {\n return {\n id: plan.id,\n name: plan.name,\n description: plan.description,\n price: plan.priceMonthly ?? plan.prices?.monthly ?? 0,\n currency: plan.currency ?? 'USD',\n interval: 'month',\n features: plan.features,\n highlighted: plan.popular,\n stripePriceId: undefined,\n }\n}\n\nfunction ThemeInitializer({ config }: { config: FayzAppConfig }) {\n const initialize = useThemeStore((s) => s.initialize)\n const setOverrides = useThemeStore((s) => s.setOverrides)\n const setMode = useThemeStore((s) => s.setMode)\n\n React.useEffect(() => {\n if (config.theme) {\n const resolved = isSaasTheme(config.theme)\n ? resolveTheme(config.theme)\n : config.theme\n setOverrides(resolved)\n }\n if (config.defaultThemeMode && typeof window !== 'undefined' && !localStorage.getItem('saas-core:theme-mode')) {\n setMode(config.defaultThemeMode)\n }\n initialize()\n }, [config.defaultThemeMode, config.theme, initialize, setMode, setOverrides])\n\n return null\n}\n\n// ---------------------------------------------------------------------------\n// AdminProviders — the provider stack shared by the admin factory/createSaasApp\n// sugar path AND the manifest-driven AdminScaffold. Resolves adapters + i18n\n// once (stable refs) and recomputes the plugin runtime reactively as the path\n// changes, so route-scoped widget visibility stays correct.\n//\n// AuthProvider → OrgProvider → PluginRuntimeProvider\n// → PermissionsProvider → I18nProvider → (BillingInitializer + children)\n// ---------------------------------------------------------------------------\n\nexport function AdminProviders({ config, children }: { config: FayzAppConfig; children: React.ReactNode }) {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n\n // Resolve adapters / i18n once per config identity.\n const resolved = React.useMemo(() => {\n if (config.supabaseUrl && config.supabaseAnonKey) {\n createFayzSupabaseClient(config.supabaseUrl, config.supabaseAnonKey)\n }\n const i18n = buildI18nConfig(config)\n const authRuntime = resolveAuthRuntime(config)\n return {\n authRuntime,\n orgAdapter: resolveOrgAdapter(config, authRuntime.adapter),\n i18n,\n plugins: config.plugins ?? [],\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config])\n\n React.useEffect(() => {\n setCurrentLocale(resolved.i18n.defaultLocale)\n }, [resolved.i18n.defaultLocale])\n\n // Recompute the plugin runtime when the hash path or tenant changes\n // (route-scoped visibility + tenant-scoped plugin data providers).\n const path = useAdminPath()\n const runtime = React.useMemo(\n () =>\n resolvePluginRuntime({\n plugins: resolved.plugins,\n context: {\n tenant: currentOrg\n ? {\n id: currentOrg.id,\n slug: currentOrg.slug,\n verticalId: currentOrg.verticalId,\n plan: currentOrg.plan,\n }\n : null,\n user: null,\n currentPath: path,\n matchedPath: path,\n layout: config.layout ?? 'sidebar',\n },\n }),\n [resolved.plugins, path, config.layout, currentOrg],\n )\n\n return (\n <AuthProvider adapter={resolved.authRuntime.adapter}>\n <OrgProvider adapter={resolved.orgAdapter} autoCreate={config.org?.autoCreate ?? true}>\n <PluginRuntimeProvider value={runtime}>\n <PermissionsProvider config={config.permissions}>\n <I18nProvider value={resolved.i18n}>\n <ThemeInitializer config={config} />\n <BillingInitializer config={config} />\n <ToastProvider />\n <NavTransitionProvider value={config.navTransition ?? 'slide'}>\n {children}\n </NavTransitionProvider>\n {config.chat?.enabled !== false && config.chat ? (\n <>\n <ChatFab apiEndpoint={config.chat.apiEndpoint} systemPrompt={config.chat.systemPrompt} />\n <ChatPanel title={config.chat.title} apiEndpoint={config.chat.apiEndpoint} systemPrompt={config.chat.systemPrompt} />\n </>\n ) : null}\n </I18nProvider>\n </PermissionsProvider>\n </PluginRuntimeProvider>\n </OrgProvider>\n </AuthProvider>\n )\n}\nAdminProviders.displayName = 'AdminProviders'\n\n// ---------------------------------------------------------------------------\n// createFayzApp — declarative admin app factory (sugar over the manifest path;\n// equivalent to renderApp(defineSaas(config)), sharing AdminProviders +\n// AdminShell with the scaffold).\n//\n// const App = createFayzApp({ name: 'Glow Studio', plugins: [...] })\n// export default App\n// ---------------------------------------------------------------------------\n\nexport function createFayzApp(config: FayzAppConfig): React.ComponentType {\n const authShellProps = getAuthShellProps(config.auth)\n function FayzApp({ children }: { children?: React.ReactNode }) {\n return (\n <AdminProviders config={config}>\n {children ?? (\n <AdminShell\n appName={config.name}\n logo={config.logo}\n layout={config.layout}\n contentFrame={config.contentFrame}\n moduleNav={config.moduleNav}\n bottomNav={config.bottomNav}\n pages={config.pages}\n {...authShellProps}\n showSettings\n showOrgSettings={config.orgSettings ?? Boolean(config.org)}\n showBranding={config.branding ?? true}\n />\n )}\n </AdminProviders>\n )\n }\n FayzApp.displayName = `FayzApp(${config.name})`\n return FayzApp\n}\n","import * as React from 'react'\nimport {\n registerScaffold,\n defineApp,\n getPluginFactory,\n getComponent,\n} from '@fayz-ai/core'\nimport type {\n AppManifest,\n PluginManifest,\n LocaleConfig,\n PermissionsConfig,\n BillingConfig as ManifestBillingConfig,\n} from '@fayz-ai/core'\nimport { AdminProviders, getAuthShellProps } from './admin-app'\nimport { AdminShell } from './AdminShell'\nimport type { FayzAppConfig, CustomPage } from './config'\n\n// ---------------------------------------------------------------------------\n// Admin scaffold — renders an admin app from a pure-data AppManifest. Mirrors\n// the storefront scaffold's dual path: defineSaas turns a FayzAppConfig into a\n// manifest (the sugar→data direction), and AdminScaffold turns a manifest back\n// into the provider stack + shell (the data→render direction). Plugins live in\n// the manifest as PluginRefs (id + JSON config) and are resolved to live\n// PluginManifests through the plugin-factory registry, exactly the contract a\n// generated app's plugins.generated.ts populates.\n// ---------------------------------------------------------------------------\n\nfunction slug(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'app'\n}\n\nconst liveConfigOption = '__fayzLiveConfigRef'\nconst liveSaasConfigs = new Map<string, FayzAppConfig>()\n\nfunction getAuthRequireAuth(config: FayzAppConfig): boolean {\n return config.auth?.requireAuth ?? true\n}\n\nfunction getLiveConfigRef(id: string): string {\n return `code:${id}`\n}\n\n/** Fayz/Saas config → AppManifest (sugar → data). During the Beauty/Resto\n * migration, config-authored apps keep a live config ref so renderApp can\n * preserve code-backed plugins and custom pages while the JSON manifest path\n * matures. Serialized manifests still resolve through plugin/page registries. */\nexport function defineSaas(config: FayzAppConfig): AppManifest {\n const id = slug(config.name)\n const configRef = getLiveConfigRef(id)\n liveSaasConfigs.set(configRef, config)\n return defineApp({\n id,\n name: config.name,\n backend: config.supabaseUrl\n ? { provider: 'supabase', url: config.supabaseUrl }\n : { provider: 'mock' },\n locale: config.locale as LocaleConfig | undefined,\n theme: config.theme as Record<string, unknown> | undefined,\n permissions: config.permissions,\n billing: config.billing as ManifestBillingConfig | undefined,\n surfaces: {\n admin: {\n scaffold: 'admin',\n plugins: (config.plugins ?? []).map((p) => ({ id: p.id })),\n options: {\n [liveConfigOption]: configRef,\n layout: config.layout ?? 'sidebar',\n requireAuth: getAuthRequireAuth(config),\n },\n },\n },\n })\n}\n\n/** Resolve a manifest's PluginRefs into live PluginManifests via the\n * plugin-factory registry. Unknown ids are skipped with a console warning so a\n * partial install degrades instead of crashing. */\nfunction resolvePlugins(manifest: AppManifest, surfaceName: string): PluginManifest[] {\n const refs = manifest.surfaces[surfaceName]?.plugins ?? []\n const plugins: PluginManifest[] = []\n for (const ref of refs) {\n if (ref.enabled === false) continue\n const factory = getPluginFactory(ref.id)\n if (!factory) {\n // eslint-disable-next-line no-console\n console.warn(`[@fayz-ai/saas] No plugin factory registered for \"${ref.id}\". Did plugins.generated.ts run?`)\n continue\n }\n plugins.push(factory(ref.config) as PluginManifest)\n }\n return plugins\n}\n\n/** Resolve manifest pages that reference a registered component id into the\n * CustomPage shape the shell renders. (entity/blocks pages are handled by the\n * plugins that own them; component pages are the app-level escape hatch.) */\nfunction resolvePages(manifest: AppManifest, surfaceName: string): CustomPage[] {\n const pages = manifest.surfaces[surfaceName]?.pages ?? []\n const out: CustomPage[] = []\n for (const p of pages) {\n if (!p.component) continue\n const Component = getComponent(p.component) as React.ComponentType | undefined\n if (!Component) {\n // eslint-disable-next-line no-console\n console.warn(`[@fayz-ai/saas] Manifest page \"${p.path}\" references unregistered component \"${p.component}\".`)\n continue\n }\n out.push({ path: p.path, label: p.label, icon: p.icon, section: p.section, component: Component })\n }\n return out\n}\n\n/** AppManifest → FayzAppConfig (data → render). */\nfunction manifestToFayzConfig(manifest: AppManifest, surfaceName: string): FayzAppConfig {\n const options = (manifest.surfaces[surfaceName]?.options ?? {}) as Record<string, unknown>\n const liveConfigRef = options[liveConfigOption]\n const liveConfig = typeof liveConfigRef === 'string' ? liveSaasConfigs.get(liveConfigRef) : undefined\n if (liveConfig) return liveConfig\n\n return {\n name: manifest.name,\n supabaseUrl: manifest.backend?.provider === 'supabase' ? manifest.backend.url : undefined,\n plugins: resolvePlugins(manifest, surfaceName),\n pages: resolvePages(manifest, surfaceName),\n theme: manifest.theme as FayzAppConfig['theme'],\n layout: (options.layout as FayzAppConfig['layout']) ?? 'sidebar',\n locale: manifest.locale as LocaleConfig | undefined,\n permissions: manifest.permissions as PermissionsConfig | undefined,\n billing: manifest.billing as FayzAppConfig['billing'],\n auth: { requireAuth: (options.requireAuth as boolean) ?? true },\n }\n}\n\nexport function AdminScaffold({ manifest, surface }: { manifest: AppManifest; surface: string }) {\n const config = React.useMemo(() => manifestToFayzConfig(manifest, surface), [manifest, surface])\n const authShellProps = React.useMemo(() => getAuthShellProps(config.auth), [config.auth])\n\n return (\n <AdminProviders config={config}>\n <AdminShell\n appName={config.name}\n logo={config.logo}\n layout={config.layout}\n bottomNav={config.bottomNav}\n onBottomNavAction={config.onBottomNavAction}\n mobileHeader={config.mobileHeader}\n pages={config.pages}\n {...authShellProps}\n showSettings\n showOrgSettings={config.orgSettings ?? Boolean(config.org)}\n showOrgSwitcher={config.org?.multiOrg !== false}\n showBranding={config.branding ?? true}\n />\n </AdminProviders>\n )\n}\nAdminScaffold.displayName = 'AdminScaffold'\n\n// Self-register so renderApp(manifest) can resolve the 'admin' scaffold once\n// this package is imported.\nregisterScaffold('admin', AdminScaffold, { source: 'sdk', label: 'Admin' })\n","import React, { useEffect, useState, useMemo, useCallback } from 'react'\nimport {\n CalendarDays, FileText, CircleDashed, CircleEllipsis, CircleCheckBig,\n CircleAlert, Ban, ShoppingBag, Clock, UserX, ExternalLink,\n} from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport type { EntityDef } from '../../../types/crud'\nimport type { ClientDocument, ClientDocumentStage, ClientOrdersProvider, ClientOrdersNavigator, ClientOrdersStageFilter } from '../../../types/client-orders'\n\n// ---------------------------------------------------------------------------\n// Stage badge config\n// ---------------------------------------------------------------------------\n\ninterface StageDef {\n icon: React.ElementType\n color: string\n labelKey: string\n}\n\nconst STAGE_CONFIG: Record<string, StageDef> = {\n draft: { icon: CircleDashed, color: 'bg-muted text-muted-foreground', labelKey: 'crud.orders.stage.draft' },\n quoted: { icon: FileText, color: 'bg-info-soft text-info-soft-foreground', labelKey: 'crud.orders.stage.quoted' },\n booked: { icon: CalendarDays, color: 'bg-magic-soft text-magic-soft-foreground', labelKey: 'crud.orders.stage.booked' },\n invoiced: { icon: FileText, color: 'bg-warning-soft text-warning-soft-foreground', labelKey: 'crud.orders.stage.invoiced' },\n paid: { icon: CircleCheckBig, color: 'bg-success-soft text-success-soft-foreground', labelKey: 'crud.orders.stage.paid' },\n partial: { icon: CircleEllipsis, color: 'bg-warning-soft text-warning-soft-foreground', labelKey: 'crud.orders.stage.partial' },\n overdue: { icon: CircleAlert, color: 'bg-destructive-soft text-destructive-soft-foreground', labelKey: 'crud.orders.stage.overdue' },\n cancelled: { icon: Ban, color: 'bg-muted text-muted-foreground', labelKey: 'crud.orders.stage.cancelled' },\n no_show: { icon: UserX, color: 'bg-destructive-soft text-destructive-soft-foreground', labelKey: 'crud.orders.stage.no_show' },\n completed: { icon: CircleCheckBig, color: 'bg-success-soft text-success-soft-foreground', labelKey: 'crud.orders.stage.completed' },\n}\n\n// ---------------------------------------------------------------------------\n// Column definitions\n// ---------------------------------------------------------------------------\n\nfunction useColumns(\n currency: { code: string; locale: string },\n t: (key: string) => string,\n onBookingClick?: (orderId: string) => void,\n onInvoiceClick?: (orderId: string) => void,\n): ColumnDef<ClientDocument, any>[] {\n return useMemo(() => [\n {\n accessorKey: 'date',\n header: t('crud.orders.columnDate'),\n size: 140,\n cell: ({ row }) => {\n const doc = row.original\n const dateStr = new Date(doc.date).toLocaleDateString(currency.locale, { day: '2-digit', month: 'short', year: '2-digit' })\n // If this order has a booking time, make it a clickable link\n if (doc.startsAt && onBookingClick) {\n const time = new Date(doc.startsAt).toLocaleTimeString(currency.locale, { hour: '2-digit', minute: '2-digit' })\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onBookingClick(doc.id) }}\n className=\"inline-flex items-center gap-1 text-xs text-magic hover:underline whitespace-nowrap\"\n >\n <CalendarDays className=\"h-3 w-3\" />\n {dateStr} {time}\n </button>\n )\n }\n return <span className=\"text-xs text-muted-foreground whitespace-nowrap\">{dateStr}</span>\n },\n },\n {\n id: 'stage',\n header: t('crud.orders.columnStage'),\n size: 120,\n cell: ({ row }) => {\n const cfg = STAGE_CONFIG[row.original.stage] ?? STAGE_CONFIG.draft\n const Icon = cfg.icon\n const translated = t(cfg.labelKey)\n const label = translated.startsWith('crud.orders.stage.') ? row.original.stage : translated\n return (\n <span className={`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${cfg.color}`}>\n <Icon className=\"h-2.5 w-2.5\" />\n {label}\n </span>\n )\n },\n },\n {\n accessorKey: 'referenceNumber',\n header: '#',\n size: 100,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num\n ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span>\n : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'description',\n header: t('crud.orders.columnDescription'),\n cell: ({ getValue }) => (\n <span className=\"text-sm truncate max-w-[200px] block\">\n {(getValue() as string) || '—'}\n </span>\n ),\n },\n {\n accessorKey: 'total',\n header: t('crud.orders.columnAmount'),\n size: 120,\n cell: ({ row }) => {\n const doc = row.original\n const val = doc.total\n if (!val) return <span className=\"text-muted-foreground\">—</span>\n const formatted = new Intl.NumberFormat(currency.locale, { style: 'currency', currency: currency.code }).format(val)\n const isFinancial = ['invoiced', 'paid', 'partial', 'overdue'].includes(doc.stage)\n // If invoiced/paid and has a reference, link to invoice detail\n if (isFinancial && onInvoiceClick) {\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onInvoiceClick(doc.id) }}\n className={`inline-flex items-center gap-1 font-medium text-sm text-primary hover:underline ${doc.stage === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}\n >\n {formatted}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n )\n }\n return (\n <span className={`font-medium text-sm ${doc.stage === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatted}\n </span>\n )\n },\n },\n ], [currency, t, onBookingClick, onInvoiceClick])\n}\n\n// ---------------------------------------------------------------------------\n// Tab Component\n// ---------------------------------------------------------------------------\n\nexport function ClientOrdersTab({\n item,\n entityDef,\n provider,\n navigator,\n initialStage,\n stageFilters,\n onBookingClick,\n onInvoiceClick,\n currency = { code: 'BRL', locale: 'pt-BR' },\n}: {\n item: any\n entityDef: EntityDef\n provider: ClientOrdersProvider\n navigator?: ClientOrdersNavigator\n initialStage?: string\n stageFilters?: ClientOrdersStageFilter[]\n onBookingClick?: (orderId: string) => void\n onInvoiceClick?: (orderId: string) => void\n currency?: { code: string; locale: string }\n}) {\n const { t } = useTranslation()\n const [docs, setDocs] = useState<ClientDocument[]>([])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(true)\n const [stageFilter, setStageFilter] = useState<string | undefined>(initialStage)\n\n const clientId = item.id as string\n\n const fetchDocs = useCallback(async () => {\n setLoading(true)\n try {\n const result = await provider.getDocuments({\n clientId,\n stages: stageFilter ? [stageFilter] : undefined,\n })\n setDocs(result.data)\n setTotal(result.total)\n } catch {\n setDocs([])\n setTotal(0)\n } finally {\n setLoading(false)\n }\n }, [clientId, stageFilter, provider])\n\n useEffect(() => { fetchDocs() }, [fetchDocs])\n\n useEffect(() => {\n setStageFilter(initialStage)\n }, [initialStage])\n\n const columns = useColumns(currency, t, onBookingClick, onInvoiceClick)\n\n const tags = useMemo(() => stageFilters ?? [\n { value: 'booked', label: t('crud.orders.stage.booked') },\n { value: 'invoiced', label: t('crud.orders.stage.invoiced') },\n { value: 'paid', label: t('crud.orders.stage.paid') },\n { value: 'quoted', label: t('crud.orders.stage.quoted') },\n ], [stageFilters, t])\n\n return (\n <ListView<ClientDocument>\n columns={columns}\n data={docs}\n loading={loading}\n searchPlaceholder={t('crud.orders.searchPlaceholder')}\n tags={tags}\n allTagLabel={t('crud.orders.all')}\n activeTag={stageFilter}\n onTagChange={(v: any) => setStageFilter(v)}\n onRowClick={navigator ? (row: any) => navigator.onNavigate(row) : undefined}\n emptyIcon={ShoppingBag}\n emptyMessage={t('crud.orders.noDocuments')}\n />\n )\n}\n","// ---------------------------------------------------------------------------\n// Factory: creates a ClientOrdersProvider that queries saas_core.orders\n// for a given client (party_id). The UI keeps the historical \"stage\" language,\n// but current archetype schemas expose this lifecycle as orders.status.\n// ---------------------------------------------------------------------------\n\nimport type { ClientOrdersProvider, ClientOrdersQuery, ClientDocument, ClientDocumentStage } from '../types/client-orders'\nimport { getSupabaseClientOptional } from './supabase'\n\nconst STAGE_FILTER_MAP: Record<string, string[]> = {\n quoted: ['draft', 'quoted'],\n booked: ['booked', 'scheduled', 'confirmed', 'in_progress', 'completed'],\n invoiced: ['invoiced', 'partial', 'overdue'],\n paid: ['paid'],\n}\n\nfunction mapOrderStatusToStage(status: string | null | undefined): ClientDocumentStage {\n switch (status) {\n case 'scheduled':\n case 'confirmed':\n case 'in_progress':\n return 'booked'\n case 'completed':\n return 'completed'\n case 'invoiced':\n case 'paid':\n case 'partial':\n case 'overdue':\n case 'cancelled':\n case 'no_show':\n case 'quoted':\n case 'draft':\n return status\n default:\n return 'draft'\n }\n}\n\nexport function createClientOrdersProvider(): ClientOrdersProvider {\n return {\n async getDocuments(query: ClientOrdersQuery): Promise<{ data: ClientDocument[]; total: number }> {\n const supabase = getSupabaseClientOptional()\n if (!supabase) return { data: [], total: 0 }\n\n try {\n let qb = supabase\n .schema('saas_core')\n .from('orders')\n .select('id, kind, status, total, reference_number, notes, metadata, created_at', { count: 'exact' })\n .eq('party_id', query.clientId)\n\n // Filter by stage groups against the current schema's status column.\n if (query.stages && query.stages.length > 0) {\n const allStages = query.stages.flatMap((s) => STAGE_FILTER_MAP[s] ?? [s])\n qb = qb.in('status', allStages)\n }\n\n qb = qb.order('created_at', { ascending: false })\n\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1)\n\n const { data, count } = await qb\n const orderIds = (data ?? []).map((row: any) => row.id).filter(Boolean)\n\n const bookingStartsByOrderId = new Map<string, string>()\n if (orderIds.length > 0) {\n const { data: bookings } = await supabase\n .schema('saas_core')\n .from('bookings')\n .select('order_id, starts_at')\n .in('order_id', orderIds)\n\n for (const booking of bookings ?? []) {\n if (booking.order_id && booking.starts_at && !bookingStartsByOrderId.has(booking.order_id)) {\n bookingStartsByOrderId.set(booking.order_id, booking.starts_at)\n }\n }\n }\n\n const results: ClientDocument[] = (data ?? []).map((row: any) => {\n const meta = (row.metadata ?? {}) as Record<string, unknown>\n const startsAt = bookingStartsByOrderId.get(row.id)\n return {\n id: row.id,\n kind: row.kind as string,\n stage: mapOrderStatusToStage(row.status as string | null | undefined),\n referenceNumber: row.reference_number ?? undefined,\n date: startsAt?.slice(0, 10) ?? (row.created_at as string)?.slice(0, 10) ?? '',\n startsAt,\n total: Number(row.total) || 0,\n paidAmount: Number(meta.paidAmount) || 0,\n description: (meta.itemsSummary as string) ?? (meta.serviceNames as string) ?? row.notes ?? undefined,\n createdAt: row.created_at as string,\n }\n })\n\n return { data: results, total: count ?? results.length }\n } catch {\n return { data: [], total: 0 }\n }\n },\n }\n}\n","import { getSupabaseClientOptional } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface EntityLookupResult {\n id: string\n label: string\n subtitle?: string\n group?: string\n icon?: string\n price?: number\n data?: Record<string, unknown>\n}\n\nexport type EntityLookupMap = Record<string, EntityLookup>\n\nexport interface EntityLookup {\n search(query: string): Promise<EntityLookupResult[]>\n getById(id: string): Promise<EntityLookupResult | null>\n list?(): Promise<EntityLookupResult[]>\n}\n\nexport type ArchetypeType = 'person' | 'product' | 'service' | 'location'\n\n// ---------------------------------------------------------------------------\n// Archetype display config\n// ---------------------------------------------------------------------------\n\nconst ARCHETYPE_DISPLAY: Record<ArchetypeType, {\n table: string\n labelField: string\n subtitleFields: string[]\n priceField?: string\n groupField?: string\n}> = {\n person: { table: 'persons', labelField: 'name', subtitleFields: ['phone'], groupField: 'kind' },\n product: { table: 'products', labelField: 'name', subtitleFields: ['sku', 'description'], priceField: 'price' },\n service: { table: 'services', labelField: 'name', subtitleFields: ['duration_minutes', 'description'], priceField: 'price' },\n location: { table: 'locations', labelField: 'name', subtitleFields: ['city', 'address'], groupField: 'kind' },\n}\n\ninterface ArchetypeLookupConfig {\n archetype: ArchetypeType\n kind?: string | string[]\n kindLabels?: Record<string, string>\n limit?: number\n subtitleFields?: string[]\n}\n\nfunction toResult(\n row: Record<string, unknown>,\n display: typeof ARCHETYPE_DISPLAY[ArchetypeType],\n kindLabels?: Record<string, string>,\n): EntityLookupResult {\n const label = String(row[display.labelField] ?? row.name ?? '')\n const subtitleParts = display.subtitleFields\n .map((f) => row[f])\n .filter(Boolean)\n .map((v) => {\n if (typeof v === 'number') return `${v}min`\n return String(v)\n })\n\n let group: string | undefined\n if (display.groupField && row[display.groupField]) {\n const rawGroup = String(row[display.groupField])\n group = kindLabels?.[rawGroup] ?? rawGroup\n }\n\n return {\n id: String(row.id),\n label,\n subtitle: subtitleParts.length > 0 ? subtitleParts.join(' · ') : undefined,\n group,\n price: display.priceField ? Number(row[display.priceField]) || undefined : undefined,\n data: row,\n }\n}\n\n/**\n * Create an EntityLookup that queries a saas_core archetype table via Supabase.\n * Returns empty results if Supabase is not configured.\n */\nexport function createArchetypeLookup(config: ArchetypeLookupConfig): EntityLookup {\n const baseDisplay = ARCHETYPE_DISPLAY[config.archetype]\n const display = config.subtitleFields\n ? { ...baseDisplay, subtitleFields: config.subtitleFields }\n : baseDisplay\n const limit = config.limit ?? 20\n const kinds = config.kind\n ? Array.isArray(config.kind) ? config.kind : [config.kind]\n : undefined\n\n function applyKindFilter(qb: any) {\n if (kinds && kinds.length === 1) return qb.eq('kind', kinds[0])\n if (kinds && kinds.length > 1) return qb.in('kind', kinds)\n return qb\n }\n\n return {\n async search(query: string) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n\n let qb = supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('is_active', true)\n .order(display.labelField, { ascending: true })\n .limit(limit)\n\n if (query) qb = qb.ilike(display.labelField, `%${query}%`)\n qb = applyKindFilter(qb)\n\n const { data } = await qb\n return (data ?? []).map((row: Record<string, unknown>) =>\n toResult(row, display, config.kindLabels),\n )\n },\n\n async list() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n\n let qb = supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('is_active', true)\n .order(display.labelField, { ascending: true })\n .limit(limit)\n\n qb = applyKindFilter(qb)\n\n const { data } = await qb\n return (data ?? []).map((row: Record<string, unknown>) =>\n toResult(row, display, config.kindLabels),\n )\n },\n\n async getById(id: string) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return null\n\n const { data } = await supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('id', id)\n .single()\n\n return data\n ? toResult(data as Record<string, unknown>, display, config.kindLabels)\n : null\n },\n }\n}\n","import React from 'react'\n\n/**\n * Page stub for modules that are planned but not built yet.\n * Usage: { path: '/marketing', label: 'Marketing', icon: 'Megaphone', component: createPlaceholder('Marketing') }\n */\nexport function createPlaceholder(title: string, description?: string): React.FC {\n return function PlaceholderPage() {\n return React.createElement(\n 'div',\n { className: 'mx-auto max-w-4xl' },\n React.createElement('h1', { className: 'text-3xl font-bold text-foreground' }, title),\n description\n ? React.createElement('p', { className: 'mt-1 text-muted-foreground' }, description)\n : null,\n React.createElement(\n 'div',\n { className: 'mt-8 flex items-center justify-center rounded-card border border-dashed border-border bg-card p-16' },\n React.createElement(\n 'div',\n { className: 'text-center' },\n React.createElement('p', { className: 'text-lg font-medium text-muted-foreground' }, 'Coming Soon'),\n React.createElement(\n 'p',\n { className: 'mt-1 text-sm text-muted-foreground/70' },\n 'This module is being built as a plugin.',\n ),\n ),\n ),\n )\n }\n}\n","import React from 'react'\nimport { cn } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// ToggleRow — a single setting with label, description, and checkbox\n// ---------------------------------------------------------------------------\n\nexport function ToggleRow({ label, description, checked, onChange, disabled }: {\n label: string\n description?: string\n checked: boolean\n onChange: (checked: boolean) => void\n disabled?: boolean\n}) {\n return (\n <label className={cn(\n 'flex items-center justify-between gap-4 py-3 cursor-pointer',\n disabled && 'opacity-50 cursor-not-allowed',\n )}>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{label}</p>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => !disabled && onChange(!checked)}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 rounded-full transition-colors duration-200',\n checked ? 'bg-primary' : 'bg-muted',\n disabled && 'cursor-not-allowed',\n )}\n >\n <span className={cn(\n 'inline-block h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200 mt-0.5',\n checked ? 'translate-x-4 ml-0.5' : 'translate-x-0.5',\n )} />\n </button>\n </label>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SelectRow — a single setting with label, description, and select dropdown\n// ---------------------------------------------------------------------------\n\nexport function SelectRow({ label, description, value, options, onChange, disabled }: {\n label: string\n description?: string\n value: string\n options: { value: string; label: string }[]\n onChange: (value: string) => void\n disabled?: boolean\n}) {\n return (\n <label className={cn(\n 'flex items-center justify-between gap-4 py-3',\n disabled && 'opacity-50 cursor-not-allowed',\n )}>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{label}</p>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n className=\"h-8 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 text-sm\"\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n </label>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SettingsGroup — a bordered section with title and children\n// ---------------------------------------------------------------------------\n\nexport function SettingsGroup({ title, description, children }: {\n title: string\n description?: string\n children: React.ReactNode\n}) {\n return (\n <div>\n <div className=\"px-1 pb-1 pt-4 first:pt-0\">\n <h3 className=\"text-sm font-semibold\">{title}</h3>\n {description && <p className=\"text-[10px] text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm px-5 divide-y\">\n {children}\n </div>\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { cn } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { ICON_MAP } from '@fayz-ai/ui'\nimport { useModuleLayout } from '@fayz-ai/ui'\nimport type { PluginQuickAction } from '@fayz-ai/core'\n\n/**\n * Quick actions button for plugin modules.\n * Shows a \"+\" button that opens a popover with contextual insert actions.\n * Reusable by any plugin.\n */\nexport function QuickActionsButton({ actions, className }: {\n actions: PluginQuickAction[]\n className?: string\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n // Solid primary in sidebar/tabs products (GHL-style), outline in topbar products.\n const variant = useModuleLayout() === 'tabs' ? 'default' : 'outline'\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n if (actions.length === 0) return null\n\n return (\n <div ref={ref} className={cn('relative', className)}>\n <Button\n variant={variant}\n size=\"sm\"\n onClick={() => setOpen(!open)}\n className={cn(open && variant === 'outline' && 'bg-muted')}\n >\n <Plus className={cn('h-3.5 w-3.5 transition-transform duration-200', open && 'rotate-45')} />\n <span>New</span>\n </Button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full right-0 z-50 mt-2 w-64 rounded-xl border bg-popover shadow-lg overflow-hidden animate-in fade-in-0 zoom-in-95 origin-top-right\">\n <div className=\"p-1.5\">\n {actions.map((action) => {\n const Icon = action.icon ? (ICON_MAP[action.icon] ?? Plus) : Plus\n return (\n <button\n key={action.id}\n onClick={() => { action.action(); setOpen(false) }}\n className=\"w-full flex items-center gap-3 rounded-lg px-3 py-2.5 text-left hover:bg-muted/50 transition-colors group\"\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted group-hover:bg-primary/10 transition-colors shrink-0\">\n <Icon className=\"h-4 w-4 text-muted-foreground group-hover:text-primary transition-colors\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{action.label}</p>\n {action.description && (\n <p className=\"text-[10px] text-muted-foreground leading-tight\">{action.description}</p>\n )}\n </div>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Settings } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport type { PluginQuickAction } from '@fayz-ai/core'\nimport { QuickActionsButton } from './QuickActionsButton'\n\n/**\n * ModuleActionBar — the single, standard top-right action area for every plugin\n * module page. Pass it straight to `ModulePage`'s `headerAction` prop.\n *\n * Owns the two things every module's header repeated by hand:\n * - a primary \"New\" action (rendered via QuickActionsButton, which adapts its\n * variant to the layout: solid in `tabs` products, outline in `rail`),\n * - a settings gear that deep-links into the central Settings area.\n *\n * Plugins stop hand-rolling `<div className=\"flex gap-2\">…gear…</div>` blocks:\n * headerAction={<ModuleActionBar quickActions={quickActions} settingsPath=\"/settings/crm\" />}\n */\nexport function ModuleActionBar({\n quickActions,\n settingsPath,\n settingsLabel,\n leading,\n trailing,\n}: {\n /** Primary insert actions. Omit (or empty) to hide the New button. */\n quickActions?: PluginQuickAction[]\n /** Hash route to the central settings tab, e.g. '/settings/crm'. Omit to hide the gear. */\n settingsPath?: string\n /** Accessible title for the gear button. */\n settingsLabel?: string\n /** Optional extra controls rendered before the New button (e.g. a filter). */\n leading?: React.ReactNode\n /** Optional extra controls rendered after the gear. */\n trailing?: React.ReactNode\n}) {\n const hasQuickActions = !!quickActions && quickActions.length > 0\n if (!hasQuickActions && !settingsPath && !leading && !trailing) return null\n\n return (\n <div className=\"flex items-center gap-2\">\n {leading}\n {hasQuickActions && <QuickActionsButton actions={quickActions} />}\n {settingsPath && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => { window.location.hash = settingsPath }}\n title={settingsLabel ?? 'Settings'}\n >\n <Settings className=\"h-4 w-4\" />\n </Button>\n )}\n {trailing}\n </div>\n )\n}\n","import React from 'react'\nimport { useStore as useZustandStore, type StoreApi } from 'zustand'\n\n/**\n * createPluginContext — the standard config/provider/store React context trio that\n * every plugin re-implemented by hand (~100 lines each). One call returns the\n * provider component plus the three typed hooks:\n *\n * const ctx = createPluginContext<ResolvedCrmConfig, CrmDataProvider, CrmUIState>('CrmPage')\n * export const CrmContextProvider = ctx.ContextProvider\n * export const useCrmConfig = ctx.useConfig\n * export const useCrmProvider = ctx.useProvider\n * export const useCrmStore = ctx.useStore\n *\n * `displayName` is only used in the \"must be used within …\" error messages.\n */\nexport interface PluginContextApi<TConfig, TProvider, TUIState> {\n ContextProvider: React.FC<{\n config: TConfig\n provider: TProvider\n store: StoreApi<TUIState>\n children?: React.ReactNode\n }>\n useConfig: () => TConfig\n useProvider: () => TProvider\n useStore: <T>(selector: (state: TUIState) => T) => T\n}\n\nexport function createPluginContext<TConfig, TProvider, TUIState>(\n displayName: string,\n): PluginContextApi<TConfig, TProvider, TUIState> {\n const ConfigContext = React.createContext<TConfig | null>(null)\n const ProviderContext = React.createContext<TProvider | null>(null)\n const StoreContext = React.createContext<StoreApi<TUIState> | null>(null)\n\n const ContextProvider: PluginContextApi<TConfig, TProvider, TUIState>['ContextProvider'] = ({\n config, provider, store, children,\n }) => (\n <ConfigContext.Provider value={config}>\n <ProviderContext.Provider value={provider}>\n <StoreContext.Provider value={store}>\n {children}\n </StoreContext.Provider>\n </ProviderContext.Provider>\n </ConfigContext.Provider>\n )\n ContextProvider.displayName = `${displayName}ContextProvider`\n\n function useConfig(): TConfig {\n const ctx = React.useContext(ConfigContext)\n if (!ctx) throw new Error(`useConfig must be used within ${displayName}`)\n return ctx\n }\n\n function useProvider(): TProvider {\n const ctx = React.useContext(ProviderContext)\n if (!ctx) throw new Error(`useProvider must be used within ${displayName}`)\n return ctx\n }\n\n function useStore<T>(selector: (state: TUIState) => T): T {\n const store = React.useContext(StoreContext)\n if (!store) throw new Error(`useStore must be used within ${displayName}`)\n return useZustandStore(store, selector)\n }\n\n return { ContextProvider, useConfig, useProvider, useStore }\n}\n","import React from 'react'\n\n/**\n * parseViewId — the ONE canonical way to split a module view string into its base\n * and optional `:id` param. Replaces the per-plugin mix of `.slice('x-detail:'.length)`,\n * `.split(':')[1]`, and regex. `'leads-detail:42'` → `{ base: 'leads-detail', id: '42' }`,\n * `'channels'` → `{ base: 'channels' }`.\n */\nexport function parseViewId(view: string): { base: string; id?: string } {\n const i = view.indexOf(':')\n return i === -1 ? { base: view } : { base: view.slice(0, i), id: view.slice(i + 1) }\n}\n\nexport interface ViewRoute {\n /** view base id, e.g. 'channels' (exact) or 'channel-detail' (matches 'channel-detail:<id>') */\n id: string\n /** render the view; `id` is the parsed `:id` param for detail/edit routes */\n render: (params: { id?: string }) => React.ReactNode\n}\n\n/**\n * createViewRouter — declarative replacement for the hand-written `renderView()`\n * switch every plugin repeated. Maps a view's base id to a renderer and falls back\n * to `fallbackId` for unknown views. Define routes inside the component so their\n * `render` closures can capture `navigate`/handlers:\n *\n * const renderView = createViewRouter([\n * { id: 'channels', render: () => <ChannelsView onOpen={(id) => navigate(`channel-detail:${id}`)} /> },\n * { id: 'channel-detail', render: ({ id }) => <ChannelDetailView channelId={id!} onBack={() => navigate('channels')} /> },\n * { id: 'overview', render: () => <OverviewView /> },\n * ], 'overview')\n * ...\n * {renderView(view)}\n *\n * Not a fit for plugins that collapse detail/edit into a parent view + mode\n * (e.g. financial's `parseIntent`) — those should still use `parseViewId` directly.\n */\nexport function createViewRouter(routes: ViewRoute[], fallbackId: string): (view: string) => React.ReactNode {\n const map = new Map(routes.map((r) => [r.id, r]))\n return (view: string) => {\n const { base, id } = parseViewId(view)\n const route = map.get(base) ?? map.get(fallbackId)\n return route ? route.render({ id }) : null\n }\n}\n","/**\n * Shared currency config + formatter. Every vertical plugin (crm, financial,\n * inventory, orders, menu, marketing) copied this same Intl.NumberFormat wrapper;\n * they now import it from here. Plugins may still re-export it under a local alias\n * (e.g. `export { formatCurrency } from '@fayz-ai/saas'`) to keep call sites short.\n */\nexport interface CurrencyConfig {\n code: string\n locale: string\n symbol: string\n}\n\nexport function formatCurrency(value: number, currency: CurrencyConfig): string {\n return new Intl.NumberFormat(currency.locale, {\n style: 'currency',\n currency: currency.code,\n minimumFractionDigits: 2,\n }).format(value)\n}\n","import React, { useState, useMemo } from 'react'\nimport type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { createCrudStore } from '../stores/createCrudStore'\nimport { createMockProvider } from '@fayz-ai/core'\nimport { CrudPage } from '../crud/CrudPage'\nimport { cn } from '@fayz-ai/ui'\nimport { ICON_MAP } from '@fayz-ai/ui'\n\n/**\n * Internal CRUD view for a single registry.\n * Manages its own store and uses a hash-based basePath for proper CRUD routing.\n */\nfunction RegistryCrudView({ registry, basePath }: { registry: PluginRegistryDef; basePath: string }) {\n const useStore = useMemo(() => {\n const data = (registry.mockData ?? registry.seedData ?? []) as any[]\n const provider = createMockProvider(registry.entity as EntityDef<any>, data)\n return createCrudStore(provider)\n }, [registry.id])\n\n return (\n <CrudPage\n entityDef={registry.entity as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={registry.display === 'cards' ? 'cards' : 'table'}\n readOnly={registry.readOnly}\n />\n )\n}\n\n/**\n * Reusable tabbed CRUD manager for plugin registries.\n * @param routeBase — hash route prefix for CRUD sub-routing (e.g. '/financial/settings')\n */\nexport function PluginRegistryManager({ registries, routeBase, className }: {\n registries: PluginRegistryDef[]\n /** Base route for CRUD navigation (e.g. '/financial/settings'). Each registry gets routeBase/registryId */\n routeBase?: string\n className?: string\n}) {\n // Derive active tab from hash if routeBase provided, otherwise use state\n const getTabFromHash = () => {\n if (!routeBase) return registries[0]?.id ?? ''\n const hash = window.location.hash.slice(1) || '/'\n if (hash.startsWith(routeBase + '/')) {\n const rest = hash.slice(routeBase.length + 1)\n const tabId = rest.split('/')[0]\n if (registries.find((r) => r.id === tabId)) return tabId\n }\n return registries[0]?.id ?? ''\n }\n\n const [activeTab, setActiveTab] = useState(getTabFromHash)\n\n // Sync tab from hash changes\n React.useEffect(() => {\n if (!routeBase) return\n const handler = () => setActiveTab(getTabFromHash())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase])\n\n function switchTab(tabId: string) {\n setActiveTab(tabId)\n if (routeBase) {\n window.location.hash = `${routeBase}/${tabId}`\n }\n }\n\n if (registries.length === 0) return null\n\n const activeRegistry = registries.find((r) => r.id === activeTab) ?? registries[0]\n const crudBasePath = routeBase ? `${routeBase}/${activeRegistry.id}` : `/__registry/${activeRegistry.id}`\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Tabs */}\n <div className=\"flex gap-1 overflow-x-auto pb-1\">\n {registries.map((reg) => {\n const Icon = reg.icon ? (ICON_MAP[reg.icon] ?? null) : null\n const active = reg.id === activeTab\n return (\n <button\n key={reg.id}\n onClick={() => switchTab(reg.id)}\n className={cn(\n 'flex items-center gap-1.5 whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-colors shrink-0',\n active\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/50'\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {reg.entity.name}\n </button>\n )\n })}\n </div>\n\n {/* Description */}\n {activeRegistry?.description && (\n <p className=\"text-xs text-muted-foreground\">{activeRegistry.description}</p>\n )}\n\n {/* CRUD content — keyed so it remounts when switching tabs */}\n {activeRegistry && <RegistryCrudView key={activeRegistry.id} registry={activeRegistry} basePath={crudBasePath} />}\n </div>\n )\n}\n","import { useState, useRef, useCallback, useEffect } from 'react'\n\n/**\n * Navigation direction for transition animations.\n * 'forward' = deeper into content (list → detail → edit, or main → settings)\n * 'back' = returning to parent (edit → detail → list, or settings → main)\n */\nexport type NavDirection = 'forward' | 'back'\n\n/**\n * View depth mapping — used to determine animation direction.\n * Higher depth = deeper in the navigation hierarchy.\n */\nexport type DepthMap = Record<string, number>\n\nconst DEFAULT_DEPTHS: DepthMap = {\n summary: 0,\n list: 0,\n new: 1,\n edit: 2,\n detail: 1,\n settings: 1,\n}\n\n/**\n * Reusable module navigation hook for plugins.\n * Manages view state, hash synchronization, and animation direction.\n *\n * @param hashBase — the base hash path for this module (e.g. '/financial')\n * @param depthMap — optional custom depth mapping for views\n */\nexport function useModuleNavigation(hashBase: string, depthMap?: DepthMap, homeView = 'summary') {\n const depths = { ...DEFAULT_DEPTHS, ...depthMap }\n\n function getInitialView(): string {\n const rawHash = window.location.hash.slice(1) || '/'\n // Strip query string from hash before parsing segments\n const hash = rawHash.split('?')[0]\n if (hash === hashBase || hash === hashBase + '/') return homeView\n if (hash.startsWith(hashBase + '/settings')) return 'settings'\n if (hash.startsWith(hashBase + '/')) {\n const rest = hash.slice(hashBase.length + 1)\n const segments = rest.split('/')\n // '/inventory/dashboard' → treat as home view\n if (segments.length === 1 && segments[0] === homeView) return homeView\n // Detect action + ID patterns: '/products/edit/uuid' or '/stock/detail/uuid'\n const ACTION_KEYWORDS = ['edit', 'detail', 'view']\n if (segments.length >= 3) {\n const maybeAction = segments[segments.length - 2]\n if (ACTION_KEYWORDS.includes(maybeAction)) {\n return segments.slice(0, -2).join('-') + '-' + maybeAction + ':' + segments[segments.length - 1]\n }\n }\n return segments.join('-')\n }\n return homeView\n }\n\n const [view, setView] = useState(getInitialView)\n const [direction, setDirection] = useState<NavDirection>('forward')\n const prevDepthRef = useRef(getDepth(getInitialView()))\n\n // Track recent in-module views so detail/subpages can render a context-aware\n // back link (\"Back to {where you came from}\") and return to the actual\n // previous page rather than a hard-coded parent route. Records every distinct\n // view (regardless of how it was reached: navigate(), topbar, browser back).\n const historyRef = useRef<string[]>([getInitialView()])\n const [previousView, setPreviousView] = useState<string | null>(null)\n useEffect(() => {\n const stack = historyRef.current\n if (stack[stack.length - 1] !== view) {\n stack.push(view)\n if (stack.length > 30) stack.shift()\n }\n setPreviousView(stack.length >= 2 ? stack[stack.length - 2] : null)\n }, [view])\n\n // Sync view from external hash changes (e.g., topbar nav clicking the module link)\n useEffect(() => {\n function handler() {\n const hash = (window.location.hash.slice(1) || '/').split('?')[0]\n // Only react if the hash is within our module's base\n if (hash === hashBase || hash === hashBase + '/' || hash.startsWith(hashBase + '/')) {\n const newView = getInitialView()\n if (newView !== view) {\n const nextDepth = getDepth(newView)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setView(newView)\n }\n }\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [view, hashBase])\n\n function getDepth(v: string): number {\n // Check exact match first\n if (depths[v] !== undefined) return depths[v]\n // Check base view name (e.g. 'payables-list' → check 'list', 'payables-new' → check 'new')\n const parts = v.split('-')\n const suffix = parts[parts.length - 1]\n if (depths[suffix] !== undefined) return depths[suffix]\n // Edit with ID (e.g. 'payables-edit:123')\n if (v.includes('edit')) return depths.edit ?? 2\n return 0\n }\n\n const navigate = useCallback((nextView: string, hash?: string) => {\n const nextDepth = getDepth(nextView)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setView(nextView)\n\n // Sync hash — explicit hash takes priority, otherwise derive from view name\n if (hash) {\n window.location.hash = hash\n } else if (nextView === homeView || nextView === 'summary' || nextView === '') {\n window.location.hash = hashBase\n } else {\n // Convert view name to URL-friendly path: 'payables-list' → '/financial/payables/list'\n // 'payables-edit:uuid-with-dashes' → '/financial/payables/edit/uuid-with-dashes'\n const colonIdx = nextView.indexOf(':')\n if (colonIdx !== -1) {\n // Has an ID after colon — only convert dashes in the prefix, keep ID intact\n const prefix = nextView.slice(0, colonIdx).replace(/-/g, '/')\n const id = nextView.slice(colonIdx + 1)\n window.location.hash = `${hashBase}/${prefix}/${id}`\n } else {\n const path = nextView.replace(/-/g, '/')\n window.location.hash = `${hashBase}/${path}`\n }\n }\n }, [hashBase])\n\n // Return to the actual previous page. Uses the browser history when there's\n // in-app history to pop (preserving the prior page); otherwise navigates to a\n // sensible fallback (deep links / direct loads have nowhere to go back to).\n const back = useCallback((fallbackView?: string) => {\n if (historyRef.current.length >= 2) {\n window.history.back()\n } else {\n navigate(fallbackView ?? homeView)\n }\n }, [navigate, homeView])\n\n const animationClass = direction === 'forward' ? 'saas-nav-forward' : 'saas-nav-back'\n\n return { view, direction, animationClass, navigate, previousView, back }\n}\n","import React, { useState, useCallback, useRef } from 'react'\nimport { Mail, Phone, ExternalLink, Cake, Calendar } from 'lucide-react'\nimport { Popover, PopoverTrigger, PopoverContent } from '@fayz-ai/ui'\nimport { createArchetypeLookup } from '../../archetype-lookup'\nimport type { EntityLookupResult } from '../../archetype-lookup'\nimport { cn } from '@fayz-ai/ui'\nimport { resolveEntityHref } from '../../lib/entity-routes'\n\n// Singleton person lookup — shared across all PersonLink instances\nconst personLookup = createArchetypeLookup({ archetype: 'person' })\n\ninterface PersonLinkProps {\n /** Person UUID — required for fetching details */\n personId?: string | null\n /** Display name (shown as the clickable text) */\n name: string\n /** Optional href to navigate to the person's profile */\n profileHref?: string\n /** Optional tab to open on the detail page (e.g. \"schedule\") */\n tab?: string\n /** Size variant */\n size?: 'sm' | 'default'\n /** Additional className for the trigger */\n className?: string\n}\n\nfunction formatAge(dob: string): string | null {\n try {\n const birth = new Date(dob)\n const now = new Date()\n let age = now.getFullYear() - birth.getFullYear()\n if (now.getMonth() < birth.getMonth() || (now.getMonth() === birth.getMonth() && now.getDate() < birth.getDate())) age--\n return `${age}y`\n } catch { return null }\n}\n\nexport function PersonLink({ personId, name, profileHref, tab, size = 'default', className }: PersonLinkProps) {\n const [person, setPerson] = useState<EntityLookupResult | null>(null)\n const [loading, setLoading] = useState(false)\n const [fetched, setFetched] = useState(false)\n const [open, setOpen] = useState(false)\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const fetchPerson = useCallback(() => {\n if (!fetched && personId) {\n setLoading(true)\n personLookup.getById(personId).then((result) => {\n setPerson(result)\n setFetched(true)\n setLoading(false)\n }).catch(() => {\n setFetched(true)\n setLoading(false)\n })\n }\n }, [personId, fetched])\n\n const handleOpenChange = useCallback((v: boolean) => {\n setOpen(v)\n if (v) fetchPerson()\n }, [fetchPerson])\n\n function handleMouseEnter() {\n hoverTimer.current = setTimeout(() => { setOpen(true); fetchPerson() }, 800)\n }\n\n function handleMouseLeave() {\n if (hoverTimer.current) { clearTimeout(hoverTimer.current); hoverTimer.current = null }\n }\n\n // If no personId, just render the name as plain text\n if (!personId) {\n return <span className={cn(size === 'sm' ? 'text-xs' : 'text-sm', className)}>{name}</span>\n }\n\n const data = person?.data as Record<string, unknown> | undefined\n const email = data?.email as string | undefined\n const phone = data?.phone as string | undefined\n const kind = data?.kind as string | undefined ?? person?.group\n const isActive = data?.is_active as boolean | undefined\n const dob = data?.date_of_birth as string | undefined\n const createdAt = data?.created_at as string | undefined\n const age = dob ? formatAge(dob) : null\n const initial = name.charAt(0).toUpperCase()\n\n // Auto-derive profile href from person kind if not explicitly provided\n const resolvedHref = profileHref ?? (personId ? '#' + resolveEntityHref(personId, 'person', kind ?? undefined, tab) : undefined)\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n 'font-medium text-foreground underline decoration-dashed decoration-muted-foreground/40 underline-offset-2 hover:decoration-primary hover:text-primary transition-colors truncate text-left',\n size === 'sm' ? 'text-xs' : 'text-sm',\n className\n )}\n >\n {name}\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"start\" sideOffset={6}>\n {loading ? (\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-muted/40 animate-pulse\" />\n <div className=\"space-y-1.5 flex-1\">\n <div className=\"h-3.5 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2.5 w-16 rounded bg-muted/30 animate-pulse\" />\n </div>\n </div>\n <div className=\"space-y-2 pt-1\">\n <div className=\"h-3 w-36 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/30 animate-pulse\" />\n </div>\n </div>\n ) : (\n <div>\n {/* Header with profile link */}\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary text-sm font-bold\">\n {initial}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold truncate\">{name}</p>\n <div className=\"flex items-center gap-1.5 mt-0.5\">\n {kind && (\n <span className=\"inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground capitalize\">\n {kind}\n </span>\n )}\n {isActive !== undefined && (\n <span className={`inline-flex items-center gap-1 text-[10px] ${isActive ? 'text-success' : 'text-muted-foreground/50'}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${isActive ? 'bg-success' : 'bg-muted-foreground/30'}`} />\n {isActive ? 'Active' : 'Inactive'}\n </span>\n )}\n </div>\n </div>\n {resolvedHref && (\n <a\n href={resolvedHref}\n onClick={(e) => { e.preventDefault(); window.location.hash = resolvedHref.replace(/^#/, '') }}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors shrink-0\"\n title=\"View profile\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n )}\n </div>\n\n {/* Contact details */}\n {(email || phone || age) && (\n <div className=\"px-4 pb-3 space-y-1.5\">\n {email && (\n <a href={`mailto:${email}`} className=\"flex items-center gap-2 text-xs text-muted-foreground hover:text-primary transition-colors\">\n <Mail className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">{email}</span>\n </a>\n )}\n {phone && (\n <a href={`tel:${phone}`} className=\"flex items-center gap-2 text-xs text-muted-foreground hover:text-primary transition-colors\">\n <Phone className=\"h-3 w-3 shrink-0\" />\n <span>{phone}</span>\n </a>\n )}\n {dob && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Cake className=\"h-3 w-3 shrink-0\" />\n <span>{new Date(dob).toLocaleDateString()}{age ? ` (${age})` : ''}</span>\n </div>\n )}\n </div>\n )}\n\n {/* No details found */}\n {!person && fetched && (\n <div className=\"px-4 pb-3\">\n <p className=\"text-xs text-muted-foreground\">No additional details available</p>\n </div>\n )}\n\n {/* Footer — created at */}\n {createdAt && (\n <div className=\"border-t px-4 py-2 flex items-center gap-1.5 text-[10px] text-muted-foreground/50\">\n <Calendar className=\"h-2.5 w-2.5\" />\n <span>Added {new Date(createdAt).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n}\n","import { useState, useCallback, useMemo } from 'react'\n\n// ---------------------------------------------------------------------------\n// Plugin Preferences — localStorage-backed per-plugin user preferences\n//\n// Usage:\n// const prefs = usePluginPrefs('agenda', { calendarView: 'timeGridWeek', slotDuration: 30 })\n// prefs.get('calendarView') // 'timeGridWeek'\n// prefs.set('calendarView', 'dayGridMonth')\n// prefs.getAll() // { calendarView: 'dayGridMonth', slotDuration: 30 }\n// prefs.reset() // back to defaults\n//\n// Keys are namespaced: `saas:prefs:{pluginId}` in localStorage.\n// Each plugin gets its own isolated namespace.\n// ---------------------------------------------------------------------------\n\nconst STORAGE_PREFIX = 'saas:prefs:'\n\nfunction readStore<T extends Record<string, unknown>>(pluginId: string, defaults: T): T {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n if (!raw) return { ...defaults }\n return { ...defaults, ...JSON.parse(raw) }\n } catch {\n return { ...defaults }\n }\n}\n\nfunction writeStore<T extends Record<string, unknown>>(pluginId: string, data: T): void {\n try {\n localStorage.setItem(STORAGE_PREFIX + pluginId, JSON.stringify(data))\n } catch { /* quota exceeded or private browsing — silently ignore */ }\n}\n\nexport interface PluginPrefs<T extends Record<string, unknown>> {\n /** Get a single preference value */\n get<K extends keyof T>(key: K): T[K]\n /** Set a single preference value (persists immediately) */\n set<K extends keyof T>(key: K, value: T[K]): void\n /** Update multiple preferences at once */\n update(partial: Partial<T>): void\n /** Get all preferences as an object */\n getAll(): T\n /** Reset all preferences to defaults */\n reset(): void\n}\n\n/**\n * Hook for localStorage-backed plugin preferences.\n *\n * @param pluginId Unique plugin identifier (e.g. 'agenda', 'financial')\n * @param defaults Default values — also defines the shape of the prefs object\n * @returns PluginPrefs accessor with get/set/update/reset\n */\nexport function usePluginPrefs<T extends Record<string, unknown>>(\n pluginId: string,\n defaults: T,\n): PluginPrefs<T> {\n const [state, setState] = useState<T>(() => readStore(pluginId, defaults))\n\n const get = useCallback(<K extends keyof T>(key: K): T[K] => {\n return state[key]\n }, [state])\n\n const set = useCallback(<K extends keyof T>(key: K, value: T[K]): void => {\n setState((prev) => {\n const next = { ...prev, [key]: value }\n writeStore(pluginId, next)\n return next\n })\n }, [pluginId])\n\n const update = useCallback((partial: Partial<T>): void => {\n setState((prev) => {\n const next = { ...prev, ...partial }\n writeStore(pluginId, next)\n return next\n })\n }, [pluginId])\n\n const getAll = useCallback((): T => state, [state])\n\n const reset = useCallback((): void => {\n setState({ ...defaults })\n writeStore(pluginId, defaults)\n }, [pluginId, defaults])\n\n return useMemo(() => ({ get, set, update, getAll, reset }), [get, set, update, getAll, reset])\n}\n\n// ---------------------------------------------------------------------------\n// Non-hook utility for use outside React components (e.g. in store factories)\n// ---------------------------------------------------------------------------\n\nexport function getPluginPref<T>(pluginId: string, key: string, defaultValue: T): T {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n if (!raw) return defaultValue\n const parsed = JSON.parse(raw)\n return parsed[key] ?? defaultValue\n } catch {\n return defaultValue\n }\n}\n\nexport function setPluginPref(pluginId: string, key: string, value: unknown): void {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n const existing = raw ? JSON.parse(raw) : {}\n existing[key] = value\n localStorage.setItem(STORAGE_PREFIX + pluginId, JSON.stringify(existing))\n } catch { /* ignore */ }\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Plug, CheckCircle2, Loader2, ChevronDown, Power } from 'lucide-react'\nimport { Button, ICON_MAP } from '@fayz-ai/ui'\nimport type { ConnectorDefinition, ConnectorStatus } from '@fayz-ai/core'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { toast } from '../notifications/ToastProvider'\n\n// ---------------------------------------------------------------------------\n// Connectors hub — the ONE unified setup experience every connector uses.\n//\n// An addon plugin contributes a ConnectorDefinition; the host plugin's settings\n// render this hub in its \"Integrations\" tab. Credential connectors (api-key /\n// mtls) get a declarative form (Test / Save); OAuth connectors get a Connect\n// button. Each connector's own extras (import statement, sync now, history) come\n// from its `ExtraPanel`. Adding a new connector needs no change here.\n// ---------------------------------------------------------------------------\n\nfunction ConnectorCard({ connector }: { connector: ConnectorDefinition }) {\n const { t } = useTranslation()\n const [status, setStatus] = useState<ConnectorStatus | null>(null)\n const [open, setOpen] = useState(false)\n const [values, setValues] = useState<Record<string, string>>({})\n const [testing, setTesting] = useState(false)\n const [saving, setSaving] = useState(false)\n const [oauthing, setOauthing] = useState(false)\n\n const loadStatus = useCallback(async () => {\n try { setStatus(await connector.getStatus()) } catch { setStatus({ connected: false }) }\n }, [connector])\n\n useEffect(() => { void loadStatus() }, [loadStatus])\n\n const connected = !!status?.connected\n const Icon = connector.icon ? (ICON_MAP[connector.icon] ?? Plug) : Plug\n\n async function handleTest() {\n if (!connector.testConnection) return\n setTesting(true)\n try {\n const res = await connector.testConnection(values)\n res.ok ? toast.success(res.message ?? t('connectors.connected')) : toast.error(res.message ?? t('common.error'))\n } catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n finally { setTesting(false) }\n }\n\n async function handleSave() {\n if (!connector.saveConnection) return\n setSaving(true)\n try {\n await connector.saveConnection(values)\n toast.success(t('connectors.save'))\n await loadStatus()\n } catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n finally { setSaving(false) }\n }\n\n async function handleConnectOAuth() {\n if (!connector.startOAuth) return\n setOauthing(true)\n try { window.location.href = await connector.startOAuth(window.location.href) }\n catch (e: any) { toast.error(e?.message ?? t('common.error')); setOauthing(false) }\n }\n\n async function handleDisconnect() {\n if (!connector.disconnect) return\n try { await connector.disconnect(); toast.success(t('connectors.disconnect')); await loadStatus() }\n catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n }\n\n const ExtraPanel = connector.ExtraPanel\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n {/* Header — always visible */}\n <button\n onClick={() => setOpen((o) => !o)}\n className=\"w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/30 transition-colors\"\n >\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold truncate\">{connector.name}</p>\n {connector.description && <p className=\"text-[11px] text-muted-foreground truncate\">{connector.description}</p>}\n </div>\n <span className={`inline-flex items-center gap-1 text-[11px] shrink-0 ${connected ? 'text-success' : 'text-muted-foreground'}`}>\n {connected\n ? <><CheckCircle2 className=\"h-3.5 w-3.5\" /> {t('connectors.connected')}</>\n : t('connectors.notConnected')}\n </span>\n <ChevronDown className={`h-4 w-4 text-muted-foreground shrink-0 transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"border-t px-4 py-4 space-y-4\">\n {/* Connect panel — credentials form OR OAuth */}\n {connector.authKind === 'oauth' ? (\n <div className=\"flex items-center gap-2\">\n <Button onClick={handleConnectOAuth} disabled={oauthing}>\n {oauthing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plug className=\"h-4 w-4\" />}\n {connected ? t('connectors.connected') : `${t('connectors.connect')} ${connector.name}`}\n </Button>\n {connected && connector.disconnect && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleDisconnect}>\n <Power className=\"h-3.5 w-3.5\" /> {t('connectors.disconnect')}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {(connector.fields ?? []).map((f) => (\n <label key={f.key} className=\"block\">\n <span className=\"text-xs font-medium text-muted-foreground\">{f.label}</span>\n <input\n type={f.type}\n value={values[f.key] ?? ''}\n onChange={(e) => setValues((v) => ({ ...v, [f.key]: e.target.value }))}\n placeholder={f.placeholder}\n className=\"w-full mt-1 rounded-input border border-input bg-card px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </label>\n ))}\n </div>\n <div className=\"flex gap-2\">\n {connector.testConnection && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleTest} disabled={testing}>\n {testing ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Plug className=\"h-3.5 w-3.5\" />} {t('connectors.test')}\n </Button>\n )}\n {connector.saveConnection && (\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n {saving ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <CheckCircle2 className=\"h-3.5 w-3.5\" />} {t('connectors.save')}\n </Button>\n )}\n {connected && connector.disconnect && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleDisconnect}>\n <Power className=\"h-3.5 w-3.5\" /> {t('connectors.disconnect')}\n </Button>\n )}\n </div>\n </div>\n )}\n\n {/* Connector-specific extras (import / sync / history) */}\n {ExtraPanel && <div className=\"pt-1\"><ExtraPanel /></div>}\n </div>\n )}\n </div>\n )\n}\n\nexport function ConnectorsHub({ connectors }: { connectors: ConnectorDefinition[] }) {\n const { t } = useTranslation()\n if (!connectors || connectors.length === 0) {\n return <p className=\"text-sm text-muted-foreground py-8 text-center\">{t('connectors.empty')}</p>\n }\n return (\n <div className=\"space-y-3 max-w-3xl\">\n {connectors.map((c) => <ConnectorCard key={c.id} connector={c} />)}\n </div>\n )\n}\n","import React, { useState, useMemo } from 'react'\nimport { ChevronLeft, Settings, Plug, TableProperties } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ICON_MAP } from '@fayz-ai/ui'\nimport type { PluginRegistryDef } from '../../types/plugins'\nimport type { EntityDef } from '../../types/crud'\nimport { createCrudStore } from '../../../stores/createCrudStore'\nimport { resolveDataProvider, useConnectorsForPlugin } from '@fayz-ai/core'\nimport { CrudPage } from '../../../crud/CrudPage'\nimport { ConnectorsHub } from './ConnectorsHub'\n\n// ---------------------------------------------------------------------------\n// Settings tab definition — General, custom tabs, and registry tabs all unified\n// ---------------------------------------------------------------------------\n\nexport interface SettingsPanelTab {\n id: string\n label: string\n icon?: string\n content: React.ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Internal: CRUD view for a registry\n// ---------------------------------------------------------------------------\n\nfunction RegistryCrudView({ registry, basePath }: { registry: PluginRegistryDef; basePath: string }) {\n const useStore = useMemo(() => {\n const mockData = (registry.mockData ?? registry.seedData ?? []) as any[]\n const provider = resolveDataProvider(registry.entity as EntityDef<any>, mockData)\n return createCrudStore(provider)\n }, [registry.id])\n\n return (\n <CrudPage\n entityDef={registry.entity as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={registry.display === 'cards' ? 'cards' : 'table'}\n readOnly={registry.readOnly}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Properties tab — the plugin's CRUD registries as an inner (pill) tab strip.\n// Sub-routes at `${routeBase}/_properties/<registryId>`; also accepts the legacy\n// flat `${routeBase}/<registryId>` deep links.\n// ---------------------------------------------------------------------------\n\nfunction PropertiesTab({ registries, routeBase, regLabel }: {\n registries: PluginRegistryDef[]\n routeBase: string\n regLabel: (id: string, fallback: string) => string\n}) {\n function getActive(): string {\n const hash = window.location.hash.slice(1)\n const nested = `${routeBase}/_properties/`\n if (hash.startsWith(nested)) {\n const id = hash.slice(nested.length).split('/')[0]\n if (registries.find((r) => r.id === id)) return id\n }\n const flat = `${routeBase}/`\n if (hash.startsWith(flat)) {\n const id = hash.slice(flat.length).split('/')[0]\n if (registries.find((r) => r.id === id)) return id // legacy deep link\n }\n return registries[0]?.id ?? ''\n }\n\n const [active, setActive] = useState(getActive)\n React.useEffect(() => {\n const handler = () => setActive(getActive())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase, registries])\n\n function select(id: string) {\n setActive(id)\n window.location.hash = `${routeBase}/_properties/${id}`\n }\n\n const activeReg = registries.find((r) => r.id === active) ?? registries[0]\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex gap-1.5 flex-wrap\">\n {registries.map((r) => {\n const Icon = r.icon ? (ICON_MAP[r.icon] ?? null) : null\n const on = r.id === activeReg?.id\n return (\n <button\n key={r.id}\n onClick={() => select(r.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors',\n on ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground hover:bg-muted/70',\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {regLabel(r.id, r.entity.namePlural ?? r.entity.name)}\n </button>\n )\n })}\n </div>\n {activeReg?.description && (\n <p className=\"text-xs text-muted-foreground\">{regLabel(activeReg.id + '.description', activeReg.description)}</p>\n )}\n {activeReg && (\n <RegistryCrudView key={activeReg.id} registry={activeReg} basePath={`${routeBase}/_properties/${activeReg.id}`} />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Plugin settings panel\n// ---------------------------------------------------------------------------\n\nexport function PluginSettingsPanel({ title, subtitle, generalSettings, registries, customTabs, routeBase, hostPluginId, onClose }: {\n title: string\n subtitle?: string\n /** General preferences component */\n generalSettings?: React.ReactNode\n /** CRUD registries — grouped under a \"Properties\" tab */\n registries?: PluginRegistryDef[]\n /** Additional custom tabs (e.g., Pipeline config for CRM) */\n customTabs?: SettingsPanelTab[]\n /** Hash route base for CRUD sub-routing */\n routeBase: string\n /** This plugin's id — used to surface connectors addons registered for it in an Integrations tab. */\n hostPluginId?: string\n /** Called when back button is clicked. If not provided, back button is hidden. */\n onClose?: () => void\n}) {\n const { t } = useTranslation()\n\n // Connectors that addon plugins registered against this host plugin.\n const connectors = useConnectorsForPlugin(hostPluginId ?? '')\n\n // Translate registry entity name: try t('registry.{id}'), fallback to raw name\n const regLabel = (id: string, fallback: string) => {\n const key = `registry.${id}`\n const translated = t(key)\n return translated === key ? fallback : translated\n }\n\n // Standard tab list: General → custom tabs → Integrations → Properties.\n // Standard tabs carry their lucide component directly (IconComp) so they render\n // regardless of ICON_MAP; custom tabs still resolve their string icon via ICON_MAP.\n type Tab = {\n id: string; label: string; type: 'general' | 'custom' | 'integrations' | 'properties'\n icon?: string; IconComp?: React.ComponentType<{ className?: string }>\n }\n const tabs = useMemo<Tab[]>(() => {\n const list: Tab[] = []\n\n if (generalSettings) {\n list.push({ id: '_general', label: t('settings.general'), IconComp: Settings, type: 'general' })\n }\n if (customTabs) {\n for (const tab of customTabs) {\n list.push({ id: tab.id, label: tab.label, icon: tab.icon, type: 'custom' })\n }\n }\n if (connectors.length > 0) {\n list.push({ id: '_integrations', label: t('connectors.title'), IconComp: Plug, type: 'integrations' })\n }\n if (registries && registries.length > 0) {\n list.push({ id: '_properties', label: t('settings.properties'), IconComp: TableProperties, type: 'properties' })\n }\n\n return list\n }, [generalSettings, customTabs, connectors.length, registries, t])\n\n // Always use hash routing — the app router now prefix-matches /settings/*\n const useHashRouting = true\n\n function getActiveFromHash(): string {\n if (!useHashRouting) return tabs[0]?.id ?? ''\n const hash = window.location.hash.slice(1) || '/'\n if (hash.startsWith(routeBase + '/')) {\n const rest = hash.slice(routeBase.length + 1).split('/')[0]\n const match = tabs.find((t) => t.id === rest)\n if (match) return match.id\n const legacyCustom = rest.startsWith('_custom_') ? rest.slice('_custom_'.length) : null\n if (legacyCustom && tabs.find((t) => t.id === legacyCustom && t.type === 'custom')) return legacyCustom\n // Legacy/nested: a registry id (flat or under _properties) → Properties tab.\n if (registries?.some((r) => r.id === rest) && tabs.some((t) => t.id === '_properties')) return '_properties'\n }\n return tabs[0]?.id ?? ''\n }\n\n const [activeTab, setActiveTab] = useState(getActiveFromHash)\n\n React.useEffect(() => {\n if (!useHashRouting) return\n const handler = () => setActiveTab(getActiveFromHash())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase, tabs, useHashRouting])\n\n function switchTab(tabId: string) {\n setActiveTab(tabId)\n if (useHashRouting) {\n window.location.hash = `${routeBase}/${tabId}`\n }\n }\n\n const activeTabDef = tabs.find((t) => t.id === activeTab) ?? tabs[0]\n const customTabContent = customTabs?.find((t) => t.id === activeTab)\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-center gap-3\">\n {onClose && (\n <button onClick={onClose} className=\"flex h-8 w-8 items-center justify-center rounded-lg border hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\">\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n )}\n <div>\n <h2 className=\"text-lg font-bold\">{title}</h2>\n {subtitle && <p className=\"text-xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n\n {/* Unified tabs — underline style */}\n <div className=\"flex gap-0.5 overflow-x-auto border-b scrollbar-none\" style={{ scrollbarWidth: 'none' }}>\n {tabs.map((tab) => {\n const Icon = tab.IconComp ?? (tab.icon ? (ICON_MAP[tab.icon] ?? null) : null)\n const active = tab.id === activeTab\n return (\n <button\n key={tab.id}\n onClick={() => switchTab(tab.id)}\n className={cn(\n 'flex items-center gap-1.5 whitespace-nowrap px-3 py-2 text-sm font-medium transition-colors shrink-0 border-b-2 -mb-px',\n active\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-muted',\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {tab.label}\n </button>\n )\n })}\n </div>\n\n {/* Content */}\n {activeTabDef?.type === 'general' && generalSettings && (\n <div>{generalSettings}</div>\n )}\n\n {activeTabDef?.type === 'custom' && customTabContent && (\n <div>{customTabContent.content}</div>\n )}\n\n {activeTabDef?.type === 'integrations' && (\n <ConnectorsHub connectors={connectors} />\n )}\n\n {activeTabDef?.type === 'properties' && registries && registries.length > 0 && (\n <PropertiesTab registries={registries} routeBase={routeBase} regLabel={regLabel} />\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/shell/stores/chat.store.ts","../src/shell/lib/core-ai-tools.ts","../src/shell/hooks/useAITools.ts","../src/shell/hooks/useChat.ts","../src/shell/hooks/useTranslation.ts","../src/shell/components/chat/ChatFab.tsx","../src/shell/components/chat/ChatSuggestions.tsx","../src/shell/components/chat/ChatPanel.tsx","../src/shell/config/theme/light.ts","../src/shell/config/theme/dark.ts","../src/shell/config/theme/utils.ts","../src/shell/stores/theme.store.ts","../src/shell/components/layout/CommandPalette.tsx","../src/app/routing.tsx","../src/lib/entity-routes.ts","../src/shell/stores/locale.store.ts","../src/shell/lib/locale-config.ts","../src/shell/components/settings/CompanySettings.tsx","../src/shell/lib/org-context.ts","../src/shell/components/settings/ConnectedCompanySettings.tsx","../src/shell/components/settings/UserProfile.tsx","../src/shell/lib/supabase.ts","../src/shell/components/settings/ConnectedUserProfile.tsx","../src/shell/components/settings/SecuritySettings.tsx","../src/shell/stores/auth.store.ts","../src/shell/lib/auth-context.ts","../src/shell/components/settings/ConnectedSecuritySettings.tsx","../src/shell/components/settings/BrandingSettings.tsx","../src/shell/components/settings/ConnectedBrandingSettings.tsx","../src/shell/components/settings/SettingsPage.tsx","../src/shell/stores/invite.store.ts","../src/shell/components/organization/InviteMemberDialog.tsx","../src/shell/stores/tenant.store.ts","../src/shell/hooks/usePermission.ts","../src/shell/lib/dedup.ts","../src/shell/components/organization/TeamTab.tsx","../src/shell/components/organization/PermissionMatrixEditor.tsx","../src/shell/components/organization/PermissionProfilesTab.tsx","../src/crud/archetypes/ActiveToggle.tsx","../src/crud/archetypes/PersonFormLayout.tsx","../src/crud/archetypes/ProductFormLayout.tsx","../src/crud/archetypes/ServiceFormLayout.tsx","../src/crud/archetypes/LocationFormLayout.tsx","../src/crud/archetypes/PersonPicker.tsx","../src/crud/archetypes/SubjectFormLayout.tsx","../src/crud/relation-field.tsx","../src/crud/CrudFormPage.tsx","../src/crud/fieldToColumn.tsx","../src/crud/CrudCardGrid.tsx","../src/permissions/PermissionGate.tsx","../src/crud/CrudListView.tsx","../src/plugins/WidgetSlot.tsx","../src/lib/schedule-service.ts","../src/lib/schedule-config.ts","../src/crud/archetypes/BlockSettingsPopover.tsx","../src/crud/archetypes/ScheduleEditor.tsx","../src/crud/archetypes/PersonDetailTabs.tsx","../src/crud/archetypes/ProductDetailTabs.tsx","../src/crud/archetypes/ServiceDetailTabs.tsx","../src/crud/archetypes/LocationDetailTabs.tsx","../src/crud/archetypes/EntityLink.tsx","../src/crud/archetypes/SubjectDetailTabs.tsx","../src/crud/CrudDetailPage.tsx","../src/crud/DeleteConfirmDialog.tsx","../src/crud/ImportWizard.tsx","../src/crud/csv-export.ts","../src/hooks/useFieldRules.ts","../src/crud/CrudPage.tsx","../src/stores/createCrudStore.ts","../src/crud/createCrudPage.tsx","../src/shell/components/settings/LocationsCrudPage.ts","../src/shell/components/settings/FieldRulesSettings.tsx","../src/shell/lib/entity-registry.ts","../src/shell/components/settings/ConnectedFieldRulesSettings.tsx","../src/app/AdminShell.tsx","../src/app/admin-app.tsx","../src/app/scaffold.tsx","../src/shell/components/crud/archetypes/ClientOrdersTab.tsx","../src/shell/lib/create-client-orders-provider.ts","../src/archetype-lookup.ts","../src/placeholder.ts","../src/plugins/SettingsGroup.tsx","../src/plugins/QuickActionsButton.tsx","../src/plugins/ModuleActionBar.tsx","../src/plugins/createPluginContext.tsx","../src/plugins/createViewRouter.tsx","../src/lib/currency.ts","../src/plugins/PluginRegistryManager.tsx","../src/hooks/useModuleNavigation.ts","../src/components/shared/PersonLink.tsx","../src/hooks/usePluginPrefs.ts","../src/shell/components/plugins/ConnectorsHub.tsx","../src/shell/components/plugins/PluginSettingsPanel.tsx"],"names":["registry","React","coreUseTranslation","jsxs","jsx","React3","create","BookOpen","MessageCircle","Map","Sparkles","useState","useRef","useEffect","React4","STORAGE_KEY","React5","useOrgAdapterOptional","adapter","React6","Card","CardHeader","CardTitle","CardDescription","CardContent","Camera","Input","CardFooter","Button","Save","_getOpt","React7","React8","Loader2","UserPlus","Clock","useAuthStore","createContext","useContext","React9","X","currentSettings","React10","Building2","User","Shield","t","React11","Plus","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","initialState","usePermission","useCallback","useMemo","React12","Avatar","AvatarImage","AvatarFallback","Mail","React13","ArrowLeft","Search","ChevronRight","Badge","React14","Skeleton","Pencil","renderField","SKIP_FIELDS","FieldItem","Package","IDENTITY_FIELDS","PRICING_FIELDS","Briefcase","CONTACT_FIELDS","ADDRESS_FIELDS","MapPin","getSupabaseClientOptional","Check","LucideIcons","Checkbox","useTranslation","toast","useSaveBar","useBackHandler","formatCurrencyLocale","formatDateLocale","formatDateTimeLocale","formatCurrency","formatDate","LucideIcons2","Dropdown","DropdownTrigger","DropdownContent","DropdownItem","Upload","usePluginRuntimeOptional","getWidgetsForZone","resolvePluginComponent","ChevronDown","Copy","Settings","Modal","ModalContent","ModalHeader","ModalTitle","ModalDescription","Trash2","ModalFooter","usePluginsOptional","FileText","ComingSoon","BarChart3","Tag","CalendarDays","Users","formatValue","DollarSign","ShoppingBag","FolderOpen","Tabs","TabsList","TabsTrigger","Eye","TabsContent","cn","Download","ModalBody","deriveEntityKey","React27","DropdownSeparator","ShieldCheck","React28","usePluginRuntime","React29","resolvePluginRuntime","PluginRuntimeProvider","React30","Ban","UserX","ExternalLink","ToggleRow","ICON_MAP","useStore","useZustandStore","PersonLink","Calendar","RegistryCrudView","resolveDataProvider","Plug"],"mappings":"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","file":"index.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface ChatMessage {\n id: string\n role: 'user' | 'assistant'\n content: string\n timestamp: string\n}\n\ninterface ChatState {\n messages: ChatMessage[]\n isOpen: boolean\n isStreaming: boolean\n setOpen: (open: boolean) => void\n toggleOpen: () => void\n addMessage: (message: ChatMessage) => void\n updateLastAssistant: (content: string) => void\n setStreaming: (streaming: boolean) => void\n reset: () => void\n}\n\nexport const useChatStore = create<ChatState>((set) => ({\n messages: [],\n isOpen: false,\n isStreaming: false,\n\n setOpen: (open) => set({ isOpen: open }),\n toggleOpen: () => set((s) => ({ isOpen: !s.isOpen })),\n\n addMessage: (message) =>\n set((s) => ({ messages: [...s.messages, message] })),\n\n updateLastAssistant: (content) =>\n set((s) => {\n const msgs = [...s.messages]\n const lastIdx = msgs.length - 1\n if (lastIdx >= 0 && msgs[lastIdx].role === 'assistant') {\n msgs[lastIdx] = { ...msgs[lastIdx], content }\n }\n return { messages: msgs }\n }),\n\n setStreaming: (isStreaming) => set({ isStreaming }),\n reset: () => set({ messages: [], isStreaming: false }),\n}))\n","import type { PluginAITool, PluginRegistryDef } from '../types/plugins'\n\n/**\n * Core SaaS-level AI tools — always available, no plugin required.\n */\nexport const coreAITools: PluginAITool[] = [\n {\n id: 'core.business-summary',\n name: 'getBusinessSummary',\n description: 'Returns a summary of the current business: name, plan, vertical, team size, and key metrics.',\n icon: 'Building2',\n mode: 'read',\n parameters: { type: 'object', properties: {}, required: [] },\n category: 'Core',\n suggestions: [\n { label: \"How's my business doing today?\" },\n ],\n },\n {\n id: 'core.team-members',\n name: 'getTeamMembers',\n description: 'Lists team members for the current tenant with their roles and status.',\n icon: 'Users',\n mode: 'read',\n parameters: {\n type: 'object',\n properties: {\n role: { type: 'string', description: 'Filter by role: owner, admin, manager, staff, viewer' },\n },\n },\n permission: { feature: 'team', action: 'read' },\n category: 'Core',\n suggestions: [\n { label: 'Who is on my team?' },\n ],\n },\n {\n id: 'core.navigate',\n name: 'navigateTo',\n description: 'Helps the user find and navigate to a specific page or feature in the app.',\n icon: 'Compass',\n mode: 'read',\n parameters: {\n type: 'object',\n properties: {\n page: { type: 'string', description: 'Page name or feature the user is looking for' },\n },\n required: ['page'],\n },\n category: 'Core',\n },\n]\n\n/**\n * Auto-generates read tools from plugin registry definitions.\n * Each registry gets a basic \"list\" tool so plugins get AI capabilities for free.\n */\nexport function generateRegistryTools(pluginId: string, registries: PluginRegistryDef[]): PluginAITool[] {\n return registries\n .filter((r) => !r.readOnly)\n .map((registry) => {\n const plural = registry.entity.namePlural ?? `${registry.entity.name}s`\n return {\n id: `${pluginId}.list-${registry.id}`,\n name: `list${plural.replace(/\\s+/g, '')}`,\n description: `Lists all ${plural.toLowerCase()} for the current business.`,\n icon: registry.icon ?? registry.entity.icon,\n mode: 'read' as const,\n parameters: {\n type: 'object' as const,\n properties: {\n search: { type: 'string' as const, description: 'Search text' },\n },\n },\n category: pluginId.charAt(0).toUpperCase() + pluginId.slice(1),\n }\n })\n}\n\n/**\n * Formats a tool as a function signature: e.g. \"getRevenue(period?)\"\n */\nexport function formatToolSignature(tool: PluginAITool): string {\n const params = tool.parameters?.properties\n ? Object.entries(tool.parameters.properties)\n .map(([key]) => tool.parameters?.required?.includes(key) ? key : `${key}?`)\n .join(', ')\n : ''\n return `${tool.name}(${params})`\n}\n","import * as React from 'react'\nimport { usePluginRuntimeOptional } from '../lib/plugins'\nimport { coreAITools, generateRegistryTools, formatToolSignature } from '../lib/core-ai-tools'\nimport type { PluginAITool, AIToolSuggestion } from '../types/plugins'\n\nexport interface ResolvedSuggestion extends AIToolSuggestion {\n toolId: string\n category: string\n}\n\nexport interface ResolvedToolEntry {\n tool: PluginAITool\n signature: string\n}\n\nexport interface ResolvedToolGroup {\n category: string\n tools: ResolvedToolEntry[]\n}\n\n/**\n * Detects which plugin \"owns\" the current page based on route matching.\n * Returns the plugin ID or null for non-plugin pages (e.g. settings/general, dashboard).\n */\nfunction detectActivePluginId(runtime: ReturnType<typeof usePluginRuntimeOptional>): string | null {\n if (!runtime) return null\n const path = runtime.context.currentPath\n\n // Check each active plugin's routes for a match\n for (const plugin of runtime.activePlugins) {\n for (const route of plugin.routes) {\n if (path === route.path || path.startsWith(`${route.path}/`)) {\n return plugin.id\n }\n }\n }\n\n // Also match settings sub-pages: /settings/financial → financial\n const settingsMatch = path.match(/^\\/settings\\/([^/]+)/)\n if (settingsMatch) {\n const tabId = settingsMatch[1]\n if (runtime.activePlugins.some((p) => p.id === tabId)) {\n return tabId\n }\n }\n\n return null\n}\n\nexport function useAITools(): {\n tools: PluginAITool[]\n suggestions: ResolvedSuggestion[]\n /** Suggestions from the currently active plugin only (empty on non-plugin pages) */\n contextualSuggestions: ResolvedSuggestion[]\n toolGroups: ResolvedToolGroup[]\n} {\n const runtime = usePluginRuntimeOptional()\n\n return React.useMemo(() => {\n const hasPermission = runtime?.context.hasPermission\n const verticalId = runtime?.context.tenant?.verticalId\n const activePluginId = detectActivePluginId(runtime)\n\n // Collect all tools: core + plugin-declared + auto-generated from registries\n const allTools: PluginAITool[] = [...coreAITools]\n\n if (runtime) {\n allTools.push(...runtime.aiTools)\n\n // Auto-generate registry tools for active plugins\n for (const [pluginId, registries] of runtime.registries) {\n const autoTools = generateRegistryTools(pluginId, registries)\n // Only add auto-tools that weren't explicitly declared\n const declaredIds = new Set(runtime.aiTools.map((t) => t.id))\n for (const tool of autoTools) {\n if (!declaredIds.has(tool.id)) {\n allTools.push(tool)\n }\n }\n }\n }\n\n // Filter by permission\n const tools = allTools.filter((tool) => {\n if (!tool.permission) return true\n if (!hasPermission) return true\n return hasPermission(tool.permission)\n })\n\n // Flatten suggestions, filter by vertical\n const allSuggestions: ResolvedSuggestion[] = []\n for (const tool of tools) {\n if (!tool.suggestions) continue\n for (const suggestion of tool.suggestions) {\n if (suggestion.verticalId && suggestion.verticalId !== verticalId) continue\n allSuggestions.push({\n ...suggestion,\n toolId: tool.id,\n category: tool.category ?? 'General',\n })\n }\n }\n\n // Prioritize suggestions from the active plugin's context\n const contextualSuggestions = activePluginId\n ? allSuggestions.filter((s) => s.toolId.startsWith(`${activePluginId}.`))\n : []\n let suggestions: ResolvedSuggestion[]\n if (activePluginId) {\n const others = allSuggestions.filter((s) => !s.toolId.startsWith(`${activePluginId}.`))\n suggestions = [...contextualSuggestions, ...others]\n } else {\n suggestions = allSuggestions\n }\n\n // Group tools by category with signatures\n const groupMap = new Map<string, ResolvedToolEntry[]>()\n for (const tool of tools) {\n const cat = tool.category ?? 'General'\n if (!groupMap.has(cat)) groupMap.set(cat, [])\n groupMap.get(cat)!.push({\n tool,\n signature: formatToolSignature(tool),\n })\n }\n\n // Core first, then alphabetical\n const toolGroups: ResolvedToolGroup[] = []\n if (groupMap.has('Core')) {\n toolGroups.push({ category: 'Core', tools: groupMap.get('Core')! })\n groupMap.delete('Core')\n }\n for (const [category, groupTools] of [...groupMap.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n toolGroups.push({ category, tools: groupTools })\n }\n\n return { tools, suggestions, contextualSuggestions, toolGroups }\n }, [runtime])\n}\n","import { useCallback } from 'react'\nimport { useChatStore, type ChatMessage } from '../stores/chat.store'\n\ninterface UseChatOptions {\n apiEndpoint?: string\n systemPrompt?: string\n}\n\nexport function useChat(options?: UseChatOptions) {\n const store = useChatStore()\n\n const sendMessage = useCallback(\n async (content: string) => {\n const userMsg: ChatMessage = {\n id: `msg-${Date.now()}`,\n role: 'user',\n content,\n timestamp: new Date().toISOString(),\n }\n store.addMessage(userMsg)\n\n const assistantMsg: ChatMessage = {\n id: `msg-${Date.now() + 1}`,\n role: 'assistant',\n content: '',\n timestamp: new Date().toISOString(),\n }\n store.addMessage(assistantMsg)\n store.setStreaming(true)\n\n if (!options?.apiEndpoint) {\n // Mock response if no endpoint configured\n setTimeout(() => {\n store.updateLastAssistant(\n \"I'm your AI assistant. This is a demo response — connect an API endpoint to enable real conversations.\"\n )\n store.setStreaming(false)\n }, 800)\n return\n }\n\n try {\n const response = await fetch(options.apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n messages: [\n ...(options.systemPrompt\n ? [{ role: 'system', content: options.systemPrompt }]\n : []),\n ...store.messages.map((m) => ({ role: m.role, content: m.content })),\n { role: 'user', content },\n ],\n }),\n })\n\n if (!response.ok) {\n store.updateLastAssistant('Sorry, something went wrong. Please try again.')\n store.setStreaming(false)\n return\n }\n\n const data = await response.json()\n const text = data.choices?.[0]?.message?.content ?? data.content ?? 'No response.'\n store.updateLastAssistant(text)\n } catch {\n store.updateLastAssistant('Sorry, I could not connect. Please try again later.')\n } finally {\n store.setStreaming(false)\n }\n },\n [store, options?.apiEndpoint, options?.systemPrompt]\n )\n\n return {\n messages: store.messages,\n isOpen: store.isOpen,\n isStreaming: store.isStreaming,\n sendMessage,\n toggleOpen: store.toggleOpen,\n setOpen: store.setOpen,\n reset: store.reset,\n }\n}\n","// Compat wrapper → @fayz-ai/core's unified translator. The shell calls\n// `const { t } = useTranslation()`, while @fayz-ai/core returns `t` directly — this\n// keeps the `{ t, locale }` shape so shell components resolve from the SAME\n// registry the native plugins use (registered by createSaasApp).\nimport { useTranslation as coreUseTranslation, getCurrentLocale } from '@fayz-ai/core'\n\nexport function useTranslation() {\n const t = coreUseTranslation()\n return { t, locale: getCurrentLocale() }\n}\n","import * as React from 'react'\nimport { MessageCircle, X } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useChatStore } from '../../stores/chat.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useAITools, type ResolvedSuggestion } from '../../hooks/useAITools'\nimport { useChat } from '../../hooks/useChat'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface ChatFabProps {\n className?: string\n apiEndpoint?: string\n systemPrompt?: string\n}\n\nfunction TypewriterText({ text, speed = 28, onDone }: { text: string; speed?: number; onDone?: () => void }) {\n const [displayed, setDisplayed] = React.useState('')\n const indexRef = React.useRef(0)\n\n React.useEffect(() => {\n setDisplayed('')\n indexRef.current = 0\n const interval = setInterval(() => {\n indexRef.current++\n if (indexRef.current > text.length) {\n clearInterval(interval)\n onDone?.()\n return\n }\n setDisplayed(text.slice(0, indexRef.current))\n }, speed)\n return () => clearInterval(interval)\n }, [text, speed])\n\n return (\n <span>\n {displayed}\n {displayed.length < text.length && (\n <span className=\"inline-block w-[2px] h-3 bg-current/60 animate-pulse ml-0.5 -mb-px\" />\n )}\n </span>\n )\n}\n\n/** Injected once — keyframes for pill grow/shrink */\nconst STYLE_ID = 'chat-fab-anims'\nfunction ensureStyles() {\n if (typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) return\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = `\n @keyframes fabPillGrow {\n 0% { max-width: 2.75rem; opacity: 0.6; }\n 40% { opacity: 1; }\n 100% { max-width: 22rem; opacity: 1; }\n }\n @keyframes fabPillShrink {\n 0% { max-width: 22rem; opacity: 1; }\n 60% { opacity: 0.6; }\n 100% { max-width: 2.75rem; opacity: 0; }\n }\n `\n document.head.appendChild(style)\n}\n\nexport function ChatFab({ className, apiEndpoint, systemPrompt }: ChatFabProps) {\n const { isOpen, toggleOpen, setOpen } = useChatStore()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const { contextualSuggestions } = useAITools()\n const { sendMessage } = useChat({ apiEndpoint, systemPrompt })\n const { t } = useTranslation()\n\n const [phase, setPhase] = React.useState<'idle' | 'expanding' | 'typing' | 'visible' | 'collapsing'>('idle')\n const [activeSuggestion, setActiveSuggestion] = React.useState<ResolvedSuggestion | null>(null)\n const timersRef = React.useRef<ReturnType<typeof setTimeout>[]>([])\n const prevSuggestionRef = React.useRef<string | null>(null)\n\n React.useEffect(ensureStyles, [])\n\n const clearTimers = () => { timersRef.current.forEach(clearTimeout); timersRef.current = [] }\n const addTimer = (fn: () => void, ms: number) => { timersRef.current.push(setTimeout(fn, ms)) }\n\n const topSuggestion = contextualSuggestions[0] ?? null\n const topLabel = topSuggestion?.label ?? null\n\n React.useEffect(() => {\n if (isOpen || !topSuggestion || !topLabel) {\n if (phase !== 'idle') { clearTimers(); setPhase('collapsing'); addTimer(() => setPhase('idle'), 450) }\n prevSuggestionRef.current = null\n return\n }\n if (prevSuggestionRef.current === topLabel) return\n prevSuggestionRef.current = topLabel\n clearTimers()\n\n const startExpand = () => {\n setActiveSuggestion(topSuggestion)\n setPhase('expanding')\n // Start typing while pill is still growing\n addTimer(() => setPhase('typing'), 350)\n }\n\n if (phase !== 'idle') {\n setPhase('collapsing')\n addTimer(startExpand, 500)\n } else {\n addTimer(startExpand, 800)\n }\n\n addTimer(() => {\n setPhase('collapsing')\n addTimer(() => setPhase('idle'), 450)\n }, 9000)\n\n return clearTimers\n }, [topLabel, isOpen])\n\n React.useEffect(() => {\n if (isOpen && phase !== 'idle') { clearTimers(); setPhase('idle') }\n }, [isOpen])\n\n if (!currentOrg) return null\n\n // Resolve translated label for a suggestion (same logic as ChatSuggestions)\n const resolveLabel = (s: ResolvedSuggestion, index: number) => {\n const key = `chat.suggestion.${s.toolId}.${index}`\n const translated = t(key)\n return translated === key ? s.label : translated\n }\n\n const activeLabel = activeSuggestion ? resolveLabel(activeSuggestion, 0) : ''\n\n const handleSuggestionClick = () => {\n if (!activeSuggestion) return\n clearTimers()\n setPhase('idle')\n setOpen(true)\n setTimeout(() => { sendMessage(activeSuggestion.prompt ?? activeLabel) }, 150)\n }\n\n const showPill = phase === 'expanding' || phase === 'typing' || phase === 'visible'\n\n return (\n <div className={cn('fixed bottom-4 right-4 z-50 hidden md:block', className)}>\n {/* Pill — grows from FAB circle size outward */}\n {(showPill || phase === 'collapsing') && !isOpen && (\n <button\n onClick={handleSuggestionClick}\n className=\"absolute right-0 bottom-0 flex flex-col items-start justify-center rounded-full bg-foreground text-background shadow-lg hover:opacity-95 cursor-pointer pl-5 overflow-hidden\"\n style={{\n paddingRight: '3.25rem',\n height: '2.75rem',\n animation: showPill\n ? 'fabPillGrow 650ms cubic-bezier(0.22, 1, 0.36, 1) forwards'\n : 'fabPillShrink 400ms cubic-bezier(0.55, 0, 1, 0.45) forwards',\n }}\n >\n <span className=\"text-[7px] font-semibold uppercase tracking-widest opacity-40\">\n {t('chat.fab.tryIt')}\n </span>\n <span className={cn(\n 'text-[13px] font-medium whitespace-nowrap min-h-[1.15em] transition-opacity',\n phase === 'expanding' ? 'opacity-0 duration-200' : 'opacity-100 duration-300',\n )}>\n {phase === 'typing' && activeSuggestion ? (\n <TypewriterText\n text={`\"${activeLabel}\"`}\n onDone={() => setPhase('visible')}\n />\n ) : (phase === 'visible') && activeSuggestion ? (\n `\"${activeLabel}\"`\n ) : (\n '\\u00A0'\n )}\n </span>\n </button>\n )}\n\n {/* FAB circle */}\n <button\n onClick={toggleOpen}\n className={cn(\n 'relative z-10 h-11 w-11 flex items-center justify-center transition-all hover:opacity-90 focus:outline-none',\n isOpen\n ? 'rounded-tl-none rounded-tr-lg rounded-br-full rounded-bl-full bg-card text-muted-foreground border border-border/50 border-t-0 shadow-lg'\n : 'rounded-full bg-foreground text-background shadow-lg',\n )}\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\n >\n {isOpen ? <X className=\"h-4 w-4\" /> : <MessageCircle className=\"h-4 w-4\" />}\n </button>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Sparkles, BookOpen, Pencil } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { ResolvedSuggestion, ResolvedToolGroup } from '../../hooks/useAITools'\n\ninterface ChatSuggestionsProps {\n suggestions: ResolvedSuggestion[]\n onSelect: (suggestion: ResolvedSuggestion) => void\n}\n\nconst MAX_SUGGESTIONS = 5\n\nexport function ChatSuggestions({ suggestions, onSelect }: ChatSuggestionsProps) {\n const { t } = useTranslation()\n const visible = suggestions.slice(0, MAX_SUGGESTIONS)\n\n return (\n <div className=\"flex flex-col gap-1 px-3 py-3\">\n <div className=\"flex items-center gap-1.5 px-1 pb-1\">\n <Sparkles className=\"h-3 w-3 text-muted-foreground/60\" />\n <span className=\"text-[11px] font-medium text-muted-foreground/70\">{t('chat.tryAsking')}</span>\n </div>\n {visible.map((suggestion, i) => {\n const labelKey = `chat.suggestion.${suggestion.toolId}.${i}`\n const translated = t(labelKey)\n const label = translated === labelKey ? suggestion.label : translated\n return (\n <button\n key={`${suggestion.toolId}-${i}`}\n onClick={() => onSelect(suggestion)}\n className={cn(\n 'rounded-md px-2.5 py-1.5 text-left text-xs text-muted-foreground',\n 'transition-colors hover:bg-muted hover:text-foreground'\n )}\n >\n &ldquo;{label}&rdquo;\n </button>\n )\n })}\n </div>\n )\n}\n\n// --- Tools panel (shown via config button) ---\n\ninterface ChatToolsPanelProps {\n toolGroups: ResolvedToolGroup[]\n onClose: () => void\n}\n\nexport function ChatToolsPanel({ toolGroups, onClose }: ChatToolsPanelProps) {\n const { t } = useTranslation()\n const totalTools = toolGroups.reduce((sum, g) => sum + g.tools.length, 0)\n\n return (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className=\"sticky top-0 z-10 flex items-center justify-between border-b border-border/40 bg-card px-4 py-2\">\n <span className=\"text-[11px] font-semibold text-foreground\">\n {t('chat.toolsAvailable', { count: totalTools })}\n </span>\n <button\n onClick={onClose}\n className=\"text-[11px] text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('common.done')}\n </button>\n </div>\n <div className=\"flex flex-col gap-3 px-3 py-3\">\n {toolGroups.map((group) => (\n <div key={group.category} className=\"flex flex-col gap-0.5\">\n <span className=\"px-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/50\">\n {group.category}\n </span>\n {group.tools.map(({ tool, signature }) => {\n const ModeIcon = tool.mode === 'persist' ? Pencil : BookOpen\n return (\n <div\n key={tool.id}\n className=\"flex items-start gap-1.5 rounded-md px-2 py-1 transition-colors hover:bg-muted/50\"\n title={tool.description}\n >\n <ModeIcon className=\"mt-0.5 h-3 w-3 shrink-0 text-muted-foreground/40\" />\n <div className=\"min-w-0\">\n <code className=\"text-[11px] font-mono text-muted-foreground\">\n {signature}\n </code>\n {tool.description && (\n <p className=\"text-[10px] leading-tight text-muted-foreground/40 truncate\">\n {tool.description}\n </p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ArrowUp, Settings2 } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { useChatStore, type ChatMessage } from '../../stores/chat.store'\nimport { useChat } from '../../hooks/useChat'\nimport { useAITools } from '../../hooks/useAITools'\nimport { ChatSuggestions, ChatToolsPanel } from './ChatSuggestions'\n\ninterface ChatPanelProps {\n title?: string\n apiEndpoint?: string\n systemPrompt?: string\n className?: string\n}\n\nexport function ChatPanel({\n title = 'Assistant',\n apiEndpoint,\n systemPrompt,\n className,\n}: ChatPanelProps) {\n const { isOpen, messages, isStreaming } = useChatStore()\n const { sendMessage } = useChat({ apiEndpoint, systemPrompt })\n const { t } = useTranslation()\n const { suggestions, toolGroups } = useAITools()\n const [input, setInput] = React.useState('')\n const [showTools, setShowTools] = React.useState(false)\n const scrollRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n const hasMessages = messages.length > 0\n const totalTools = toolGroups.reduce((sum, g) => sum + g.tools.length, 0)\n\n React.useEffect(() => {\n scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight, behavior: 'smooth' })\n }, [messages])\n\n React.useEffect(() => {\n if (isOpen) {\n const timer = setTimeout(() => inputRef.current?.focus(), 100)\n return () => clearTimeout(timer)\n }\n setShowTools(false)\n }, [isOpen])\n\n if (!isOpen) return null\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n const text = input.trim()\n if (!text || isStreaming) return\n setInput('')\n setShowTools(false)\n sendMessage(text)\n }\n\n return (\n <div\n className={cn(\n 'fixed z-40 flex flex-col overflow-hidden bg-card shadow-2xl',\n // Mobile: below header, above bottom nav\n 'inset-x-0 top-12 bottom-16 rounded-none border-0',\n // Desktop: floating card — sits just above the FAB, touching it\n 'md:inset-auto md:bottom-[3.75rem] md:right-4 md:w-[22rem] md:max-h-[min(70vh,520px)] md:rounded-2xl md:rounded-br-none md:border md:border-border/50',\n 'animate-in slide-in-from-bottom-2 fade-in-0 duration-150',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border/40 px-4 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-1.5 w-1.5 rounded-full bg-success\" />\n <span className=\"text-xs font-semibold text-foreground\">{title}</span>\n </div>\n {totalTools > 0 && (\n <button\n onClick={() => setShowTools(!showTools)}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[10px] transition-colors',\n showTools\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n title=\"Available tools\"\n >\n <Settings2 className=\"h-3 w-3\" />\n <span className=\"font-medium\">{totalTools}</span>\n </button>\n )}\n </div>\n\n {/* Tools panel overlay */}\n {showTools ? (\n <ChatToolsPanel toolGroups={toolGroups} onClose={() => setShowTools(false)} />\n ) : (\n /* Messages / suggestions area */\n <div\n ref={scrollRef}\n className={cn(\n 'min-h-0 flex-1 overflow-y-auto',\n hasMessages && 'space-y-2 px-3 py-3'\n )}\n >\n {!hasMessages && (\n <ChatSuggestions\n suggestions={suggestions}\n onSelect={(suggestion) => {\n setInput('')\n sendMessage(suggestion.prompt ?? suggestion.label)\n }}\n />\n )}\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} />\n ))}\n {isStreaming && messages[messages.length - 1]?.content === '' && (\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse\" />\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse [animation-delay:150ms]\" />\n <span className=\"h-1 w-1 rounded-full bg-muted-foreground/50 animate-pulse [animation-delay:300ms]\" />\n </div>\n )}\n </div>\n )}\n\n {/* Input */}\n <form onSubmit={handleSubmit} className=\"border-t border-border/40 p-2\">\n <div className=\"flex items-center gap-1.5 rounded-full border border-border bg-background py-1 pl-3.5 pr-1 transition-colors focus-within:border-foreground/20\">\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={t('chat.messagePlaceholder')}\n className=\"min-w-0 flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground/50 focus:outline-none\"\n disabled={isStreaming}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || isStreaming}\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-foreground text-background transition-opacity hover:opacity-80 disabled:opacity-20\"\n aria-label=\"Send message\"\n >\n <ArrowUp className=\"h-3.5 w-3.5\" strokeWidth={2.5} />\n </button>\n </div>\n </form>\n </div>\n )\n}\n\nfunction MessageBubble({ message }: { message: ChatMessage }) {\n const isUser = message.role === 'user'\n\n return (\n <div className={cn('flex', isUser ? 'justify-end' : 'justify-start')}>\n <div\n className={cn(\n 'max-w-[85%] rounded-2xl px-3 py-1.5 text-[13px] leading-relaxed',\n isUser\n ? 'rounded-br-sm bg-foreground text-background'\n : 'rounded-bl-sm bg-muted text-foreground'\n )}\n >\n {message.content}\n </div>\n </div>\n )\n}\n","import type { ThemeTokens } from './tokens'\n\n// Polaris (Shopify Admin \"Sail\") light theme.\n// Page #f1f1f1, cards #ffffff, near-black brand #303030, light sidebar #ebebeb\n// with raised-white active items. Semantic accents only carry color.\nexport const lightTheme: ThemeTokens = {\n name: 'light',\n colors: {\n // Brand surface is near-black, not a saturated hue. Buttons get the bevel\n // shadow below; flat color is only half the look.\n primary: '0 0% 18.8%', // #303030\n primaryForeground: '0 0% 100%', // #ffffff\n secondary: '0 0% 96.9%', // #f7f7f7\n secondaryForeground: '0 0% 18.8%', // #303030\n accent: '0 0% 94.5%', // #f1f1f1 (hover/selected step)\n accentForeground: '0 0% 18.8%', // #303030\n background: '0 0% 94.5%', // #f1f1f1 — page is never white\n foreground: '0 0% 18.8%', // #303030\n card: '0 0% 100%', // #ffffff\n cardForeground: '0 0% 18.8%', // #303030\n muted: '0 0% 96.9%', // #f7f7f7\n mutedForeground: '0 0% 38%', // #616161\n border: '0 0% 89%', // #e3e3e3 (hairline, not dark gray)\n input: '0 0% 54.1%', // #8a8a8a — inputs need stronger border\n ring: '214 100% 41.4%', // #005bd3 — focus blue\n popover: '0 0% 100%',\n popoverForeground: '0 0% 18.8%',\n destructive: '354 92% 41%', // #c70a24\n destructiveForeground: '0 0% 100%',\n success: '167 95% 25.1%', // #047b5d\n successForeground: '0 0% 100%',\n warning: '43 100% 50%', // #ffb800\n warningForeground: '0 0% 18.8%',\n\n // Layout surfaces — light gray rail (Polaris \"Sail\"), raised white active items.\n sidebar: '0 0% 92.2%', // #ebebeb\n sidebarForeground: '0 0% 18.8%', // #303030\n sidebarBorder: '0 0% 86.3%', // #dcdcdc\n sidebarAccent: '0 0% 100%', // #ffffff — active item floats above rail\n sidebarAccentForeground: '0 0% 18.8%',\n sidebarMuted: '0 0% 38%', // #616161\n content: '0 0% 94.5%', // #f1f1f1\n },\n perception: {\n buttonRadius: '0.5rem', // 8px (--p-border-radius-200)\n cardRadius: '0.5rem', // 8px — Polaris cards are 8px, not 12px\n inputRadius: '0.5rem',\n modalRadius: '1rem', // 16px (--p-border-radius-400)\n fontFamily: 'Inter, ui-sans-serif, system-ui, -apple-system, sans-serif',\n fontFamilyMono: 'JetBrains Mono, ui-monospace, SFMono-Regular, monospace',\n // Polaris hairline + a touch of bottom lift so cards visibly float on the gray page.\n shadowSm: '0 1px 0 rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(26, 26, 26, 0.06), 0 1px 2px -1px rgba(26, 26, 26, 0.06)',\n shadowMd: '0 1px 1px -1px rgba(26, 26, 26, 0.07), 0 4px 8px -2px rgba(26, 26, 26, 0.10)',\n shadowLg: '0 4px 12px -2px rgba(26, 26, 26, 0.15), 0 1px 3px rgba(26, 26, 26, 0.08)',\n // Inset bevels — Polaris signature. Buttons feel physical because of these.\n shadowButton:\n 'inset 0 -1px 0 rgba(0,0,0,0.10), inset 0 1px 0 rgba(255,255,255,0.50), 0 1px 0 rgba(0,0,0,0.05)',\n shadowButtonPrimary:\n 'inset 0 -1px 0 rgba(0,0,0,0.20), inset 0 1px 0 rgba(255,255,255,0.20), 0 1px 1.5px rgba(0,0,0,0.20)',\n shadowButtonInset:\n 'inset 0 2px 1px -1px rgba(0,0,0,0.20), inset 0 0 0 1px rgba(0,0,0,0.05)',\n },\n}\n","import type { ThemeTokens } from './tokens'\n\n// \"Sail midnight\" — Polaris/Shopify Admin dark companion. No upstream reference;\n// designed from the same philosophy as the light theme: neutral grayscale chrome,\n// page bg darker than cards (mirrors the light \"card floats on page\" hierarchy),\n// brand surface is the highest-contrast color (here near-white instead of near-black).\nexport const darkTheme: ThemeTokens = {\n name: 'dark',\n colors: {\n primary: '0 0% 100%', // #ffffff — inverted brand surface\n primaryForeground: '0 0% 10.2%', // #1a1a1a\n secondary: '0 0% 18.8%', // #303030\n secondaryForeground: '0 0% 89%', // #e3e3e3\n accent: '0 0% 22.7%', // #3a3a3a — hover/selected one step up from card\n accentForeground: '0 0% 100%',\n background: '0 0% 10.2%', // #1a1a1a — page\n foreground: '0 0% 89%', // #e3e3e3\n card: '0 0% 14.9%', // #262626 — one step lighter than page\n cardForeground: '0 0% 89%',\n muted: '0 0% 18.8%', // #303030\n mutedForeground: '0 0% 64.7%', // #a5a5a5\n border: '0 0% 22.7%', // #3a3a3a — hairline visible on cards\n input: '0 0% 32.2%', // #525252\n ring: '217 100% 68.4%', // #5b9bff — brighter blue for dark\n popover: '0 0% 18.8%', // popovers sit above cards\n popoverForeground: '0 0% 89%',\n destructive: '7 100% 44.9%', // #e51c00\n destructiveForeground: '0 0% 100%',\n success: '156 71% 42.5%', // #1fb87a\n successForeground: '0 0% 0%',\n warning: '41 100% 65.1%', // #ffc94d\n warningForeground: '0 0% 10.2%',\n\n // Sidebar matches page; active item is a raised dark pill.\n sidebar: '0 0% 10.2%', // #1a1a1a\n sidebarForeground: '0 0% 89%',\n sidebarBorder: '0 0% 16.5%', // #2a2a2a\n sidebarAccent: '0 0% 18.8%', // #303030\n sidebarAccentForeground: '0 0% 100%',\n sidebarMuted: '0 0% 64.7%',\n content: '0 0% 10.2%',\n },\n perception: {\n buttonRadius: '0.5rem',\n cardRadius: '0.5rem',\n inputRadius: '0.5rem',\n modalRadius: '1rem',\n fontFamily: 'Inter, ui-sans-serif, system-ui, -apple-system, sans-serif',\n fontFamilyMono: 'JetBrains Mono, ui-monospace, SFMono-Regular, monospace',\n // Shadows on dark are stronger or they disappear.\n shadowSm: '0 1px 0 rgba(0, 0, 0, 0.4), 0 1px 3px 0 rgba(0, 0, 0, 0.35), 0 1px 2px -1px rgba(0, 0, 0, 0.35)',\n shadowMd: '0 1px 1px -1px rgba(0, 0, 0, 0.5), 0 4px 8px -2px rgba(0, 0, 0, 0.6)',\n shadowLg: '0 4px 12px -2px rgba(0, 0, 0, 0.6), 0 1px 3px rgba(0, 0, 0, 0.4)',\n // Bevels — top highlight strengthens on near-white primary; on dark default\n // buttons we lean on the inset-bottom shadow for depth.\n shadowButton:\n 'inset 0 -1px 0 rgba(0,0,0,0.40), inset 0 1px 0 rgba(255,255,255,0.08), 0 1px 0 rgba(0,0,0,0.30)',\n shadowButtonPrimary:\n 'inset 0 -1px 0 rgba(0,0,0,0.20), inset 0 1px 0 rgba(255,255,255,0.40), 0 1px 1.5px rgba(0,0,0,0.40)',\n shadowButtonInset:\n 'inset 0 2px 1px -1px rgba(0,0,0,0.50), inset 0 0 0 1px rgba(0,0,0,0.20)',\n },\n}\n","import type {\n ThemeTokens,\n SemanticColors,\n UIPerceptionTokens,\n SaasTheme,\n ThemeRadius,\n ThemeShadow,\n ThemeFont,\n} from './tokens'\n\ntype SidebarTokens = Exclude<SaasTheme['sidebar'], string | undefined>\n\n/**\n * Derive a colored (\"brand\") sidebar palette from a single brand HSL string\n * (e.g. \"243 75% 59%\"). Keeps the brand hue/saturation and shifts lightness for\n * the border/active surfaces so text stays readable (light foreground on the\n * saturated rail). Falls back to undefined (→ neutral) if the value isn't HSL.\n */\nfunction deriveBrandSidebar(brand: string): SidebarTokens | undefined {\n const parts = brand.trim().split(/\\s+/)\n if (parts.length < 3) return undefined\n const [h, s, lRaw] = parts\n const l = parseFloat(lRaw)\n if (Number.isNaN(l)) return undefined\n const shiftL = (delta: number) => `${h} ${s} ${Math.max(0, Math.min(100, l + delta))}%`\n return {\n background: brand, // the brand color fills the rail\n foreground: '0 0% 100%', // white primary text — readable on the saturated rail\n border: shiftL(-12), // slightly darker hairline\n accent: shiftL(-15), // active item — a deeper shade that reads as selected\n accentForeground: '0 0% 100%',\n muted: `${h} 35% 82%`, // dimmed icons / secondary labels\n }\n}\n\n/** Resolve SaasTheme.sidebar (string preset or explicit tokens) into tokens. */\nfunction resolveSidebar(theme: SaasTheme): SidebarTokens | undefined {\n const sidebar = theme.sidebar\n if (sidebar === 'neutral') return undefined // keep the default light rail\n if (sidebar === 'brand') return deriveBrandSidebar(theme.brand)\n return sidebar\n}\nimport { lightTheme } from './light'\nimport { createFayzTheme } from '@fayz-ai/ui'\n\nexport interface CreateThemeOptions {\n name?: string\n colors?: Partial<SemanticColors>\n /** Dark mode color overrides — applied instead of `colors` when in dark mode */\n darkColors?: Partial<SemanticColors>\n perception?: Partial<UIPerceptionTokens>\n /** Shorthand: single HSL value that auto-derives primary, ring, and accent */\n brand?: string\n}\n\n/**\n * Discriminate the two theme shapes a FayzAppConfig can carry. The explicit\n * `__kind: 'saas-theme'` marker is authoritative; the structural fallback\n * exists only for hand-written configs that predate the marker. Note the\n * fallback is ambiguous for a `{ name, brand }`-only SaasTheme (it routes to\n * the CreateThemeOptions path) — set `__kind` to opt out of the ambiguity.\n */\nexport function isSaasTheme(theme: SaasTheme | CreateThemeOptions): theme is SaasTheme {\n if ('__kind' in theme && theme.__kind === 'saas-theme') return true\n return 'brand' in theme && ('radius' in theme || 'sidebar' in theme || 'font' in theme)\n}\n\n// --- Friendly preset maps ---\n\nconst RADIUS_MAP: Record<ThemeRadius, { button: string; card: string; input: string; modal: string }> = {\n sharp: { button: '0.25rem', card: '0.375rem', input: '0.25rem', modal: '0.5rem' },\n soft: { button: '0.5rem', card: '0.75rem', input: '0.5rem', modal: '0.75rem' },\n round: { button: '9999px', card: '1rem', input: '0.75rem', modal: '1.25rem' },\n}\n\nconst SHADOW_MAP: Record<ThemeShadow, { sm: string; md: string; lg: string }> = {\n none: { sm: 'none', md: 'none', lg: 'none' },\n subtle: { sm: '0 1px 2px 0 rgb(0 0 0 / 0.03)', md: '0 2px 4px -1px rgb(0 0 0 / 0.06)', lg: '0 4px 6px -2px rgb(0 0 0 / 0.05)' },\n medium: { sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)', md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)' },\n bold: { sm: '0 1px 3px 0 rgb(0 0 0 / 0.1)', md: '0 4px 8px -1px rgb(0 0 0 / 0.15), 0 2px 4px -1px rgb(0 0 0 / 0.1)', lg: '0 12px 24px -4px rgb(0 0 0 / 0.15), 0 4px 8px -2px rgb(0 0 0 / 0.1)' },\n}\n\nconst FONT_MAP: Record<ThemeFont, string> = {\n 'system': 'ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'inter': '\"Inter\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'dm-sans': '\"DM Sans\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'poppins': '\"Poppins\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'geist': '\"Geist\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'plus-jakarta': '\"Plus Jakarta Sans\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'outfit': '\"Outfit\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", sans-serif',\n 'nunito': '\"Nunito\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'source-sans': '\"Source Sans 3\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'raleway': '\"Raleway\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n 'manrope': '\"Manrope\", ui-sans-serif, system-ui, -apple-system, sans-serif',\n}\n\n/**\n * Resolve a SaasTheme (friendly format) into CreateThemeOptions (internal format).\n * This is the main API for vertical themes.\n *\n * Light-only colors (content bg, card, border, etc.) go into `colors`.\n * Dark-mode overrides go into `darkColors` so the dark base theme isn't broken.\n * Sidebar colors are always applied (same in both modes — the sidebar has its own palette).\n */\nexport function resolveTheme(theme: SaasTheme): CreateThemeOptions {\n const presetId = theme.preset ?? 'classic_admin'\n const preset = createFayzTheme(presetId)\n const radius = theme.radius ? RADIUS_MAP[theme.radius] : presetId === 'classic_admin' ? RADIUS_MAP.soft : undefined\n const shadow = theme.shadow ? SHADOW_MAP[theme.shadow] : presetId === 'classic_admin' ? SHADOW_MAP.medium : undefined\n const font = theme.font ? FONT_MAP[theme.font] : presetId === 'classic_admin' ? FONT_MAP.inter : undefined\n\n // --- Light mode colors ---\n const colors: Partial<SemanticColors> = { ...theme.colors }\n\n // Content background (light mode only)\n if (theme.content) {\n colors.content = theme.content.background\n }\n\n // Sidebar colors apply in both modes (sidebar has its own palette). Resolve the\n // 'brand' | 'neutral' preset or explicit tokens first; neutral → keep defaults.\n const sidebar = resolveSidebar(theme)\n if (sidebar) {\n colors.sidebar = sidebar.background\n colors.sidebarForeground = sidebar.foreground\n colors.sidebarAccent = sidebar.accent\n colors.sidebarAccentForeground = sidebar.accentForeground\n if (sidebar.border) colors.sidebarBorder = sidebar.border\n if (sidebar.muted) colors.sidebarMuted = sidebar.muted\n }\n\n // Brand shorthand — derive primary/ring/accent here so a `{ brand, sidebar }` SaasTheme\n // still gets the branded primary, not just the preset's neutral one (regression fix).\n if (theme.brand) {\n colors.primary = theme.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = theme.brand\n const bp = theme.brand.split(' ')\n if (bp.length >= 3) {\n const hue = (parseFloat(bp[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${bp[1]} ${bp[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n // --- Dark mode colors (only sidebar + brand — let darkTheme handle the rest) ---\n const darkColors: Partial<SemanticColors> = {}\n\n // Sidebar keeps same palette in dark mode\n if (sidebar) {\n darkColors.sidebar = sidebar.background\n darkColors.sidebarForeground = sidebar.foreground\n darkColors.sidebarAccent = sidebar.accent\n darkColors.sidebarAccentForeground = sidebar.accentForeground\n if (sidebar.border) darkColors.sidebarBorder = sidebar.border\n if (sidebar.muted) darkColors.sidebarMuted = sidebar.muted\n }\n\n return {\n ...preset,\n name: theme.name,\n brand: theme.brand,\n colors: {\n ...(preset.colors ?? {}),\n ...colors,\n },\n darkColors: {\n ...(preset.darkColors ?? {}),\n ...darkColors,\n },\n perception: {\n ...(preset.perception ?? {}),\n fontFamilyMono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, monospace',\n ...(radius\n ? {\n buttonRadius: radius.button,\n cardRadius: radius.card,\n inputRadius: radius.input,\n modalRadius: radius.modal,\n }\n : {}),\n ...(font ? { fontFamily: font } : {}),\n ...(shadow\n ? {\n shadowSm: shadow.sm,\n shadowMd: shadow.md,\n shadowLg: shadow.lg,\n }\n : {}),\n },\n }\n}\n\nexport function createTheme(overrides: CreateThemeOptions): ThemeTokens {\n const colors = { ...lightTheme.colors, ...overrides.colors }\n\n // Brand shorthand: auto-derive primary, ring, accent from single HSL\n if (overrides.brand) {\n colors.primary = overrides.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = overrides.brand\n // Derive accent by shifting hue ~50 degrees\n const parts = overrides.brand.split(' ')\n if (parts.length >= 3) {\n const hue = (parseFloat(parts[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${parts[1]} ${parts[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n return {\n name: overrides.name ?? lightTheme.name,\n colors,\n perception: {\n ...lightTheme.perception,\n ...overrides.perception,\n },\n }\n}\n\nconst colorVarMap: Record<string, string> = {\n primary: '--primary',\n primaryForeground: '--primary-foreground',\n secondary: '--secondary',\n secondaryForeground: '--secondary-foreground',\n accent: '--accent',\n accentForeground: '--accent-foreground',\n background: '--background',\n foreground: '--foreground',\n card: '--card',\n cardForeground: '--card-foreground',\n muted: '--muted',\n mutedForeground: '--muted-foreground',\n border: '--border',\n input: '--input',\n ring: '--ring',\n popover: '--popover',\n popoverForeground: '--popover-foreground',\n destructive: '--destructive',\n destructiveForeground: '--destructive-foreground',\n success: '--success',\n successForeground: '--success-foreground',\n warning: '--warning',\n warningForeground: '--warning-foreground',\n // Layout surfaces\n sidebar: '--sidebar',\n sidebarForeground: '--sidebar-foreground',\n sidebarBorder: '--sidebar-border',\n sidebarAccent: '--sidebar-accent',\n sidebarAccentForeground: '--sidebar-accent-foreground',\n sidebarMuted: '--sidebar-muted',\n content: '--content',\n}\n\nconst perceptionVarMap: Record<string, string> = {\n buttonRadius: '--button-radius',\n cardRadius: '--card-radius',\n inputRadius: '--input-radius',\n modalRadius: '--modal-radius',\n fontFamily: '--font-family',\n fontFamilyMono: '--font-family-mono',\n shadowSm: '--shadow-sm',\n shadowMd: '--shadow-md',\n shadowLg: '--shadow-lg',\n shadowButton: '--shadow-button',\n shadowButtonPrimary: '--shadow-button-primary',\n shadowButtonInset: '--shadow-button-inset',\n surfaceBackdropFilter: '--surface-backdrop-filter',\n modalBackground: '--modal-bg',\n modalBorder: '--modal-border',\n modalOverlayBackground: '--modal-overlay-bg',\n modalOverlayBackdropFilter: '--modal-overlay-backdrop-filter',\n modalShadow: '--modal-shadow',\n glassEdgeGradient: '--glass-edge-gradient',\n glassPrimaryEdgeGradient: '--glass-primary-edge-gradient',\n glassInnerHighlight: '--glass-inner-highlight',\n fieldBackground: '--field-bg',\n fieldBorder: '--field-border',\n fieldShadow: '--field-shadow',\n buttonBackground: '--button-bg',\n buttonBackgroundHover: '--button-hover-bg',\n buttonBorder: '--button-border',\n buttonPrimaryBackground: '--button-primary-bg',\n buttonPrimaryBackgroundHover: '--button-primary-hover-bg',\n buttonPrimaryBorder: '--button-primary-border',\n buttonBackdropFilter: '--button-backdrop-filter',\n}\n\nexport function applyTheme(theme: ThemeTokens, element?: HTMLElement): void {\n const target = element ?? document.documentElement\n\n for (const [key, cssVar] of Object.entries(colorVarMap)) {\n const value = theme.colors[key as keyof typeof theme.colors]\n if (value) {\n target.style.setProperty(cssVar, value)\n }\n }\n\n for (const [key, cssVar] of Object.entries(perceptionVarMap)) {\n const value = theme.perception[key as keyof typeof theme.perception]\n if (value) {\n target.style.setProperty(cssVar, value)\n }\n }\n}\n\nexport function getSystemPreference(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n","import { create, type StoreApi, type UseBoundStore } from 'zustand'\nimport type { ThemeTokens } from '../config/theme/tokens'\nimport { lightTheme } from '../config/theme/light'\nimport { darkTheme } from '../config/theme/dark'\nimport { applyTheme } from '../config/theme/utils'\nimport type { CreateThemeOptions } from '../config/theme/utils'\n\ntype ThemeMode = 'light' | 'dark' | 'system'\n\nconst STORAGE_KEY = 'saas-core:theme-mode'\n\ninterface ThemeState {\n mode: ThemeMode\n resolvedMode: 'light' | 'dark'\n /** Only the user's partial overrides — NOT a full theme */\n overrides: CreateThemeOptions | null\n setMode: (mode: ThemeMode) => void\n setOverrides: (overrides: CreateThemeOptions | null) => void\n initialize: () => void\n // Keep old API name working\n setCustomTheme: (theme: ThemeTokens | null) => void\n}\n\nfunction getSystemPreference(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction getSavedMode(): ThemeMode {\n if (typeof window === 'undefined') return 'light'\n const saved = localStorage.getItem(STORAGE_KEY)\n if (saved === 'light' || saved === 'dark' || saved === 'system') return saved\n return 'light'\n}\n\nfunction resolveMode(mode: ThemeMode): 'light' | 'dark' {\n return mode === 'system' ? getSystemPreference() : mode\n}\n\n/** Merge base theme (light or dark) with user's partial overrides */\nfunction buildTheme(base: ThemeTokens, overrides: CreateThemeOptions | null): ThemeTokens {\n if (!overrides) return base\n\n const isDark = base.name === 'dark'\n const colors = { ...base.colors }\n\n // Brand shorthand: derive primary, ring, accent from single HSL\n if (overrides.brand) {\n colors.primary = overrides.brand\n colors.primaryForeground = '0 0% 100%'\n colors.ring = overrides.brand\n const parts = overrides.brand.split(' ')\n if (parts.length >= 3) {\n const hue = (parseFloat(parts[0]) - 50 + 360) % 360\n colors.accent = `${hue} ${parts[1]} ${parts[2]}`\n colors.accentForeground = '0 0% 100%'\n }\n }\n\n // Apply explicit color overrides.\n // In dark mode, use darkColors if provided; otherwise skip light-only colors.\n const colorOverrides = isDark && overrides.darkColors\n ? overrides.darkColors\n : overrides.colors\n\n if (colorOverrides) {\n for (const [key, value] of Object.entries(colorOverrides)) {\n if (value !== undefined) {\n (colors as any)[key] = value\n }\n }\n }\n\n return {\n name: overrides.name ?? base.name,\n colors,\n perception: {\n ...base.perception,\n ...(overrides.perception ?? {}),\n },\n }\n}\n\nconst STORE_KEY = '__saas_core_theme_store__'\n\nfunction createThemeStore(): UseBoundStore<StoreApi<ThemeState>> {\n // Window-level singleton to survive linked-package dual-module loading\n if (typeof window !== 'undefined' && (window as any)[STORE_KEY]) {\n return (window as any)[STORE_KEY]\n }\n\n const store = create<ThemeState>((set, get) => ({\n mode: getSavedMode(),\n resolvedMode: 'light',\n overrides: null,\n\n setMode: (mode) => {\n const resolved = resolveMode(mode)\n set({ mode, resolvedMode: resolved })\n\n // Persist to localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, mode)\n }\n\n const { overrides } = get()\n const baseTheme = resolved === 'dark' ? darkTheme : lightTheme\n const theme = buildTheme(baseTheme, overrides)\n\n if (typeof document !== 'undefined') {\n // Enable color transition before applying changes\n document.documentElement.classList.add('theme-transitioning')\n\n applyTheme(theme)\n document.documentElement.classList.toggle('dark', resolved === 'dark')\n\n // Remove transition class after animation completes\n setTimeout(() => {\n document.documentElement.classList.remove('theme-transitioning')\n }, 450)\n } else {\n applyTheme(theme)\n }\n },\n\n setOverrides: (overrides) => {\n set({ overrides })\n const { resolvedMode } = get()\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\n const theme = buildTheme(baseTheme, overrides)\n applyTheme(theme)\n },\n\n // Legacy compat — if someone passes a full ThemeTokens, store it as overrides\n setCustomTheme: (_theme) => {\n // Ignore — callers should use setOverrides now\n },\n\n initialize: () => {\n const { mode, setMode } = get()\n setMode(mode)\n\n // Listen for OS theme changes when in 'system' mode\n if (typeof window !== 'undefined') {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n const current = get()\n if (current.mode === 'system') {\n current.setMode('system')\n }\n })\n }\n },\n }))\n\n if (typeof window !== 'undefined') {\n (window as any)[STORE_KEY] = store\n }\n\n return store\n}\n\nexport const useThemeStore = createThemeStore()\n","import * as React from 'react'\nimport { useEffect, useRef, useState, useCallback } from 'react'\nimport { Command } from 'cmdk'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarCheck2,\n CalendarClock, CalendarX, Package, Activity, BarChart3, FileText, FileCheck2, Mail, Search,\n DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, User, Box, Sparkles, Loader2,\n ListPlus, FolderOpen, Boxes, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n type LucideIcon,\n} from 'lucide-react'\nimport { useTranslation } from '../../hooks/useTranslation'\n\nexport interface CommandItem {\n id: string\n label: string\n icon?: string\n action: () => void\n group?: string\n keywords?: string\n subtitle?: string\n}\n\nexport interface EntitySearchResult {\n id: string\n label: string\n subtitle?: string\n group: string\n icon?: string\n data?: Record<string, unknown>\n}\n\nexport type EntitySearchFn = (query: string) => Promise<EntitySearchResult[]>\n\ninterface CommandPaletteProps {\n commands?: CommandItem[]\n open: boolean\n onOpenChange: (open: boolean) => void\n onEntitySearch?: EntitySearchFn\n onEntitySelect?: (result: EntitySearchResult) => void\n}\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarClock, Package, Activity, BarChart3,\n CalendarCheck2, CalendarX, FileText, FileCheck2, Mail, Search, DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, ListPlus, FolderOpen, User, Box, Boxes, Sparkles, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n}\n\nconst ENTITY_ICON: Record<string, LucideIcon> = {\n person: User,\n persons: User,\n product: Box,\n products: Box,\n service: Sparkles,\n services: Sparkles,\n}\n\n// ---------------------------------------------------------------------------\n// Debounced entity search hook\n// ---------------------------------------------------------------------------\n\nfunction useEntitySearch(searchFn: EntitySearchFn | undefined, query: string, open: boolean) {\n const [results, setResults] = useState<EntitySearchResult[]>([])\n const [loading, setLoading] = useState(false)\n const abortRef = useRef(0)\n\n useEffect(() => {\n if (!open) {\n setResults([])\n setLoading(false)\n return\n }\n\n const trimmed = query.trim()\n if (!searchFn || trimmed.length < 2) {\n setResults([])\n setLoading(false)\n return\n }\n\n setLoading(true)\n const id = ++abortRef.current\n\n const timer = setTimeout(async () => {\n try {\n const data = await searchFn(trimmed)\n if (abortRef.current === id) {\n setResults(data)\n setLoading(false)\n }\n } catch {\n if (abortRef.current === id) {\n setResults([])\n setLoading(false)\n }\n }\n }, 250)\n\n return () => clearTimeout(timer)\n }, [query, searchFn, open])\n\n return { results, loading }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CommandPalette({ commands = [], open, onOpenChange, onEntitySearch, onEntitySelect }: CommandPaletteProps) {\n const { t } = useTranslation()\n const [search, setSearch] = useState('')\n const { results: entityResults, loading: entityLoading } = useEntitySearch(onEntitySearch, search, open)\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n onOpenChange(!open)\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, onOpenChange])\n\n // Reset search when closed\n useEffect(() => {\n if (!open) setSearch('')\n }, [open])\n\n const grouped = commands.reduce<Record<string, CommandItem[]>>((acc, cmd) => {\n const group = cmd.group ?? 'Actions'\n if (!acc[group]) acc[group] = []\n acc[group].push(cmd)\n return acc\n }, {})\n\n // Group entity results\n const entityGrouped = entityResults.reduce<Record<string, EntitySearchResult[]>>((acc, r) => {\n const group = r.group || 'Results'\n if (!acc[group]) acc[group] = []\n acc[group].push(r)\n return acc\n }, {})\n\n const hasSearch = search.trim().length >= 2\n const totalResults = commands.length + entityResults.length\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"saas-overlay fixed inset-0 z-50 bg-black/40 backdrop-blur-sm\" />\n <Dialog.Content className=\"fayz-glass-surface saas-cmd-palette fixed left-1/2 top-[15%] z-50 w-full max-w-xl -translate-x-1/2 overflow-hidden rounded-2xl border border-border/50 bg-popover shadow-2xl\">\n <Dialog.Title className=\"sr-only\">{t('layout.commandPalette.title')}</Dialog.Title>\n <Dialog.Description className=\"sr-only\">{t('layout.commandPalette.description')}</Dialog.Description>\n\n <Command className=\"flex flex-col\" label=\"Command palette\" shouldFilter={true}>\n <div className=\"flex items-center gap-3 border-b border-border/50 px-4\">\n <Search className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <Command.Input\n placeholder={t('layout.commandPalette.placeholder')}\n className=\"flex h-12 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n autoFocus\n value={search}\n onValueChange={setSearch}\n />\n {entityLoading && <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground\" />}\n <kbd className=\"hidden shrink-0 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground sm:inline-block\">ESC</kbd>\n </div>\n\n <Command.List className=\"max-h-[360px] overflow-y-auto p-1.5\">\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n {entityLoading ? t('layout.commandPalette.searching') : t('layout.commandPalette.noResults')}\n </Command.Empty>\n\n {/* Static commands (pages, actions) */}\n {Object.entries(grouped).map(([group, items]) => (\n <Command.Group\n key={group}\n heading={group}\n className=\"[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {items.map((cmd) => {\n const Icon = cmd.icon ? (ICON_MAP[cmd.icon] ?? null) : null\n return (\n <Command.Item\n key={cmd.id}\n value={`${cmd.label} ${cmd.keywords ?? ''}`}\n onSelect={() => { cmd.action(); onOpenChange(false) }}\n className=\"flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted\"\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"flex-1\">{cmd.label}</span>\n <span className=\"text-[11px] text-muted-foreground/40\">{cmd.group}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n ))}\n\n {/* Entity search results */}\n {hasSearch && Object.entries(entityGrouped).map(([group, items]) => {\n const GroupIcon = ENTITY_ICON[group.toLowerCase()] ?? User\n return (\n <Command.Group\n key={`entity:${group}`}\n heading={group}\n className=\"[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {items.map((result) => {\n const Icon = result.icon ? (ICON_MAP[result.icon] ?? GroupIcon) : GroupIcon\n return (\n <Command.Item\n key={`entity:${result.id}`}\n value={`${result.label} ${result.subtitle ?? ''} ${result.group}`}\n onSelect={() => { onEntitySelect?.(result); onOpenChange(false) }}\n className=\"flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted\"\n >\n <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"block truncate\">{result.label}</span>\n {result.subtitle && (\n <span className=\"block truncate text-[11px] text-muted-foreground\">{result.subtitle}</span>\n )}\n </div>\n <span className=\"text-[11px] text-muted-foreground/40 shrink-0\">{result.group}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n )\n })}\n </Command.List>\n\n <div className=\"flex items-center justify-between border-t border-border/50 px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {entityLoading\n ? t('layout.commandPalette.searching')\n : hasSearch\n ? t('layout.commandPalette.resultCount', { count: String(totalResults), plural: totalResults !== 1 ? 's' : '' })\n : t('layout.commandPalette.commandCount', { count: String(commands.length), plural: commands.length !== 1 ? 's' : '' })}\n </span>\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground\">\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&uarr;&darr;</kbd>\n <span>{t('layout.commandPalette.navigate')}</span>\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&crarr;</kbd>\n <span>{t('layout.commandPalette.open')}</span>\n </div>\n </div>\n </Command>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import * as React from 'react'\nimport { hashRouterAdapter } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Admin hash router — the same lightweight approach the storefront uses. The\n// admin shell collects routes from the plugin runtime + manifest pages and\n// switches on the current hash path. Deliberately not react-router: an SDK\n// shell shipping a router creates singleton hazards under source-alias dev.\n// ---------------------------------------------------------------------------\n\nconst adapter = hashRouterAdapter()\n\nexport function normalizeAdminPath(path: string): string {\n const clean = `/${path}`.replace(/\\/+/g, '/')\n return clean.length > 1 ? clean.replace(/\\/+$/, '') : clean\n}\n\nexport function navigateTo(to: string): void {\n adapter.navigate(normalizeAdminPath(to))\n}\n\nexport function useAdminPath(): string {\n const [path, setPath] = React.useState(() => normalizeAdminPath(adapter.getCurrentPath() || '/'))\n React.useEffect(() => {\n return adapter.onPathChange((p) => {\n setPath(normalizeAdminPath(p || '/'))\n if (typeof window !== 'undefined') window.scrollTo(0, 0)\n })\n }, [])\n return path\n}\n\n/** Match '/courses/:id' against '/courses/abc' → { id: 'abc' }; supports a\n * trailing '/*' wildcard (matches the base and any deeper path). */\nexport function matchRoute(pattern: string, path: string): Record<string, string> | null {\n const cleanPath = (path.split('?')[0] ?? '').replace(/\\/+$/, '') || '/'\n if (pattern.endsWith('/*')) {\n const base = pattern.slice(0, -2)\n if (cleanPath === base || cleanPath.startsWith(`${base}/`)) return {}\n return null\n }\n const patternParts = pattern.split('/').filter(Boolean)\n const pathParts = cleanPath.split('/').filter(Boolean)\n if (patternParts.length !== pathParts.length) return null\n const params: Record<string, string> = {}\n for (let i = 0; i < patternParts.length; i++) {\n const pat = patternParts[i]!\n const part = pathParts[i]!\n if (pat.startsWith(':')) params[pat.slice(1)] = decodeURIComponent(part)\n else if (pat !== part) return null\n }\n return params\n}\n\n/** Score a route pattern for specificity so the most specific match wins\n * (static segments beat params; longer beats shorter; wildcard loses). */\nexport function routeScore(pattern: string): number {\n const isWildcard = pattern.endsWith('/*')\n const routePattern = isWildcard ? pattern.slice(0, -2) : pattern\n const parts = routePattern.split('/').filter(Boolean)\n let score = parts.length * 10\n for (const p of parts) if (!p.startsWith(':')) score += 5\n if (isWildcard) score -= 1\n return score\n}\n","/**\n * Global entity route registry.\n *\n * Populated once during buildNavigation() with mappings from\n * \"archetype:kind\" (e.g. \"person:staff\") to the registered route path\n * (e.g. \"/registry/staff\"). Used by PersonLink, command palette, and\n * any component that needs to resolve an entity detail URL.\n */\n\nlet routeMap = new Map<string, string>()\n\n/** Replace the entity route map (called once at app init by buildNavigation). */\nexport function setEntityRouteMap(map: Map<string, string>): void {\n routeMap = map\n}\n\n/**\n * Resolve the route path for an entity given its archetype and kind.\n * Returns the registered path (e.g. \"/registry/staff\") or null if not found.\n *\n * Tries \"archetype:kind\" first, then \"archetype\" alone.\n */\nexport function resolveEntityRoute(archetype?: string, kind?: string): string | null {\n if (archetype && kind) {\n const specific = routeMap.get(`${archetype}:${kind}`)\n if (specific) return specific\n }\n if (archetype) {\n const general = routeMap.get(archetype)\n if (general) return general\n }\n return null\n}\n\n/**\n * Build a full URL path for an entity detail page.\n * Returns e.g. \"/registry/staff/uuid\" or \"/registry/staff/uuid/schedule\".\n * Falls back to \"/kind/uuid\" if no route registered.\n */\nexport function resolveEntityHref(id: string, archetype?: string, kind?: string, tab?: string): string {\n const route = resolveEntityRoute(archetype, kind)\n let href: string\n if (route) {\n href = `${route}/${id}`\n } else if (kind) {\n const plural = kind.endsWith('s') ? kind : kind + 's'\n href = `/${plural}/${id}`\n } else {\n href = `/${id}`\n }\n if (tab) href += `/${tab}`\n return href\n}\n","import { create } from 'zustand'\n\nconst STORAGE_KEY = 'saas-core:locale'\n\nfunction getPersistedLocale(): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? 'en'\n } catch {\n return 'en'\n }\n}\n\ninterface LocaleState {\n locale: string\n setLocale: (locale: string) => void\n}\n\nexport const useLocaleStore = create<LocaleState>((set) => ({\n locale: getPersistedLocale(),\n setLocale: (locale) => {\n try { localStorage.setItem(STORAGE_KEY, locale) } catch { /* ignore */ }\n set({ locale })\n },\n}))\n","export interface LocaleOption {\n code: string\n label: string\n flag: string\n}\n\nexport const SUPPORTED_LOCALES: LocaleOption[] = [\n { code: 'en', label: 'English', flag: '🇺🇸' },\n { code: 'pt-BR', label: 'Português (BR)', flag: '🇧🇷' },\n]\n\nexport function getLocaleOption(code: string): LocaleOption {\n return SUPPORTED_LOCALES.find((l) => l.code === code) ?? SUPPORTED_LOCALES[0]\n}\n","import * as React from 'react'\nimport { Save, Check } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { useLocaleStore } from '../../stores/locale.store'\nimport { SUPPORTED_LOCALES } from '../../lib/locale-config'\nimport type { Tenant } from '../../types'\n\ninterface CompanySettingsProps {\n tenant?: Tenant | null\n onSave?: (settings: {\n name: string\n timezone: string\n currency: string\n }) => void\n}\n\nconst TIMEZONES = [\n { value: 'America/Sao_Paulo', label: 'Brasilia (BRT)' },\n { value: 'America/New_York', label: 'Eastern (US)' },\n { value: 'America/Chicago', label: 'Central (US)' },\n { value: 'America/Denver', label: 'Mountain (US)' },\n { value: 'America/Los_Angeles', label: 'Pacific (US)' },\n { value: 'America/Mexico_City', label: 'Mexico City' },\n { value: 'America/Buenos_Aires', label: 'Buenos Aires' },\n { value: 'Europe/London', label: 'London' },\n { value: 'Europe/Paris', label: 'Paris' },\n { value: 'Europe/Berlin', label: 'Berlin' },\n { value: 'Europe/Madrid', label: 'Madrid' },\n { value: 'Europe/Lisbon', label: 'Lisbon' },\n { value: 'Asia/Tokyo', label: 'Tokyo' },\n { value: 'Asia/Shanghai', label: 'Shanghai' },\n { value: 'Australia/Sydney', label: 'Sydney' },\n { value: 'UTC', label: 'UTC' },\n]\n\nconst CURRENCIES = [\n { value: 'BRL', label: 'BRL - Real' },\n { value: 'USD', label: 'USD - US Dollar' },\n { value: 'EUR', label: 'EUR - Euro' },\n { value: 'GBP', label: 'GBP - British Pound' },\n { value: 'JPY', label: 'JPY - Japanese Yen' },\n { value: 'CAD', label: 'CAD - Canadian Dollar' },\n { value: 'AUD', label: 'AUD - Australian Dollar' },\n { value: 'MXN', label: 'MXN - Mexican Peso' },\n { value: 'ARS', label: 'ARS - Argentine Peso' },\n]\n\nexport function CompanySettings({ tenant, onSave }: CompanySettingsProps) {\n const { t } = useTranslation()\n const { locale: uiLocale, setLocale: setUiLocale } = useLocaleStore()\n const [name, setName] = React.useState(tenant?.name ?? '')\n const [timezone, setTimezone] = React.useState(tenant?.settings?.timezone ?? 'UTC')\n const [currency, setCurrency] = React.useState(tenant?.settings?.currency ?? 'USD')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (tenant) {\n setName(tenant.name)\n setTimezone(tenant.settings?.timezone ?? 'UTC')\n setCurrency(tenant.settings?.currency ?? 'USD')\n }\n }, [tenant])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({ name, timezone, currency })\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <form onSubmit={handleSubmit}>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.company.title')}</CardTitle>\n <CardDescription>\n {t('settings.company.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"company-name\" className=\"text-sm font-medium\">\n {t('settings.company.name')}\n </label>\n <Input\n id=\"company-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Acme Inc.\"\n />\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('settings.company.timezone')}</label>\n <Select value={timezone} onValueChange={setTimezone}>\n <SelectTrigger>\n <SelectValue placeholder={t('settings.company.timezonePlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {TIMEZONES.map((tz) => (\n <SelectItem key={tz.value} value={tz.value}>\n {tz.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('settings.company.currency')}</label>\n <Select value={currency} onValueChange={setCurrency}>\n <SelectTrigger>\n <SelectValue placeholder={t('settings.company.currencyPlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {CURRENCIES.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n </div>\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.save')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n\n {/* UI Language */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">{t('settings.uiLanguage')}</CardTitle>\n <CardDescription>{t('settings.uiLanguageDescription')}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {SUPPORTED_LOCALES.map((loc) => (\n <button\n key={loc.code}\n onClick={() => {\n setUiLocale(loc.code)\n window.location.reload()\n }}\n className={`flex items-center justify-between rounded-lg border-2 px-4 py-3 text-sm transition-all ${\n uiLocale === loc.code\n ? 'border-primary bg-primary/5'\n : 'border-transparent bg-muted/30 hover:bg-muted/50'\n }`}\n >\n <span className=\"flex items-center gap-3\">\n <span className=\"text-xl\">{loc.flag}</span>\n <span className=\"font-medium\">{loc.label}</span>\n </span>\n {uiLocale === loc.code && <Check className=\"h-4 w-4 text-primary\" />}\n </button>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\nimport type { OrgAdapter } from '../types/org-adapter'\n\nconst OrgAdapterContext = createContext<OrgAdapter | null>(null)\n\nexport const OrgAdapterProvider = OrgAdapterContext.Provider\n\nexport function useOrgAdapter(): OrgAdapter {\n const adapter = useContext(OrgAdapterContext)\n if (!adapter) {\n throw new Error('useOrgAdapter must be used within an OrgAdapterProvider')\n }\n return adapter\n}\n\nexport function useOrgAdapterOptional(): OrgAdapter | null {\n return useContext(OrgAdapterContext)\n}\n","import { CompanySettings } from './CompanySettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { toast } from '../notifications/ToastProvider'\nimport type { Tenant, TenantSettings } from '../../types'\n\nfunction toTenantSettings(settings: unknown): TenantSettings {\n const source = (settings && typeof settings === 'object' ? settings : {}) as Partial<TenantSettings>\n const branding = (source.branding && typeof source.branding === 'object' ? source.branding : {}) as TenantSettings['branding']\n\n return {\n timezone: source.timezone ?? 'America/Sao_Paulo',\n currency: source.currency ?? 'BRL',\n locale: source.locale ?? 'pt-BR',\n branding: {\n primaryColor: branding.primaryColor,\n accentColor: branding.accentColor,\n logoUrl: branding.logoUrl,\n faviconUrl: branding.faviconUrl,\n },\n }\n}\n\nexport function ConnectedCompanySettings() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n const adapter = useOrgAdapterOptional()\n // Map Organization to Tenant shape for the component\n const tenant: Tenant | null = currentOrg\n ? {\n id: currentOrg.id,\n name: currentOrg.name,\n slug: currentOrg.slug,\n logoUrl: currentOrg.logoUrl,\n plan: currentOrg.plan ?? 'free',\n settings: toTenantSettings(currentOrg.settings),\n createdAt: currentOrg.createdAt,\n updatedAt: currentOrg.updatedAt,\n }\n : null\n\n const handleSave = async (data: { name: string; timezone: string; currency: string }) => {\n if (!adapter || !currentOrg) return\n\n try {\n const currentSettings = toTenantSettings(currentOrg.settings)\n const updated = await adapter.updateOrg(currentOrg.id, {\n name: data.name,\n settings: {\n ...currentSettings,\n timezone: data.timezone,\n currency: data.currency,\n },\n })\n setCurrentOrg(updated)\n toast.success('Settings saved')\n } catch (err: any) {\n toast.error('Failed to save', { description: err?.message })\n }\n }\n\n return <CompanySettings tenant={tenant} onSave={handleSave} />\n}\n","import * as React from 'react'\nimport { Camera, Save } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { AuthUser } from '../../types'\n\ninterface UserProfileProps {\n user?: AuthUser | null\n onSave?: (data: { fullName: string }) => void\n onAvatarChange?: (file: File) => void\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join('')\n .toUpperCase()\n}\n\nexport function UserProfile({ user, onSave, onAvatarChange }: UserProfileProps) {\n const { t } = useTranslation()\n const [fullName, setFullName] = React.useState(user?.fullName ?? '')\n const [saving, setSaving] = React.useState(false)\n const fileInputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (user) {\n setFullName(user.fullName)\n }\n }, [user])\n\n const handleAvatarClick = () => {\n fileInputRef.current?.click()\n }\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file && onAvatarChange) {\n onAvatarChange(file)\n }\n if (e.target) {\n e.target.value = ''\n }\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({ fullName })\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.profile.title')}</CardTitle>\n <CardDescription>\n {t('settings.profile.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-6\">\n <div className=\"flex items-center gap-6\">\n <div className=\"relative\">\n <Avatar className=\"h-20 w-20\">\n <AvatarImage src={user?.avatarUrl} alt={user?.fullName} />\n <AvatarFallback className=\"text-lg\">\n {user?.fullName ? getInitials(user.fullName) : '?'}\n </AvatarFallback>\n </Avatar>\n {onAvatarChange && (\n <button\n type=\"button\"\n onClick={handleAvatarClick}\n className={cn(\n 'absolute -bottom-1 -right-1 flex h-8 w-8 items-center justify-center rounded-full',\n 'border-2 border-background bg-primary text-primary-foreground',\n 'transition-colors hover:bg-primary/90'\n )}\n aria-label=\"Change avatar\"\n >\n <Camera className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleFileChange}\n />\n </div>\n\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{user?.fullName ?? 'User'}</p>\n <p className=\"text-sm text-muted-foreground\">{user?.email}</p>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"full-name\" className=\"text-sm font-medium\">\n {t('settings.profile.fullName')}\n </label>\n <Input\n id=\"full-name\"\n value={fullName}\n onChange={(e) => setFullName(e.target.value)}\n placeholder=\"John Doe\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"email\" className=\"text-sm font-medium\">\n {t('settings.profile.email')}\n </label>\n <Input\n id=\"email\"\n type=\"email\"\n value={user?.email ?? ''}\n disabled\n className=\"bg-muted\"\n />\n <p className=\"text-xs text-muted-foreground\">\n {t('settings.profile.emailHelp')}\n </p>\n </div>\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.profile.saveProfile')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n )\n}\n","// Shim → native Supabase client (unified singleton across shell + plugins).\nimport type { SupabaseClient } from '@supabase/supabase-js'\nimport { getSupabaseClientOptional as _getOpt } from '@fayz-ai/core'\nexport { createSupabaseProvider, setGlobalSupabaseClient } from '@fayz-ai/core'\n// @fayz-ai/core returns a loosely-typed client (no hard supabase coupling); the\n// shell does `.schema(...).from(...)`, so surface it as the real client type.\nexport const getSupabaseClientOptional = (): SupabaseClient | null =>\n _getOpt() as unknown as SupabaseClient | null\nexport {\n CORE_SCHEMA,\n getCoreSchemaClient as getCoreClient,\n getFayzSupabaseClient as getSupabaseClient,\n getFayzSupabaseClientOptional as getSupabaseClientSafe,\n createFayzSupabaseClient as createSupabaseClient,\n} from '../../supabase/client'\nimport { getFayzSupabaseClient } from '../../supabase/client'\nexport const getCoreSupabaseClient = getFayzSupabaseClient\nexport const getProjectSupabaseClient = getFayzSupabaseClient\nexport type { SupabaseClient }\n","import * as React from 'react'\nimport { UserProfile } from './UserProfile'\n// The signed-in user lives in @fayz-ai/auth's store (the one AuthProvider fills) —\n// the shell stores/auth.store is a separate, unpopulated store.\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { getSupabaseClient, getSupabaseClientSafe, CORE_SCHEMA } from '../../lib/supabase'\nimport { toast } from '../notifications/ToastProvider'\n\ninterface ProfileRow {\n full_name: string | null\n avatar_url: string | null\n email: string | null\n}\n\n// The \"/me\" surface: the current user's canonical profile = the auth user (id,\n// e-mail) merged with their saas_core.profiles row (name, avatar). Reads/writes go\n// to saas_core.profiles (RLS: id = auth.uid(), so a user only ever sees/edits their\n// own), and keep the auth-user metadata in sync so both stay coherent.\nexport function ConnectedUserProfile() {\n const user = useAuthStore((s) => s.user)\n const setUser = useAuthStore((s) => s.setUser)\n const [profile, setProfile] = React.useState<ProfileRow | null>(null)\n\n // Fill: load the canonical profile row on mount (falls back to auth metadata).\n React.useEffect(() => {\n const supabase = getSupabaseClientSafe()\n if (!user || !supabase) return // mock/no-backend: just use the auth-store user\n let cancelled = false\n void supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .select('full_name, avatar_url, email')\n .eq('id', user.id)\n .maybeSingle()\n .then(({ data }) => {\n if (!cancelled && data) setProfile(data as ProfileRow)\n })\n return () => {\n cancelled = true\n }\n }, [user?.id])\n\n const handleSave = async (data: { fullName: string }) => {\n if (!user) return\n try {\n const supabase = getSupabaseClient()\n // Upsert the canonical row (INSERT if the profile doesn't exist yet).\n const { error: profileError } = await supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .upsert({ id: user.id, full_name: data.fullName, email: user.email }, { onConflict: 'id' })\n if (profileError) throw profileError\n\n // Keep the auth-user metadata in sync (used across the app's session).\n const { error: metaError } = await supabase.auth.updateUser({ data: { full_name: data.fullName } })\n if (metaError) throw metaError\n\n setUser({ ...user, fullName: data.fullName })\n setProfile({ full_name: data.fullName, avatar_url: profile?.avatar_url ?? null, email: user.email })\n toast.success('Perfil atualizado')\n } catch (err: any) {\n toast.error('Falha ao atualizar', { description: err?.message })\n }\n }\n\n const handleAvatarChange = async (file: File) => {\n if (!user) return\n try {\n const supabase = getSupabaseClient()\n const ext = file.name.split('.').pop()\n const path = `avatars/${user.id}.${ext}`\n\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, file, { upsert: true })\n if (uploadError) throw uploadError\n\n const { data: urlData } = supabase.storage.from('avatars').getPublicUrl(path)\n const avatarUrl = urlData.publicUrl\n\n const { error: profileError } = await supabase\n .schema(CORE_SCHEMA)\n .from('profiles')\n .upsert({ id: user.id, avatar_url: avatarUrl, email: user.email }, { onConflict: 'id' })\n if (profileError) throw profileError\n\n await supabase.auth.updateUser({ data: { avatar_url: avatarUrl } })\n setUser({ ...user, avatarUrl })\n setProfile({ full_name: profile?.full_name ?? null, avatar_url: avatarUrl, email: user.email })\n toast.success('Avatar atualizado')\n } catch (err: any) {\n toast.error('Falha ao enviar avatar', { description: err?.message })\n }\n }\n\n // Merge: prefer the canonical profile row, fall back to auth metadata.\n const merged = user\n ? { ...user, fullName: profile?.full_name ?? user.fullName, avatarUrl: profile?.avatar_url ?? user.avatarUrl }\n : null\n\n return <UserProfile user={merged as any} onSave={handleSave} onAvatarChange={handleAvatarChange} />\n}\n","import * as React from 'react'\nimport { KeyRound, Loader2, Clock, ShieldCheck, UserPlus } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { AuthUser } from '../../types'\n\nexport interface TenantSecuritySettings {\n sessionTimeoutMinutes?: number\n require2FA?: boolean\n inviteOnly?: boolean\n}\n\ninterface SecuritySettingsProps {\n user?: AuthUser | null\n tenantSecurity?: TenantSecuritySettings\n isAdmin?: boolean\n onResetPassword?: () => Promise<void>\n onTenantSecurityChange?: (settings: TenantSecuritySettings) => Promise<void>\n}\n\nconst SESSION_TIMEOUT_OPTIONS = [\n { label: '30 minutes', value: 30 },\n { label: '1 hour', value: 60 },\n { label: '4 hours', value: 240 },\n { label: '8 hours', value: 480 },\n { label: '24 hours', value: 1440 },\n { label: 'No limit', value: 0 },\n]\n\nfunction ToggleRow({\n icon,\n label,\n description,\n checked,\n onChange,\n disabled,\n}: {\n icon: React.ReactNode\n label: string\n description: string\n checked: boolean\n onChange: (val: boolean) => void\n disabled?: boolean\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4 py-3\">\n <div className=\"flex gap-3\">\n <div className=\"mt-0.5 text-muted-foreground\">{icon}</div>\n <div>\n <p className=\"text-sm font-medium\">{label}</p>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => onChange(!checked)}\n className={`relative inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${\n checked ? 'bg-primary' : 'bg-muted-foreground/30'\n }`}\n >\n <span\n className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-sm transition-transform ${\n checked ? 'translate-x-[18px]' : 'translate-x-[2px]'\n }`}\n />\n </button>\n </div>\n )\n}\n\nexport function SecuritySettings({\n user,\n tenantSecurity,\n isAdmin,\n onResetPassword,\n onTenantSecurityChange,\n}: SecuritySettingsProps) {\n const { t } = useTranslation()\n const [resetting, setResetting] = React.useState(false)\n const [resetSent, setResetSent] = React.useState(false)\n const [savingTenant, setSavingTenant] = React.useState(false)\n\n const handleResetPassword = async () => {\n if (!onResetPassword) return\n setResetting(true)\n try {\n await onResetPassword()\n setResetSent(true)\n } catch {\n // handled via toast in connected wrapper\n } finally {\n setResetting(false)\n }\n }\n\n const updateTenantSecurity = async (partial: Partial<TenantSecuritySettings>) => {\n if (!onTenantSecurityChange) return\n setSavingTenant(true)\n try {\n await onTenantSecurityChange({ ...tenantSecurity, ...partial })\n } catch {\n // handled via toast\n } finally {\n setSavingTenant(false)\n }\n }\n\n const baseClass =\n 'flex h-10 w-full rounded-input border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'\n\n return (\n <div className=\"space-y-6\">\n {/* Password reset */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.security.passwordTitle')}</CardTitle>\n <CardDescription>\n {t('settings.security.passwordSubtitle')}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between rounded-lg border p-4\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{user?.email}</p>\n <p className=\"text-xs text-muted-foreground\">\n {resetSent\n ? t('settings.security.resetLinkSent')\n : t('settings.security.resetLinkDescription')}\n </p>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={resetting || resetSent}\n onClick={handleResetPassword}\n >\n {resetting && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n <KeyRound className=\"mr-2 h-4 w-4\" />\n {resetSent ? t('settings.security.linkSent') : t('settings.security.resetPassword')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Tenant security — only visible to admins */}\n {isAdmin && (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.security.orgSecurityTitle')}</CardTitle>\n <CardDescription>\n {t('settings.security.orgSecuritySubtitle')}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-1 divide-y\">\n <ToggleRow\n icon={<ShieldCheck className=\"h-4 w-4\" />}\n label={t('settings.security.require2FA')}\n description={t('settings.security.require2FADescription')}\n checked={tenantSecurity?.require2FA ?? false}\n onChange={(val) => updateTenantSecurity({ require2FA: val })}\n disabled={savingTenant}\n />\n <ToggleRow\n icon={<UserPlus className=\"h-4 w-4\" />}\n label={t('settings.security.inviteOnly')}\n description={t('settings.security.inviteOnlyDescription')}\n checked={tenantSecurity?.inviteOnly ?? true}\n onChange={(val) => updateTenantSecurity({ inviteOnly: val })}\n disabled={savingTenant}\n />\n\n <div className=\"flex items-start justify-between gap-4 py-3\">\n <div className=\"flex gap-3\">\n <div className=\"mt-0.5 text-muted-foreground\">\n <Clock className=\"h-4 w-4\" />\n </div>\n <div>\n <p className=\"text-sm font-medium\">{t('settings.security.sessionTimeout')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('settings.security.sessionTimeoutDescription')}\n </p>\n </div>\n </div>\n <select\n value={tenantSecurity?.sessionTimeoutMinutes ?? 0}\n onChange={(e) =>\n updateTenantSecurity({ sessionTimeoutMinutes: Number(e.target.value) })\n }\n disabled={savingTenant}\n className={`${baseClass} w-36`}\n >\n {SESSION_TIMEOUT_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import { create } from 'zustand'\nimport type { AuthUser, AuthSession, AuthState } from '../types'\n\ninterface AuthStore extends AuthState {\n setUser: (user: AuthUser | null) => void\n setSession: (session: AuthSession | null) => void\n setLoading: (loading: boolean) => void\n setInitialized: (initialized: boolean) => void\n setPendingEmailVerification: (pending: boolean) => void\n reset: () => void\n}\n\nconst initialState: AuthState = {\n user: null,\n session: null,\n loading: true,\n initialized: false,\n pendingEmailVerification: false,\n}\n\nexport const useAuthStore = create<AuthStore>((set) => ({\n ...initialState,\n setUser: (user) => set({ user }),\n setSession: (session) => set({ session, user: session?.user ?? null, pendingEmailVerification: false }),\n setLoading: (loading) => set({ loading }),\n setInitialized: (initialized) => set({ initialized }),\n setPendingEmailVerification: (pendingEmailVerification) => set({ pendingEmailVerification }),\n reset: () => set(initialState),\n}))\n","import { createContext, useContext } from 'react'\nimport type { AuthAdapter } from '../types/auth-adapter'\n\nconst AuthAdapterContext = createContext<AuthAdapter | null>(null)\n\nexport const AuthAdapterProvider = AuthAdapterContext.Provider\n\nexport function useAuthAdapter(): AuthAdapter {\n const adapter = useContext(AuthAdapterContext)\n if (!adapter) {\n throw new Error('useAuthAdapter must be used within an AuthAdapterProvider')\n }\n return adapter\n}\n\nexport function useAuthAdapterOptional(): AuthAdapter | null {\n return useContext(AuthAdapterContext)\n}\n","import { SecuritySettings } from './SecuritySettings'\nimport type { TenantSecuritySettings } from './SecuritySettings'\nimport { useAuthStore } from '../../stores/auth.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useAuthAdapterOptional } from '../../lib/auth-context'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { toast } from '../notifications/ToastProvider'\n\nexport function ConnectedSecuritySettings() {\n const user = useAuthStore((s) => s.user)\n const authAdapter = useAuthAdapterOptional()\n const orgAdapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n\n const settings = (currentOrg?.settings ?? {}) as Record<string, unknown>\n const tenantSecurity = (settings.security ?? {}) as TenantSecuritySettings\n\n // Determine if current user is admin (owner/admin role)\n const members = useOrganizationStore((s) => s.members)\n const currentMember = members.find((m) => m.userId === user?.id)\n const isAdmin = currentMember?.profileName?.toLowerCase() === 'owner' ||\n currentMember?.profileName?.toLowerCase() === 'admin'\n\n const handleResetPassword = async () => {\n if (!authAdapter || !user?.email) return\n try {\n await authAdapter.resetPassword(user.email)\n toast.success('Password reset link sent', { description: `Check ${user.email} for the reset link.` })\n } catch (err: any) {\n toast.error('Failed to send reset link', { description: err?.message })\n throw err\n }\n }\n\n const handleTenantSecurityChange = async (security: TenantSecuritySettings) => {\n if (!orgAdapter || !currentOrg) return\n try {\n const updated = await orgAdapter.updateOrg(currentOrg.id, {\n settings: { ...settings, security },\n })\n setCurrentOrg(updated)\n toast.success('Security settings updated')\n } catch (err: any) {\n toast.error('Failed to update security settings', { description: err?.message })\n throw err\n }\n }\n\n return (\n <SecuritySettings\n user={user as any}\n tenantSecurity={tenantSecurity}\n isAdmin={isAdmin}\n onResetPassword={handleResetPassword}\n onTenantSecurityChange={orgAdapter ? handleTenantSecurityChange : undefined}\n />\n )\n}\n","import * as React from 'react'\nimport { Upload, Save, X } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { TenantSettings } from '../../types'\n\ninterface BrandingSettingsProps {\n branding?: TenantSettings['branding'] | null\n onSave?: (branding: TenantSettings['branding'], assets?: {\n logoFile?: File | null\n faviconFile?: File | null\n }) => void\n}\n\ninterface FileUploadProps {\n label: string\n accept: string\n currentUrl?: string\n onFileSelect: (file: File) => void\n onClear?: () => void\n hint?: string\n}\n\nfunction FileUploadField({\n label,\n accept,\n currentUrl,\n onFileSelect,\n onClear,\n hint,\n}: FileUploadProps) {\n const { t } = useTranslation()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [preview, setPreview] = React.useState<string | null>(null)\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) {\n onFileSelect(file)\n const url = URL.createObjectURL(file)\n setPreview(url)\n }\n if (e.target) {\n e.target.value = ''\n }\n }\n\n const displayUrl = preview ?? currentUrl\n\n return (\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{label}</label>\n <div className=\"flex items-center gap-4\">\n {displayUrl ? (\n <div className=\"relative\">\n <img\n src={displayUrl}\n alt={label}\n className=\"h-16 w-16 rounded-md border object-contain p-1\"\n />\n {onClear && (\n <button\n type=\"button\"\n onClick={() => {\n onClear()\n setPreview(null)\n }}\n className=\"absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full bg-destructive text-destructive-foreground\"\n aria-label={`Remove ${label.toLowerCase()}`}\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex h-16 w-16 items-center justify-center rounded-md border border-dashed\">\n <Upload className=\"h-5 w-5 text-muted-foreground/50\" />\n </div>\n )}\n\n <div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => inputRef.current?.click()}\n >\n {t('settings.branding.chooseFile')}\n </Button>\n {hint && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{hint}</p>\n )}\n </div>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n className=\"hidden\"\n onChange={handleChange}\n />\n </div>\n )\n}\n\nexport function BrandingSettings({ branding, onSave }: BrandingSettingsProps) {\n const { t } = useTranslation()\n const [primaryColor, setPrimaryColor] = React.useState(branding?.primaryColor ?? '#000000')\n const [accentColor, setAccentColor] = React.useState(branding?.accentColor ?? '#6366f1')\n const [logoFile, setLogoFile] = React.useState<File | null>(null)\n const [faviconFile, setFaviconFile] = React.useState<File | null>(null)\n const [logoUrl, setLogoUrl] = React.useState(branding?.logoUrl ?? '')\n const [faviconUrl, setFaviconUrl] = React.useState(branding?.faviconUrl ?? '')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => {\n if (branding) {\n setPrimaryColor(branding.primaryColor ?? '#000000')\n setAccentColor(branding.accentColor ?? '#6366f1')\n setLogoUrl(branding.logoUrl ?? '')\n setFaviconUrl(branding.faviconUrl ?? '')\n }\n }, [branding])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (!onSave) return\n\n setSaving(true)\n try {\n await onSave({\n primaryColor,\n accentColor,\n logoUrl,\n faviconUrl,\n }, {\n logoFile,\n faviconFile,\n })\n setLogoFile(null)\n setFaviconFile(null)\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit}>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">{t('settings.branding.title')}</CardTitle>\n <CardDescription>\n {t('settings.branding.subtitle')}\n </CardDescription>\n </CardHeader>\n\n <CardContent className=\"space-y-6\">\n <div className=\"grid gap-6 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <label htmlFor=\"primary-color\" className=\"text-sm font-medium\">\n {t('settings.branding.primaryColor')}\n </label>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n id=\"primary-color\"\n value={primaryColor}\n onChange={(e) => setPrimaryColor(e.target.value)}\n className=\"h-10 w-10 cursor-pointer rounded-md border bg-transparent p-0.5\"\n />\n <Input\n value={primaryColor}\n onChange={(e) => setPrimaryColor(e.target.value)}\n placeholder=\"#000000\"\n className=\"flex-1\"\n maxLength={7}\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"accent-color\" className=\"text-sm font-medium\">\n {t('settings.branding.accentColor')}\n </label>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n id=\"accent-color\"\n value={accentColor}\n onChange={(e) => setAccentColor(e.target.value)}\n className=\"h-10 w-10 cursor-pointer rounded-md border bg-transparent p-0.5\"\n />\n <Input\n value={accentColor}\n onChange={(e) => setAccentColor(e.target.value)}\n placeholder=\"#6366f1\"\n className=\"flex-1\"\n maxLength={7}\n />\n </div>\n </div>\n </div>\n\n <div className=\"rounded-md border p-4\">\n <p className=\"mb-3 text-sm font-medium\">{t('settings.branding.preview')}</p>\n <div className=\"flex items-center gap-3\">\n <div\n className=\"h-10 w-24 rounded-md\"\n style={{ backgroundColor: primaryColor }}\n />\n <div\n className=\"h-10 w-24 rounded-md\"\n style={{ backgroundColor: accentColor }}\n />\n </div>\n </div>\n\n <FileUploadField\n label=\"Logo\"\n accept=\"image/png,image/jpeg,image/svg+xml,image/webp\"\n currentUrl={logoUrl || undefined}\n onFileSelect={setLogoFile}\n onClear={() => {\n setLogoUrl('')\n setLogoFile(null)\n }}\n hint=\"Recommended: 200x50px, PNG or SVG\"\n />\n\n <FileUploadField\n label=\"Favicon\"\n accept=\"image/png,image/x-icon,image/svg+xml\"\n currentUrl={faviconUrl || undefined}\n onFileSelect={setFaviconFile}\n onClear={() => {\n setFaviconUrl('')\n setFaviconFile(null)\n }}\n hint=\"Recommended: 32x32px, PNG or ICO\"\n />\n </CardContent>\n\n <CardFooter className=\"justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"mr-2 h-4 w-4\" />\n {saving ? t('common.saving') : t('settings.branding.saveBranding')}\n </Button>\n </CardFooter>\n </Card>\n </form>\n )\n}\n","import { BrandingSettings } from './BrandingSettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { toast } from '../notifications/ToastProvider'\nimport { getSupabaseClient } from '../../lib/supabase'\nimport type { TenantSettings } from '../../types'\n\nexport function ConnectedBrandingSettings() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n\n const handleSave = async (\n branding: TenantSettings['branding'],\n assets?: { logoFile?: File | null; faviconFile?: File | null },\n ) => {\n if (!currentOrg) return\n\n try {\n const supabase = getSupabaseClient()\n let nextBranding = { ...branding }\n\n if (assets?.logoFile) {\n const ext = assets.logoFile.name.split('.').pop() ?? 'png'\n const path = `branding/${currentOrg.id}/logo.${ext}`\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, assets.logoFile, { upsert: true })\n if (uploadError) throw uploadError\n const { data } = supabase.storage.from('avatars').getPublicUrl(path)\n nextBranding.logoUrl = data.publicUrl\n }\n\n if (assets?.faviconFile) {\n const ext = assets.faviconFile.name.split('.').pop() ?? 'png'\n const path = `branding/${currentOrg.id}/favicon.${ext}`\n const { error: uploadError } = await supabase.storage\n .from('avatars')\n .upload(path, assets.faviconFile, { upsert: true })\n if (uploadError) throw uploadError\n const { data } = supabase.storage.from('avatars').getPublicUrl(path)\n nextBranding.faviconUrl = data.publicUrl\n }\n\n const currentSettings = (currentOrg.settings ?? {}) as Record<string, unknown>\n const settings = {\n ...currentSettings,\n branding: nextBranding,\n }\n\n const { data: updatedTenant, error: updateError } = await supabase\n .from('tenants')\n .update({\n settings,\n logo_url: nextBranding.logoUrl ?? currentOrg.logoUrl ?? null,\n })\n .eq('id', currentOrg.id)\n .select()\n .single()\n\n if (updateError) throw updateError\n\n setCurrentOrg({\n ...currentOrg,\n logoUrl: updatedTenant.logo_url ?? undefined,\n settings: updatedTenant.settings ?? settings,\n updatedAt: updatedTenant.updated_at ?? currentOrg.updatedAt,\n })\n\n toast.success('Branding saved')\n } catch (err: any) {\n toast.error('Failed to save branding', { description: err?.message })\n }\n }\n\n const currentSettings = (currentOrg?.settings ?? {}) as Partial<TenantSettings>\n\n return (\n <BrandingSettings\n branding={currentSettings.branding}\n onSave={handleSave}\n />\n )\n}\n","import * as React from 'react'\nimport { Building2, User, Shield, Palette, ArrowLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ConnectedCompanySettings } from './ConnectedCompanySettings'\nimport { ConnectedUserProfile } from './ConnectedUserProfile'\nimport { ConnectedSecuritySettings } from './ConnectedSecuritySettings'\nimport { ConnectedBrandingSettings } from './ConnectedBrandingSettings'\n\ninterface SettingsTab {\n id: string\n label: string\n icon?: React.ReactNode\n component: React.ReactNode\n}\n\ninterface SettingsPageProps {\n tabs?: SettingsTab[]\n extraTabs?: SettingsTab[]\n defaultTab?: string\n className?: string\n beforeContent?: React.ReactNode\n afterContent?: React.ReactNode\n /** Show the company \"Geral\" (organization general) tab. Default: true.\n * B2C apps pass false to hide org-identity settings. Ignored when `tabs` is\n * supplied explicitly. */\n showCompany?: boolean\n /** Show the branding (\"Identidade Visual\") tab. Default: true. Ignored when\n * `tabs` is supplied explicitly. */\n showBranding?: boolean\n}\n\nexport function SettingsPage({\n tabs,\n extraTabs,\n defaultTab,\n className,\n beforeContent,\n afterContent,\n showCompany = true,\n showBranding = true,\n}: SettingsPageProps) {\n const { t } = useTranslation()\n\n const defaultTabs: SettingsTab[] = React.useMemo(() => [\n ...(showCompany ? [{ id: 'general', label: t('settings.general'), icon: <Building2 className=\"h-4 w-4\" />, component: <ConnectedCompanySettings /> }] : []),\n { id: 'profile', label: t('settings.profile'), icon: <User className=\"h-4 w-4\" />, component: <ConnectedUserProfile /> },\n { id: 'security', label: t('settings.security'), icon: <Shield className=\"h-4 w-4\" />, component: <ConnectedSecuritySettings /> },\n ...(showBranding ? [{ id: 'branding', label: t('settings.branding'), icon: <Palette className=\"h-4 w-4\" />, component: <ConnectedBrandingSettings /> }] : []),\n ], [t, showCompany, showBranding])\n\n const baseTabs = tabs ?? defaultTabs\n const resolvedTabs = extraTabs ? [...baseTabs, ...extraTabs] : baseTabs\n\n // Detect active tab from URL: /settings/financial/... → 'financial'\n function getTabFromHash(): string | null {\n const hash = typeof window !== 'undefined' ? window.location.hash.slice(1) || '/' : '/'\n if (hash.startsWith('/settings/')) {\n const tabId = hash.slice('/settings/'.length).split('/')[0]\n if (resolvedTabs.find((t) => t.id === tabId)) return tabId\n }\n return null\n }\n\n const [activeTab, setActiveTab] = React.useState<string | null>(() => {\n return getTabFromHash() ?? defaultTab ?? null\n })\n\n // Sync tab from hash changes\n React.useEffect(() => {\n const handler = () => {\n const tab = getTabFromHash()\n if (tab) setActiveTab(tab)\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [resolvedTabs])\n\n // Desktop always shows a selected tab; when none is chosen yet (landing on\n // /settings), default to the first tab — 'general'. Mobile keeps its\n // list-first master/detail behaviour (driven by the raw activeTab below).\n const desktopTab = activeTab ?? resolvedTabs[0]?.id ?? null\n const activeContent = desktopTab ? resolvedTabs.find((t) => t.id === desktopTab)?.component : null\n const activeLabel = activeTab ? resolvedTabs.find((t) => t.id === activeTab)?.label : null\n\n // On mobile: show list OR content. On desktop: show both.\n const showingContent = activeTab !== null\n\n const handleSelectTab = (tabId: string) => {\n setActiveTab(tabId)\n window.location.hash = `/settings/${tabId}`\n }\n\n const handleBack = () => {\n setActiveTab(null)\n window.location.hash = '/settings'\n }\n\n const renderNav = (activeId: string | null) => (\n <ul className=\"space-y-0.5\">\n {resolvedTabs.map((tab, i) => (\n <React.Fragment key={tab.id}>\n {(tab as any).isPlugin && (i === 0 || !(resolvedTabs[i - 1] as any)?.isPlugin) && (\n <li className=\"py-2\">\n <div className=\"border-t\" />\n <p className=\"px-3 pt-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">{t('common.plugins')}</p>\n </li>\n )}\n <li>\n <button\n onClick={() => handleSelectTab(tab.id)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors',\n activeId === tab.id\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n >\n {tab.icon && <span className=\"shrink-0\">{tab.icon}</span>}\n <span className=\"flex-1 text-left\">{tab.label}</span>\n {/* Mobile: show chevron */}\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50 md:hidden\" />\n </button>\n </li>\n </React.Fragment>\n ))}\n </ul>\n )\n\n return (\n <div className={cn('space-y-6', className)}>\n {/* Mobile: back button + tab title when viewing content */}\n {showingContent && (\n <button\n onClick={handleBack}\n className=\"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors md:hidden\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n {t('settings.title')}\n </button>\n )}\n\n {/* Header — hidden on mobile when viewing content */}\n <div className={cn(showingContent && 'hidden md:block')}>\n <h1 className=\"text-2xl font-bold tracking-tight\">{t('settings.title')}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {t('settings.subtitle')}\n </p>\n </div>\n\n {beforeContent}\n\n {/* Desktop: side-by-side layout */}\n <div className=\"hidden md:flex md:gap-6\">\n <nav className=\"w-52 shrink-0\">{renderNav(desktopTab)}</nav>\n <div className=\"min-w-0 flex-1\">{activeContent ?? resolvedTabs[0]?.component}</div>\n </div>\n\n {/* Mobile: list or content, not both */}\n <div className=\"md:hidden\">\n {showingContent ? (\n <div>{activeContent}</div>\n ) : (\n <nav>{renderNav(activeTab)}</nav>\n )}\n </div>\n\n {afterContent}\n </div>\n )\n}\n","import { create } from 'zustand'\nimport type { Invite } from '../types/invite'\n\ninterface InviteStore {\n invites: Invite[]\n loading: boolean\n setInvites: (invites: Invite[]) => void\n setLoading: (loading: boolean) => void\n reset: () => void\n}\n\nexport const useInviteStore = create<InviteStore>((set) => ({\n invites: [],\n loading: false,\n setInvites: (invites) => set({ invites }),\n setLoading: (loading) => set({ loading }),\n reset: () => set({ invites: [], loading: false }),\n}))\n","import * as React from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { toast } from '../notifications/ToastProvider'\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useInviteStore } from '../../stores/invite.store'\n// Native org adapter (the one the app actually provides). The shell lib/org-context\n// is a separate, un-provided context that returns null here — which made the submit\n// button a no-op (handleSend bailed on `!adapter`).\nimport { useOrgAdapterOptional as useNativeOrgAdapter } from '../../../org'\nimport type { OrgAdapter } from '../../types/org-adapter'\n\n// The native adapter is the same runtime object; its Invite/Location types differ\n// from the shell's only in fields these components don't read, so a cast is safe.\nconst useOrgAdapterOptional = () => useNativeOrgAdapter() as unknown as OrgAdapter | null\n// The signed-in user lives in @fayz-ai/auth's store (what OrgProvider reads). The\n// shell stores/auth.store is a separate, unpopulated store — reading `user` from\n// it left `user` null, so handleSend bailed on `!user` (silent no-op).\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface InviteMemberDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Pre-fill the first email (e.g. from person detail Access tab) */\n defaultEmail?: string\n}\n\nexport function InviteMemberDialog({ open, onOpenChange, defaultEmail }: InviteMemberDialogProps) {\n const { t } = useTranslation()\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const profiles = usePermissionsStore((s) => s.profiles)\n const setInvites = useInviteStore((s) => s.setInvites)\n const { user } = useAuthStore()\n\n const [emails, setEmails] = React.useState<string[]>([defaultEmail ?? ''])\n const [profileId, setProfileId] = React.useState(profiles[1]?.id ?? profiles[0]?.id ?? '')\n const [sending, setSending] = React.useState(false)\n const [sent, setSent] = React.useState(false)\n\n const addEmail = () => setEmails((prev) => [...prev, ''])\n\n const updateEmail = (idx: number, value: string) => {\n setEmails((prev) => {\n const next = [...prev]\n next[idx] = value\n return next\n })\n }\n\n const removeEmail = (idx: number) => {\n setEmails((prev) => prev.filter((_, i) => i !== idx))\n }\n\n const handleSend = async () => {\n if (!adapter || !currentOrg || !user) return\n const validEmails = emails.filter((e) => e.trim() && e.includes('@'))\n if (validEmails.length === 0) return\n\n setSending(true)\n try {\n if (validEmails.length === 1) {\n await adapter.createInvite(currentOrg.id, validEmails[0].trim(), profileId, user.id)\n } else {\n await adapter.bulkInvite(currentOrg.id, validEmails.map((e) => e.trim()), profileId, user.id)\n }\n const invites = await adapter.listInvites(currentOrg.id)\n setInvites(invites)\n setSent(true)\n } catch (err: any) {\n toast.error('Failed to send invites', { description: err?.message })\n } finally {\n setSending(false)\n }\n }\n\n const handleClose = () => {\n onOpenChange(false)\n // Reset after animation\n setTimeout(() => {\n setEmails([''])\n setProfileId(profiles[1]?.id ?? profiles[0]?.id ?? '')\n setSent(false)\n }, 200)\n }\n\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalContent>\n <ModalHeader>\n <ModalTitle>{t('organization.invite.title')}</ModalTitle>\n <ModalDescription>{t('organization.invite.description')}</ModalDescription>\n </ModalHeader>\n\n {sent ? (\n <div className=\"py-8 text-center\">\n <div className=\"mx-auto mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-success/10\">\n <svg className=\"h-6 w-6 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={2} stroke=\"currentColor\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\" /></svg>\n </div>\n <p className=\"text-sm font-medium\">{t('organization.invite.sent')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('organization.invite.sentDescription')}</p>\n </div>\n ) : (\n <div className=\"space-y-4 py-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">{t('organization.invite.emailLabel')}</label>\n {emails.map((email, idx) => (\n <div key={idx} className=\"flex items-center gap-2\">\n <Input\n type=\"email\"\n placeholder=\"team@example.com\"\n value={email}\n onChange={(e) => updateEmail(idx, e.target.value)}\n />\n {emails.length > 1 && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => removeEmail(idx)}>\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n ))}\n <Button variant=\"ghost\" size=\"sm\" onClick={addEmail} className=\"text-xs\">\n <Plus className=\"h-3.5 w-3.5 mr-1\" />\n {t('organization.invite.addAnother')}\n </Button>\n </div>\n\n <div>\n <label className=\"text-sm font-medium\">{t('organization.invite.roleLabel')}</label>\n <Select value={profileId} onValueChange={setProfileId}>\n <SelectTrigger className=\"mt-1\">\n <SelectValue placeholder={t('organization.invite.rolePlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n {profiles.map((p) => (\n <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n )}\n\n <ModalFooter>\n {sent ? (\n <Button onClick={handleClose}>{t('common.done')}</Button>\n ) : (\n <>\n <Button variant=\"outline\" onClick={handleClose}>{t('common.cancel')}</Button>\n <Button onClick={handleSend} disabled={sending || emails.every((e) => !e.trim())}>\n {sending ? t('organization.invite.sending') : t('organization.invite.sendInvites')}\n </Button>\n </>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import { create } from 'zustand'\nimport type { Tenant, TenantMember, MemberRole, TenantState } from '../types'\n\ninterface TenantStore extends TenantState {\n setTenant: (tenant: Tenant | null) => void\n setMembers: (members: TenantMember[]) => void\n setCurrentRole: (role: MemberRole | null) => void\n setLoading: (loading: boolean) => void\n reset: () => void\n}\n\nconst initialState: TenantState = {\n tenant: null,\n members: [],\n currentRole: null,\n loading: false,\n}\n\nexport const useTenantStore = create<TenantStore>((set) => ({\n ...initialState,\n setTenant: (tenant) => set({ tenant }),\n setMembers: (members) => set({ members }),\n setCurrentRole: (role) => set({ currentRole: role }),\n setLoading: (loading) => set({ loading }),\n reset: () => set(initialState),\n}))\n","import { useCallback, useMemo } from 'react'\nimport { useTenantStore } from '../stores/tenant.store'\nimport { usePermissionsStore } from '../stores/permissions.store'\nimport type { MemberRole } from '../types'\nimport type { PermissionAction, SystemPermission } from '../types/permissions'\n\n// Legacy role-based permissions (backward compat)\nconst PERMISSIONS = [\n 'manage_billing',\n 'manage_members',\n 'manage_settings',\n 'manage_content',\n 'view_content',\n 'view_analytics',\n] as const\n\nexport type Permission = (typeof PERMISSIONS)[number]\n\nconst ROLE_PERMISSIONS: Record<MemberRole, Permission[]> = {\n owner: [...PERMISSIONS],\n admin: PERMISSIONS.filter((p) => p !== 'manage_billing'),\n manager: ['manage_content', 'view_content', 'view_analytics'],\n staff: ['view_content'],\n viewer: ['view_content'],\n}\n\nconst ROLE_HIERARCHY: Record<MemberRole, number> = {\n owner: 5,\n admin: 4,\n manager: 3,\n staff: 2,\n viewer: 1,\n}\n\nexport function usePermission() {\n const currentRole = useTenantStore((s) => s.currentRole)\n const currentProfile = usePermissionsStore((s) => s.currentProfile)\n\n // Profile-based permission check (feature × action matrix)\n const can = useCallback(\n (featureId: string, action: PermissionAction): boolean => {\n if (!currentProfile) return true // no permissions configured = allow all\n // Owner bypasses all feature checks\n if (currentProfile.id === 'owner') return true\n return currentProfile.grants[featureId]?.includes(action) ?? false\n },\n [currentProfile],\n )\n\n const hasSystemPermission = useCallback(\n (perm: SystemPermission): boolean => {\n if (!currentProfile) return true\n return (currentProfile.systemPermissions ?? []).includes(perm)\n },\n [currentProfile],\n )\n\n // Legacy role-based permissions\n const permissions = useMemo<Permission[]>(() => {\n if (!currentRole) return []\n return ROLE_PERMISSIONS[currentRole]\n }, [currentRole])\n\n const hasPermission = useCallback(\n (permission: Permission | string): boolean => {\n // First try profile-based system permissions\n if (currentProfile) {\n return (currentProfile.systemPermissions ?? []).includes(permission as SystemPermission)\n }\n // Fall back to legacy role-based\n return permissions.includes(permission as Permission)\n },\n [currentProfile, permissions],\n )\n\n const requireRole = useCallback(\n (role: MemberRole): boolean => {\n if (!currentRole) return false\n return ROLE_HIERARCHY[currentRole] >= ROLE_HIERARCHY[role]\n },\n [currentRole],\n )\n\n const canAccess = useCallback(\n (requiredPermissions: Permission[]): boolean => {\n return requiredPermissions.every((p) => permissions.includes(p))\n },\n [permissions],\n )\n\n return {\n currentRole,\n currentProfile,\n permissions,\n can,\n hasSystemPermission,\n hasPermission,\n requireRole,\n canAccess,\n }\n}\n","/**\n * Request deduplication — prevents duplicate in-flight requests with the same key.\n * If a request with the same key is already in-flight, returns the existing promise.\n */\nconst inflight = new Map<string, Promise<any>>()\n\nexport function dedup<T>(key: string, fn: () => Promise<T>): Promise<T> {\n const existing = inflight.get(key)\n if (existing) return existing as Promise<T>\n\n const promise = fn().finally(() => {\n inflight.delete(key)\n })\n\n inflight.set(key, promise)\n return promise\n}\n","import * as React from 'react'\nimport { UserPlus, MoreHorizontal, Mail, Clock } from 'lucide-react'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { Avatar, AvatarFallback, AvatarImage } from '@fayz-ai/ui'\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@fayz-ai/ui'\nimport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownSeparator,\n} from '@fayz-ai/ui'\nimport { InviteMemberDialog } from './InviteMemberDialog'\nimport { toast } from '../notifications/ToastProvider'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useInviteStore } from '../../stores/invite.store'\n// Native org adapter (see InviteMemberDialog) — the shell context is un-provided.\nimport { useOrgAdapterOptional as useNativeOrgAdapter } from '../../../org'\nimport type { OrgAdapter } from '../../types/org-adapter'\nconst useOrgAdapterOptional = () => useNativeOrgAdapter() as unknown as OrgAdapter | null\nimport { useAuthStore } from '@fayz-ai/auth'\nimport { usePermission } from '../../hooks/usePermission'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { dedup } from '../../lib/dedup'\n\nexport function TeamTab() {\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const members = useOrganizationStore((s) => s.members)\n const setMembers = useOrganizationStore((s) => s.setMembers)\n const profiles = usePermissionsStore((s) => s.profiles)\n const invites = useInviteStore((s) => s.invites)\n const setInvites = useInviteStore((s) => s.setInvites)\n const { user } = useAuthStore()\n const { hasSystemPermission } = usePermission()\n\n const [inviteOpen, setInviteOpen] = React.useState(false)\n\n // Load invites on mount (deduped to avoid strict mode double-fetch)\n React.useEffect(() => {\n if (adapter && currentOrg) {\n dedup('team:invites:' + currentOrg.id, () => adapter.listInvites(currentOrg.id)).then(setInvites).catch(() => {})\n }\n }, [adapter, currentOrg?.id])\n\n const handleChangeProfile = async (memberId: string, profileId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.updateMemberProfile(currentOrg.id, memberId, profileId)\n const updated = await adapter.listMembers(currentOrg.id)\n setMembers(updated)\n } catch {\n // ignore\n }\n }\n\n const handleRemoveMember = async (memberId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.removeMember(currentOrg.id, memberId)\n const updated = await adapter.listMembers(currentOrg.id)\n setMembers(updated)\n } catch {\n // ignore\n }\n }\n\n const handleRevokeInvite = async (inviteId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.revokeInvite(currentOrg.id, inviteId)\n const updated = await adapter.listInvites(currentOrg.id)\n setInvites(updated)\n toast.success(t('organization.team.inviteRevoked'))\n } catch (err: any) {\n toast.error(t('organization.team.inviteActionFailed'), { description: err?.message })\n }\n }\n\n const handleResendInvite = async (inviteId: string) => {\n if (!adapter || !currentOrg) return\n try {\n await adapter.resendInvite(currentOrg.id, inviteId)\n const updated = await adapter.listInvites(currentOrg.id)\n setInvites(updated)\n toast.success(t('organization.team.inviteResent'))\n } catch (err: any) {\n toast.error(t('organization.team.inviteActionFailed'), { description: err?.message })\n }\n }\n\n const { t } = useTranslation()\n const canManageTeam = hasSystemPermission('manage_team')\n const pendingInvites = invites.filter((i) => i.status === 'pending')\n\n return (\n <div className=\"space-y-6\">\n {/* Members */}\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <h3 className=\"text-lg font-semibold\">{t('organization.team.title')}</h3>\n <p className=\"text-sm text-muted-foreground\">{t('organization.team.memberCount', { count: String(members.length), plural: members.length !== 1 ? 's' : '' })}</p>\n </div>\n {canManageTeam && (\n <Button size=\"sm\" onClick={() => setInviteOpen(true)}>\n <UserPlus className=\"h-4 w-4 mr-1\" />\n {t('organization.team.invite')}\n </Button>\n )}\n </div>\n\n <Card className=\"overflow-hidden\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.member')}</th>\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.role')}</th>\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('organization.team.joined')}</th>\n {canManageTeam && (\n <th className=\"text-right p-3 text-sm font-medium text-muted-foreground w-12\" />\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {members.length === 0 ? (\n // Members load via central org hydration; show skeleton rows meanwhile.\n Array.from({ length: 3 }).map((_, i) => (\n <tr key={`sk-${i}`}>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-8 w-8 shrink-0 rounded-full\" />\n <div className=\"space-y-1.5\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-3 w-40\" />\n </div>\n </div>\n </td>\n <td className=\"p-3\"><Skeleton className=\"h-6 w-24 rounded-full\" /></td>\n <td className=\"p-3\"><Skeleton className=\"h-3 w-20\" /></td>\n {canManageTeam && <td className=\"p-3\" />}\n </tr>\n ))\n ) : members.map((member) => {\n const initials = member.user.fullName\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n const isCurrentUser = member.userId === user?.id\n\n return (\n <tr key={member.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"h-8 w-8\">\n {member.user.avatarUrl && <AvatarImage src={member.user.avatarUrl} />}\n <AvatarFallback className=\"text-xs\">{initials}</AvatarFallback>\n </Avatar>\n <div>\n <p className=\"text-sm font-medium\">\n {member.user.fullName}\n {isCurrentUser && <span className=\"text-muted-foreground ml-1\">{t('organization.team.you')}</span>}\n </p>\n <p className=\"text-xs text-muted-foreground\">{member.user.email}</p>\n </div>\n </div>\n </td>\n <td className=\"p-3\">\n {canManageTeam && !isCurrentUser ? (\n <Select\n value={member.profileId}\n onValueChange={(val) => handleChangeProfile(member.id, val)}\n >\n <SelectTrigger className=\"h-8 w-36 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {profiles.map((p) => (\n <SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {profiles.find((p) => p.id === member.profileId)?.name ?? member.profileName}\n </Badge>\n )}\n </td>\n <td className=\"p-3 text-sm text-muted-foreground\">\n {new Date(member.joinedAt).toLocaleDateString()}\n </td>\n {canManageTeam && (\n <td className=\"p-3 text-right\">\n {!isCurrentUser && (\n <Dropdown>\n <DropdownTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownTrigger>\n <DropdownContent align=\"end\">\n <DropdownItem\n className=\"text-destructive\"\n onClick={() => handleRemoveMember(member.id)}\n >\n {t('organization.team.removeMember')}\n </DropdownItem>\n </DropdownContent>\n </Dropdown>\n )}\n </td>\n )}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n </Card>\n </div>\n\n {/* Pending Invites */}\n {pendingInvites.length > 0 && (\n <div>\n <h3 className=\"text-lg font-semibold mb-3\">{t('organization.team.pendingInvites')}</h3>\n <div className=\"space-y-2\">\n {pendingInvites.map((invite) => (\n <Card key={invite.id} className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted\">\n <Mail className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">{invite.email}</p>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"secondary\" className=\"text-xs\">{invite.profileName}</Badge>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n Sent {new Date(invite.createdAt).toLocaleDateString()}\n </span>\n </div>\n </div>\n {canManageTeam && (\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\" onClick={() => handleResendInvite(invite.id)}>\n {t('organization.team.resend')}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs text-destructive\" onClick={() => handleRevokeInvite(invite.id)}>\n {t('organization.team.revoke')}\n </Button>\n </div>\n )}\n </div>\n </Card>\n ))}\n </div>\n </div>\n )}\n\n <InviteMemberDialog open={inviteOpen} onOpenChange={setInviteOpen} />\n </div>\n )\n}\n","import * as React from 'react'\nimport { Card } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Checkbox, type CheckboxColor } from '@fayz-ai/ui'\nimport { useSaveBar, useBackHandler } from '@fayz-ai/ui'\nimport { ArrowLeft, ChevronDown, ChevronRight, Search } from 'lucide-react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { FeatureDeclaration, PermissionAction, PermissionProfile, SystemPermission } from '../../types/permissions'\n\nconst ACTIONS: PermissionAction[] = ['read', 'create', 'edit', 'delete']\nconst ACTION_COLORS: Partial<Record<PermissionAction, CheckboxColor>> = {\n read: 'primary',\n create: 'success',\n edit: 'warning',\n delete: 'destructive',\n}\nconst SYSTEM_PERMISSIONS: { id: SystemPermission; key: string }[] = [\n { id: 'manage_team', key: 'organization.permissions.manageTeam' },\n { id: 'manage_billing', key: 'organization.permissions.manageBilling' },\n { id: 'manage_settings', key: 'organization.permissions.manageSettings' },\n { id: 'manage_permissions', key: 'organization.permissions.managePermissions' },\n]\n\ninterface PermissionMatrixEditorProps {\n features: FeatureDeclaration[]\n profile?: PermissionProfile\n onSave: (data: { name: string; description?: string; systemPermissions: SystemPermission[]; grants: Record<string, PermissionAction[]> }) => void\n onCancel: () => void\n saving?: boolean\n /** True when creating/duplicating (not editing an existing custom role). Drives\n * the SaveBar dirty state + the breadcrumb crumb. */\n isNew?: boolean\n /** Label of the parent list, shown in the back breadcrumb (e.g. \"Permissões\"). */\n parentLabel?: string\n}\n\nexport function PermissionMatrixEditor({ features, profile, onSave, onCancel, saving, isNew, parentLabel }: PermissionMatrixEditorProps) {\n const { t } = useTranslation()\n const [name, setName] = React.useState(profile?.name ?? '')\n const [description, setDescription] = React.useState(profile?.description ?? '')\n const [systemPerms, setSystemPerms] = React.useState<SystemPermission[]>(profile?.systemPermissions ?? [])\n const [grants, setGrants] = React.useState<Record<string, PermissionAction[]>>(profile?.grants ?? {})\n const [collapsed, setCollapsed] = React.useState<Set<string>>(new Set())\n const [search, setSearch] = React.useState('')\n\n // Snapshot the initial form so an EDIT only shows the SaveBar once something\n // actually changes. A NEW role (create/duplicate) is unsaved by definition, so\n // it's \"dirty\" as soon as it has a name.\n const initial = React.useRef({\n name: profile?.name ?? '',\n description: profile?.description ?? '',\n systemPerms: JSON.stringify(profile?.systemPermissions ?? []),\n grants: JSON.stringify(profile?.grants ?? {}),\n })\n const dirty = isNew\n ? name.trim() !== ''\n : name !== initial.current.name ||\n description !== initial.current.description ||\n JSON.stringify(systemPerms) !== initial.current.systemPerms ||\n JSON.stringify(grants) !== initial.current.grants\n\n const toggleSystemPerm = (perm: SystemPermission) => {\n setSystemPerms((prev) =>\n prev.includes(perm) ? prev.filter((p) => p !== perm) : [...prev, perm]\n )\n }\n\n const toggleGrant = (featureId: string, action: PermissionAction) => {\n setGrants((prev) => {\n const current = prev[featureId] ?? []\n const next = current.includes(action)\n ? current.filter((a) => a !== action)\n : [...current, action]\n return { ...prev, [featureId]: next }\n })\n }\n\n const toggleGroup = (group: string) => {\n setCollapsed((prev) => {\n const next = new Set(prev)\n next.has(group) ? next.delete(group) : next.add(group)\n return next\n })\n }\n\n const handleSave = () => {\n if (!name.trim()) return\n onSave({ name: name.trim(), description: description.trim() || undefined, systemPermissions: systemPerms, grants })\n }\n\n // Surface Save/Discard through the app-wide floating SaveBar (same pattern as\n // CRUD forms), and wire Escape → back-to-list.\n useSaveBar({\n dirty,\n saving,\n onSave: handleSave,\n onDiscard: onCancel,\n saveLabel: isNew ? t('organization.permissions.createProfile') : t('organization.permissions.updateProfile'),\n })\n useBackHandler(onCancel)\n\n // Group features, filtering by search\n const groups = React.useMemo(() => {\n const filtered = search\n ? features.filter((f) => f.label.toLowerCase().includes(search.toLowerCase()))\n : features\n const map = new Map<string, FeatureDeclaration[]>()\n for (const f of filtered) {\n const group = f.group ?? 'General'\n if (!map.has(group)) map.set(group, [])\n map.get(group)!.push(f)\n }\n return map\n }, [features, search])\n\n return (\n <div className=\"space-y-6\">\n {/* Back-to-list breadcrumb, matching the CRUD subpage pattern. */}\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={onCancel} className=\"inline-flex items-center gap-1 transition-colors hover:text-foreground\">\n <ArrowLeft className=\"h-3.5 w-3.5\" />\n {parentLabel ?? t('organization.permissions.title')}\n </button>\n <span>/</span>\n <span className=\"max-w-[240px] truncate font-medium text-foreground\">\n {name.trim() || t('organization.permissions.createCustom')}\n </span>\n </nav>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"text-sm font-medium\">{t('organization.permissions.profileName')}</label>\n <Input value={name} onChange={(e) => setName(e.target.value)} placeholder={t('organization.permissions.profileNamePlaceholder')} className=\"mt-1\" />\n </div>\n <div>\n <label className=\"text-sm font-medium\">{t('organization.permissions.description')}</label>\n <Input value={description} onChange={(e) => setDescription(e.target.value)} placeholder={t('organization.permissions.descriptionPlaceholder')} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Unified Permission Matrix */}\n <Card className=\"overflow-hidden\">\n {/* Search filter */}\n {features.length > 8 && (\n <div className=\"border-b border-border/40 px-3 py-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('organization.permissions.searchFeatures')}\n className=\"h-8 pl-8 text-xs\"\n />\n </div>\n </div>\n )}\n\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-3 text-sm font-medium text-muted-foreground\">{t('common.feature')}</th>\n {ACTIONS.map((action) => (\n <th key={action} className=\"p-3 text-center text-sm font-medium text-muted-foreground capitalize w-20\">\n {t(`organization.permissions.action.${action}`) === `organization.permissions.action.${action}` ? action : t(`organization.permissions.action.${action}`)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {/* System permissions group */}\n <tr>\n <td colSpan={5} className=\"p-2 px-3\">\n <button\n onClick={() => toggleGroup('__system')}\n className=\"flex items-center gap-1.5 text-xs\"\n >\n {collapsed.has('__system')\n ? <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n : <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n }\n <Badge variant=\"secondary\" className=\"text-xs\">{t('organization.permissions.systemPermissions')}</Badge>\n </button>\n </td>\n </tr>\n {!collapsed.has('__system') && SYSTEM_PERMISSIONS.map((sp) => (\n <tr key={sp.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3 text-sm font-medium\">{t(sp.key)}</td>\n <td colSpan={4} className=\"p-3\">\n <div className=\"flex justify-center\">\n <Checkbox\n checked={systemPerms.includes(sp.id)}\n onChange={() => toggleSystemPerm(sp.id)}\n />\n </div>\n </td>\n </tr>\n ))}\n\n {/* Feature permission groups */}\n {Array.from(groups.entries()).map(([groupName, groupFeatures]) => (\n <React.Fragment key={groupName}>\n <tr>\n <td colSpan={5} className=\"p-2 px-3\">\n <button\n onClick={() => toggleGroup(groupName)}\n className=\"flex items-center gap-1.5 text-xs\"\n >\n {collapsed.has(groupName)\n ? <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n : <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n }\n <Badge variant=\"secondary\" className=\"text-xs\">{groupName}</Badge>\n <span className=\"text-[10px] text-muted-foreground\">{groupFeatures.length}</span>\n </button>\n </td>\n </tr>\n {!collapsed.has(groupName) && groupFeatures.map((feature) => (\n <tr key={feature.id} className=\"hover:bg-muted/30\">\n <td className=\"p-3 text-sm font-medium\">{feature.label}</td>\n {ACTIONS.map((action) => (\n <td key={action} className=\"p-3 text-center\">\n <div className=\"flex justify-center\">\n <Checkbox\n checked={grants[feature.id]?.includes(action) ?? false}\n onChange={() => toggleGrant(feature.id, action)}\n color={ACTION_COLORS[action]}\n />\n </div>\n </td>\n ))}\n </tr>\n ))}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n </div>\n </Card>\n {/* Save / Discard are provided by the app-wide floating SaveBar (useSaveBar). */}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Shield, Pencil, Trash2, Plus, Eye, Copy } from 'lucide-react'\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { PermissionMatrixEditor } from './PermissionMatrixEditor'\nimport { usePermissionsStore } from '../../stores/permissions.store'\nimport { useOrganizationStore } from '../../stores/organization.store'\n// Use the NATIVE org adapter (the one the app actually provides). The shell\n// lib/org-context is a separate, un-provided context that returns null here.\nimport { useOrgAdapterOptional } from '../../../org'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { PermissionProfile, PermissionAction, SystemPermission } from '../../types/permissions'\n\nexport function PermissionProfilesTab() {\n const adapter = useOrgAdapterOptional()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const profiles = usePermissionsStore((s) => s.profiles)\n const features = usePermissionsStore((s) => s.features)\n const setProfiles = usePermissionsStore((s) => s.setProfiles)\n const members = useOrganizationStore((s) => s.members)\n const realProfile = usePermissionsStore((s) => s.realProfile)\n const startImpersonation = usePermissionsStore((s) => s.startImpersonation)\n\n const canPreview = (realProfile?.systemPermissions ?? []).includes('manage_permissions') ?? false\n\n const { t } = useTranslation()\n const [editingProfile, setEditingProfile] = React.useState<PermissionProfile | null>(null)\n const [creating, setCreating] = React.useState(false)\n // When duplicating, we open the CREATE flow pre-filled from a source role (its\n // grants/system perms), with a fresh name — system roles are static, so users\n // customize by copying rather than editing them in place.\n const [duplicateSource, setDuplicateSource] = React.useState<PermissionProfile | null>(null)\n const [saving, setSaving] = React.useState(false)\n\n const handleDuplicate = (profile: PermissionProfile) => {\n setEditingProfile(null)\n setCreating(false)\n setDuplicateSource({\n ...profile,\n name: t('organization.permissions.copyName', { name: profile.name }) || `${profile.name} (copy)`,\n isSystem: false,\n })\n }\n\n const memberCountByProfile = React.useMemo(() => {\n const counts: Record<string, number> = {}\n for (const m of members) {\n counts[m.profileId] = (counts[m.profileId] ?? 0) + 1\n }\n return counts\n }, [members])\n\n const handleSave = async (data: { name: string; description?: string; systemPermissions: SystemPermission[]; grants: Record<string, PermissionAction[]> }) => {\n if (!adapter || !currentOrg) return\n setSaving(true)\n try {\n if (editingProfile) {\n await adapter.updateProfile(currentOrg.id, editingProfile.id, data)\n } else {\n await adapter.createProfile(currentOrg.id, data)\n }\n const updated = await adapter.listProfiles(currentOrg.id)\n setProfiles(updated)\n setEditingProfile(null)\n setCreating(false)\n setDuplicateSource(null)\n } catch {\n // ignore\n } finally {\n setSaving(false)\n }\n }\n\n const handleDelete = async (profile: PermissionProfile) => {\n if (!adapter || !currentOrg || profile.isSystem) return\n try {\n await adapter.deleteProfile(currentOrg.id, profile.id)\n const updated = await adapter.listProfiles(currentOrg.id)\n setProfiles(updated)\n } catch {\n // ignore\n }\n }\n\n if (creating || editingProfile || duplicateSource) {\n return (\n <PermissionMatrixEditor\n features={features}\n profile={editingProfile ?? duplicateSource ?? undefined}\n isNew={!editingProfile}\n parentLabel={t('organization.permissions.title')}\n onSave={handleSave}\n onCancel={() => { setEditingProfile(null); setCreating(false); setDuplicateSource(null) }}\n saving={saving}\n />\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold\">{t('organization.permissions.title')}</h3>\n <p className=\"text-sm text-muted-foreground\">{t('organization.permissions.subtitle')}</p>\n </div>\n <Button onClick={() => setCreating(true)} size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('organization.permissions.createProfile')}\n </Button>\n </div>\n\n <div className=\"grid gap-3\">\n {profiles.length === 0 ? (\n // Roles load via central org hydration; show skeletons until they arrive.\n Array.from({ length: 4 }).map((_, i) => (\n <Card key={`sk-${i}`}>\n <CardContent className=\"flex items-center gap-4 p-4\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded-lg\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"h-3 w-64\" />\n </div>\n </CardContent>\n </Card>\n ))\n ) : profiles.map((profile) => (\n <Card key={profile.id}>\n <CardContent className=\"flex items-center gap-4 p-4\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10\">\n <Shield className=\"h-5 w-5 text-primary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <CardTitle className=\"text-sm\">{profile.name}</CardTitle>\n {profile.isSystem && <Badge variant=\"secondary\" className=\"text-xs\">{t('organization.permissions.system')}</Badge>}\n </div>\n {profile.description && (\n <CardDescription className=\"text-xs mt-0.5\">{profile.description}</CardDescription>\n )}\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('organization.permissions.memberCount', { count: String(memberCountByProfile[profile.id] ?? 0), plural: (memberCountByProfile[profile.id] ?? 0) !== 1 ? 's' : '' })}\n </p>\n </div>\n <div className=\"flex items-center gap-1\">\n {canPreview && profile.id !== realProfile?.id && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n title={t('organization.permissions.previewAs')}\n onClick={() => startImpersonation(profile)}\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n {/* Duplicate — always available; the primary (and only) way to\n customize a static system role. */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n title={t('organization.permissions.duplicate')}\n onClick={() => handleDuplicate(profile)}\n >\n <Copy className=\"h-3.5 w-3.5\" />\n </Button>\n {/* Edit + delete are for custom roles only — system roles are static. */}\n {!profile.isSystem && (\n <>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setEditingProfile(profile)}>\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive hover:text-destructive\"\n onClick={() => handleDelete(profile)}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </>\n )}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n )\n}\n","import React from 'react'\n\ninterface ActiveToggleProps {\n active: boolean\n onChange: (active: boolean) => void\n}\n\nexport function ActiveToggle({ active, onChange }: ActiveToggleProps) {\n return (\n <button type=\"button\" onClick={() => onChange(!active)} className=\"flex items-center gap-1.5\">\n <div className={`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${\n active ? 'bg-primary' : 'bg-muted-foreground/30'\n }`}>\n <span className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-sm transition-transform ${\n active ? 'translate-x-[18px]' : 'translate-x-[2px]'\n }`} />\n </div>\n <span className={`text-xs font-medium ${active ? 'text-foreground' : 'text-muted-foreground'}`}>\n {active ? 'Active' : 'Inactive'}\n </span>\n </button>\n )\n}\n","import React from 'react'\nimport { User } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface PersonFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n compact?: boolean\n}\n\nconst IDENTITY_FIELDS = new Set(['name', 'dateOfBirth', 'documentNumber'])\nconst CONTACT_FIELDS = new Set(['email', 'phone'])\nconst ADDRESS_FIELDS = new Set(['address', 'city', 'state', 'country', 'postalCode'])\nconst SKIP_FIELDS = new Set(['isActive', 'status', 'tags', 'avatarUrl', 'notes'])\nconst ALL_PERSON_FIELDS = new Set([...IDENTITY_FIELDS, ...CONTACT_FIELDS, ...ADDRESS_FIELDS, ...SKIP_FIELDS])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan, compact }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: PersonFormLayoutProps['renderField']; colSpan?: boolean; compact?: boolean\n}) {\n return (\n <div className={`${compact ? 'space-y-1' : 'space-y-1.5'} ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function PersonFormLayout({ fields, fieldGroups, values, onChange, renderField, compact }: PersonFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const docField = fields.find((f) => f.key === 'documentNumber')\n const dobField = fields.find((f) => f.key === 'dateOfBirth')\n const contactFields = fields.filter((f) => CONTACT_FIELDS.has(f.key))\n const addressFields = fields.filter((f) => ADDRESS_FIELDS.has(f.key))\n const notesField = fields.find((f) => f.key === 'notes')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !ALL_PERSON_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n const gap = compact ? 'gap-2.5' : 'gap-3'\n const cardPad = compact ? 'pt-3' : 'pt-4'\n const sectionLabel = compact ? 'text-xs font-semibold text-foreground' : 'text-sm font-semibold text-foreground'\n\n return (\n <div className={compact ? 'space-y-2.5' : 'space-y-5'}>\n {/* Identity card — avatar + name + dob + doc + active toggle */}\n <Card>\n <CardContent className={cardPad}>\n <div className={`flex ${compact ? 'gap-3' : 'gap-5'}`}>\n <div className={`flex shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary ${compact ? 'h-10 w-10' : 'h-16 w-16'}`}>\n <User className={compact ? 'h-4 w-4' : 'h-6 w-6'} />\n </div>\n <div className={`flex-1 ${compact ? 'space-y-2' : 'space-y-4'}`}>\n {/* Row 1: Name + Document + Active toggle */}\n <div className={`flex items-start ${gap}`}>\n <div className={`flex-1 grid ${gap} sm:grid-cols-2`}>\n {nameField && (\n <div className={`${compact ? 'space-y-1' : 'space-y-1.5'} ${!docField ? 'sm:col-span-2' : ''}`}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {docField && (\n <div className={compact ? 'space-y-1' : 'space-y-1.5'}>\n <label className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}>{docField.label}{docField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(docField, values[docField.key], (val) => onChange(docField.key, val))}\n </div>\n )}\n </div>\n {hasActive && (\n <div className={`shrink-0 ${compact ? 'mt-4' : 'mt-6'}`}>\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n </div>\n )}\n </div>\n {/* Row 2: Date of birth */}\n {dobField && (\n <div className={`grid ${gap} sm:grid-cols-2`}>\n <FieldItem field={dobField} value={values[dobField.key]} onChange={(val) => onChange(dobField.key, val)} renderField={renderField} compact={compact} />\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className={sectionLabel}>{group.label}</h3>\n {group.description && <p className={`text-muted-foreground ${compact ? 'text-[10px] mt-0.5 mb-1.5' : 'text-xs mt-0.5 mb-3'}`}>{group.description}</p>}\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <Card>\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Contact */}\n {contactFields.length > 0 && (\n <div>\n <h3 className={sectionLabel}>Contact</h3>\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {contactFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Address */}\n {addressFields.length > 0 && (\n <div>\n <h3 className={sectionLabel}>Address</h3>\n <Card className=\"mt-1\">\n <CardContent className={cardPad}>\n <div className={`grid ${gap} md:grid-cols-2`}>\n {addressFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.key === 'address'} compact={compact} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className={cardPad}>\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} compact={compact} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Package } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface ProductFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst PRICING_FIELDS = new Set(['price', 'cost', 'currency', 'unit'])\nconst STOCK_FIELDS = new Set(['stock', 'minStock'])\nconst SKIP_FIELDS = new Set(['status', 'isActive', 'tags', 'imageUrl', 'name', 'description', 'sku', 'category'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: ProductFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function ProductFormLayout({ fields, fieldGroups, values, onChange, renderField }: ProductFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const descField = fields.find((f) => f.key === 'description')\n const skuField = fields.find((f) => f.key === 'sku')\n const categoryField = fields.find((f) => f.key === 'category')\n const imageField = fields.find((f) => f.key === 'imageUrl')\n const pricingFields = fields.filter((f) => PRICING_FIELDS.has(f.key))\n const stockFields = fields.filter((f) => STOCK_FIELDS.has(f.key))\n const statusField = fields.find((f) => f.key === 'status')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !SKIP_FIELDS.has(f.key) && !PRICING_FIELDS.has(f.key) && !STOCK_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity card — image + name + category + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n {/* Product image or placeholder */}\n <div className=\"shrink-0 space-y-2\">\n {values.imageUrl ? (\n <img src={values.imageUrl} alt=\"\" className=\"h-24 w-24 rounded-2xl object-cover\" />\n ) : (\n <div className=\"flex h-24 w-24 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Package className=\"h-8 w-8\" />\n </div>\n )}\n {imageField && (\n <div className=\"w-24\">\n <input\n type=\"text\"\n value={values.imageUrl ?? ''}\n onChange={(e) => onChange('imageUrl', e.target.value)}\n placeholder=\"Image URL\"\n className=\"w-full rounded-md border border-input bg-background px-2 py-1 text-[10px] text-muted-foreground placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n />\n </div>\n )}\n </div>\n\n <div className=\"flex-1 space-y-4\">\n {/* Name + active toggle */}\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {(hasActive || statusField) && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle\n active={hasActive ? (values.isActive ?? true) : statusField ? values[statusField.key] === 'active' || values[statusField.key] === 'available' : true}\n onChange={(v) => {\n if (hasActive) onChange('isActive', v)\n if (statusField) {\n const opts = statusField.options?.map((o: any) => typeof o === 'string' ? o : o.value) ?? []\n const activeVal = opts.find((o: string) => o === 'active' || o === 'available') ?? 'active'\n const inactiveVal = opts.find((o: string) => o === 'inactive' || o === 'sold_out' || o === 'hidden') ?? 'inactive'\n onChange(statusField.key, v ? activeVal : inactiveVal)\n }\n }}\n />\n </div>\n )}\n </div>\n\n {/* Category + SKU */}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {categoryField && <FieldItem field={categoryField} value={values[categoryField.key]} onChange={(val) => onChange(categoryField.key, val)} renderField={renderField} />}\n {skuField && <FieldItem field={skuField} value={values[skuField.key]} onChange={(val) => onChange(skuField.key, val)} renderField={renderField} />}\n </div>\n\n {/* Description */}\n {descField && <FieldItem field={descField} value={values[descField.key]} onChange={(val) => onChange(descField.key, val)} renderField={renderField} colSpan />}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Pricing */}\n {pricingFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Pricing</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {pricingFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Stock */}\n {stockFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Inventory</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {stockFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Details</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Briefcase } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface ServiceFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst IDENTITY_FIELDS = new Set(['name', 'description', 'imageUrl', 'category'])\nconst PRICING_FIELDS = new Set(['price', 'cost', 'currency', 'durationMinutes'])\nconst SKIP_FIELDS = new Set(['status', 'isActive', 'tags'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: ServiceFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function ServiceFormLayout({ fields, fieldGroups, values, onChange, renderField }: ServiceFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const descField = fields.find((f) => f.key === 'description')\n const otherIdentity = fields.filter((f) => IDENTITY_FIELDS.has(f.key) && f.key !== 'name' && f.key !== 'description')\n const pricingFields = fields.filter((f) => PRICING_FIELDS.has(f.key))\n const statusField = fields.find((f) => f.key === 'status')\n const hasActive = fields.some((f) => f.key === 'isActive')\n\n const allKnown = new Set([...IDENTITY_FIELDS, ...PRICING_FIELDS, ...SKIP_FIELDS])\n const projectFields = fields.filter((f) => !allKnown.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <Briefcase className=\"h-8 w-8\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n {/* Name + active toggle */}\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {(hasActive || statusField) && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle\n active={hasActive ? (values.isActive ?? true) : statusField ? values[statusField.key] === 'active' : true}\n onChange={(v) => {\n if (hasActive) onChange('isActive', v)\n if (statusField) onChange(statusField.key, v ? 'active' : 'inactive')\n }}\n />\n </div>\n )}\n </div>\n {/* Description */}\n {descField && <FieldItem field={descField} value={values[descField.key]} onChange={(val) => onChange(descField.key, val)} renderField={renderField} colSpan />}\n {/* Other identity */}\n {otherIdentity.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {otherIdentity.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Pricing & Duration */}\n {pricingFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Pricing & Duration</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {pricingFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Details</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { MapPin } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface LocationFormLayoutProps {\n fields: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n}\n\nconst IDENTITY_FIELDS = new Set(['name'])\nconst CONTACT_FIELDS = new Set(['phone', 'email'])\nconst ADDRESS_FIELDS = new Set(['address', 'city', 'state', 'country', 'postalCode'])\nconst SKIP_FIELDS = new Set(['isActive', 'status', 'tags', 'notes', 'isHeadquarters'])\nconst ALL_LOCATION_FIELDS = new Set([...IDENTITY_FIELDS, ...CONTACT_FIELDS, ...ADDRESS_FIELDS, ...SKIP_FIELDS])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: LocationFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function LocationFormLayout({ fields, fieldGroups, values, onChange, renderField }: LocationFormLayoutProps) {\n const nameField = fields.find((f) => f.key === 'name')\n const contactFields = fields.filter((f) => CONTACT_FIELDS.has(f.key))\n const addressFields = fields.filter((f) => ADDRESS_FIELDS.has(f.key))\n const notesField = fields.find((f) => f.key === 'notes')\n const hasActive = fields.some((f) => f.key === 'isActive')\n const hqField = fields.find((f) => f.key === 'isHeadquarters')\n\n // Project-specific fields\n const projectFields = fields.filter((f) => !ALL_LOCATION_FIELDS.has(f.key))\n\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedProject: FieldDef[] = []\n for (const field of projectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedProject.push(field)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Identity — icon + name + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n <MapPin className=\"h-8 w-8\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n <div className=\"mt-6 flex items-center gap-3 shrink-0\">\n {hasActive && (\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n )}\n </div>\n </div>\n {hqField && (\n <label className=\"flex items-center gap-2.5 cursor-pointer text-sm\">\n <input\n type=\"checkbox\"\n checked={!!values.isHeadquarters}\n onChange={(e) => onChange('isHeadquarters', e.target.checked)}\n className=\"h-4 w-4 rounded border-input\"\n />\n Headquarters\n </label>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Address */}\n {addressFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Address</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {addressFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.key === 'address'} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Contact */}\n {contactFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Contact</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {contactFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Project-specific grouped fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Ungrouped project fields */}\n {ungroupedProject.length > 0 && (\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {ungroupedProject.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className=\"pt-5\">\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react'\nimport { Search, Plus, X, User, Loader2, Check } from 'lucide-react'\nimport { Input } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport { useOrganizationStore } from '../../org'\n\ninterface Person {\n id: string\n name: string\n email?: string\n phone?: string\n kind: string\n}\n\ninterface PersonPickerProps {\n value?: string | null\n onChange: (personId: string | null, person?: Person) => void\n personKind?: string\n label?: string\n placeholder?: string\n onPersonData?: (data: { name: string; phone?: string; email?: string }) => void\n}\n\nexport function PersonPicker({\n value,\n onChange,\n personKind = 'customer',\n label = 'Person',\n placeholder = 'Search or type a name to add...',\n onPersonData,\n}: PersonPickerProps) {\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<Person[]>([])\n const [searching, setSearching] = useState(false)\n const [selected, setSelected] = useState<Person | null>(null)\n const [showCreate, setShowCreate] = useState(false)\n const [creating, setCreating] = useState(false)\n const searchTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // New person form\n const [newPhone, setNewPhone] = useState('')\n const [newEmail, setNewEmail] = useState('')\n\n const tenantId = useOrganizationStore((s) => s.currentOrg?.id)\n\n // Load selected person on mount\n useEffect(() => {\n if (value && !selected) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n supabase.schema('saas_core')\n .from('persons')\n .select('id, name, email, phone, kind')\n .eq('id', value)\n .single()\n .then(({ data }: any) => {\n if (data) setSelected(data as Person)\n })\n }\n }, [value])\n\n // Close on outside click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n setShowCreate(false)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const doSearch = useCallback(async (term: string) => {\n if (!term.trim() || !tenantId) { setResults([]); return }\n setSearching(true)\n try {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n const { data } = await supabase.schema('saas_core')\n .from('persons')\n .select('id, name, email, phone, kind')\n .eq('tenant_id', tenantId)\n .ilike('name', `%${term}%`)\n .limit(6)\n setResults((data ?? []) as Person[])\n } finally {\n setSearching(false)\n }\n }, [tenantId])\n\n const handleInput = (val: string) => {\n setQuery(val)\n setShowCreate(false)\n if (!open) setOpen(true)\n if (searchTimer.current) clearTimeout(searchTimer.current)\n searchTimer.current = setTimeout(() => doSearch(val), 250)\n }\n\n const handleSelect = (person: Person) => {\n setSelected(person)\n onChange(person.id, person)\n onPersonData?.({ name: person.name, phone: person.phone, email: person.email })\n setOpen(false)\n setQuery('')\n setResults([])\n setShowCreate(false)\n }\n\n const handleStartCreate = () => {\n setShowCreate(true)\n setNewPhone('')\n setNewEmail('')\n }\n\n const handleCreate = async () => {\n if (!query.trim() || !tenantId) return\n setCreating(true)\n try {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return\n const { data, error } = await supabase.schema('saas_core')\n .from('persons')\n .insert({\n tenant_id: tenantId,\n kind: personKind,\n name: query.trim(),\n phone: newPhone.trim() || null,\n email: newEmail.trim() || null,\n is_active: true,\n })\n .select('id, name, email, phone, kind')\n .single()\n if (error) throw error\n handleSelect(data as Person)\n } finally {\n setCreating(false)\n }\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n setSelected(null)\n setQuery('')\n onChange(null)\n onPersonData?.({ name: '', phone: '', email: '' })\n setTimeout(() => inputRef.current?.focus(), 50)\n }\n\n const noResults = query.trim().length > 1 && !searching && results.length === 0\n\n return (\n <div ref={containerRef} className=\"relative\">\n {/* Selected state */}\n {selected && !open ? (\n <button\n type=\"button\"\n onClick={() => { setOpen(true); setQuery(''); setTimeout(() => inputRef.current?.focus(), 50) }}\n className=\"flex items-center gap-3 w-full rounded-lg border px-3 py-2.5 text-left hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <User className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{selected.name}</p>\n <p className=\"text-xs text-muted-foreground truncate\">\n {[selected.phone, selected.email].filter(Boolean).join(' · ') || 'No contact info'}\n </p>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\" onClick={(e) => e.stopPropagation()}>\n <span className=\"text-[10px] text-muted-foreground\">Change</span>\n <button type=\"button\" onClick={handleClear} className=\"p-1 text-muted-foreground hover:text-destructive rounded\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </button>\n ) : (\n /* Search input */\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => handleInput(e.target.value)}\n onFocus={() => { if (query) setOpen(true) }}\n placeholder={placeholder}\n className=\"flex h-10 w-full rounded-lg border border-input bg-background pl-10 pr-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n {searching && <Loader2 className=\"absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 animate-spin text-muted-foreground\" />}\n </div>\n )}\n\n {/* Dropdown */}\n {open && (query.trim().length > 0 || showCreate) && (\n <div className=\"fayz-glass-surface absolute z-50 mt-1 w-full rounded-lg border bg-popover shadow-lg overflow-hidden\">\n {/* Results */}\n {results.length > 0 && (\n <div className=\"max-h-52 overflow-y-auto\">\n {results.map((person) => (\n <button\n key={person.id}\n type=\"button\"\n onClick={() => handleSelect(person)}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 text-left hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium truncate\">{person.name}</p>\n <span className=\"inline-flex items-center rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground capitalize shrink-0\">\n {person.kind}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground truncate\">\n {[person.phone, person.email].filter(Boolean).join(' · ')}\n </p>\n </div>\n {person.id === value && <Check className=\"h-4 w-4 text-primary shrink-0\" />}\n </button>\n ))}\n </div>\n )}\n\n {/* No results — prompt to create */}\n {noResults && !showCreate && (\n <button\n type=\"button\"\n onClick={handleStartCreate}\n className=\"flex items-center gap-3 w-full px-3 py-3 text-left hover:bg-muted/50 transition-colors border-t border-dashed\"\n >\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <Plus className=\"h-4 w-4\" />\n </div>\n <div>\n <p className=\"text-sm font-medium\">Add \"<span className=\"text-primary\">{query.trim()}</span>\"</p>\n <p className=\"text-xs text-muted-foreground\">Create a new {label.toLowerCase()} with this name</p>\n </div>\n </button>\n )}\n\n {/* Also show create option when there ARE results */}\n {results.length > 0 && !showCreate && (\n <button\n type=\"button\"\n onClick={handleStartCreate}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted/50 transition-colors border-t text-xs text-muted-foreground\"\n >\n <Plus className=\"h-3 w-3\" />\n Add \"<span className=\"font-medium text-foreground\">{query.trim()}</span>\" as new {label.toLowerCase()}\n </button>\n )}\n\n {/* Inline create form */}\n {showCreate && (\n <div className=\"p-3 border-t space-y-3 bg-muted/20\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <Plus className=\"h-3 w-3\" />\n </div>\n <p className=\"text-xs font-medium\">New {label}: <span className=\"text-primary\">{query.trim()}</span></p>\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <Input\n value={newPhone}\n onChange={(e) => setNewPhone(e.target.value)}\n placeholder=\"Phone\"\n className=\"h-8 text-xs\"\n />\n <Input\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"Email\"\n type=\"email\"\n className=\"h-8 text-xs\"\n />\n </div>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\" onClick={() => setShowCreate(false)}>\n Cancel\n </Button>\n <Button type=\"button\" size=\"sm\" className=\"h-7 text-xs\" onClick={handleCreate} disabled={creating}>\n {creating ? <Loader2 className=\"h-3 w-3 mr-1 animate-spin\" /> : <Check className=\"h-3 w-3 mr-1\" />}\n {creating ? 'Saving...' : 'Save & Select'}\n </Button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { ActiveToggle } from './ActiveToggle'\nimport { PersonPicker } from './PersonPicker'\nimport type { FieldDef, FieldGroup } from '@fayz-ai/core'\n\ninterface SubjectFormLayoutProps {\n fields: FieldDef[]\n allFields?: FieldDef[]\n fieldGroups: FieldGroup[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n renderField: (field: FieldDef, value: any, onChange: (val: any) => void) => React.ReactNode\n entityIcon?: string\n}\n\nconst OWNER_FIELDS = new Set(['tutorName', 'tutorPhone', 'tutorId'])\nconst REFERRAL_FIELDS = new Set(['referringVetId', 'referringClinicId'])\nconst SKIP_FIELDS = new Set(['isActive', 'notes', 'tags', 'metadata'])\n\nfunction FieldItem({ field, value, onChange, renderField, colSpan }: {\n field: FieldDef; value: any; onChange: (val: any) => void\n renderField: SubjectFormLayoutProps['renderField']; colSpan?: boolean\n}) {\n return (\n <div className={`space-y-1.5 ${colSpan ? 'md:col-span-2' : ''}`}>\n <label className=\"text-sm font-medium\">\n {field.label}{field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n {renderField(field, value, onChange)}\n </div>\n )\n}\n\nexport function SubjectFormLayout({ fields, allFields, fieldGroups, values, onChange, renderField, entityIcon }: SubjectFormLayoutProps) {\n const all = allFields ?? fields\n const nameField = fields.find((f) => f.key === 'name')\n const hasActive = fields.some((f) => f.key === 'isActive')\n const notesField = fields.find((f) => f.key === 'notes')\n const hasOwnerPicker = all.some((f) => f.key === 'tutorId' || f.key === 'tutorName')\n const referralFields = fields.filter((f) => REFERRAL_FIELDS.has(f.key))\n\n // Main subject fields = everything except name, owner, referral, skip\n const allSkip = new Set([...OWNER_FIELDS, ...REFERRAL_FIELDS, ...SKIP_FIELDS, 'name'])\n const subjectFields = fields.filter((f) => !allSkip.has(f.key))\n\n // Group subject fields\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungrouped: FieldDef[] = []\n for (const field of subjectFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungrouped.push(field)\n }\n }\n\n const IconComponent = (LucideIcons as any)[entityIcon ?? 'Heart'] ?? LucideIcons.Heart\n\n return (\n <div className=\"space-y-6\">\n {/* Identity — icon + name + active */}\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex gap-5\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary\">\n {React.createElement(IconComponent, { className: 'h-8 w-8' })}\n </div>\n <div className=\"flex-1 space-y-4\">\n <div className=\"flex items-start gap-4\">\n {nameField && (\n <div className=\"flex-1 space-y-1.5\">\n <label className=\"text-sm font-medium\">{nameField.label}{nameField.required && <span className=\"text-destructive ml-0.5\">*</span>}</label>\n {renderField(nameField, values[nameField.key], (val) => onChange(nameField.key, val))}\n </div>\n )}\n {hasActive && (\n <div className=\"mt-6 shrink-0\">\n <ActiveToggle active={values.isActive ?? true} onChange={(v) => onChange('isActive', v)} />\n </div>\n )}\n </div>\n {/* Ungrouped fields inline */}\n {ungrouped.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-3\">\n {ungrouped.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Grouped subject fields */}\n {fieldGroups.map((group) => {\n const gFields = groupFieldMap.get(group.id)\n if (!gFields || gFields.length === 0) return null\n const cols = group.columns ?? 2\n return (\n <div key={group.id}>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {gFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} colSpan={field.span === 2} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )\n })}\n\n {/* Owner / Tutor — person picker */}\n {hasOwnerPicker && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Owner / Tutor</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <PersonPicker\n value={values.tutorId}\n onChange={(personId) => onChange('tutorId', personId)}\n personKind=\"customer\"\n label=\"Tutor\"\n placeholder=\"Search or type a name to add...\"\n />\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Referral */}\n {referralFields.length > 0 && (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Referral</h3>\n <Card className=\"mt-1\">\n <CardContent className=\"pt-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {referralFields.map((field) => (\n <FieldItem key={field.key} field={field} value={values[field.key]} onChange={(val) => onChange(field.key, val)} renderField={renderField} />\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Notes */}\n {notesField && (\n <Card>\n <CardContent className=\"pt-5\">\n <FieldItem field={notesField} value={values[notesField.key]} onChange={(val) => onChange(notesField.key, val)} renderField={renderField} />\n </CardContent>\n </Card>\n )}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Badge } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport type { FieldRelation } from '@fayz-ai/core'\n\n// Relation field support for the CRUD engine: load a select's options from a\n// table at runtime so a foreign-key column stores a real id (e.g. uuid) instead\n// of a static string. Shared by the form input (RelationSelect) and the table\n// cell (RelationCell). Options are cached per (schema, table, fields, tenant,\n// filter) so the list + every cell reuse one query.\n\ntype Option = { value: string; label: string }\n\nconst cache = new Map<string, Promise<Option[]>>()\n\nfunction keyOf(r: FieldRelation): string {\n const tenant = r.tenantScoped !== false ? (getActiveTenantId() ?? '') : ''\n return JSON.stringify([\n r.schema ?? 'public', r.table, r.valueField ?? 'id', r.labelField ?? 'name',\n tenant, r.filter ?? null,\n ])\n}\n\nasync function fetchOptions(r: FieldRelation): Promise<Option[]> {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n const valueField = r.valueField ?? 'id'\n const labelField = r.labelField ?? 'name'\n let q = (r.schema ? supabase.schema(r.schema) : supabase)\n .from(r.table)\n .select(`${valueField}, ${labelField}`)\n if (r.tenantScoped !== false) {\n const tid = getActiveTenantId()\n if (tid) q = q.eq('tenant_id', tid)\n }\n if (r.filter) for (const [k, v] of Object.entries(r.filter)) q = q.eq(k, v)\n q = q.order(labelField, { ascending: true })\n const { data } = await q\n return (data ?? []).map((row: any) => ({\n value: String(row[valueField]),\n label: String(row[labelField] ?? row[valueField]),\n }))\n}\n\nexport function loadRelationOptions(r: FieldRelation): Promise<Option[]> {\n const k = keyOf(r)\n if (!cache.has(k)) {\n cache.set(k, fetchOptions(r).catch(() => { cache.delete(k); return [] }))\n }\n return cache.get(k)!\n}\n\n/** Drop cached relation options (call after creating/editing a related row). */\nexport function invalidateRelationOptions(): void {\n cache.clear()\n}\n\nexport function useRelationOptions(r: FieldRelation | undefined): {\n options: Option[]\n loading: boolean\n labelFor: (value: any) => string\n} {\n const [options, setOptions] = useState<Option[]>([])\n const [loading, setLoading] = useState(true)\n const dep = r ? keyOf(r) : 'none'\n useEffect(() => {\n let alive = true\n if (!r) { setLoading(false); return }\n setLoading(true)\n loadRelationOptions(r).then((opts) => {\n if (alive) { setOptions(opts); setLoading(false) }\n })\n return () => { alive = false }\n }, [dep]) // eslint-disable-line react-hooks/exhaustive-deps\n const labelFor = (value: any) => options.find((o) => o.value === String(value))?.label ?? ''\n return { options, loading, labelFor }\n}\n\nexport function RelationSelect({\n relation,\n value,\n onChange,\n className,\n required,\n placeholder,\n}: {\n relation?: FieldRelation\n value: any\n onChange: (value: any) => void\n className?: string\n required?: boolean\n placeholder?: string\n}) {\n const { options, loading } = useRelationOptions(relation)\n return (\n <select\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value || null)}\n required={required}\n className={className}\n >\n <option value=\"\">{loading ? 'Loading…' : (placeholder ?? 'Select...')}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n )\n}\n\nexport function RelationCell({ relation, value }: { relation?: FieldRelation; value: any }) {\n const { labelFor, loading } = useRelationOptions(relation)\n if (value == null || value === '') return <span className=\"text-muted-foreground\">—</span>\n const label = labelFor(value)\n return <Badge variant=\"secondary\">{label || (loading ? '…' : String(value))}</Badge>\n}\n","import React, { useState, useEffect } from 'react'\nimport { ArrowLeft, ImagePlus, Loader2 } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Input } from '@fayz-ai/ui'\nimport { Checkbox } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { toast } from '@fayz-ai/ui'\nimport { useSaveBar, useBackHandler } from '@fayz-ai/ui'\nimport { PersonFormLayout } from './archetypes/PersonFormLayout'\nimport { ProductFormLayout } from './archetypes/ProductFormLayout'\nimport { ServiceFormLayout } from './archetypes/ServiceFormLayout'\nimport { LocationFormLayout } from './archetypes/LocationFormLayout'\nimport { SubjectFormLayout } from './archetypes/SubjectFormLayout'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FieldDef, FieldGroup, EntityDef } from '@fayz-ai/core'\nimport type { FormLayout } from '@fayz-ai/core'\nimport { RelationSelect } from './relation-field'\n\ninterface CrudFormPageProps {\n entityDef: EntityDef\n mode: 'create' | 'edit'\n initialData?: Record<string, any>\n onSubmit: (data: Record<string, any>) => void | Promise<void>\n onCancel: () => void\n namePlural: string\n /** Embedded mode — no breadcrumb, compact layout. For use inside modals/panels. */\n embedded?: boolean\n /** Hide the internal breadcrumb while keeping the full-page SaveBar/Escape flow.\n * Use when a parent already renders its own header (e.g. SubpageHeader). */\n hideBreadcrumb?: boolean\n}\n\n/** Derive a currency symbol from an ISO code (e.g. USD → \"$\") when not given. */\nfunction currencySymbolFor(code: string | undefined, locale: string): string {\n if (!code) return 'R$'\n try {\n const parts = new Intl.NumberFormat(locale, { style: 'currency', currency: code }).formatToParts(0)\n return parts.find((p) => p.type === 'currency')?.value ?? code\n } catch {\n return code\n }\n}\n\nfunction getDefaultValues(fields: FieldDef[]): Record<string, any> {\n const values: Record<string, any> = {}\n for (const field of fields) {\n if (field.showInForm === false) continue\n // Computed fields are read-only and never part of the payload.\n if (field.type === 'computed') continue\n if (field.defaultValue != null) {\n values[field.key] = field.defaultValue\n } else {\n switch (field.type) {\n case 'boolean':\n values[field.key] = false\n break\n case 'number':\n case 'currency':\n values[field.key] = ''\n break\n default:\n values[field.key] = ''\n }\n }\n }\n return values\n}\n\nfunction renderField(field: FieldDef, value: any, onChange: (val: any) => void, allValues: Record<string, any> = {}) {\n const baseClass = 'flex h-9 w-full rounded-input border border-input bg-background px-3 py-1.5 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50'\n\n switch (field.type) {\n case 'currency': {\n const locale = field.currencyLocale ?? 'pt-BR'\n return (\n <CurrencyInput\n value={Number(value) || 0}\n onChange={(n) => onChange(n)}\n currencyCode={field.currency}\n locale={locale}\n symbol={field.currencySymbol ?? currencySymbolFor(field.currency, locale)}\n />\n )\n }\n case 'segmented': {\n const options = (field.options ?? []).map((o) =>\n typeof o === 'string' ? { label: o, value: o, description: undefined } : o,\n )\n return (\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-4\">\n {options.map((o) => {\n const active = value === o.value\n return (\n <button\n key={o.value}\n type=\"button\"\n onClick={() => onChange(o.value)}\n className={`rounded-lg border-2 p-3 text-left transition-all ${\n active\n ? 'border-primary bg-primary/5'\n : 'border-transparent bg-muted/20 hover:bg-muted/40'\n }`}\n >\n <p className={`text-sm font-medium ${active ? 'text-primary' : ''}`}>{o.label}</p>\n {'description' in o && o.description && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 leading-tight\">{o.description}</p>\n )}\n </button>\n )\n })}\n </div>\n )\n }\n case 'computed': {\n const result = field.compute ? field.compute(allValues) : null\n const tone = result?.tone === 'positive' ? 'text-success'\n : result?.tone === 'negative' ? 'text-destructive'\n : 'text-foreground'\n return (\n <div className=\"mt-1 rounded-lg border bg-muted/20 px-3 py-2 text-sm tabular-nums text-right\">\n {result ? <span className={tone}>{result.display}</span> : <span className=\"text-muted-foreground\">—</span>}\n </div>\n )\n }\n case 'textarea':\n return (\n <textarea\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={field.placeholder}\n required={field.required}\n rows={2}\n className={`${baseClass} min-h-[60px] py-1.5`}\n />\n )\n case 'relation':\n return (\n <RelationSelect\n relation={field.relation}\n value={value}\n onChange={onChange}\n className={baseClass}\n required={field.required}\n placeholder={field.placeholder ?? `Select ${field.label.toLowerCase()}...`}\n />\n )\n case 'select': {\n const options = (field.options ?? []).map((o) =>\n typeof o === 'string' ? { label: o, value: o } : o,\n )\n return (\n <select\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n required={field.required}\n className={baseClass}\n >\n <option value=\"\">{field.placeholder ?? `Select ${field.label.toLowerCase()}...`}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n )\n }\n case 'boolean':\n return (\n <label className=\"flex items-center gap-2.5 cursor-pointer\">\n <Checkbox\n checked={!!value}\n onChange={(checked) => onChange(checked)}\n />\n <span className=\"text-sm\">{field.label}</span>\n </label>\n )\n case 'number':\n return (\n <Input\n type=\"number\"\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n placeholder={field.placeholder}\n required={field.required}\n min={field.min}\n max={field.max}\n />\n )\n case 'date':\n return <Input type=\"date\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'datetime':\n return <Input type=\"datetime-local\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'time':\n return <Input type=\"time\" value={value ?? ''} onChange={(e) => onChange(e.target.value)} required={field.required} />\n case 'color':\n return (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value || '#6b7280'}\n onChange={(e) => onChange(e.target.value)}\n className=\"h-9 w-12 rounded-md border border-input cursor-pointer p-0.5\"\n />\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"#000000\"\n className=\"flex-1 font-mono text-xs\"\n />\n </div>\n )\n default:\n return (\n <Input\n type={field.type === 'email' ? 'email' : field.type === 'phone' ? 'tel' : field.type === 'url' ? 'url' : 'text'}\n value={value ?? ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={field.placeholder}\n required={field.required}\n />\n )\n }\n}\n\nfunction FormFieldItem({ field, value, onChange, allValues }: { field: FieldDef; value: any; onChange: (val: any) => void; allValues?: Record<string, any> }) {\n return (\n <div className={`grid gap-1 ${field.span === 2 ? 'md:col-span-2' : ''}`}>\n {field.type !== 'boolean' && (\n <label className=\"text-sm font-medium text-foreground\">\n {field.label}\n {field.required && <span className=\"text-destructive ml-0.5\">*</span>}\n </label>\n )}\n {renderField(field, value, onChange, allValues)}\n {field.hint && <p className=\"text-[10px] text-muted-foreground mt-0.5\">{field.hint}</p>}\n </div>\n )\n}\n\nfunction FormGroup({\n group,\n fields,\n values,\n onChange,\n}: {\n group: FieldGroup\n fields: FieldDef[]\n values: Record<string, any>\n onChange: (key: string, val: any) => void\n}) {\n const cols = group.columns ?? 2\n\n const grid = (\n <div className={`grid gap-3 ${cols >= 2 ? 'md:grid-cols-2' : ''} ${cols >= 3 ? 'lg:grid-cols-3' : ''}`}>\n {fields.map((field) => (\n <FormFieldItem\n key={field.key}\n field={field}\n value={values[field.key]}\n onChange={(val) => onChange(field.key, val)}\n allValues={values}\n />\n ))}\n </div>\n )\n\n return (\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{group.label}</h3>\n {group.description && (\n <p className=\"text-xs text-muted-foreground mt-0.5 mb-3\">{group.description}</p>\n )}\n <Card>\n <CardContent className=\"pt-4\">\n {group.imageSlot ? (\n <div className=\"flex gap-4\">\n {/* Decorative image slot — non-functional placeholder for now. */}\n <div className=\"shrink-0\">\n <div className=\"flex h-20 w-20 cursor-pointer items-center justify-center rounded-lg border-2 border-dashed border-muted text-muted-foreground transition-colors hover:border-primary/30 hover:text-primary/50\">\n <ImagePlus className=\"h-5 w-5\" />\n </div>\n </div>\n <div className=\"flex-1\">{grid}</div>\n </div>\n ) : (\n grid\n )}\n </CardContent>\n </Card>\n </div>\n )\n}\n\nexport function CrudFormPage({ entityDef, mode, initialData, onSubmit, onCancel, namePlural, embedded, hideBreadcrumb }: CrudFormPageProps) {\n const t = useTranslation()\n const formFields = entityDef.fields.filter((f) => f.showInForm !== false)\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const computeInit = () =>\n mode === 'edit' && initialData ? { ...getDefaultValues(formFields), ...initialData } : getDefaultValues(formFields)\n const [values, setValues] = useState<Record<string, any>>(computeInit)\n const [saving, setSaving] = useState(false)\n const initialRef = React.useRef<string>(JSON.stringify(values))\n\n useEffect(() => {\n const init = computeInit()\n setValues(init)\n initialRef.current = JSON.stringify(init)\n }, [mode, initialData])\n\n const computedKeys = new Set(formFields.filter((f) => f.type === 'computed').map((f) => f.key))\n\n const submit = async () => {\n setSaving(true)\n try {\n // Sanitize: convert empty strings to null so the DB doesn't choke on e.g. empty date fields.\n // Computed fields are read-only and never persisted.\n const sanitized: Record<string, any> = {}\n for (const [key, val] of Object.entries(values)) {\n if (computedKeys.has(key)) continue\n sanitized[key] = val === '' ? null : val\n }\n await onSubmit(sanitized)\n } catch (err: any) {\n const message = err?.message || 'Something went wrong'\n toast.error(t('crud.form.failedToSave', { entity: entityDef.name.toLowerCase() }), { description: message })\n } finally {\n setSaving(false)\n }\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n void submit()\n }\n\n const dirty = JSON.stringify(values) !== initialRef.current\n\n // Discard reverts the form to its pristine state and stays on the page (the\n // SaveBar then hides). Leaving the page is a separate action — the breadcrumb\n // link, or pressing Escape again once there's nothing left to discard.\n const discard = () => { setValues(computeInit()) }\n\n // Full-page CRUD forms surface Save/Discard via the app-wide floating SaveBar.\n // Embedded forms (rendered inside other widgets) keep their inline buttons.\n useSaveBar({\n dirty: !embedded && dirty,\n saving,\n onSave: () => { void submit() },\n onDiscard: discard,\n saveLabel: mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.saveChanges'),\n })\n\n // Register \"leave to parent\" with the app-wide Escape key. While the form is\n // dirty the SaveBar owns Escape (→ discard); once pristine, Escape navigates\n // back — giving the two-step \"discard, then leave\" flow for free.\n useBackHandler(embedded ? undefined : onCancel)\n\n const handleChange = (key: string, val: any) => {\n setValues((prev) => ({ ...prev, [key]: val }))\n }\n\n const title = mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.editTitle', { entity: entityDef.name })\n const breadcrumbLabel = mode === 'create'\n ? t('crud.form.newBreadcrumb', { entity: entityDef.name })\n : (values[displayField] || initialData?.[displayField] || t('common.edit'))\n\n // Organize fields by groups\n const groups = entityDef.fieldGroups ?? []\n const groupFieldMap = new Map<string, FieldDef[]>()\n const ungroupedFields: FieldDef[] = []\n\n for (const field of formFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n } else {\n ungroupedFields.push(field)\n }\n }\n\n const hasGroups = groups.length > 0 || groupFieldMap.size > 0\n\n const archetypeLayoutProps = {\n fields: formFields,\n allFields: entityDef.fields,\n fieldGroups: groups,\n values,\n onChange: handleChange,\n renderField,\n entityIcon: entityDef.icon,\n compact: embedded,\n }\n\n function renderFormBody(layout?: FormLayout) {\n switch (layout) {\n case 'person':\n return <PersonFormLayout {...archetypeLayoutProps} />\n case 'product':\n return <ProductFormLayout {...archetypeLayoutProps} />\n case 'service':\n return <ServiceFormLayout {...archetypeLayoutProps} />\n case 'location':\n return <LocationFormLayout {...archetypeLayoutProps} />\n case 'subject':\n return <SubjectFormLayout {...archetypeLayoutProps} />\n default:\n // Generic layout — ungrouped + grouped fields\n return (\n <>\n {ungroupedFields.length > 0 && (\n <Card>\n <CardContent className=\"pt-5\">\n <div className={`grid gap-4 ${!hasGroups ? '' : 'md:grid-cols-2'}`}>\n {ungroupedFields.map((field) => (\n <FormFieldItem\n key={field.key}\n field={field}\n value={values[field.key]}\n onChange={(val) => handleChange(field.key, val)}\n allValues={values}\n />\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n {groups.map((group) => {\n const fields = groupFieldMap.get(group.id)\n if (!fields || fields.length === 0) return null\n return (\n <FormGroup\n key={group.id}\n group={group}\n fields={fields}\n values={values}\n onChange={handleChange}\n />\n )\n })}\n </>\n )\n }\n }\n\n return (\n <div className={`w-full flex flex-col items-center ${embedded ? 'text-sm' : ''}`}>\n <div className={`w-full ${embedded ? 'space-y-3' : 'max-w-3xl space-y-5'}`}>\n {/* Breadcrumb + subtitle — hidden in embedded mode or when a parent owns the header */}\n {!embedded && !hideBreadcrumb && (\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={onCancel} className=\"inline-flex items-center gap-1 hover:text-foreground transition-colors\">\n <ArrowLeft className=\"h-3.5 w-3.5\" />\n {namePlural}\n </button>\n <span>/</span>\n <span className=\"text-foreground font-medium truncate max-w-[200px]\">{breadcrumbLabel}</span>\n </nav>\n )}\n\n {/* Form */}\n <form onSubmit={handleSubmit} className={embedded ? 'space-y-3' : 'space-y-5'}>\n {renderFormBody(entityDef.layout)}\n\n {/* Submit — embedded forms keep inline buttons; full-page forms use the floating SaveBar */}\n {embedded && (\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel} disabled={saving}>{t('common.cancel')}</Button>\n <Button type=\"submit\" size=\"sm\" disabled={saving}>\n {saving && <Loader2 className=\"animate-spin mr-1.5 h-3 w-3\" />}\n {saving ? t('common.saving') : mode === 'create' ? t('crud.form.addTitle', { entity: entityDef.name }) : t('crud.form.saveChanges')}\n </Button>\n </div>\n )}\n </form>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport type { FieldDef } from '@fayz-ai/core'\nimport { Badge } from '@fayz-ai/ui'\nimport { RelationCell } from './relation-field'\nimport {\n formatCurrency as formatCurrencyLocale,\n formatDate as formatDateLocale,\n formatDateTime as formatDateTimeLocale,\n} from '@fayz-ai/core'\n\nfunction formatCurrency(value: any, currency?: string): string {\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return '—'\n return formatCurrencyLocale(num, currency)\n}\n\nfunction formatDate(value: any): string {\n if (!value) return '—'\n return formatDateLocale(value)\n}\n\nfunction formatDateTime(value: any): string {\n if (!value) return '—'\n return formatDateTimeLocale(value)\n}\n\nexport interface ColumnDef {\n key: string\n label: string\n sortable: boolean\n render: (value: any, row: any) => React.ReactNode\n}\n\nexport interface FieldToColumnsOptions {\n /** Callback for inline field updates (e.g. toggle active) */\n onInlineUpdate?: (id: string, field: string, value: any) => void\n}\n\nfunction InlineToggle({ checked, onChange }: { checked: boolean; onChange: (val: boolean) => void }) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n onClick={(e) => { e.stopPropagation(); onChange(!checked) }}\n className={`relative inline-flex h-5 w-9 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${\n checked ? 'bg-primary' : 'bg-muted'\n }`}\n >\n <span\n className={`pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform ${\n checked ? 'translate-x-4' : 'translate-x-0'\n }`}\n />\n </button>\n )\n}\n\nexport function fieldToColumns(fields: FieldDef[], options?: FieldToColumnsOptions): ColumnDef[] {\n return fields\n .filter((f) => f.showInTable !== false)\n .map((field): ColumnDef => {\n const sortable = field.sortable ?? ['text', 'number', 'currency', 'date', 'datetime', 'email'].includes(field.type)\n\n const render = field.renderCell ?? ((value: any, row: any): React.ReactNode => {\n if (value == null || value === '') return <span className=\"text-muted-foreground\">—</span>\n\n switch (field.type) {\n case 'currency':\n return <span>{formatCurrency(value, field.currency)}</span>\n case 'date':\n return <span>{formatDate(value)}</span>\n case 'datetime':\n return <span>{formatDateTime(value)}</span>\n case 'boolean':\n if (field.inlineToggle && options?.onInlineUpdate) {\n const handler = options.onInlineUpdate\n return (\n <InlineToggle\n checked={!!value}\n onChange={(val) => handler(row.id, field.key, val)}\n />\n )\n }\n return value ? (\n <svg className=\"h-4 w-4 text-success\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )\n case 'color':\n return (\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"h-4 w-4 rounded-full border shrink-0\" style={{ backgroundColor: String(value) }} />\n <span className=\"text-xs text-muted-foreground\">{String(value)}</span>\n </span>\n )\n case 'relation':\n return <RelationCell relation={field.relation} value={value} />\n case 'select':\n return <Badge variant=\"secondary\">{String(value)}</Badge>\n case 'number':\n return <span>{typeof value === 'number' ? value.toLocaleString() : value}</span>\n default:\n return <span>{String(value)}</span>\n }\n })\n\n return { key: field.key, label: field.label, sortable, render }\n })\n}\n","import React from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport { Card } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport type { FieldDef, EntityDef } from '@fayz-ai/core'\nimport { formatCurrency, formatDate } from '@fayz-ai/core'\n\ninterface CrudCardGridProps<T> {\n items: T[]\n entityDef: EntityDef<T>\n onEdit: (item: T) => void\n onDelete: (item: T) => void\n}\n\nfunction formatValue(field: FieldDef, value: any): React.ReactNode {\n if (value == null || value === '') return null\n\n switch (field.type) {\n case 'currency': {\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return null\n return formatCurrency(num, field.currency)\n }\n case 'date':\n try { return formatDate(value) }\n catch { return String(value) }\n case 'boolean':\n return value ? 'Yes' : 'No'\n case 'select':\n return <Badge variant=\"secondary\" className=\"text-[10px]\">{String(value)}</Badge>\n case 'image':\n return null\n default:\n return String(value)\n }\n}\n\nexport function CrudCardGrid<T extends { id: string }>({ items, entityDef, onEdit, onDelete }: CrudCardGridProps<T>) {\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const imageField = entityDef.imageField\n const entityIcon = entityDef.icon\n const IconComponent = (LucideIcons as any)[entityIcon] ?? LucideIcons.Package\n const visibleFields = entityDef.fields.filter(\n (f) => f.showInTable !== false && f.key !== displayField && f.key !== imageField && f.type !== 'image'\n )\n\n return (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => {\n const record = item as any\n const imageUrl = imageField ? record[imageField] : null\n\n return (\n <Card\n key={record.id}\n className=\"flex items-center gap-4 p-3 cursor-pointer hover:bg-muted/30 transition-colors\"\n onClick={() => onEdit(item)}\n >\n {/* Thumbnail or icon */}\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={record[displayField] ?? ''}\n className=\"h-14 w-14 shrink-0 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"flex h-14 w-14 shrink-0 items-center justify-center rounded-lg bg-muted/50\">\n <IconComponent className=\"h-6 w-6 text-muted-foreground/40\" />\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold truncate\">{record[displayField] ?? record.id}</h3>\n <div className=\"flex items-center gap-2 mt-0.5 flex-wrap\">\n {visibleFields.slice(0, 3).map((field) => {\n const val = formatValue(field, record[field.key])\n if (val == null) return null\n return (\n <span key={field.key} className=\"text-xs text-muted-foreground\">\n {val}\n </span>\n )\n })}\n </div>\n </div>\n </Card>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport type { PermissionAction } from '@fayz-ai/core'\nimport { usePermissionOptional } from './context'\n\ninterface PermissionGateProps {\n feature: string\n action: PermissionAction\n children: React.ReactNode\n fallback?: React.ReactNode\n}\n\n/** Renders children only when the current user has the given feature+action. */\nexport function PermissionGate({ feature, action, children, fallback }: PermissionGateProps) {\n const can = usePermissionOptional()\n if (!can(feature, action)) return <>{fallback ?? null}</>\n return <>{children}</>\n}\n","import React, { useMemo } from 'react'\nimport { MoreVertical, Upload, Download } from 'lucide-react'\nimport type { ColumnDef as TanStackColumnDef } from '@tanstack/react-table'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { DataTable } from '@fayz-ai/ui'\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '@fayz-ai/ui'\nimport { fieldToColumns } from './fieldToColumn'\nimport { CrudCardGrid } from './CrudCardGrid'\nimport { PermissionGate } from '../permissions/PermissionGate'\n\n/** A resolved facet: a field plus the option pills to render. */\nexport interface CrudFacet {\n field: string\n options: { value: string; label: string }[]\n allLabel?: string\n}\n\nexport interface CrudListViewProps<T extends { id: string }> {\n entityDef: EntityDef<T>\n /** TanStack columns. When omitted, derived from entityDef.fields (no actions column). */\n columns?: TanStackColumnDef<T, any>[]\n /** null = initial load (skeleton); [] = empty state. */\n items: T[] | null\n total: number\n display?: 'table' | 'cards'\n /** Search box — rendered when onSearchChange is provided. */\n search?: string\n onSearchChange?: (value: string) => void\n searchPlaceholder?: string\n /** Facet pills below the search box. */\n facets?: CrudFacet[]\n activeFilters?: Record<string, string | undefined>\n onFacetChange?: (field: string, value: string | undefined) => void\n onNew?: () => void\n addLabel?: string\n onRowClick?: (row: T) => void\n /** Delete action for the card grid (table actions live in the columns). */\n onDelete?: (row: T) => void\n onImport?: () => void\n onExport?: () => void\n feature?: string\n readOnly?: boolean\n emptyMessage?: string\n}\n\nfunction pillClass(active: boolean): string {\n return [\n 'rounded-full px-3 py-1 text-sm font-medium transition-colors',\n active\n ? 'bg-foreground text-background'\n : 'bg-muted text-muted-foreground hover:bg-muted/70',\n ].join(' ')\n}\n\n/**\n * The canonical generic list — header (count + New + import/export), search,\n * faceted filter pills, and a DataTable/card grid. Decoupled from data and\n * routing: feed it `items` and callbacks. Used by CrudPage (store-backed) and by\n * plugins that own their data/routing (e.g. the inventory product list).\n */\nexport function CrudListView<T extends { id: string }>({\n entityDef,\n columns,\n items,\n total,\n display = 'table',\n search,\n onSearchChange,\n searchPlaceholder,\n facets,\n activeFilters,\n onFacetChange,\n onNew,\n addLabel,\n onRowClick,\n onDelete,\n onImport,\n onExport,\n feature,\n readOnly,\n emptyMessage,\n}: CrudListViewProps<T>) {\n const t = useTranslation()\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n\n const derivedColumns = useMemo<TanStackColumnDef<T, any>[]>(() => {\n return fieldToColumns(entityDef.fields).map((col) => ({\n accessorKey: col.key,\n header: col.label,\n enableSorting: col.sortable,\n cell: ({ row }: any) => {\n const value = row.original[col.key]\n const rendered = col.render(value, row.original)\n return col.key === displayField\n ? <span className=\"font-medium text-foreground\">{rendered}</span>\n : rendered\n },\n }))\n }, [entityDef.fields, displayField])\n\n const tanColumns = columns ?? derivedColumns\n\n const isInitialLoad = items === null\n const isEmpty = items !== null && items.length === 0\n const hasImportExport = Boolean(onImport || onExport)\n\n const newButton = onNew && !readOnly\n ? <Button onClick={onNew}>{addLabel ?? t('crud.list.addEntity', { entity: entityDef.name })}</Button>\n : null\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">{namePlural}</h1>\n {isInitialLoad ? (\n <div className=\"h-5 w-32 animate-pulse rounded bg-muted mt-1\" />\n ) : (\n <p className=\"text-muted-foreground\">{t('crud.list.totalCount', { count: String(total), entities: namePlural.toLowerCase() })}</p>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {newButton && (feature ? <PermissionGate feature={feature} action=\"create\">{newButton}</PermissionGate> : newButton)}\n {hasImportExport && (\n <Dropdown>\n <DropdownTrigger asChild>\n <Button variant=\"outline\" size=\"icon\" className=\"h-9 w-9 shrink-0\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n </DropdownTrigger>\n <DropdownContent align=\"end\">\n {onImport && (\n <DropdownItem onClick={onImport}>\n <Upload className=\"h-4 w-4 mr-2\" />\n {t('crud.import.action')}\n </DropdownItem>\n )}\n {onExport && (\n <DropdownItem onClick={onExport}>\n <Download className=\"h-4 w-4 mr-2\" />\n {t('crud.export.action')}\n </DropdownItem>\n )}\n </DropdownContent>\n </Dropdown>\n )}\n </div>\n </div>\n\n {onSearchChange && (\n <div className=\"relative max-w-sm\">\n <svg className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/></svg>\n <input\n type=\"text\"\n placeholder={searchPlaceholder ?? t('crud.list.search', { entities: namePlural.toLowerCase() })}\n value={search ?? ''}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] pl-8 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n )}\n\n {facets?.map((facet) => {\n const active = activeFilters?.[facet.field]\n return (\n <div key={facet.field} className=\"flex flex-wrap gap-2\">\n <button type=\"button\" onClick={() => onFacetChange?.(facet.field, undefined)} className={pillClass(active == null)}>\n {facet.allLabel ?? t('crud.list.allFacet')}\n </button>\n {facet.options.map((o) => (\n <button key={o.value} type=\"button\" onClick={() => onFacetChange?.(facet.field, o.value)} className={pillClass(active === o.value)}>\n {o.label}\n </button>\n ))}\n </div>\n )\n })}\n\n {isInitialLoad ? (\n display === 'cards' ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 2 }).map((_, i) => (\n <Card key={i} className=\"overflow-hidden\">\n <div className=\"p-5 space-y-3\">\n <div className=\"h-5 w-2/3 animate-pulse rounded bg-muted\" />\n <div className=\"space-y-2\">\n <div className=\"flex justify-between\"><div className=\"h-4 w-20 animate-pulse rounded bg-muted\" /><div className=\"h-4 w-16 animate-pulse rounded bg-muted\" /></div>\n <div className=\"flex justify-between\"><div className=\"h-4 w-24 animate-pulse rounded bg-muted\" /><div className=\"h-4 w-12 animate-pulse rounded bg-muted\" /></div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n ) : (\n <DataTable columns={tanColumns} data={[]} loading skeletonRows={3} />\n )\n ) : isEmpty ? (\n <DataTable\n columns={tanColumns}\n data={[]}\n emptyMessage={emptyMessage ?? t('crud.list.empty', { entities: namePlural.toLowerCase() })}\n />\n ) : display === 'cards' ? (\n <CrudCardGrid\n items={items ?? []}\n entityDef={entityDef as EntityDef<any>}\n onEdit={(item) => onRowClick?.(item as T)}\n onDelete={(item) => onDelete?.(item as T)}\n />\n ) : (\n <DataTable\n columns={tanColumns}\n data={items ?? []}\n onRowClick={(row) => onRowClick?.(row as T)}\n />\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { usePluginRuntimeOptional, getWidgetsForZone, resolvePluginComponent } from '@fayz-ai/core'\n\n/** Renders all plugin widgets registered for a zone, in order. Plugins fill\n * these slots (detail-tab zones, page zones) without the host knowing them. */\nexport function WidgetSlot({\n zone,\n contextOverrides,\n ...props\n}: { zone: string; contextOverrides?: Record<string, unknown> } & Record<string, unknown>) {\n const runtime = usePluginRuntimeOptional()\n if (!runtime) return null\n const widgets = getWidgetsForZone(runtime, zone, contextOverrides as never)\n if (!widgets.length) return null\n return (\n <>\n {widgets.map((widget, i) => {\n const Component = resolvePluginComponent(widget) as React.ComponentType<Record<string, unknown>> | undefined\n if (!Component) return null\n const w = widget as unknown as { config?: unknown; plugin?: unknown; props?: Record<string, unknown> }\n // Pass BOTH contracts: the saas-core widget contract (config/runtime/\n // plugin/widget) the de-bridged plugins expect, AND the spread props\n // that native archetype zones use.\n return (\n <Component\n key={widget.id ?? `${zone}-${i}`}\n config={w.config}\n runtime={{ ...runtime.context, ...(contextOverrides ?? {}) }}\n plugin={w.plugin}\n widget={widget}\n {...(w.props ?? {})}\n {...props}\n />\n )\n })}\n </>\n )\n}\n","// ---------------------------------------------------------------------------\n// Standalone Schedule CRUD Service\n// Works outside the agenda plugin context — uses Supabase directly.\n// ---------------------------------------------------------------------------\n\nimport { getCoreSchemaClient as getCoreClient } from '../supabase/client'\nimport { useOrganizationStore } from '../org'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ScheduleRecord {\n id: string\n tenantId: string\n kind: string\n assigneeId: string | null\n locationId: string | null\n dayOfWeek: number | null\n specificDate: string | null\n startsAt: string\n endsAt: string\n isActive: boolean\n metadata: Record<string, unknown>\n}\n\nexport interface SaveScheduleInput {\n assigneeId: string\n locationId?: string\n dayOfWeek?: number\n specificDate?: string\n startsAt: string\n endsAt: string\n isActive?: boolean\n kind?: string\n}\n\n/** Advanced settings stored per schedule block in the metadata jsonb column. */\nexport interface BlockSettings {\n bufferMinutes?: number\n allowedServiceIds?: string[]\n maxConcurrent?: number\n minAdvanceHours?: number\n maxAdvanceDays?: number\n label?: string\n locationId?: string\n}\n\n/** Extract BlockSettings from a schedule record's metadata. */\nexport function parseBlockSettings(metadata: Record<string, unknown>): BlockSettings {\n return {\n bufferMinutes: typeof metadata.bufferMinutes === 'number' ? metadata.bufferMinutes : undefined,\n allowedServiceIds: Array.isArray(metadata.allowedServiceIds) ? metadata.allowedServiceIds : undefined,\n maxConcurrent: typeof metadata.maxConcurrent === 'number' ? metadata.maxConcurrent : undefined,\n minAdvanceHours: typeof metadata.minAdvanceHours === 'number' ? metadata.minAdvanceHours : undefined,\n maxAdvanceDays: typeof metadata.maxAdvanceDays === 'number' ? metadata.maxAdvanceDays : undefined,\n label: typeof metadata.label === 'string' ? metadata.label : undefined,\n locationId: typeof metadata.locationId === 'string' ? metadata.locationId : undefined,\n }\n}\n\n/** Merge BlockSettings into existing metadata object. */\nexport function mergeBlockSettings(metadata: Record<string, unknown>, settings: BlockSettings): Record<string, unknown> {\n const merged = { ...metadata }\n // Only set defined values, remove undefined ones to keep metadata clean\n for (const [key, value] of Object.entries(settings)) {\n if (value !== undefined && value !== null && !(Array.isArray(value) && value.length === 0)) {\n merged[key] = value\n } else {\n delete merged[key]\n }\n }\n return merged\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getTenantId(): string {\n const id = useOrganizationStore.getState().currentOrg?.id\n if (!id) throw new Error('No active tenant')\n return id\n}\n\nfunction mapRow(row: Record<string, unknown>): ScheduleRecord {\n const r: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row)) {\n r[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return r as unknown as ScheduleRecord\n}\n\n// ---------------------------------------------------------------------------\n// Service functions\n// ---------------------------------------------------------------------------\n\nexport async function getSchedules(\n assigneeId: string,\n kind = 'working_hours',\n): Promise<ScheduleRecord[]> {\n const core = getCoreClient()\n const { data, error } = await core\n .from('schedules')\n .select('*')\n .eq('kind', kind)\n .eq('assignee_id', assigneeId)\n .order('day_of_week')\n .order('starts_at')\n\n if (error) throw error\n return (data ?? []).map(mapRow)\n}\n\nexport async function saveSchedule(input: SaveScheduleInput): Promise<ScheduleRecord> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n const { data, error } = await core\n .from('schedules')\n .insert({\n tenant_id: tenantId,\n kind: input.kind ?? 'working_hours',\n assignee_id: input.assigneeId,\n location_id: input.locationId ?? null,\n day_of_week: input.dayOfWeek ?? null,\n specific_date: input.specificDate ?? null,\n starts_at: input.startsAt,\n ends_at: input.endsAt,\n is_active: input.isActive ?? true,\n })\n .select('*')\n .single()\n\n if (error) throw error\n return mapRow(data as Record<string, unknown>)\n}\n\nexport async function deleteSchedule(id: string): Promise<void> {\n const core = getCoreClient()\n const { error } = await core.from('schedules').delete().eq('id', id)\n if (error) throw error\n}\n\n/**\n * Replace all weekly schedules (day_of_week based) for an assignee.\n * Deletes existing weekly entries and creates new ones in a single flow.\n */\nexport async function replaceWeeklySchedules(\n assigneeId: string,\n week: Record<number, { enabled: boolean; periods: { startsAt: string; endsAt: string; settings?: BlockSettings }[] }>,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n // Delete existing weekly schedules (day_of_week NOT NULL, specific_date IS NULL)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .not('day_of_week', 'is', null)\n .is('specific_date', null)\n\n if (delErr) throw delErr\n\n // Build insert rows\n const rows: Record<string, unknown>[] = []\n for (const [dayStr, day] of Object.entries(week)) {\n if (!day.enabled) continue\n for (const period of day.periods) {\n const metadata = period.settings ? mergeBlockSettings({}, period.settings) : {}\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: assigneeId,\n day_of_week: Number(dayStr),\n specific_date: null,\n starts_at: period.startsAt,\n ends_at: period.endsAt,\n is_active: true,\n metadata,\n })\n }\n }\n\n if (rows.length > 0) {\n const { error: insErr } = await core.from('schedules').insert(rows)\n if (insErr) throw insErr\n }\n}\n\n/**\n * Enumerate all dates in a range (inclusive).\n */\nfunction eachDate(startDate: string, endDate: string): string[] {\n const dates: string[] = []\n const current = new Date(startDate + 'T00:00:00Z')\n const end = new Date(endDate + 'T00:00:00Z')\n while (current <= end) {\n dates.push(current.toISOString().slice(0, 10))\n current.setUTCDate(current.getUTCDate() + 1)\n }\n return dates\n}\n\n/**\n * Save a date-range exception.\n * type: 'unavailable' marks days off, 'available' sets custom hours.\n * Stores notes and range info in metadata for retrieval.\n */\nexport async function saveException(input: {\n assigneeId: string\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes?: string\n settings?: BlockSettings\n kind?: string\n}): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n const kind = input.kind ?? 'working_hours'\n const dates = eachDate(input.startDate, input.endDate)\n const isRange = dates.length > 1\n const meta = mergeBlockSettings(\n {\n ...(input.notes ? { notes: input.notes } : {}),\n ...(isRange ? { rangeStart: input.startDate, rangeEnd: input.endDate } : {}),\n exceptionType: input.type,\n },\n input.settings ?? {},\n )\n\n // Delete existing exceptions for all dates in range (single query)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', input.assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (delErr) throw delErr\n\n const rows: Record<string, unknown>[] = []\n\n if (input.type === 'unavailable') {\n // One sentinel row per date with is_active: false\n for (const date of dates) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: '00:00',\n ends_at: '00:00',\n is_active: false,\n metadata: meta,\n })\n }\n } else {\n // Custom available hours for each date\n for (const date of dates) {\n for (const p of input.periods) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: p.startsAt,\n ends_at: p.endsAt,\n is_active: true,\n metadata: meta,\n })\n }\n }\n }\n\n if (rows.length > 0) {\n const { error } = await core.from('schedules').insert(rows)\n if (error) throw error\n }\n}\n\n/**\n * Delete an exception by its start date.\n * If it was part of a range, deletes all dates in that range.\n */\nexport async function deleteException(\n assigneeId: string,\n startDate: string,\n endDate?: string,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const dates = eachDate(startDate, endDate ?? startDate)\n const { error } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (error) throw error\n}\n","// ---------------------------------------------------------------------------\n// Schedule Block Config Registry\n// Lightweight global config — set by the agenda plugin, read by ScheduleEditor.\n// No React context needed. Graceful degradation when not configured.\n// ---------------------------------------------------------------------------\n\nexport interface ScheduleBlockConfig {\n defaults: {\n bufferMinutes: number\n maxConcurrent: number\n minAdvanceHours: number\n maxAdvanceDays: number\n }\n /** Available services for the multi-select filter. */\n services?: { id: string; name: string }[]\n showServices?: boolean\n showConcurrent?: boolean\n showBookingWindow?: boolean\n /** Available locations for per-block assignment. */\n locations?: { id: string; name: string }[]\n showLocations?: boolean\n /** Lazy fetcher — called when locations are needed but not yet loaded. */\n fetchLocations?: () => Promise<{ id: string; name: string }[]>\n}\n\nlet globalConfig: ScheduleBlockConfig | null = null\nconst listeners = new Set<() => void>()\n\nexport function setScheduleBlockConfig(config: ScheduleBlockConfig): void {\n globalConfig = config\n listeners.forEach((fn) => fn())\n}\n\nexport function getScheduleBlockConfig(): ScheduleBlockConfig | null {\n return globalConfig\n}\n\n/** Subscribe to config changes. Returns unsubscribe function. */\nexport function subscribeScheduleBlockConfig(listener: () => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n","import React, { useRef, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ChevronDown } from 'lucide-react'\nimport type { BlockSettings } from '../../lib/schedule-service'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ninterface BlockSettingsPopoverProps {\n settings: BlockSettings\n onChange: (settings: BlockSettings) => void\n config: ScheduleBlockConfig\n /** Ref to the trigger element for positioning */\n triggerRef: React.RefObject<HTMLElement | null>\n open: boolean\n onClose: () => void\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function BlockSettingsPopover({\n settings,\n onChange,\n config,\n triggerRef,\n open,\n onClose,\n}: BlockSettingsPopoverProps) {\n const t = useTranslation()\n const popoverRef = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!open || !triggerRef.current) return\n const rect = triggerRef.current.getBoundingClientRect()\n const popW = 280\n let left = rect.left + rect.width / 2 - popW / 2\n if (left + popW > window.innerWidth - 12) left = window.innerWidth - popW - 12\n if (left < 8) left = 8\n setPos({ top: rect.bottom + 6, left })\n }, [open, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (popoverRef.current?.contains(e.target as Node)) return\n if (triggerRef.current?.contains(e.target as Node)) return\n onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open, onClose, triggerRef])\n\n if (!open) return null\n\n const showServices = config.showServices !== false && config.services && config.services.length > 0\n const showConcurrent = config.showConcurrent !== false\n const showBookingWindow = config.showBookingWindow !== false\n const showLocations = config.showLocations === true && config.locations && config.locations.length > 0\n\n function update(patch: Partial<BlockSettings>) {\n onChange({ ...settings, ...patch })\n }\n\n return createPortal(\n <div\n ref={popoverRef}\n style={{ position: 'fixed', top: pos.top, left: pos.left, zIndex: 9999 }}\n className=\"fayz-glass-surface w-[280px] rounded-xl border bg-popover shadow-xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b\">\n <span className=\"text-xs font-semibold\">{t('schedule.blockSettings.title')}</span>\n <button type=\"button\" onClick={onClose} className=\"p-0.5 rounded text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n <div className=\"p-3 space-y-3\">\n {/* Location select */}\n {showLocations && (\n <LocationSelect\n locations={config.locations!}\n value={settings.locationId}\n onChange={(id) => update({ locationId: id || undefined })}\n />\n )}\n\n {/* Services multi-select */}\n {showServices && (\n <ServiceSelect\n services={config.services!}\n selected={settings.allowedServiceIds ?? []}\n onChange={(ids) => update({ allowedServiceIds: ids.length > 0 ? ids : undefined })}\n />\n )}\n\n {/* Max concurrent */}\n {showConcurrent && (\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxConcurrent')}</label>\n <div className=\"flex items-center gap-2 mt-1\">\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: Math.max(1, (settings.maxConcurrent ?? config.defaults.maxConcurrent) - 1) })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n -\n </button>\n <span className=\"text-sm font-medium w-6 text-center\">\n {settings.maxConcurrent ?? config.defaults.maxConcurrent}\n </span>\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: (settings.maxConcurrent ?? config.defaults.maxConcurrent) + 1 })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n +\n </button>\n </div>\n </div>\n )}\n\n {/* Booking window */}\n {showBookingWindow && (\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.minAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={0}\n value={settings.minAdvanceHours ?? config.defaults.minAdvanceHours}\n onChange={(e) => update({ minAdvanceHours: Number(e.target.value) || 0 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.hrs')}</span>\n </div>\n </div>\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={1}\n value={settings.maxAdvanceDays ?? config.defaults.maxAdvanceDays}\n onChange={(e) => update({ maxAdvanceDays: Number(e.target.value) || 30 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.days')}</span>\n </div>\n </div>\n </div>\n )}\n\n {/* Label */}\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.label')}</label>\n <input\n type=\"text\"\n value={settings.label ?? ''}\n onChange={(e) => update({ label: e.target.value || undefined })}\n placeholder={t('schedule.blockSettings.labelPlaceholder')}\n className=\"mt-1 w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs placeholder:text-muted-foreground/40\"\n />\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Location select (custom dropdown)\n// ---------------------------------------------------------------------------\n\nfunction LocationSelect({\n locations,\n value,\n onChange,\n}: {\n locations: { id: string; name: string }[]\n value: string | undefined\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const current = value ? locations.find((l) => l.id === value) : null\n const label = current ? current.name : t('schedule.blockSettings.noLocation')\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.location')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={current ? '' : 'text-muted-foreground'}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => { onChange(''); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${!value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.noLocation')}\n </button>\n {locations.map((l) => (\n <button\n key={l.id}\n type=\"button\"\n onClick={() => { onChange(l.id); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${l.id === value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {l.name}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\nfunction ServiceSelect({\n services,\n selected,\n onChange,\n}: {\n services: { id: string; name: string }[]\n selected: string[]\n onChange: (ids: string[]) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const allSelected = selected.length === 0\n const label = allSelected\n ? t('schedule.blockSettings.allServices')\n : selected.length === 1\n ? services.find((s) => s.id === selected[0])?.name ?? t('schedule.blockSettings.oneService')\n : t('schedule.blockSettings.nServices', { count: selected.length })\n\n function toggle(id: string) {\n onChange(selected.includes(id) ? selected.filter((s) => s !== id) : [...selected, id])\n }\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.allowedServices')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={allSelected ? 'text-muted-foreground' : ''}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => onChange([])}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${allSelected ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.allServices')}\n </button>\n {services.map((s) => {\n const checked = selected.includes(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => toggle(s.id)}\n className={`flex items-center gap-2 w-full px-2.5 py-1.5 text-xs text-left transition-colors ${checked ? 'bg-primary/5' : 'hover:bg-muted/50'}`}\n >\n <span className={`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border ${\n checked ? 'border-primary bg-primary text-primary-foreground' : 'border-muted-foreground/30'\n }`}>\n {checked && <svg className=\"h-2.5 w-2.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>}\n </span>\n <span className=\"truncate\">{s.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback, useRef, useSyncExternalStore } from 'react'\nimport { Clock, Plus, Trash2, Copy, Save, CalendarOff, CalendarPlus, Check, Settings, X } from 'lucide-react'\nimport { toast } from '@fayz-ai/ui'\nimport {\n getSchedules,\n replaceWeeklySchedules,\n saveException,\n deleteException,\n parseBlockSettings,\n} from '../../lib/schedule-service'\nimport type { ScheduleRecord, BlockSettings } from '../../lib/schedule-service'\nimport { getScheduleBlockConfig, subscribeScheduleBlockConfig } from '../../lib/schedule-config'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\nimport { BlockSettingsPopover } from './BlockSettingsPopover'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { TimePicker } from '@fayz-ai/ui'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@fayz-ai/ui'\nimport { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter, ModalTitle, ModalDescription } from '@fayz-ai/ui'\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DAY_KEYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']\nconst WEEK_ORDER = [1, 2, 3, 4, 5, 6, 0] // Mon–Sun display order\n\ninterface Period {\n id?: string\n startsAt: string\n endsAt: string\n settings?: BlockSettings\n}\n\ninterface DaySchedule {\n enabled: boolean\n periods: Period[]\n}\n\ntype WeekSchedule = Record<number, DaySchedule>\n\ninterface ExceptionEntry {\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction schedulesToWeek(schedules: ScheduleRecord[]): WeekSchedule {\n const week: WeekSchedule = {}\n for (let i = 0; i < 7; i++) {\n week[i] = { enabled: false, periods: [] }\n }\n for (const s of schedules) {\n if (s.dayOfWeek == null || s.specificDate != null) continue\n const day = week[s.dayOfWeek]\n if (s.isActive) {\n day.enabled = true\n const settings = parseBlockSettings(s.metadata ?? {})\n const hasSettings = Object.values(settings).some((v) => v !== undefined)\n day.periods.push({\n id: s.id,\n startsAt: s.startsAt,\n endsAt: s.endsAt,\n settings: hasSettings ? settings : undefined,\n })\n }\n }\n for (const day of Object.values(week)) {\n day.periods.sort((a, b) => a.startsAt.localeCompare(b.startsAt))\n }\n return week\n}\n\nfunction schedulesToExceptions(schedules: ScheduleRecord[]): ExceptionEntry[] {\n // Group by range key (rangeStart–rangeEnd or single date)\n const map = new Map<string, ExceptionEntry>()\n for (const s of schedules) {\n if (!s.specificDate) continue\n const meta = (s.metadata ?? {}) as Record<string, unknown>\n const rangeStart = (meta.rangeStart as string) ?? s.specificDate\n const rangeEnd = (meta.rangeEnd as string) ?? s.specificDate\n const key = `${rangeStart}__${rangeEnd}`\n const exType = (meta.exceptionType as string) === 'available' ? 'available' : 'unavailable'\n const notes = (meta.notes as string) ?? ''\n\n const existing = map.get(key)\n if (!existing) {\n map.set(key, {\n startDate: rangeStart,\n endDate: rangeEnd,\n type: exType,\n periods: s.isActive ? [{ startsAt: s.startsAt, endsAt: s.endsAt }] : [],\n notes,\n })\n } else if (s.isActive && s.specificDate === rangeStart) {\n existing.periods.push({ startsAt: s.startsAt, endsAt: s.endsAt })\n }\n }\n return Array.from(map.values()).sort((a, b) => a.startDate.localeCompare(b.startDate))\n}\n\nfunction formatDate(dateStr: string): string {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// PeriodRow — single time block as a horizontal row\n// ---------------------------------------------------------------------------\n\ninterface PeriodRowProps {\n period: Period\n dayOfWeek: number\n blockConfig: ScheduleBlockConfig | null\n settingsOpen: boolean\n onUpdateTime: (field: 'startsAt' | 'endsAt', value: string) => void\n onUpdateBuffer: (value: number) => void\n onUpdateSettings: (settings: BlockSettings) => void\n onRemove: () => void\n onAddBlock: () => void\n onCopyToAll: () => void\n onToggleSettings: () => void\n onCloseSettings: () => void\n}\n\nfunction PeriodRow({\n period, blockConfig, dayOfWeek,\n settingsOpen, onUpdateTime, onUpdateBuffer, onUpdateSettings,\n onRemove, onCopyToAll, onToggleSettings, onCloseSettings,\n onAddBlock,\n}: PeriodRowProps) {\n const t = useTranslation()\n const gearRef = useRef<HTMLButtonElement>(null)\n const bufferValue = period.settings?.bufferMinutes ?? blockConfig?.defaults.bufferMinutes ?? 0\n const hasCustomSettings = period.settings && Object.entries(period.settings).some(\n ([k, v]) => k !== 'bufferMinutes' && v !== undefined,\n )\n const dayName = t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-1.5 group\">\n {/* Label */}\n {period.settings?.label && (\n <span className=\"text-[10px] font-medium text-primary bg-primary/10 rounded-full px-2 py-0.5 shrink-0\">\n {period.settings.label}\n </span>\n )}\n\n {/* Time range */}\n <TimePicker value={period.startsAt} onChange={(v) => onUpdateTime('startsAt', v)} interval={30} className=\"w-[90px]\" />\n <span className=\"text-xs text-muted-foreground/50\">-</span>\n <TimePicker value={period.endsAt} onChange={(v) => onUpdateTime('endsAt', v)} interval={30} min={period.startsAt} className=\"w-[90px]\" />\n\n {/* Buffer pill */}\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1 rounded-full border bg-muted/30 px-2 py-1 shrink-0\">\n <input\n type=\"number\"\n min={0}\n max={120}\n value={bufferValue}\n onChange={(e) => onUpdateBuffer(Number(e.target.value) || 0)}\n className=\"w-8 bg-transparent text-xs text-center tabular-nums outline-none\"\n />\n <span className=\"text-[10px] text-muted-foreground\">{t('schedule.editor.min')}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.bufferTooltip')}</TooltipContent>\n </Tooltip>\n\n {/* Actions */}\n <div className=\"flex items-center gap-0.5 shrink-0 ml-auto\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onRemove}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-destructive hover:bg-destructive/5 transition-colors\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.removeInterval')}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onAddBlock}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.newInterval', { day: dayName })}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onCopyToAll}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Copy className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.copyToAll')}</TooltipContent>\n </Tooltip>\n\n {blockConfig && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button ref={gearRef} type=\"button\" onClick={onToggleSettings}\n className={`p-1.5 rounded-md transition-colors ${\n hasCustomSettings\n ? 'text-primary bg-primary/5'\n : 'text-muted-foreground/30 hover:text-foreground hover:bg-muted'\n }`}>\n <Settings className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.blockSettings.title')}</TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {/* Settings popover */}\n {blockConfig && (\n <BlockSettingsPopover\n settings={period.settings ?? {}}\n onChange={onUpdateSettings}\n config={blockConfig}\n triggerRef={gearRef}\n open={settingsOpen}\n onClose={onCloseSettings}\n />\n )}\n </div>\n </TooltipProvider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main Component\n// ---------------------------------------------------------------------------\n\ninterface ScheduleEditorProps {\n assigneeId: string\n}\n\nexport function ScheduleEditor({ assigneeId }: ScheduleEditorProps) {\n const t = useTranslation()\n const [week, setWeek] = useState<WeekSchedule>({})\n const [exceptions, setExceptions] = useState<ExceptionEntry[]>([])\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [showAddException, setShowAddException] = useState(false)\n const blockConfig = useSyncExternalStore(subscribeScheduleBlockConfig, getScheduleBlockConfig)\n const [settingsPopover, setSettingsPopover] = useState<{ dayOfWeek: number; idx: number } | null>(null)\n const [weekDirty, setWeekDirty] = useState(false)\n\n // Lazy-fetch locations when showLocations is enabled but locations aren't loaded yet\n useEffect(() => {\n if (blockConfig?.showLocations && (!blockConfig.locations || blockConfig.locations.length === 0) && blockConfig.fetchLocations) {\n blockConfig.fetchLocations().catch(() => {})\n }\n }, [blockConfig?.showLocations, blockConfig?.locations?.length])\n\n // New exception form state\n const [newExStartDate, setNewExStartDate] = useState('')\n const [newExEndDate, setNewExEndDate] = useState('')\n const [newExType, setNewExType] = useState<'unavailable' | 'available'>('unavailable')\n const [newExPeriods, setNewExPeriods] = useState([{ startsAt: '09:00', endsAt: '17:00' }])\n const [newExNotes, setNewExNotes] = useState('')\n const [savingException, setSavingException] = useState(false)\n\n const loadData = useCallback(async () => {\n setLoading(true)\n try {\n const data = await getSchedules(assigneeId)\n setWeek(schedulesToWeek(data))\n setExceptions(schedulesToExceptions(data))\n setWeekDirty(false)\n } catch {\n toast.error(t('schedule.editor.failedToLoad'))\n }\n setLoading(false)\n }, [assigneeId])\n\n useEffect(() => {\n loadData()\n }, [loadData])\n\n // --- Weekly hours handlers ---\n\n function markDirty() { setWeekDirty(true) }\n\n function toggleDay(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => ({\n ...prev,\n [dayOfWeek]: {\n ...prev[dayOfWeek],\n enabled: !prev[dayOfWeek]?.enabled,\n periods: prev[dayOfWeek]?.enabled ? [] : [{ startsAt: '09:00', endsAt: '18:00' }],\n },\n }))\n }\n\n function updatePeriod(dayOfWeek: number, idx: number, field: 'startsAt' | 'endsAt', value: string) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], [field]: value }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function addPeriod(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const last = day.periods[day.periods.length - 1]\n day.periods = [...day.periods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }]\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function removePeriod(dayOfWeek: number, idx: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n day.periods = day.periods.filter((_, i) => i !== idx)\n if (day.periods.length === 0) day.enabled = false\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function updatePeriodSettings(dayOfWeek: number, idx: number, settings: BlockSettings) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], settings }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function updateBufferMinutes(dayOfWeek: number, idx: number, value: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n const existing = periods[idx].settings ?? {}\n periods[idx] = { ...periods[idx], settings: { ...existing, bufferMinutes: value || undefined } }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function copyToAll(sourceDayOfWeek: number) {\n markDirty()\n const source = week[sourceDayOfWeek]\n if (!source) return\n setWeek((prev) => {\n const next = { ...prev }\n for (let i = 0; i < 7; i++) {\n if (i === sourceDayOfWeek) continue\n next[i] = {\n enabled: source.enabled,\n periods: source.periods.map((p) => ({ startsAt: p.startsAt, endsAt: p.endsAt, settings: p.settings ? { ...p.settings } : undefined })),\n }\n }\n return next\n })\n }\n\n async function handleSaveWeekly() {\n setSaving(true)\n try {\n await replaceWeeklySchedules(assigneeId, week)\n toast.success(t('schedule.editor.saved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSave'), { description: err?.message })\n }\n setSaving(false)\n }\n\n // --- Exception handlers ---\n\n async function handleAddException() {\n if (!newExStartDate) {\n toast.error(t('schedule.editor.selectStartDate'))\n return\n }\n const endDate = newExEndDate || newExStartDate\n if (endDate < newExStartDate) {\n toast.error(t('schedule.editor.endDateAfterStart'))\n return\n }\n setSavingException(true)\n try {\n await saveException({\n assigneeId,\n startDate: newExStartDate,\n endDate,\n type: newExType,\n periods: newExType === 'unavailable' ? [] : newExPeriods,\n notes: newExNotes || undefined,\n })\n toast.success(t('schedule.editor.exceptionAdded'))\n setShowAddException(false)\n setNewExStartDate('')\n setNewExEndDate('')\n setNewExType('unavailable')\n setNewExPeriods([{ startsAt: '09:00', endsAt: '17:00' }])\n setNewExNotes('')\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSaveException'), { description: err?.message })\n }\n setSavingException(false)\n }\n\n async function handleDeleteException(startDate: string, endDate: string) {\n try {\n await deleteException(assigneeId, startDate, endDate)\n toast.success(t('schedule.editor.exceptionRemoved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToDelete'), { description: err?.message })\n }\n }\n\n // --- Render ---\n\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-36\" /><Skeleton className=\"h-3 w-48\" /></div>\n </div>\n <Skeleton className=\"h-8 w-20 rounded-md\" />\n </div>\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {Array.from({ length: 7 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <Skeleton className=\"h-5 w-5 rounded-full\" />\n <Skeleton className=\"h-4 w-8\" />\n {i < 5 ? (\n <>\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n </>\n ) : (\n <Skeleton className=\"h-4 w-20\" />\n )}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-32\" /><Skeleton className=\"h-3 w-44\" /></div>\n </div>\n <Skeleton className=\"h-8 w-32 rounded-md\" />\n </div>\n <Card><CardContent className=\"flex items-center justify-center py-8\"><Skeleton className=\"h-3 w-48\" /></CardContent></Card>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* ---- Weekly Working Hours ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10\">\n <Clock className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.weeklyTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.weeklyDescription')}</p>\n </div>\n </div>\n {weekDirty && (\n <Button size=\"sm\" onClick={handleSaveWeekly} disabled={saving}>\n <Save className=\"h-4 w-4 mr-1.5\" />\n {saving ? t('common.saving') : t('common.save')}\n </Button>\n )}\n </div>\n\n {/* Day rows */}\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {WEEK_ORDER.map((dayOfWeek) => {\n const day = week[dayOfWeek] ?? { enabled: false, periods: [] }\n return (\n <div\n key={dayOfWeek}\n className={`flex items-start gap-4 px-4 py-3 transition-colors ${day.enabled ? '' : 'bg-muted/20'}`}\n >\n {/* Day toggle checkbox + label */}\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex items-center gap-2.5 w-20 shrink-0 pt-1.5\"\n >\n <span className={`flex h-5 w-5 shrink-0 items-center justify-center rounded-full transition-all ${\n day.enabled\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'border-2 border-muted-foreground/25 hover:border-muted-foreground/40'\n }`}>\n {day.enabled && <Check className=\"h-3 w-3\" strokeWidth={3} />}\n </span>\n <span className={`text-sm font-medium ${day.enabled ? '' : 'text-muted-foreground/40'}`}>\n {t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)}\n </span>\n </button>\n\n {/* Content */}\n {day.enabled ? (\n <div className=\"flex-1 space-y-2\">\n {day.periods.map((period, idx) => (\n <PeriodRow\n key={idx}\n period={period}\n dayOfWeek={dayOfWeek}\n blockConfig={blockConfig}\n settingsOpen={settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx}\n onUpdateTime={(field, v) => updatePeriod(dayOfWeek, idx, field, v)}\n onUpdateBuffer={(v) => updateBufferMinutes(dayOfWeek, idx, v)}\n onUpdateSettings={(s) => updatePeriodSettings(dayOfWeek, idx, s)}\n onRemove={() => removePeriod(dayOfWeek, idx)}\n onAddBlock={() => addPeriod(dayOfWeek)}\n onCopyToAll={() => copyToAll(dayOfWeek)}\n onToggleSettings={() => setSettingsPopover(\n settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx ? null : { dayOfWeek, idx }\n )}\n onCloseSettings={() => setSettingsPopover(null)}\n />\n ))}\n </div>\n ) : (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-2 pt-1.5\">\n <span className=\"text-sm text-muted-foreground/40\">{t('schedule.editor.unavailable')}</span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex h-6 w-6 items-center justify-center rounded-full border border-muted-foreground/25 text-muted-foreground/40 hover:border-foreground/40 hover:text-foreground hover:bg-muted transition-colors\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.addHoursFor', { day: t(`schedule.days.${DAY_KEYS[dayOfWeek]}`) })}</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n )}\n </div>\n )\n })}\n </CardContent>\n </Card>\n </div>\n\n {/* ---- Date Exceptions ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-orange-500/10\">\n <CalendarOff className=\"h-4 w-4 text-orange-600\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.exceptionsTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.exceptionsDescription')}</p>\n </div>\n </div>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setShowAddException(true)}\n >\n <CalendarPlus className=\"h-4 w-4 mr-1.5\" />\n {t('schedule.editor.addException')}\n </Button>\n </div>\n\n {/* Add exception modal */}\n <Modal open={showAddException} onOpenChange={setShowAddException}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle>{t('schedule.editor.addException')}</ModalTitle>\n <ModalDescription>{t('schedule.editor.exceptionsDescription')}</ModalDescription>\n </ModalHeader>\n\n <ModalBody className=\"space-y-5\">\n {/* Date range */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.startDate')}</label>\n <DatePicker\n value={newExStartDate}\n onChange={(v) => {\n setNewExStartDate(v)\n if (!newExEndDate || v > newExEndDate) setNewExEndDate(v)\n }}\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.endDate')}</label>\n <DatePicker\n value={newExEndDate || newExStartDate}\n onChange={setNewExEndDate}\n />\n </div>\n </div>\n\n {/* Type — segmented tabs */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.type')}</label>\n <Tabs value={newExType} onValueChange={(v) => setNewExType(v as 'unavailable' | 'available')}>\n <TabsList className=\"h-9 w-full\">\n <TabsTrigger value=\"unavailable\" className=\"text-xs gap-1.5 flex-1\">\n <CalendarOff className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.unavailable')}\n </TabsTrigger>\n <TabsTrigger value=\"available\" className=\"text-xs gap-1.5 flex-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.customHours')}\n </TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {/* Custom hours — only when type=available */}\n {newExType === 'available' && (\n <div className=\"space-y-3\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('schedule.editor.workingHours')}</label>\n {newExPeriods.map((period, idx) => (\n <div key={idx} className=\"flex items-center gap-3\">\n <TimePicker\n value={period.startsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], startsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n className=\"flex-1\"\n />\n <span className=\"text-xs text-muted-foreground shrink-0\">{t('schedule.editor.to')}</span>\n <TimePicker\n value={period.endsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], endsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n min={period.startsAt}\n className=\"flex-1\"\n />\n {newExPeriods.length > 1 && (\n <button\n type=\"button\"\n onClick={() => setNewExPeriods(newExPeriods.filter((_, i) => i !== idx))}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n ))}\n <button\n type=\"button\"\n onClick={() => {\n const last = newExPeriods[newExPeriods.length - 1]\n setNewExPeriods([...newExPeriods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }])\n }}\n className=\"flex items-center gap-1 text-xs text-primary hover:underline\"\n >\n <Plus className=\"h-3 w-3\" /> {t('schedule.editor.addTimeBlock')}\n </button>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.notes')}</label>\n <input\n type=\"text\"\n value={newExNotes}\n onChange={(e) => setNewExNotes(e.target.value)}\n placeholder={t('schedule.editor.notesPlaceholder')}\n className=\"block w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm placeholder:text-muted-foreground/40 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1\"\n />\n </div>\n </ModalBody>\n\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => setShowAddException(false)}>\n {t('common.cancel')}\n </Button>\n <Button onClick={handleAddException} disabled={savingException}>\n <Save className=\"h-3.5 w-3.5 mr-1.5\" />\n {savingException ? t('common.saving') : t('schedule.editor.saveException')}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n\n {/* Exception list */}\n {exceptions.length > 0 ? (\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {exceptions.map((ex) => {\n const isRange = ex.startDate !== ex.endDate\n const dateLabel = isRange\n ? `${formatDate(ex.startDate)} — ${formatDate(ex.endDate)}`\n : formatDate(ex.startDate)\n return (\n <div key={ex.startDate + ex.endDate} className=\"flex items-center justify-between px-4 py-3 group\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {/* Type indicator dot */}\n <span className={`h-2.5 w-2.5 shrink-0 rounded-full ${\n ex.type === 'unavailable' ? 'bg-destructive' : 'bg-success'\n }`} />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"text-sm font-medium\">{dateLabel}</span>\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {ex.type === 'unavailable' ? t('schedule.editor.unavailable') : t('schedule.editor.customHours')}\n </Badge>\n {ex.type === 'available' && ex.periods.length > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {ex.periods.map((p) => `${p.startsAt} — ${p.endsAt}`).join(', ')}\n </span>\n )}\n </div>\n {ex.notes && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{ex.notes}</p>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => handleDeleteException(ex.startDate, ex.endDate)}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0 ml-2\"\n title={t('schedule.editor.removeException')}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n })}\n </CardContent>\n </Card>\n ) : (\n !showAddException && (\n <Card>\n <CardContent className=\"flex items-center justify-center py-8 text-sm text-muted-foreground\">\n {t('schedule.editor.noExceptions')}\n </CardContent>\n </Card>\n )\n )}\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Clock, FileText, CalendarDays } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { ScheduleEditor } from './ScheduleEditor'\nimport { useTranslation } from '@fayz-ai/core'\nimport { usePluginRuntimeOptional as usePluginsOptional } from '@fayz-ai/core'\nimport { getWidgetsForZone } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\n// AccessTab is imported from ./AccessTab\n\nexport function ActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.activity.title')}\n description={t('crud.archetype.activity.description')}\n />\n )\n}\n\nexport function DocumentsTab({ item }: { item?: any }) {\n const t = useTranslation()\n const runtime = usePluginsOptional()\n\n // Check if a plugin provides a documents widget (e.g., custom_forms)\n const widgets = runtime ? getWidgetsForZone(runtime, 'person.detail.documents') : []\n\n if (widgets.length > 0 && item) {\n const w = widgets[0]\n const Widget = w.component as React.ComponentType<any>\n return (\n <Widget\n item={item}\n config={w.config}\n runtime={runtime?.context}\n plugin={w.plugin}\n widget={w}\n />\n )\n }\n\n return (\n <ComingSoon\n icon={FileText}\n title={t('crud.archetype.documents.title')}\n description={t('crud.archetype.documents.description')}\n />\n )\n}\n\nexport function FinancialTab({ item }: { item?: any }) {\n const runtime = usePluginsOptional()\n const widgets = runtime ? getWidgetsForZone(runtime, 'person.detail.financial') : []\n if (widgets.length > 0 && item) {\n const w = widgets[0]\n const Widget = w.component as React.ComponentType<any>\n return (\n <Widget\n item={item}\n config={w.config}\n runtime={runtime?.context}\n plugin={w.plugin}\n widget={w}\n />\n )\n }\n return null\n}\n\nexport function ScheduleTab({ item }: { item: any }) {\n const t = useTranslation()\n if (!item?.id) {\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.schedule.title')}\n description={t('crud.archetype.schedule.description')}\n />\n )\n }\n return <ScheduleEditor assigneeId={item.id} />\n}\n\nexport const PERSON_DETAIL_TABS = [\n { id: 'schedule', label: 'Schedule', icon: 'CalendarDays', component: ScheduleTab, visibleFor: ['staff'] },\n { id: 'documents', label: 'Documents', icon: 'FileText', component: DocumentsTab },\n // Per-person financial statement — only shown when the financial plugin contributes\n // its widget (see requiresWidgetZone). Clients = paid invoices; staff = commissions.\n { id: 'financial', label: 'Statement', icon: 'DollarSign', component: FinancialTab, requiresWidgetZone: 'person.detail.financial' },\n { id: 'activity', label: 'Activity', icon: 'Clock', component: ActivityTab },\n]\n","import React from 'react'\nimport { BarChart3, Truck, Tag, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function InventoryTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={BarChart3}\n title={t('crud.archetype.inventory.title')}\n description={t('crud.archetype.inventory.description')}\n />\n )\n}\n\nexport function SuppliersTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Truck}\n title={t('crud.archetype.suppliers.title')}\n description={t('crud.archetype.suppliers.description')}\n />\n )\n}\n\nexport function PricingTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Tag}\n title={t('crud.archetype.pricing.title')}\n description={t('crud.archetype.pricing.description')}\n />\n )\n}\n\nexport function ProductActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.productActivity.title')}\n description={t('crud.archetype.productActivity.description')}\n />\n )\n}\n\nexport const PRODUCT_DETAIL_TABS = [\n { id: 'inventory', label: 'Inventory', component: InventoryTab },\n { id: 'suppliers', label: 'Suppliers', component: SuppliersTab },\n { id: 'pricing', label: 'Pricing', component: PricingTab },\n { id: 'activity', label: 'Activity', component: ProductActivityTab },\n]\n","import React from 'react'\nimport { CalendarDays, Tag, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function AvailabilityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.availability.title')}\n description={t('crud.archetype.availability.description')}\n />\n )\n}\n\nexport function ServicePricingTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Tag}\n title={t('crud.archetype.servicePricing.title')}\n description={t('crud.archetype.servicePricing.description')}\n />\n )\n}\n\nexport function ServiceActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.serviceActivity.title')}\n description={t('crud.archetype.serviceActivity.description')}\n />\n )\n}\n\nexport const SERVICE_DETAIL_TABS = [\n { id: 'availability', label: 'Availability', component: AvailabilityTab },\n { id: 'pricing', label: 'Pricing', component: ServicePricingTab },\n { id: 'activity', label: 'Activity', component: ServiceActivityTab },\n]\n","import React from 'react'\nimport { Users, CalendarDays, BarChart3, Clock } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function MembersTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Users}\n title={t('crud.archetype.members.title')}\n description={t('crud.archetype.members.description')}\n />\n )\n}\n\nexport function LocationScheduleTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={CalendarDays}\n title={t('crud.archetype.locationSchedule.title')}\n description={t('crud.archetype.locationSchedule.description')}\n />\n )\n}\n\nexport function LocationStatsTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={BarChart3}\n title={t('crud.archetype.locationStats.title')}\n description={t('crud.archetype.locationStats.description')}\n />\n )\n}\n\nexport function LocationActivityTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.locationActivity.title')}\n description={t('crud.archetype.locationActivity.description')}\n />\n )\n}\n\nexport const LOCATION_DETAIL_TABS = [\n { id: 'members', label: 'Team', component: MembersTab },\n { id: 'schedule', label: 'Hours', component: LocationScheduleTab },\n { id: 'stats', label: 'Statistics', component: LocationStatsTab },\n { id: 'activity', label: 'Activity', component: LocationActivityTab },\n]\n","import React from 'react'\nimport { ExternalLink } from 'lucide-react'\n\ninterface EntityLinkProps {\n /** The entity ID to link to */\n entityId: string\n /** The base path of the CRUD page (e.g. '/registry/tutors') */\n basePath: string\n /** Display label */\n children: React.ReactNode\n /** Optional className */\n className?: string\n}\n\n/**\n * Reusable link to a CRUD entity detail page.\n * Uses hash-based routing: navigates to `#basePath/entityId`\n */\nexport function EntityLink({ entityId, basePath, children, className }: EntityLinkProps) {\n const href = `#${basePath}/${entityId}`\n\n return (\n <a\n href={href}\n className={`inline-flex items-center gap-1 text-primary hover:underline transition-colors ${className ?? ''}`}\n >\n {children}\n <ExternalLink className=\"h-3 w-3 opacity-50\" />\n </a>\n )\n}\n\n/**\n * Registry of known entity paths by person kind.\n * Projects can extend this via the `registerEntityPath` function.\n */\nconst ENTITY_PATHS: Record<string, string> = {\n customer: '/registry/tutors',\n professional: '/registry/veterinarians',\n organization: '/registry/clinics',\n supplier: '/registry/suppliers',\n staff: '/registry/staff',\n}\n\n/** Register a custom path for a person kind */\nexport function registerEntityPath(kind: string, basePath: string) {\n ENTITY_PATHS[kind] = basePath\n}\n\n/** Get the CRUD base path for a person kind */\nexport function getPersonPath(kind: string): string | null {\n return ENTITY_PATHS[kind] ?? null\n}\n\n/**\n * Smart link that auto-resolves the path based on person kind.\n * Falls back to non-linked text if no path is registered.\n */\nexport function PersonLink({ personId, kind, children, className }: {\n personId: string\n kind: string\n children: React.ReactNode\n className?: string\n}) {\n const basePath = getPersonPath(kind)\n if (!basePath) {\n return <span className={className}>{children}</span>\n }\n return (\n <EntityLink entityId={personId} basePath={basePath} className={className}>\n {children}\n </EntityLink>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { User, Clock, FileText } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { PersonLink } from './EntityLink'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\n\nfunction ComingSoon({ icon: Icon, title, description }: { icon: React.ElementType; title: string; description: string }) {\n const t = useTranslation()\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{title}</p>\n <p className=\"text-xs text-muted-foreground mt-1 max-w-xs\">{description}</p>\n <Badge variant=\"secondary\" className=\"mt-3 text-[10px]\">{t('crud.archetype.comingSoon')}</Badge>\n </CardContent>\n </Card>\n )\n}\n\nexport function OwnerTab({ item }: { item: any }) {\n const t = useTranslation()\n const [person, setPerson] = useState<any>(null)\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n const tutorId = item?.tutorId\n if (!tutorId) { setLoading(false); return }\n\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) { setLoading(false); return }\n\n supabase.schema('saas_core')\n .from('persons')\n .select('*')\n .eq('id', tutorId)\n .single()\n .then(({ data }: any) => {\n setPerson(data)\n setLoading(false)\n }, () => setLoading(false))\n }, [item?.tutorId])\n\n if (loading) {\n return (\n <Card>\n <CardContent className=\"py-8 flex justify-center\">\n <div className=\"h-5 w-5 animate-spin rounded-full border-2 border-muted border-t-primary\" />\n </CardContent>\n </Card>\n )\n }\n\n if (!person) {\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-12 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-3\">\n <User className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <p className=\"text-sm font-medium\">{t('crud.archetype.owner.noOwner')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('crud.archetype.owner.assignHint')}</p>\n </CardContent>\n </Card>\n )\n }\n\n const fields = [\n { label: t('crud.archetype.owner.name'), value: person.name },\n { label: t('crud.archetype.owner.phone'), value: person.phone, href: person.phone ? `tel:${person.phone}` : undefined },\n { label: t('crud.archetype.owner.email'), value: person.email, href: person.email ? `mailto:${person.email}` : undefined },\n { label: t('crud.archetype.owner.document'), value: person.document_number },\n { label: t('crud.archetype.owner.address'), value: [person.address, person.city, person.state].filter(Boolean).join(', ') },\n ].filter((f) => f.value)\n\n return (\n <Card>\n <CardContent className=\"pt-5\">\n <div className=\"flex items-start gap-4 mb-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <User className=\"h-5 w-5\" />\n </div>\n <div className=\"flex-1\">\n <PersonLink personId={person.id} kind={person.kind} className=\"text-base font-semibold\">\n {person.name}\n </PersonLink>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <Badge variant=\"secondary\" className=\"text-[10px] capitalize\">{person.kind}</Badge>\n <Badge variant={person.is_active ? 'default' : 'secondary'} className=\"text-[10px]\">\n {person.is_active ? t('crud.archetype.owner.active') : t('crud.archetype.owner.inactive')}\n </Badge>\n </div>\n </div>\n </div>\n <dl className=\"divide-y\">\n {fields.map((f) => (\n <div key={f.label} className=\"grid grid-cols-3 gap-4 py-2.5\">\n <dt className=\"text-sm text-muted-foreground\">{f.label}</dt>\n <dd className=\"col-span-2 text-sm\">\n {f.href ? (\n <a href={f.href} className=\"text-primary hover:underline\">{f.value}</a>\n ) : f.value}\n </dd>\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n )\n}\n\nexport function SubjectHistoryTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={Clock}\n title={t('crud.archetype.history.title')}\n description={t('crud.archetype.history.description')}\n />\n )\n}\n\nexport function SubjectDocumentsTab() {\n const t = useTranslation()\n return (\n <ComingSoon\n icon={FileText}\n title={t('crud.archetype.subjectDocuments.title')}\n description={t('crud.archetype.subjectDocuments.description')}\n />\n )\n}\n\nexport const SUBJECT_DETAIL_TABS = [\n { id: 'owner', label: 'Owner', component: OwnerTab },\n { id: 'history', label: 'History', component: SubjectHistoryTab },\n { id: 'documents', label: 'Documents', component: SubjectDocumentsTab },\n]\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Edit, Trash2, Eye, Shield, CalendarDays, FileText, Clock, Package, Users, DollarSign, MapPin, BarChart3, Briefcase, ShoppingBag, FolderOpen, MessageSquare, Route } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Breadcrumb } from '@fayz-ai/ui'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@fayz-ai/ui'\nimport { Separator } from '@fayz-ai/ui'\nimport { WidgetSlot } from '../plugins/WidgetSlot'\nimport { formatCurrency } from '@fayz-ai/core'\nimport { PERSON_DETAIL_TABS } from './archetypes/PersonDetailTabs'\nimport { PRODUCT_DETAIL_TABS } from './archetypes/ProductDetailTabs'\nimport { SERVICE_DETAIL_TABS } from './archetypes/ServiceDetailTabs'\nimport { LOCATION_DETAIL_TABS } from './archetypes/LocationDetailTabs'\nimport { SUBJECT_DETAIL_TABS } from './archetypes/SubjectDetailTabs'\nimport { useTranslation } from '@fayz-ai/core'\nimport { usePluginRuntimeOptional, getWidgetsForZone } from '@fayz-ai/core'\nimport type { EntityDef, FieldDef, FieldGroup, FormLayout, DetailTab } from '@fayz-ai/core'\n\ninterface CrudDetailPageProps {\n entityDef: EntityDef\n item: Record<string, any>\n namePlural: string\n basePath: string\n initialTab?: string\n onBack: () => void\n onEdit?: () => void\n onDelete?: () => void\n feature?: string\n /** Embedded mode — compact hero, no breadcrumb, no hash nav. For use inside modals/panels. */\n embedded?: boolean\n}\n\nfunction formatValue(field: FieldDef, value: any, t?: (key: string) => string): React.ReactNode {\n if (value == null || value === '') return <span className=\"text-muted-foreground/50\">—</span>\n\n if (field.renderCell) return field.renderCell(value, {})\n\n switch (field.type) {\n case 'boolean':\n return (\n <Badge variant={value ? 'default' : 'secondary'}>\n {value ? (t?.('common.yes') ?? 'Yes') : (t?.('common.no') ?? 'No')}\n </Badge>\n )\n case 'currency': {\n const num = typeof value === 'number' ? value : parseFloat(value)\n return isNaN(num) ? value : formatCurrency(num, field.currency)\n }\n case 'color':\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className=\"h-5 w-5 rounded-full border shrink-0\" style={{ backgroundColor: String(value) }} />\n <span className=\"text-xs font-mono text-muted-foreground\">{String(value)}</span>\n </span>\n )\n case 'date':\n try { return new Date(value).toLocaleDateString() } catch { return value }\n case 'datetime':\n try { return new Date(value).toLocaleString() } catch { return value }\n case 'select': {\n const options = (field.options ?? []).map((o) => typeof o === 'string' ? { label: o, value: o } : o)\n const match = options.find((o) => o.value === value)\n return <Badge variant=\"secondary\">{match?.label ?? value}</Badge>\n }\n case 'image':\n return value ? (\n <img src={value} alt=\"\" className=\"h-16 w-16 rounded-lg object-cover\" />\n ) : null\n case 'email':\n return <a href={`mailto:${value}`} className=\"text-primary hover:underline\">{value}</a>\n case 'phone':\n return <a href={`tel:${value}`} className=\"text-primary hover:underline\">{value}</a>\n case 'url':\n return <a href={value} target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-primary hover:underline\">{value}</a>\n case 'textarea':\n return <p className=\"whitespace-pre-wrap\">{value}</p>\n default:\n return String(value)\n }\n}\n\nfunction FieldRow({ field, value, t, compact }: { field: FieldDef; value: any; t?: (key: string) => string; compact?: boolean }) {\n return (\n <div className={`grid grid-cols-3 gap-4 ${compact ? 'py-1.5' : 'py-3'}`}>\n <dt className={`font-medium text-muted-foreground ${compact ? 'text-xs' : 'text-sm'}`}>{field.label}</dt>\n <dd className={`col-span-2 text-foreground ${compact ? 'text-xs' : 'text-sm'}`}>{formatValue(field, value, t)}</dd>\n </div>\n )\n}\n\nfunction FieldGroupSection({\n group,\n fields,\n item,\n compact,\n}: {\n group: FieldGroup\n fields: FieldDef[]\n item: Record<string, any>\n compact?: boolean\n}) {\n const tFn = useTranslation()\n const cols = group.columns ?? 2\n\n return (\n <div>\n <h3 className={`font-semibold text-foreground ${compact ? 'text-xs mb-0.5' : 'text-sm mb-1'}`}>{group.label}</h3>\n {group.description && (\n <p className={`text-muted-foreground ${compact ? 'text-[10px] mb-1.5' : 'text-xs mb-3'}`}>{group.description}</p>\n )}\n <Card>\n <CardContent className=\"p-0\">\n <dl className={`grid divide-y ${cols >= 2 ? 'md:grid-cols-2 md:divide-y-0' : ''}`}>\n {fields.map((field) => (\n <div key={field.key} className={compact ? 'px-3' : 'px-5'}>\n <FieldRow field={field} value={item[field.key]} t={tFn} compact={compact} />\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n </div>\n )\n}\n\nfunction OverviewTab({\n entityDef,\n item,\n compact,\n}: {\n entityDef: EntityDef\n item: Record<string, any>\n compact?: boolean\n}) {\n const tFn = useTranslation()\n const detailFields = entityDef.fields.filter(\n (f) => f.showInDetail !== false && f.key !== 'id' && f.key !== entityDef.displayField && f.key !== entityDef.imageField\n )\n\n // Group fields\n const groups = entityDef.fieldGroups ?? []\n const ungroupedFields = detailFields.filter((f) => !f.group)\n\n // Build group → fields map\n const groupFieldMap = new Map<string, FieldDef[]>()\n for (const field of detailFields) {\n if (field.group) {\n const existing = groupFieldMap.get(field.group) ?? []\n existing.push(field)\n groupFieldMap.set(field.group, existing)\n }\n }\n\n return (\n <div className={compact ? 'space-y-3' : 'space-y-6'}>\n {/* Ungrouped fields */}\n {ungroupedFields.length > 0 && (\n <Card>\n <CardContent className=\"p-0\">\n <dl className=\"divide-y\">\n {ungroupedFields.map((field) => (\n <div key={field.key} className={compact ? 'px-3' : 'px-5'}>\n <FieldRow field={field} value={item[field.key]} t={tFn} compact={compact} />\n </div>\n ))}\n </dl>\n </CardContent>\n </Card>\n )}\n\n {/* Grouped fields */}\n {groups.map((group) => {\n const fields = groupFieldMap.get(group.id)\n if (!fields || fields.length === 0) return null\n return (\n <FieldGroupSection key={group.id} group={group} fields={fields} item={item} compact={compact} />\n )\n })}\n\n {/* Catch any grouped fields without a matching FieldGroup definition */}\n {Array.from(groupFieldMap.entries()).map(([groupId, fields]) => {\n if (groups.some((g) => g.id === groupId)) return null\n return (\n <FieldGroupSection\n key={groupId}\n group={{ id: groupId, label: groupId.charAt(0).toUpperCase() + groupId.slice(1) }}\n fields={fields}\n item={item}\n compact={compact}\n />\n )\n })}\n </div>\n )\n}\n\nfunction getArchetypeTabs(layout?: FormLayout, archetypeKind?: string): DetailTab[] {\n let tabs: DetailTab[]\n switch (layout) {\n case 'person':\n tabs = PERSON_DETAIL_TABS\n break\n case 'product':\n tabs = PRODUCT_DETAIL_TABS\n break\n case 'service':\n tabs = SERVICE_DETAIL_TABS\n break\n case 'location':\n tabs = LOCATION_DETAIL_TABS\n break\n case 'subject':\n tabs = SUBJECT_DETAIL_TABS\n break\n default:\n tabs = []\n }\n if (archetypeKind) {\n tabs = tabs.filter((tab) => !tab.visibleFor || tab.visibleFor.includes(archetypeKind))\n }\n return tabs\n}\n\nfunction mergeDetailTabs(archetypeTabs: DetailTab[], entityTabs: DetailTab[]): DetailTab[] {\n const merged = new Map<string, DetailTab>()\n\n for (const tab of entityTabs) merged.set(tab.id, tab)\n for (const tab of archetypeTabs) {\n if (!merged.has(tab.id)) merged.set(tab.id, tab)\n }\n\n return Array.from(merged.values())\n}\n\nfunction normalizeTabId(value?: string): string | undefined {\n return value?.split('?')[0]\n}\n\nfunction resolveActiveTab(initialTab: string | undefined, tabs: DetailTab[]): string {\n const normalized = normalizeTabId(initialTab)\n if (!normalized) return 'overview'\n if (normalized === 'overview') return 'overview'\n\n const direct = tabs.find((tab) => tab.id === normalized)\n if (direct) return direct.id\n\n const alias = tabs.find((tab) => (tab as DetailTab & { aliases?: string[] }).aliases?.includes(normalized))\n return alias?.id ?? 'overview'\n}\n\nconst TAB_ICONS: Record<string, LucideIcon> = {\n Shield, CalendarDays, FileText, Clock, Package, Users, DollarSign, MapPin, BarChart3, Briefcase, ShoppingBag, FolderOpen, MessageSquare, Route,\n}\n\nexport function CrudDetailPage({\n entityDef,\n item,\n namePlural,\n basePath,\n initialTab,\n onBack,\n onEdit,\n onDelete,\n feature,\n embedded,\n}: CrudDetailPageProps) {\n const t = useTranslation()\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const displayValue = item[displayField] ?? 'Untitled'\n const subtitleValue = entityDef.subtitleField ? item[entityDef.subtitleField] : null\n const imageValue = entityDef.imageField ? item[entityDef.imageField] : null\n const initial = typeof displayValue === 'string' ? displayValue.charAt(0).toUpperCase() : '?'\n\n // Merge archetype tabs + custom entity tabs. Entity-specific tabs win by id\n // so vertical apps can replace generic person/product tabs without duplicates.\n const runtime = usePluginRuntimeOptional()\n const archetypeTabs = getArchetypeTabs(entityDef.layout, entityDef.data?.archetypeKind)\n const customTabs = mergeDetailTabs(archetypeTabs, entityDef.detailTabs ?? [])\n // Drop tabs that require a plugin-contributed widget when none is registered\n // (e.g. the financial statement tab only appears when the financial plugin is active).\n .filter((tab) => !tab.requiresWidgetZone || (runtime ? getWidgetsForZone(runtime, tab.requiresWidgetZone).length > 0 : false))\n .filter((tab) => !(tab as DetailTab & { hidden?: boolean }).hidden)\n const entityId = entityDef.name.toLowerCase().replace(/\\s+/g, '-')\n const widgetZone = `${entityId}.detail.tabs`\n\n // Resolve initial tab — allow compatibility aliases, fallback to \"overview\".\n const activeTab = resolveActiveTab(initialTab, customTabs)\n const [selectedTab, setSelectedTab] = useState(activeTab)\n\n useEffect(() => {\n setSelectedTab(activeTab)\n }, [activeTab])\n\n const handleTabChange = useCallback((value: string) => {\n setSelectedTab(value)\n if (embedded) return\n const detailPath = `${basePath}/${item.id}`\n const newHash = value === 'overview' ? detailPath : `${detailPath}/${value}`\n window.history.replaceState(null, '', `#${newHash}`)\n }, [basePath, item.id, embedded])\n\n return (\n <div className={embedded ? 'space-y-4' : 'space-y-6'}>\n {/* Breadcrumb — hidden in embedded mode */}\n {!embedded && <Breadcrumb parent={namePlural} current={displayValue} onBack={onBack} />}\n\n {/* Hero */}\n <div className={`flex items-start ${embedded ? 'gap-3' : 'gap-5'}`}>\n {/* Avatar / Image */}\n {imageValue ? (\n <img\n src={imageValue}\n alt={displayValue}\n className={`shrink-0 object-cover shadow-sm ${embedded ? 'h-10 w-10 rounded-xl' : 'h-20 w-20 rounded-2xl'}`}\n />\n ) : (\n <div className={`flex shrink-0 items-center justify-center bg-primary/10 text-primary font-bold shadow-sm ${embedded ? 'h-10 w-10 rounded-xl text-sm' : 'h-20 w-20 rounded-2xl text-2xl'}`}>\n {initial}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h1 className={`font-bold text-foreground truncate ${embedded ? 'text-base' : 'text-2xl'}`}>{displayValue}</h1>\n {item.status && (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n {typeof item.status === 'string' ? item.status.charAt(0).toUpperCase() + item.status.slice(1) : item.status}\n </Badge>\n )}\n {item.is_active !== undefined && (\n <Badge variant={item.is_active ? 'default' : 'secondary'} className=\"shrink-0\">\n {item.is_active ? t('common.active') : t('common.inactive')}\n </Badge>\n )}\n </div>\n {subtitleValue && (\n <p className={`text-muted-foreground mt-0.5 ${embedded ? 'text-xs' : ''}`}>{subtitleValue}</p>\n )}\n </div>\n\n {(onEdit || onDelete) && (\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {onEdit && (\n <Button variant=\"outline\" size={embedded ? 'xs' as any : 'sm'} onClick={onEdit} className={embedded ? 'h-7 px-2 text-xs gap-1' : ''}>\n <Edit className={embedded ? 'h-3 w-3' : 'h-4 w-4 mr-1.5'} />\n {t('common.edit')}\n </Button>\n )}\n {onDelete && (\n <Button variant=\"outline\" size={embedded ? 'xs' as any : 'sm'} className={`text-destructive hover:text-destructive ${embedded ? 'h-7 w-7 p-0' : ''}`} onClick={onDelete}>\n <Trash2 className={embedded ? 'h-3 w-3' : 'h-4 w-4'} />\n </Button>\n )}\n </div>\n )}\n </div>\n\n {!embedded && <Separator />}\n\n {/* Tabs */}\n <Tabs value={selectedTab} onValueChange={handleTabChange}>\n <TabsList className={`max-w-full justify-start overflow-x-auto scrollbar-none${embedded ? ' h-8' : ''}`}>\n <TabsTrigger value=\"overview\" className={`gap-1.5 ${embedded ? 'text-xs px-2 py-1' : ''}`}>\n <Eye className={embedded ? 'h-3 w-3' : 'h-3.5 w-3.5'} />\n {t('common.overview')}\n </TabsTrigger>\n {customTabs.map((tab) => {\n const translated = t(`crud.tabs.${tab.id}`)\n const label = translated.startsWith('crud.tabs.') ? tab.label : translated\n const TabIcon = tab.icon ? (TAB_ICONS[tab.icon] ?? null) : null\n return (\n <TabsTrigger key={tab.id} value={tab.id} className={`gap-1.5 ${embedded ? 'text-xs px-2 py-1' : ''}`}>\n {TabIcon && <TabIcon className={embedded ? 'h-3 w-3' : 'h-3.5 w-3.5'} />}\n {label}\n </TabsTrigger>\n )\n })}\n </TabsList>\n\n <TabsContent value=\"overview\" className={embedded ? 'mt-2' : 'mt-4'}>\n <OverviewTab entityDef={entityDef} item={item} compact={embedded} />\n </TabsContent>\n\n {customTabs.map((tab) => (\n <TabsContent key={tab.id} value={tab.id} className=\"mt-4\">\n {tab.component ? (\n React.createElement(tab.component, { item, entityDef, ...(tab.props ?? {}) })\n ) : (\n <Card>\n <CardContent className=\"flex items-center justify-center py-12\">\n <p className=\"text-muted-foreground\">{t('common.noContent')}</p>\n </CardContent>\n </Card>\n )}\n </TabsContent>\n ))}\n </Tabs>\n\n {/* Widget zone for plugin tab injection */}\n <WidgetSlot zone={widgetZone} />\n </div>\n )\n}\n","import React from 'react'\nimport {\n Modal,\n ModalContent,\n ModalHeader,\n ModalTitle,\n ModalDescription,\n ModalFooter,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\ninterface DeleteConfirmDialogProps {\n open: boolean\n onClose: () => void\n onConfirm: () => void\n entityName: string\n displayValue?: string\n}\n\nexport function DeleteConfirmDialog({ open, onClose, onConfirm, entityName, displayValue }: DeleteConfirmDialogProps) {\n const t = useTranslation()\n return (\n <Modal open={open} onOpenChange={(isOpen) => { if (!isOpen) onClose() }}>\n <ModalContent>\n <ModalHeader>\n <ModalTitle>{t('crud.delete.title', { entity: entityName })}</ModalTitle>\n <ModalDescription>\n {displayValue\n ? t('crud.delete.confirmNamed', { name: displayValue })\n : t('crud.delete.confirmGeneric', { entity: entityName.toLowerCase() })}\n </ModalDescription>\n </ModalHeader>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>{t('common.cancel')}</Button>\n <Button variant=\"destructive\" onClick={onConfirm}>{t('common.delete')}</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React, { useState, useRef, useMemo, useCallback } from 'react'\nimport {\n Download, Upload, ArrowRight, ArrowLeft, Check, AlertCircle,\n Loader2, FileSpreadsheet, X, ChevronDown,\n} from 'lucide-react'\nimport {\n Modal, ModalContent, ModalHeader, ModalBody,\n ModalTitle,\n} from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { cn } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FieldDef, EntityDef } from '@fayz-ai/core'\n\ntype ImportStep = 'download' | 'upload' | 'mapping' | 'importing' | 'done'\n\ninterface ImportWizardProps {\n open: boolean\n onClose: () => void\n entityDef: EntityDef\n onImport: (\n rows: Record<string, any>[],\n onProgress: (processed: number, total: number) => void,\n ) => Promise<{ success: number; errors: ImportRowError[] }>\n}\n\nexport interface ImportRowError {\n row: number\n message: string\n}\n\ninterface ParsedCSV {\n headers: string[]\n rows: string[][]\n}\n\n// ---------------------------------------------------------------------------\n// CSV utilities\n// ---------------------------------------------------------------------------\n\nfunction getImportableFields(entityDef: EntityDef): FieldDef[] {\n return entityDef.fields.filter(\n (f) => f.showInForm !== false && f.key !== 'id' && f.type !== 'image',\n )\n}\n\nfunction generateSampleCSV(fields: FieldDef[]): string {\n const headers = fields.map((f) => f.label)\n const sampleRow = fields.map((f) => {\n switch (f.type) {\n case 'email': return 'example@email.com'\n case 'phone': return '+5511999999999'\n case 'number': return '0'\n case 'currency': return '0.00'\n case 'date': return '2025-01-01'\n case 'datetime': return '2025-01-01T09:00'\n case 'time': return '09:00'\n case 'boolean': return 'true'\n case 'select': {\n const opts = f.options ?? []\n const first = typeof opts[0] === 'string' ? opts[0] : opts[0]?.value\n return first ?? ''\n }\n default: return ''\n }\n })\n return [headers.join(','), sampleRow.join(',')].join('\\n')\n}\n\nfunction downloadCSV(content: string, filename: string) {\n const bom = '\\uFEFF'\n const blob = new Blob([bom + content], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n a.click()\n URL.revokeObjectURL(url)\n}\n\nfunction parseCSV(text: string): ParsedCSV {\n const lines = text.split(/\\r?\\n/).filter((l) => l.trim().length > 0)\n if (lines.length === 0) return { headers: [], rows: [] }\n\n const parse = (line: string): string[] => {\n const result: string[] = []\n let current = ''\n let inQuotes = false\n for (let i = 0; i < line.length; i++) {\n const ch = line[i]\n if (ch === '\"') {\n if (inQuotes && line[i + 1] === '\"') {\n current += '\"'\n i++\n } else {\n inQuotes = !inQuotes\n }\n } else if (ch === ',' && !inQuotes) {\n result.push(current.trim())\n current = ''\n } else {\n current += ch\n }\n }\n result.push(current.trim())\n return result\n }\n\n const headers = parse(lines[0])\n const rows = lines.slice(1).map(parse)\n return { headers, rows }\n}\n\nfunction coerceValue(value: string, field: FieldDef): any {\n const trimmed = value.trim()\n if (trimmed === '') return null\n switch (field.type) {\n case 'number':\n case 'currency': {\n const num = Number(trimmed.replace(',', '.'))\n return isNaN(num) ? null : num\n }\n case 'boolean':\n return ['true', '1', 'yes', 'sim', 'verdadeiro'].includes(trimmed.toLowerCase())\n default:\n return trimmed\n }\n}\n\n// ---------------------------------------------------------------------------\n// Step indicator\n// ---------------------------------------------------------------------------\n\nconst STEPS: ImportStep[] = ['download', 'upload', 'mapping', 'importing']\n\nfunction StepIndicator({ current }: { current: ImportStep }) {\n const t = useTranslation()\n const labels: Record<ImportStep, string> = {\n download: t('crud.import.step.download'),\n upload: t('crud.import.step.upload'),\n mapping: t('crud.import.step.mapping'),\n importing: t('crud.import.step.importing'),\n done: '',\n }\n const currentIdx = STEPS.indexOf(current === 'done' ? 'importing' : current)\n\n return (\n <div className=\"flex items-center gap-1.5\">\n {STEPS.map((step, i) => {\n const isDone = i < currentIdx || current === 'done'\n const isActive = step === current\n return (\n <React.Fragment key={step}>\n {i > 0 && <div className={cn('h-px w-6', isDone ? 'bg-primary' : 'bg-border')} />}\n <div className=\"flex items-center gap-1.5\">\n <div\n className={cn(\n 'flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium',\n isDone\n ? 'bg-primary text-primary-foreground'\n : isActive\n ? 'border-2 border-primary text-primary'\n : 'border-2 border-muted-foreground/30 text-muted-foreground',\n )}\n >\n {isDone ? <Check className=\"h-3 w-3\" /> : i + 1}\n </div>\n <span className={cn('text-xs hidden sm:inline', isActive ? 'text-foreground font-medium' : 'text-muted-foreground')}>\n {labels[step]}\n </span>\n </div>\n </React.Fragment>\n )\n })}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 1: Download sample\n// ---------------------------------------------------------------------------\n\nfunction DownloadStep({\n entityDef,\n fields,\n onNext,\n}: {\n entityDef: EntityDef\n fields: FieldDef[]\n onNext: () => void\n}) {\n const t = useTranslation()\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n\n const handleDownload = () => {\n const csv = generateSampleCSV(fields)\n downloadCSV(csv, `${namePlural.toLowerCase().replace(/\\s+/g, '-')}-template.csv`)\n }\n\n return (\n <div className=\"flex flex-col items-center text-center gap-6 py-4\">\n <div className=\"h-16 w-16 rounded-2xl bg-primary/10 flex items-center justify-center\">\n <FileSpreadsheet className=\"h-8 w-8 text-primary\" />\n </div>\n <div className=\"space-y-2 max-w-sm\">\n <h3 className=\"text-base font-semibold\">{t('crud.import.downloadTitle')}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('crud.import.downloadDescription', { entity: namePlural.toLowerCase() })}\n </p>\n </div>\n <div className=\"flex flex-col gap-3 w-full max-w-xs\">\n <Button variant=\"outline\" onClick={handleDownload} className=\"w-full\">\n <Download className=\"h-4 w-4 mr-2\" />\n {t('crud.import.downloadTemplate')}\n </Button>\n <p className=\"text-xs text-muted-foreground\">\n {t('crud.import.downloadHint', { count: String(fields.length) })}\n </p>\n </div>\n <Button onClick={onNext} className=\"mt-2\">\n {t('crud.import.alreadyHaveFile')}\n <ArrowRight className=\"h-4 w-4 ml-2\" />\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 2: Upload file\n// ---------------------------------------------------------------------------\n\nfunction UploadStep({\n onParsed,\n onBack,\n}: {\n onParsed: (csv: ParsedCSV, fileName: string) => void\n onBack: () => void\n}) {\n const t = useTranslation()\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const processFile = (file: File) => {\n setError(null)\n if (!file.name.endsWith('.csv')) {\n setError(t('crud.import.invalidFile'))\n return\n }\n const reader = new FileReader()\n reader.onload = (e) => {\n const text = e.target?.result as string\n const parsed = parseCSV(text)\n if (parsed.headers.length === 0) {\n setError(t('crud.import.emptyFile'))\n return\n }\n if (parsed.rows.length === 0) {\n setError(t('crud.import.noRows'))\n return\n }\n onParsed(parsed, file.name)\n }\n reader.readAsText(file)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n const file = e.dataTransfer.files[0]\n if (file) processFile(file)\n }\n\n return (\n <div className=\"flex flex-col items-center gap-6 py-4\">\n <div\n onDragOver={(e) => { e.preventDefault(); setDragOver(true) }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => inputRef.current?.click()}\n className={cn(\n 'flex flex-col items-center justify-center gap-3 w-full max-w-sm rounded-xl border-2 border-dashed p-8 cursor-pointer transition-colors',\n dragOver ? 'border-primary bg-primary/5' : 'border-muted-foreground/25 hover:border-muted-foreground/50',\n )}\n >\n <Upload className=\"h-8 w-8 text-muted-foreground\" />\n <div className=\"text-center\">\n <p className=\"text-sm font-medium\">{t('crud.import.uploadTitle')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('crud.import.uploadHint')}</p>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\".csv\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0]\n if (file) processFile(file)\n }}\n />\n </div>\n {error && (\n <div className=\"flex items-center gap-2 text-sm text-destructive\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n {error}\n </div>\n )}\n <Button variant=\"ghost\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4 mr-2\" />\n {t('common.back')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 3: Column mapping\n// ---------------------------------------------------------------------------\n\nfunction MappingStep({\n csv,\n fileName,\n fields,\n onConfirm,\n onBack,\n}: {\n csv: ParsedCSV\n fileName: string\n fields: FieldDef[]\n onConfirm: (mapping: Map<number, FieldDef>) => void\n onBack: () => void\n}) {\n const t = useTranslation()\n\n // Auto-map by label match (case-insensitive)\n const initialMapping = useMemo(() => {\n const map = new Map<number, FieldDef | null>()\n for (let i = 0; i < csv.headers.length; i++) {\n const header = csv.headers[i].toLowerCase().trim()\n const match = fields.find(\n (f) => f.label.toLowerCase() === header || f.key.toLowerCase() === header,\n )\n map.set(i, match ?? null)\n }\n return map\n }, [csv.headers, fields])\n\n const [mapping, setMapping] = useState(initialMapping)\n\n const mappedCount = Array.from(mapping.values()).filter(Boolean).length\n const previewRows = csv.rows.slice(0, 3)\n\n const handleSelect = (colIdx: number, fieldKey: string) => {\n setMapping((prev) => {\n const next = new Map(prev)\n if (fieldKey === '__ignore__') {\n next.set(colIdx, null)\n } else {\n const field = fields.find((f) => f.key === fieldKey) ?? null\n // Remove this field from any other column\n for (const [idx, f] of next) {\n if (f?.key === fieldKey) next.set(idx, null)\n }\n next.set(colIdx, field)\n }\n return next\n })\n }\n\n const handleConfirm = () => {\n const validMapping = new Map<number, FieldDef>()\n for (const [idx, field] of mapping) {\n if (field) validMapping.set(idx, field)\n }\n onConfirm(validMapping)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{t('crud.import.mappingTitle')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('crud.import.mappingDescription', {\n file: fileName,\n columns: String(csv.headers.length),\n rows: String(csv.rows.length),\n })}\n </p>\n </div>\n <span className=\"text-xs text-muted-foreground tabular-nums\">\n {t('crud.import.mappedCount', { count: String(mappedCount), total: String(csv.headers.length) })}\n </span>\n </div>\n\n <div className=\"overflow-x-auto border rounded-lg\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[35%]\">\n {t('crud.import.csvColumn')}\n </th>\n <th className=\"text-center w-[10%] px-2\">\n <ArrowRight className=\"h-3.5 w-3.5 mx-auto text-muted-foreground\" />\n </th>\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[35%]\">\n {t('crud.import.mapsTo')}\n </th>\n <th className=\"text-left font-medium text-muted-foreground py-2.5 px-3 w-[20%]\">\n {t('crud.import.preview')}\n </th>\n </tr>\n </thead>\n <tbody>\n {csv.headers.map((header, idx) => {\n const mapped = mapping.get(idx)\n return (\n <tr key={idx} className=\"border-b last:border-0\">\n <td className=\"py-2 px-3\">\n <span className=\"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\">{header}</span>\n </td>\n <td className=\"text-center px-2\">\n <ArrowRight className=\"h-3 w-3 mx-auto text-muted-foreground/50\" />\n </td>\n <td className=\"py-2 px-3\">\n <div className=\"relative\">\n <select\n value={mapped?.key ?? '__ignore__'}\n onChange={(e) => handleSelect(idx, e.target.value)}\n className={cn(\n 'w-full appearance-none rounded-md border bg-background px-2.5 py-1.5 pr-8 text-sm',\n 'focus:outline-none focus:ring-2 focus:ring-ring',\n mapped ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n <option value=\"__ignore__\">{t('crud.import.skip')}</option>\n {fields.map((f) => (\n <option key={f.key} value={f.key}>{f.label}</option>\n ))}\n </select>\n <ChevronDown className=\"absolute right-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none\" />\n </div>\n </td>\n <td className=\"py-2 px-3\">\n <span className=\"text-xs text-muted-foreground truncate block max-w-[140px]\">\n {previewRows[0]?.[idx] ?? '—'}\n </span>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n <div className=\"flex items-center justify-between pt-2\">\n <Button variant=\"ghost\" onClick={onBack}>\n <ArrowLeft className=\"h-4 w-4 mr-2\" />\n {t('common.back')}\n </Button>\n <Button onClick={handleConfirm} disabled={mappedCount === 0}>\n {t('crud.import.startImport')}\n <ArrowRight className=\"h-4 w-4 ml-2\" />\n </Button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Step 4: Importing + Done\n// ---------------------------------------------------------------------------\n\nfunction ImportingStep({\n result,\n progress,\n totalRows,\n onClose,\n}: {\n result: { success: number; errors: ImportRowError[] } | null\n progress: { processed: number; total: number } | null\n totalRows: number\n onClose: () => void\n}) {\n const t = useTranslation()\n\n if (!result) {\n const processed = progress?.processed ?? 0\n const total = progress?.total ?? totalRows\n const percent = total > 0 ? Math.round((processed / total) * 100) : 0\n\n return (\n <div className=\"flex flex-col items-center gap-6 py-8\">\n <div className=\"relative h-16 w-16 flex items-center justify-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n </div>\n\n <div className=\"text-center space-y-1\">\n <p className=\"text-sm font-medium\">{t('crud.import.importing')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('crud.import.progressCount', { processed: String(processed), total: String(total) })}\n </p>\n </div>\n\n {/* Progress bar */}\n <div className=\"w-full max-w-xs space-y-2\">\n <div className=\"h-2 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-primary transition-all duration-500 ease-out\"\n style={{ width: `${percent}%` }}\n />\n </div>\n <p className=\"text-xs text-muted-foreground text-center tabular-nums\">\n {percent}%\n </p>\n </div>\n </div>\n )\n }\n\n const hasErrors = result.errors.length > 0\n\n return (\n <div className=\"flex flex-col items-center gap-5 py-4\">\n <div className={cn(\n 'h-16 w-16 rounded-2xl flex items-center justify-center',\n hasErrors ? 'bg-warning/10' : 'bg-success/10',\n )}>\n {hasErrors ? (\n <AlertCircle className=\"h-8 w-8 text-warning\" />\n ) : (\n <Check className=\"h-8 w-8 text-success\" />\n )}\n </div>\n\n <div className=\"text-center space-y-1\">\n <h3 className=\"text-base font-semibold\">\n {hasErrors ? t('crud.import.doneWithErrors') : t('crud.import.doneSuccess')}\n </h3>\n <p className=\"text-sm text-muted-foreground\">\n {t('crud.import.doneCount', {\n success: String(result.success),\n total: String(totalRows),\n })}\n </p>\n </div>\n\n {/* Completed progress bar */}\n <div className=\"w-full max-w-xs\">\n <div className=\"h-2 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full transition-all duration-300',\n hasErrors ? 'bg-warning' : 'bg-success',\n )}\n style={{ width: '100%' }}\n />\n </div>\n </div>\n\n {hasErrors && (\n <div className=\"w-full max-w-sm max-h-40 overflow-y-auto rounded-lg border\">\n <div className=\"divide-y\">\n {result.errors.slice(0, 20).map((err, i) => (\n <div key={i} className=\"flex items-start gap-2 px-3 py-2 text-xs\">\n <span className=\"text-muted-foreground shrink-0 tabular-nums\">\n {t('crud.import.rowNumber', { row: String(err.row) })}\n </span>\n <span className=\"text-destructive\">{err.message}</span>\n </div>\n ))}\n {result.errors.length > 20 && (\n <div className=\"px-3 py-2 text-xs text-muted-foreground text-center\">\n +{result.errors.length - 20} more\n </div>\n )}\n </div>\n </div>\n )}\n\n <Button onClick={onClose}>{t('common.done')}</Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main wizard\n// ---------------------------------------------------------------------------\n\nexport function ImportWizard({ open, onClose, entityDef, onImport }: ImportWizardProps) {\n const t = useTranslation()\n const [step, setStep] = useState<ImportStep>('download')\n const [csv, setCsv] = useState<ParsedCSV | null>(null)\n const [fileName, setFileName] = useState('')\n const [result, setResult] = useState<{ success: number; errors: ImportRowError[] } | null>(null)\n const [progress, setProgress] = useState<{ processed: number; total: number } | null>(null)\n\n const fields = useMemo(() => getImportableFields(entityDef), [entityDef])\n\n const handleClose = () => {\n setStep('download')\n setCsv(null)\n setFileName('')\n setResult(null)\n setProgress(null)\n onClose()\n }\n\n const handleParsed = (parsed: ParsedCSV, name: string) => {\n setCsv(parsed)\n setFileName(name)\n setStep('mapping')\n }\n\n const handleConfirmMapping = useCallback(async (mapping: Map<number, FieldDef>) => {\n if (!csv) return\n setStep('importing')\n setResult(null)\n setProgress(null)\n\n // Transform CSV rows → record objects using mapping\n const rows: Record<string, any>[] = csv.rows.map((row) => {\n const record: Record<string, any> = {}\n for (const [colIdx, field] of mapping) {\n const rawValue = row[colIdx] ?? ''\n record[field.key] = coerceValue(rawValue, field)\n }\n return record\n })\n\n try {\n const res = await onImport(rows, (processed, total) => {\n setProgress({ processed, total })\n })\n setResult(res)\n setStep('done')\n } catch (err: any) {\n setResult({ success: 0, errors: [{ row: 0, message: err?.message ?? 'Import failed' }] })\n setStep('done')\n }\n }, [csv, onImport])\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n\n return (\n <Modal open={open} onOpenChange={(o) => { if (!o) handleClose() }}>\n <ModalContent size=\"xl\">\n <ModalHeader>\n <ModalTitle>{t('crud.import.title', { entity: namePlural })}</ModalTitle>\n <div className=\"pt-2\">\n <StepIndicator current={step} />\n </div>\n </ModalHeader>\n\n <ModalBody>\n {step === 'download' && (\n <DownloadStep\n entityDef={entityDef}\n fields={fields}\n onNext={() => setStep('upload')}\n />\n )}\n {step === 'upload' && (\n <UploadStep\n onParsed={handleParsed}\n onBack={() => setStep('download')}\n />\n )}\n {step === 'mapping' && csv && (\n <MappingStep\n csv={csv}\n fileName={fileName}\n fields={fields}\n onConfirm={handleConfirmMapping}\n onBack={() => setStep('upload')}\n />\n )}\n {(step === 'importing' || step === 'done') && (\n <ImportingStep\n result={result}\n progress={progress}\n totalRows={csv?.rows.length ?? 0}\n onClose={handleClose}\n />\n )}\n </ModalBody>\n </ModalContent>\n </Modal>\n )\n}\n","import { exportCSV } from '@fayz-ai/core'\nimport type { CSVColumn } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\nexport function exportToCSV<T extends Record<string, any>>(\n items: T[],\n entityDef: EntityDef,\n): void {\n const columns: CSVColumn[] = entityDef.fields\n .filter((f) => f.showInTable !== false)\n .map((f) => ({ key: f.key, label: f.label }))\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const filename = `${namePlural.toLowerCase().replace(/\\s+/g, '-')}-export`\n\n exportCSV(columns, items, filename)\n}\n","import type { FieldDef } from '@fayz-ai/core'\n\n// Tenant field-rule overrides (required / visibility / custom fields). Currently\n// a permissive identity pass-through; tenant-level customization (blueprint\n// §4.11 \"Regras de Campos\") plugs in here later without changing call sites.\nexport function useFieldRules(_entityKey: string): {\n applyRules: (fields: FieldDef[]) => FieldDef[]\n} {\n return { applyRules: (fields) => fields }\n}\n","import React, { useEffect, useState, useRef, useCallback, useMemo } from 'react'\nimport { Pencil, Trash2 } from 'lucide-react'\nimport type { ColumnDef as TanStackColumnDef } from '@tanstack/react-table'\nimport { useOrganizationStore } from '../org'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Card } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { CrudFormPage } from './CrudFormPage'\nimport { CrudListView, type CrudFacet } from './CrudListView'\nimport { CrudDetailPage } from './CrudDetailPage'\nimport { DeleteConfirmDialog } from './DeleteConfirmDialog'\nimport { ImportWizard } from './ImportWizard'\nimport { exportToCSV } from './csv-export'\nimport { fieldToColumns } from './fieldToColumn'\nimport { PermissionGate } from '../permissions/PermissionGate'\nimport { useFieldRules } from '../hooks/useFieldRules'\nimport { deriveEntityKey } from '@fayz-ai/core'\nimport { toast } from '@fayz-ai/ui'\nimport { getSupabaseClientOptional } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport type { CrudStore } from '../stores/createCrudStore'\nimport type { ImportRowError } from './ImportWizard'\n\ntype CrudDisplay = 'table' | 'cards'\n\ninterface CrudPageProps<T extends { id: string }> {\n entityDef: EntityDef<T>\n useStore: () => CrudStore<T>\n basePath: string\n display: CrudDisplay\n feature?: string\n /** If true, hides create/edit/delete actions — list and detail view only */\n readOnly?: boolean\n}\n\nfunction getRouteDepth(sub: string): number {\n if (sub === '' || sub === '/') return 0 // list\n if (sub === '/new') return 1 // create\n if (sub.endsWith('/edit')) return 2 // edit\n return 1 // detail\n}\n\nfunction normalizeCrudBasePath(basePath: string): string {\n const normalized = `/${basePath}`.replace(/\\/+/g, '/')\n return normalized.length > 1 ? normalized.replace(/\\/+$/, '') : normalized\n}\n\nfunction crudPath(basePath: string, ...parts: Array<string | undefined>): string {\n return normalizeCrudBasePath([basePath, ...parts.filter(Boolean)].join('/'))\n}\n\nfunction setCrudHash(basePath: string, ...parts: Array<string | undefined>): void {\n window.location.hash = crudPath(basePath, ...parts)\n}\n\nfunction useSubRoute(basePath: string) {\n const normalizedBasePath = normalizeCrudBasePath(basePath)\n const getSub = () => {\n const hash = normalizeCrudBasePath(window.location.hash.slice(1) || '/')\n if (hash === normalizedBasePath) return ''\n return hash.startsWith(`${normalizedBasePath}/`) ? hash.slice(normalizedBasePath.length) : ''\n }\n\n const [sub, setSub] = useState(getSub)\n const [direction, setDirection] = useState<'forward' | 'back'>('forward')\n const prevDepthRef = useRef(getRouteDepth(getSub()))\n\n useEffect(() => {\n const handler = () => {\n const next = getSub()\n const nextDepth = getRouteDepth(next)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setSub(next)\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [normalizedBasePath])\n\n return { sub, direction }\n}\n\n/** Convert our FieldDef-based columns to TanStack ColumnDef for DataTable */\nfunction useCrudColumns<T extends { id: string }>(\n entityDef: EntityDef<T>,\n options?: {\n basePath?: string\n onDelete?: (item: T) => void\n onInlineUpdate?: (id: string, field: string, value: any) => void\n feature?: string\n readOnly?: boolean\n },\n): TanStackColumnDef<T, any>[] {\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n const cols = fieldToColumns(entityDef.fields, { onInlineUpdate: options?.onInlineUpdate })\n\n return useMemo(() => {\n const tanCols: TanStackColumnDef<T, any>[] = cols.map((col) => ({\n accessorKey: col.key,\n header: col.label,\n enableSorting: col.sortable,\n cell: ({ row }: any) => {\n const value = row.original[col.key]\n const rendered = col.render(value, row.original)\n return col.key === displayField\n ? <span className=\"font-medium text-foreground\">{rendered}</span>\n : rendered\n },\n }))\n\n // Actions column\n if (!options?.readOnly && options?.basePath) {\n tanCols.push({\n id: 'actions',\n header: '',\n enableSorting: false,\n cell: ({ row }: any) => {\n const id = row.original.id\n const editBtn = (\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\"\n onClick={(e: React.MouseEvent) => { e.stopPropagation(); setCrudHash(options.basePath!, id, 'edit') }}>\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )\n const deleteBtn = options.onDelete ? (\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={(e: React.MouseEvent) => { e.stopPropagation(); options.onDelete!(row.original) }}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ) : null\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {options.feature ? (\n <>\n <PermissionGate feature={options.feature} action=\"edit\">{editBtn}</PermissionGate>\n {deleteBtn && <PermissionGate feature={options.feature} action=\"delete\">{deleteBtn}</PermissionGate>}\n </>\n ) : (\n <>{editBtn}{deleteBtn}</>\n )}\n </div>\n )\n },\n })\n }\n\n return tanCols\n }, [cols, displayField, options?.basePath, options?.onDelete, options?.feature, options?.readOnly])\n}\n\nexport function CrudPage<T extends { id: string }>({ entityDef: rawEntityDef, useStore, basePath, display, feature, readOnly }: CrudPageProps<T>) {\n const store = useStore()\n const t = useTranslation()\n const normalizedBasePath = normalizeCrudBasePath(basePath)\n const { sub, direction } = useSubRoute(normalizedBasePath)\n\n // Apply tenant field-rule overrides (required / visibility) before passing down\n const entityKey = deriveEntityKey(rawEntityDef)\n const { applyRules } = useFieldRules(entityKey)\n const entityDef = useMemo(() => ({\n ...rawEntityDef,\n fields: applyRules(rawEntityDef.fields),\n }), [rawEntityDef, applyRules]) as EntityDef<T>\n const [deleteItem, setDeleteItem] = useState<T | null>(null)\n const [searchInput, setSearchInput] = useState('')\n const [importOpen, setImportOpen] = useState(false)\n const [activeFilters, setActiveFilters] = useState<Record<string, string | undefined>>({})\n const activeFiltersRef = useRef<Record<string, string | undefined>>({})\n\n const namePlural = entityDef.namePlural ?? entityDef.name + 's'\n const displayField = entityDef.displayField ?? entityDef.fields[0]?.key ?? 'id'\n\n // Resolve declared facets (entityDef.facets) into pill options from each field.\n const resolvedFacets = useMemo<CrudFacet[]>(() => {\n return (entityDef.facets ?? []).map((f) => {\n const field = entityDef.fields.find((x) => x.key === f.field)\n const options = (field?.options ?? []).map((o) =>\n typeof o === 'string' ? { value: o, label: o } : { value: o.value, label: o.label },\n )\n return { field: f.field, options, allLabel: f.allLabel }\n })\n }, [entityDef])\n\n const handleFacetChange = useCallback((field: string, value: string | undefined) => {\n const next = { ...activeFiltersRef.current }\n if (value == null) delete next[field]\n else next[field] = value\n activeFiltersRef.current = next\n setActiveFilters(next)\n store.setQuery({ filters: next })\n }, [store])\n\n const searchTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const handleInlineUpdate = useCallback(async (id: string, field: string, value: any) => {\n await store.update(id, { [field]: value } as any)\n }, [store])\n const tanColumns = useCrudColumns(entityDef, { basePath: normalizedBasePath, onDelete: readOnly ? undefined : (item) => setDeleteItem(item), onInlineUpdate: handleInlineUpdate, feature, readOnly })\n const currentOrgId = useOrganizationStore((s) => s.currentOrg?.id)\n\n useEffect(() => {\n if (currentOrgId) store.fetch()\n }, [currentOrgId])\n\n const navigateToList = () => { setCrudHash(normalizedBasePath) }\n const animClass = direction === 'forward' ? 'saas-nav-forward' : 'saas-nav-back'\n\n const handleImport = useCallback(async (\n rows: Record<string, any>[],\n onProgress: (processed: number, total: number) => void,\n ): Promise<{ success: number; errors: ImportRowError[] }> => {\n // Guard: refuse import if not connected to Supabase (would silently go to mock)\n if (!getSupabaseClientOptional() as any) {\n return {\n success: 0,\n errors: [{ row: 0, message: t('crud.import.noConnection') }],\n }\n }\n\n const { success, results } = await store.createMany(rows, {\n batchSize: 10,\n onProgress,\n })\n\n const errors: ImportRowError[] = []\n for (let i = 0; i < results.length; i++) {\n if (results[i].error) {\n errors.push({ row: i + 2, message: results[i].error! })\n }\n }\n\n if (success > 0) {\n toast.success(t('crud.import.toastSuccess', { count: String(success) }))\n }\n return { success, errors }\n }, [store, t])\n\n const handleExport = useCallback(() => {\n const items = store.items\n if (!items || items.length === 0) {\n toast.error(t('crud.export.noData'))\n return\n }\n exportToCSV(items as any, entityDef)\n toast.success(t('crud.export.toastSuccess', { count: String(items.length) }))\n }, [store.items, entityDef, t])\n\n // Determine which view to show\n let viewKey = 'list'\n let content: React.ReactNode = null\n\n if (sub === '/new' && !readOnly) {\n viewKey = 'new'\n content = (\n <CrudFormPage\n entityDef={entityDef}\n mode=\"create\"\n namePlural={namePlural}\n onCancel={navigateToList}\n onSubmit={async (data) => {\n await store.create(data)\n navigateToList()\n }}\n />\n )\n } else if (sub === '/new' && readOnly) {\n // readOnly — redirect back to list\n navigateToList()\n } else if (sub.endsWith('/edit') && !readOnly) {\n const id = sub.slice(1, -5)\n const item = store.getById(id)\n viewKey = `edit-${id}`\n\n if (!item && store.items === null) {\n content = (\n <div className=\"space-y-6 animate-pulse\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <span className=\"text-muted-foreground\">/</span>\n <div className=\"h-4 w-28 rounded bg-muted\" />\n </div>\n {/* Hero skeleton */}\n <div className=\"flex items-start gap-5\">\n <div className=\"h-20 w-20 shrink-0 rounded-2xl bg-muted\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <div className=\"h-7 w-48 rounded bg-muted\" />\n <div className=\"h-4 w-32 rounded bg-muted\" />\n <div className=\"h-5 w-16 rounded-full bg-muted mt-1\" />\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <div className=\"h-9 w-20 rounded-md bg-muted\" />\n <div className=\"h-9 w-9 rounded-md bg-muted\" />\n </div>\n </div>\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n {/* Tabs skeleton */}\n <div className=\"flex gap-2\">\n <div className=\"h-8 w-20 rounded bg-muted\" />\n <div className=\"h-8 w-24 rounded bg-muted\" />\n </div>\n {/* Field rows skeleton */}\n <Card>\n <div className=\"divide-y\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"grid grid-cols-3 gap-4 px-5 py-3\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <div className=\"col-span-2 h-4 w-32 rounded bg-muted\" />\n </div>\n ))}\n </div>\n </Card>\n </div>\n )\n } else if (!item) {\n content = (\n <div className=\"space-y-6\">\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={navigateToList} className=\"hover:text-foreground transition-colors\">{namePlural}</button>\n <span>/</span>\n <span className=\"text-foreground font-medium\">{t('common.notFound')}</span>\n </nav>\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground mb-4\">{t('crud.detail.notFound', { entity: entityDef.name })}</p>\n <Button onClick={navigateToList}>{t('crud.detail.backTo', { entities: namePlural })}</Button>\n </div>\n </div>\n )\n } else {\n content = (\n <CrudFormPage\n entityDef={entityDef}\n mode=\"edit\"\n initialData={item as any}\n namePlural={namePlural}\n onCancel={() => { setCrudHash(normalizedBasePath, id) }}\n onSubmit={async (data) => {\n await store.update(id, data as Partial<T>)\n setCrudHash(normalizedBasePath, id)\n }}\n />\n )\n }\n } else if (sub.endsWith('/edit') && readOnly) {\n // readOnly — redirect to detail view\n const id = sub.slice(1, -5)\n setCrudHash(normalizedBasePath, id)\n } else if (sub.startsWith('/') && sub.length > 1) {\n // Parse /uuid or /uuid/tab-name\n const subParts = sub.slice(1).split('/')\n const id = subParts[0]\n const initialTab = subParts[1]?.split('?')[0] || undefined\n const item = store.getById(id)\n viewKey = `detail-${id}`\n\n if (!item && store.items === null) {\n content = (\n <div className=\"space-y-6 animate-pulse\">\n {/* Breadcrumb skeleton */}\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <span className=\"text-muted-foreground\">/</span>\n <div className=\"h-4 w-28 rounded bg-muted\" />\n </div>\n {/* Hero skeleton */}\n <div className=\"flex items-start gap-5\">\n <div className=\"h-20 w-20 shrink-0 rounded-2xl bg-muted\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <div className=\"h-7 w-48 rounded bg-muted\" />\n <div className=\"h-4 w-32 rounded bg-muted\" />\n <div className=\"h-5 w-16 rounded-full bg-muted mt-1\" />\n </div>\n <div className=\"flex gap-2 shrink-0\">\n <div className=\"h-9 w-20 rounded-md bg-muted\" />\n <div className=\"h-9 w-9 rounded-md bg-muted\" />\n </div>\n </div>\n {/* Separator */}\n <div className=\"h-px bg-border\" />\n {/* Tabs skeleton */}\n <div className=\"flex gap-2\">\n <div className=\"h-8 w-20 rounded bg-muted\" />\n <div className=\"h-8 w-24 rounded bg-muted\" />\n </div>\n {/* Field rows skeleton */}\n <Card>\n <div className=\"divide-y\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"grid grid-cols-3 gap-4 px-5 py-3\">\n <div className=\"h-4 w-20 rounded bg-muted\" />\n <div className=\"col-span-2 h-4 w-32 rounded bg-muted\" />\n </div>\n ))}\n </div>\n </Card>\n </div>\n )\n } else if (!item) {\n content = (\n <div className=\"space-y-6\">\n <nav className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <button type=\"button\" onClick={navigateToList} className=\"hover:text-foreground transition-colors\">{namePlural}</button>\n <span>/</span>\n <span className=\"text-foreground font-medium\">{t('common.notFound')}</span>\n </nav>\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground mb-4\">{t('crud.detail.notFound', { entity: entityDef.name })}</p>\n <Button onClick={navigateToList}>{t('crud.detail.backTo', { entities: namePlural })}</Button>\n </div>\n </div>\n )\n } else {\n content = (\n <CrudDetailPage\n entityDef={entityDef}\n item={item as any}\n namePlural={namePlural}\n basePath={normalizedBasePath}\n initialTab={initialTab}\n onBack={navigateToList}\n onEdit={readOnly ? undefined : () => { setCrudHash(normalizedBasePath, id, 'edit') }}\n onDelete={readOnly ? undefined : () => setDeleteItem(item)}\n feature={feature}\n />\n )\n }\n } else {\n // List view — delegated to the shared CrudListView (header, search, facet\n // pills, table/cards). Data + routing stay here (store-backed).\n const handleSearch = (value: string) => {\n setSearchInput(value)\n if (searchTimer.current) clearTimeout(searchTimer.current)\n searchTimer.current = setTimeout(() => {\n store.setQuery({ search: value || undefined })\n }, 350)\n }\n\n const hasSearch = entityDef.fields.some((f) => f.searchable)\n\n content = (\n <CrudListView\n entityDef={entityDef}\n columns={tanColumns}\n items={store.items}\n total={store.total}\n display={display}\n search={searchInput}\n onSearchChange={hasSearch ? handleSearch : undefined}\n facets={resolvedFacets}\n activeFilters={activeFilters}\n onFacetChange={handleFacetChange}\n onNew={() => setCrudHash(normalizedBasePath, 'new')}\n onRowClick={(row) => setCrudHash(normalizedBasePath, (row as any).id)}\n onDelete={(item) => setDeleteItem(item)}\n onImport={() => setImportOpen(true)}\n onExport={handleExport}\n feature={feature}\n readOnly={readOnly}\n />\n )\n }\n\n const handleDeleteConfirm = () => {\n if (deleteItem) {\n store.remove((deleteItem as any).id)\n setDeleteItem(null)\n navigateToList()\n }\n }\n\n return (\n <>\n <div key={viewKey} className={animClass}>\n {content}\n </div>\n <DeleteConfirmDialog\n open={deleteItem !== null}\n onClose={() => setDeleteItem(null)}\n onConfirm={handleDeleteConfirm}\n entityName={entityDef.name}\n displayValue={deleteItem ? (deleteItem as any)[displayField] : undefined}\n />\n <ImportWizard\n open={importOpen}\n onClose={() => setImportOpen(false)}\n entityDef={entityDef as EntityDef<any>}\n onImport={handleImport}\n />\n </>\n )\n}\n","import { create } from 'zustand'\nimport type { DataProvider, CrudQuery } from '@fayz-ai/core'\n\nexport interface CrudState<T> {\n items: T[] | null\n total: number\n loading: boolean\n query: CrudQuery\n}\n\nexport interface ImportBatchResult<T> {\n item?: T\n error?: string\n}\n\nexport interface CrudActions<T> {\n fetch: () => Promise<void>\n create: (data: any) => Promise<T>\n /** Batch create without per-item list refetch. Calls onProgress after each batch. Single fetch at the end. */\n createMany: (\n rows: any[],\n options?: { batchSize?: number; onProgress?: (processed: number, total: number) => void },\n ) => Promise<{ success: number; results: ImportBatchResult<T>[] }>\n update: (id: string, data: Partial<T>) => Promise<T>\n remove: (id: string) => Promise<void>\n setQuery: (query: Partial<CrudQuery>) => void\n getById: (id: string) => T | undefined\n}\n\nexport type CrudStore<T> = CrudState<T> & CrudActions<T>\n\nexport function createCrudStore<T extends { id: string }>(\n dataProvider: DataProvider<T>,\n) {\n // Dedup: track the current in-flight fetch to avoid duplicate requests\n let inflightFetch: Promise<void> | null = null\n let lastQueryKey = ''\n\n function queryKey(query: CrudQuery): string {\n return JSON.stringify(query)\n }\n\n return create<CrudStore<T>>((set, get) => ({\n items: null,\n total: 0,\n loading: false,\n query: {},\n\n async fetch() {\n const currentKey = queryKey(get().query)\n\n // If we already have an in-flight request for the same query, reuse it\n if (inflightFetch && currentKey === lastQueryKey) {\n return inflightFetch\n }\n\n lastQueryKey = currentKey\n set({ loading: true })\n\n const promise = (async () => {\n try {\n const result = await dataProvider.list(get().query)\n set({ items: result.data, total: result.total, loading: false })\n } catch {\n set({ items: get().items ?? [], loading: false })\n } finally {\n inflightFetch = null\n }\n })()\n\n inflightFetch = promise\n return promise\n },\n\n async create(data) {\n const item = await dataProvider.create(data)\n inflightFetch = null // invalidate dedup cache\n lastQueryKey = ''\n await get().fetch()\n return item\n },\n\n async createMany(rows, options) {\n const batchSize = options?.batchSize ?? 10\n let success = 0\n const results: ImportBatchResult<T>[] = new Array(rows.length)\n\n for (let i = 0; i < rows.length; i += batchSize) {\n const batch = rows.slice(i, i + batchSize)\n const settled = await Promise.allSettled(\n batch.map((row) => dataProvider.create(row)),\n )\n for (let j = 0; j < settled.length; j++) {\n const r = settled[j]\n if (r.status === 'fulfilled' && r.value?.id) {\n success++\n results[i + j] = { item: r.value }\n } else {\n const msg = r.status === 'rejected' ? (r.reason?.message ?? 'Error') : 'No record returned'\n results[i + j] = { error: msg }\n }\n }\n options?.onProgress?.(Math.min(i + batch.length, rows.length), rows.length)\n }\n\n // Single list refresh after all inserts\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n\n return { success, results }\n },\n\n async update(id, data) {\n const item = await dataProvider.update(id, data)\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n return item\n },\n\n async remove(id) {\n await dataProvider.remove(id)\n inflightFetch = null\n lastQueryKey = ''\n await get().fetch()\n },\n\n setQuery(partial) {\n set((s) => ({ query: { ...s.query, ...partial } }))\n queueMicrotask(() => get().fetch())\n },\n\n getById(id) {\n return (get().items ?? []).find((item) => item.id === id)\n },\n }))\n}\n","import React, { useMemo } from 'react'\nimport { CrudPage } from './CrudPage'\nimport { createCrudStore } from '../stores/createCrudStore'\nimport { resolveDataProvider } from '@fayz-ai/core'\nimport { registerEntity, deriveEntityKey } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport type { DataProvider } from '@fayz-ai/core'\n\ninterface CreateCrudPageOptions<T extends { id: string }> {\n mockData?: T[]\n dataProvider?: DataProvider<T>\n /** List display mode: 'table' (default) or 'cards' */\n display?: 'table' | 'cards'\n /** Feature ID for permission gating on CRUD actions */\n feature?: string\n}\n\nexport function createCrudPage<T extends { id: string }>(\n entityDef: EntityDef<T>,\n options?: CreateCrudPageOptions<T>,\n): React.ComponentType & { __crudBasePath?: string } {\n const display = options?.display ?? 'table'\n\n // If an explicit dataProvider was given, use it eagerly (no lazy resolution needed)\n let eagerStore: ReturnType<typeof createCrudStore<T>> | null = null\n if (options?.dataProvider) {\n eagerStore = createCrudStore(options.dataProvider)\n }\n\n const GeneratedCrudPage: React.FC & { __crudBasePath?: string } = () => {\n // Lazy provider resolution — runs at render time when Supabase is already initialized\n const useStore = useMemo(() => {\n if (eagerStore) return eagerStore\n const provider = resolveDataProvider(entityDef, options?.mockData)\n return createCrudStore(provider)\n }, [])\n\n const basePath = GeneratedCrudPage.__crudBasePath ?? '/'\n return (\n <CrudPage\n entityDef={entityDef as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={display}\n feature={options?.feature}\n />\n )\n }\n\n GeneratedCrudPage.displayName = `CrudPage(${entityDef.name})`\n ;(GeneratedCrudPage as any).__isCrudPage = true\n ;(GeneratedCrudPage as any).__entityDef = entityDef\n\n registerEntity({\n entityKey: deriveEntityKey(entityDef),\n label: entityDef.name,\n labelPlural: entityDef.namePlural ?? entityDef.name,\n icon: entityDef.icon,\n fields: entityDef.fields,\n source: 'app',\n archetype: entityDef.data?.archetype,\n })\n\n return GeneratedCrudPage\n}\n","import { createCrudPage } from '../../../crud/createCrudPage'\nimport type { EntityDef } from '../../types/crud'\n\nexport const locationEntityDef: EntityDef = {\n name: 'Location',\n namePlural: 'Locations',\n icon: 'MapPin',\n layout: 'location',\n displayField: 'name',\n subtitleField: 'city',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, searchable: true },\n { key: 'phone', label: 'Phone', type: 'phone', showInTable: true },\n { key: 'city', label: 'City', type: 'text', showInTable: true },\n { key: 'state', label: 'State', type: 'text', showInTable: true },\n { key: 'address', label: 'Address', type: 'text' },\n { key: 'country', label: 'Country', type: 'text', defaultValue: 'BR' },\n { key: 'postalCode', label: 'Postal Code', type: 'text' },\n { key: 'email', label: 'Email', type: 'email' },\n { key: 'isHeadquarters', label: 'Headquarters', type: 'boolean', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true, inlineToggle: true },\n { key: 'notes', label: 'Notes', type: 'textarea' },\n ],\n data: {\n table: 'locations',\n schema: 'saas_core',\n tenantScoped: true,\n searchColumns: ['name', 'city', 'state'],\n defaults: { kind: 'branch' },\n },\n}\n\nexport const LocationsCrudPage = createCrudPage(locationEntityDef)\n// Set basePath for hash-based sub-routing inside settings tab\n;(LocationsCrudPage as any).__crudBasePath = '/settings/locations'\n","import * as React from 'react'\nimport { useState, useMemo, useCallback } from 'react'\nimport { ChevronDown, ChevronRight, RotateCcw, Loader2, Search, ChevronsUpDown } from 'lucide-react'\nimport * as LucideIcons from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Checkbox } from '@fayz-ai/ui'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { RegisteredEntity } from '../../lib/entity-registry'\nimport type { TenantFieldRules, EntityFieldRules, FieldRuleOverride, FieldDef } from '../../types/crud'\n\ninterface FieldRulesSettingsProps {\n entities: RegisteredEntity[]\n rules: TenantFieldRules\n onSave: (rules: TenantFieldRules) => Promise<void>\n}\n\ntype OverrideKey = keyof FieldRuleOverride\n\nconst RULE_COLUMNS: { key: OverrideKey; labelKey: string }[] = [\n { key: 'required', labelKey: 'settings.fieldRules.required' },\n { key: 'showInForm', labelKey: 'settings.fieldRules.inForm' },\n { key: 'showInTable', labelKey: 'settings.fieldRules.inTable' },\n { key: 'showInDetail', labelKey: 'settings.fieldRules.inDetail' },\n]\n\n/** Core SaaS archetypes — shown in the main section */\nconst CORE_ARCHETYPES = new Set([\n 'person', 'product', 'service', 'category', 'order', 'location',\n])\n\n/** Priority order for sorting core entities */\nconst ARCHETYPE_ORDER: Record<string, number> = {\n person: 0,\n service: 1,\n product: 2,\n category: 3,\n order: 4,\n location: 5,\n}\n\nfunction isCoreEntity(entity: RegisteredEntity): boolean {\n if (entity.archetype && CORE_ARCHETYPES.has(entity.archetype)) return true\n const prefix = entity.entityKey.split(':')[0]\n return CORE_ARCHETYPES.has(prefix)\n}\n\nfunction entitySortKey(entity: RegisteredEntity): number {\n const prefix = entity.archetype ?? entity.entityKey.split(':')[0]\n return ARCHETYPE_ORDER[prefix] ?? 99\n}\n\n/** Group structure for plugin entities */\ninterface PluginGroup {\n pluginId: string\n pluginName: string\n pluginIcon: string\n entities: RegisteredEntity[]\n}\n\n// ---------------------------------------------------------------------------\n// Field helpers\n// ---------------------------------------------------------------------------\n\nfunction getDefaultValue(field: FieldDef, key: OverrideKey): boolean {\n switch (key) {\n case 'required':\n return field.required ?? false\n case 'showInForm':\n return field.showInForm !== false\n case 'showInTable':\n return field.showInTable !== false\n case 'showInDetail':\n return field.showInDetail !== false\n }\n}\n\nfunction getEffectiveValue(\n field: FieldDef,\n key: OverrideKey,\n rules: EntityFieldRules | undefined,\n): boolean {\n const override = rules?.[field.key]?.[key]\n if (override != null) return override\n return getDefaultValue(field, key)\n}\n\nfunction isFieldModified(\n field: FieldDef,\n rules: EntityFieldRules | undefined,\n): boolean {\n if (!rules?.[field.key]) return false\n return RULE_COLUMNS.some((col) => {\n const override = rules[field.key]?.[col.key]\n return override != null && override !== getDefaultValue(field, col.key)\n })\n}\n\nfunction countModified(\n fields: FieldDef[],\n rules: EntityFieldRules | undefined,\n): number {\n if (!rules) return 0\n return fields.filter((f) => isFieldModified(f, rules)).length\n}\n\nfunction resolveIcon(iconName: string): React.ComponentType<any> | null {\n return (LucideIcons as any)[iconName] ?? null\n}\n\nfunction matchesSearch(entity: RegisteredEntity, q: string): boolean {\n return (\n entity.label.toLowerCase().includes(q) ||\n entity.labelPlural.toLowerCase().includes(q) ||\n entity.entityKey.toLowerCase().includes(q)\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityAccordion\n// ---------------------------------------------------------------------------\n\nfunction EntityAccordion({\n entity,\n rules,\n onToggle,\n onReset,\n}: {\n entity: RegisteredEntity\n rules: EntityFieldRules | undefined\n onToggle: (entityKey: string, fieldKey: string, ruleKey: OverrideKey, value: boolean) => void\n onReset: (entityKey: string) => void\n}) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const modified = countModified(entity.fields, rules)\n const Icon = resolveIcon(entity.icon)\n\n return (\n <Card>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex w-full items-center gap-3 px-5 py-3.5 text-left\"\n >\n {open ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n )}\n {Icon && <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"text-sm font-semibold flex-1\">{entity.labelPlural || entity.label}</span>\n {modified > 0 && (\n <span className=\"text-xs text-primary font-medium tabular-nums\">\n {t('settings.fieldRules.modified', { count: String(modified) })}\n </span>\n )}\n </button>\n\n {open && (\n <CardContent className=\"pt-0 pb-4 px-5\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"text-left font-medium text-muted-foreground py-2 pr-4 w-[40%]\">\n {t('settings.fieldRules.field')}\n </th>\n {RULE_COLUMNS.map((col) => (\n <th\n key={col.key}\n className=\"text-center font-medium text-muted-foreground py-2 px-3 w-[15%]\"\n >\n {t(col.labelKey)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entity.fields.map((field) => {\n const fieldModified = isFieldModified(field, rules)\n return (\n <tr\n key={field.key}\n className={cn(\n 'border-b last:border-0',\n fieldModified && 'bg-primary/[0.03]',\n )}\n >\n <td className=\"py-2.5 pr-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-foreground\">{field.label}</span>\n {fieldModified && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </div>\n </td>\n {RULE_COLUMNS.map((col) => {\n const effective = getEffectiveValue(field, col.key, rules)\n const defaultVal = getDefaultValue(field, col.key)\n const overridden = rules?.[field.key]?.[col.key]\n const isModified = overridden != null && overridden !== defaultVal\n return (\n <td key={col.key} className=\"text-center py-2.5 px-3\">\n <div className=\"inline-flex items-center gap-1\">\n <Checkbox\n checked={effective}\n onChange={(val) =>\n onToggle(entity.entityKey, field.key, col.key, val)\n }\n />\n {isModified && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </div>\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n\n {modified > 0 && (\n <div className=\"flex justify-end pt-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n onReset(entity.entityKey)\n }}\n >\n <RotateCcw className=\"h-3.5 w-3.5 mr-1.5\" />\n {t('settings.fieldRules.resetDefaults')}\n </Button>\n </div>\n )}\n </CardContent>\n )}\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Section components\n// ---------------------------------------------------------------------------\n\nfunction SectionHeader({ label }: { label: string }) {\n return (\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground px-1\">\n {label}\n </h3>\n )\n}\n\nfunction PluginSectionHeader({ name, iconName }: { name: string; iconName: string }) {\n const Icon = resolveIcon(iconName)\n return (\n <div className=\"flex items-center gap-2 px-1\">\n {Icon && <Icon className=\"h-3.5 w-3.5 text-muted-foreground\" />}\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {name}\n </h3>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport function FieldRulesSettings({ entities, rules: initialRules, onSave }: FieldRulesSettingsProps) {\n const { t } = useTranslation()\n const [draft, setDraft] = useState<TenantFieldRules>(initialRules)\n const [saving, setSaving] = useState(false)\n const [search, setSearch] = useState('')\n const [showMore, setShowMore] = useState(false)\n\n React.useEffect(() => {\n setDraft(initialRules)\n }, [initialRules])\n\n const isDirty = useMemo(\n () => JSON.stringify(draft) !== JSON.stringify(initialRules),\n [draft, initialRules],\n )\n\n // Split entities: core standalone → standalone non-core → grouped by plugin\n const { coreEntities, standaloneEntities, pluginGroups } = useMemo(() => {\n const q = search.trim().toLowerCase()\n\n const core: RegisteredEntity[] = []\n const standalone: RegisteredEntity[] = []\n const pluginMap = new Map<string, PluginGroup>()\n\n for (const entity of entities) {\n if (q && !matchesSearch(entity, q)) continue\n\n if (entity.source === 'plugin' && entity.pluginId) {\n // Group under plugin\n let group = pluginMap.get(entity.pluginId)\n if (!group) {\n group = {\n pluginId: entity.pluginId,\n pluginName: entity.pluginName ?? entity.pluginId,\n pluginIcon: entity.pluginIcon ?? 'Puzzle',\n entities: [],\n }\n pluginMap.set(entity.pluginId, group)\n }\n group.entities.push(entity)\n } else if (isCoreEntity(entity)) {\n core.push(entity)\n } else {\n standalone.push(entity)\n }\n }\n\n // Sort core by archetype priority, then alphabetically\n core.sort((a, b) => {\n const orderDiff = entitySortKey(a) - entitySortKey(b)\n if (orderDiff !== 0) return orderDiff\n return (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label)\n })\n\n standalone.sort((a, b) =>\n (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label),\n )\n\n // Sort entities within each plugin group alphabetically\n const groups = Array.from(pluginMap.values())\n for (const group of groups) {\n group.entities.sort((a, b) =>\n (a.labelPlural || a.label).localeCompare(b.labelPlural || b.label),\n )\n }\n // Sort plugin groups by plugin name\n groups.sort((a, b) => a.pluginName.localeCompare(b.pluginName))\n\n return {\n coreEntities: core,\n standaloneEntities: standalone,\n pluginGroups: groups,\n }\n }, [entities, search])\n\n const isSearching = search.trim().length > 0\n const hasExtras = standaloneEntities.length > 0 || pluginGroups.length > 0\n const showExtras = hasExtras && (showMore || isSearching)\n const extraCount = standaloneEntities.length + pluginGroups.reduce((sum, g) => sum + g.entities.length, 0)\n const hasNoResults = coreEntities.length === 0 && !hasExtras\n\n const handleToggle = useCallback(\n (entityKey: string, fieldKey: string, ruleKey: OverrideKey, value: boolean) => {\n setDraft((prev) => {\n const entityRules = { ...prev[entityKey] }\n const fieldOverride = { ...entityRules[fieldKey] }\n fieldOverride[ruleKey] = value\n entityRules[fieldKey] = fieldOverride\n return { ...prev, [entityKey]: entityRules }\n })\n },\n [],\n )\n\n const handleReset = useCallback((entityKey: string) => {\n setDraft((prev) => {\n const next = { ...prev }\n delete next[entityKey]\n return next\n })\n }, [])\n\n const handleSave = async () => {\n setSaving(true)\n try {\n const cleaned: TenantFieldRules = {}\n for (const [entityKey, entityRules] of Object.entries(draft)) {\n const entity = entities.find((e) => e.entityKey === entityKey)\n if (!entity) continue\n\n const cleanedEntity: EntityFieldRules = {}\n for (const [fieldKey, override] of Object.entries(entityRules)) {\n const field = entity.fields.find((f) => f.key === fieldKey)\n if (!field) continue\n\n const cleanedOverride: FieldRuleOverride = {}\n let hasOverride = false\n for (const col of RULE_COLUMNS) {\n const val = override[col.key]\n if (val != null && val !== getDefaultValue(field, col.key)) {\n cleanedOverride[col.key] = val\n hasOverride = true\n }\n }\n if (hasOverride) {\n cleanedEntity[fieldKey] = cleanedOverride\n }\n }\n if (Object.keys(cleanedEntity).length > 0) {\n cleaned[entityKey] = cleanedEntity\n }\n }\n\n await onSave(cleaned)\n } finally {\n setSaving(false)\n }\n }\n\n const renderAccordions = (list: RegisteredEntity[]) =>\n list.map((entity) => (\n <EntityAccordion\n key={entity.entityKey}\n entity={entity}\n rules={draft[entity.entityKey]}\n onToggle={handleToggle}\n onReset={handleReset}\n />\n ))\n\n return (\n <div className=\"space-y-6\">\n {/* Header + Save */}\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n <h2 className=\"text-lg font-semibold\">{t('settings.fieldRules')}</h2>\n <p className=\"text-sm text-muted-foreground mt-0.5\">\n {t('settings.fieldRules.subtitle')}\n </p>\n </div>\n <Button onClick={handleSave} disabled={!isDirty || saving} className=\"shrink-0\">\n {saving && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n {t('common.save')}\n </Button>\n </div>\n\n {/* Search */}\n {entities.length > 4 && (\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder={t('settings.fieldRules.searchPlaceholder')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] pl-8 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n )}\n\n {hasNoResults ? (\n <p className=\"text-sm text-muted-foreground py-8 text-center\">\n {t('settings.fieldRules.noEntities')}\n </p>\n ) : (\n <div className=\"space-y-6\">\n {/* Core register types — always visible */}\n {coreEntities.length > 0 && (\n <div className=\"space-y-2\">\n <SectionHeader label={t('settings.fieldRules.coreRegisters')} />\n {renderAccordions(coreEntities)}\n </div>\n )}\n\n {/* Extras: standalone + plugin groups — behind \"Load more\" */}\n {showExtras && (\n <>\n {/* Standalone non-core, non-plugin entities */}\n {standaloneEntities.length > 0 && (\n <div className=\"space-y-2\">\n <SectionHeader label={t('settings.fieldRules.otherRegisters')} />\n {renderAccordions(standaloneEntities)}\n </div>\n )}\n\n {/* Plugin groups — each with plugin name + icon header */}\n {pluginGroups.map((group) => (\n <div key={group.pluginId} className=\"space-y-2\">\n <PluginSectionHeader\n name={group.pluginName}\n iconName={group.pluginIcon}\n />\n {renderAccordions(group.entities)}\n </div>\n ))}\n </>\n )}\n\n {/* Load more / show less toggle */}\n {hasExtras && !isSearching && (\n <button\n type=\"button\"\n onClick={() => setShowMore(!showMore)}\n className=\"flex w-full items-center justify-center gap-2 rounded-lg border border-dashed py-3 text-sm text-muted-foreground hover:text-foreground hover:border-border transition-colors\"\n >\n <ChevronsUpDown className=\"h-4 w-4\" />\n {showMore\n ? t('settings.fieldRules.showLess')\n : t('settings.fieldRules.showMore', { count: String(extraCount) })}\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","import type { FieldDef, EntityDef } from '../types/crud'\nimport type { EntityArchetype } from '../types/entities'\n\nexport interface RegisteredEntity {\n entityKey: string\n label: string\n labelPlural: string\n icon: string\n fields: FieldDef[]\n source: 'page' | 'plugin'\n archetype?: EntityArchetype\n pluginId?: string\n pluginName?: string\n pluginIcon?: string\n}\n\nconst registry = new Map<string, RegisteredEntity>()\n\nexport function deriveEntityKey(entityDef: EntityDef): string {\n if (entityDef.data?.archetypeKind) {\n return `${entityDef.data.archetype ?? ''}:${entityDef.data.archetypeKind}`\n }\n if (entityDef.data?.archetype) {\n return entityDef.data.archetype\n }\n return entityDef.data?.table ?? entityDef.name\n}\n\nexport function registerEntity(entity: RegisteredEntity): void {\n registry.set(entity.entityKey, entity)\n}\n\nexport function getRegisteredEntities(): RegisteredEntity[] {\n return Array.from(registry.values())\n}\n\nexport function getEntityByKey(key: string): RegisteredEntity | undefined {\n return registry.get(key)\n}\n","import { FieldRulesSettings } from './FieldRulesSettings'\nimport { useOrganizationStore } from '../../stores/organization.store'\nimport { useOrgAdapterOptional } from '../../lib/org-context'\nimport { getRegisteredEntities } from '../../lib/entity-registry'\nimport { toast } from '../notifications/ToastProvider'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport type { TenantFieldRules, TenantSettings } from '../../types'\n\nfunction extractFieldRules(settings: unknown): TenantFieldRules {\n if (!settings || typeof settings !== 'object') return {}\n return (settings as Record<string, unknown>).fieldRules as TenantFieldRules ?? {}\n}\n\nexport function ConnectedFieldRulesSettings() {\n const { t } = useTranslation()\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n const adapter = useOrgAdapterOptional()\n const entities = getRegisteredEntities()\n const rules = extractFieldRules(currentOrg?.settings)\n\n const handleSave = async (newRules: TenantFieldRules) => {\n if (!adapter || !currentOrg) return\n\n try {\n const currentSettings = (currentOrg.settings ?? {}) as Record<string, unknown>\n const updated = await adapter.updateOrg(currentOrg.id, {\n settings: {\n ...currentSettings,\n fieldRules: newRules,\n },\n })\n setCurrentOrg(updated)\n toast.success(t('settings.fieldRules.saved'))\n } catch (err: any) {\n toast.error(t('settings.fieldRules.saveFailed'), { description: err?.message })\n }\n }\n\n return (\n <FieldRulesSettings\n entities={entities}\n rules={rules}\n onSave={handleSave}\n />\n )\n}\n","import * as React from 'react'\nimport {\n AppShell,\n type NavigationItem,\n type BottomNavItem,\n type MobileHeaderVariant,\n ModuleLayoutProvider,\n PageTransition,\n type ModuleNavVariant,\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownLabel,\n DropdownSeparator,\n Avatar,\n AvatarImage,\n AvatarFallback,\n useLayoutStore,\n} from '@fayz-ai/ui'\nimport { CommandPalette, type CommandItem } from '../shell/components/layout/CommandPalette'\nimport { useOrganizationStore } from '../org/store'\nimport { useAuth } from '@fayz-ai/auth'\nimport { AuthGate } from '@fayz-ai/plugin-auth'\nimport { usePluginRuntime, resolvePluginComponent, useTranslation } from '@fayz-ai/core'\nimport type { PermissionAction, PluginNavigationEntry, PluginRouteDefinition, PluginSettingsTab } from '@fayz-ai/core'\nimport { useAdminPath, navigateTo, matchRoute, routeScore } from './routing'\nimport type { CustomPage } from './config'\nimport type { AuthProvider } from '@fayz-ai/core'\nimport { setEntityRouteMap } from '../lib/entity-routes'\nimport { usePermissionOptional } from '../permissions/context'\nimport { SettingsPage } from '../shell/components/settings/SettingsPage'\nimport { TeamTab } from '../shell/components/organization/TeamTab'\nimport { PermissionProfilesTab } from '../shell/components/organization/PermissionProfilesTab'\nimport { LocationsCrudPage } from '../shell/components/settings/LocationsCrudPage'\nimport { ConnectedFieldRulesSettings } from '../shell/components/settings/ConnectedFieldRulesSettings'\nimport { MapPin, Puzzle, ShieldCheck, SlidersHorizontal, Users } from 'lucide-react'\nimport * as LucideIcons from 'lucide-react'\n\n// ---------------------------------------------------------------------------\n// AdminShell — the working admin surface. Mounted INSIDE the providers (see\n// AdminProviders). Reads the resolved plugin runtime for navigation + routes,\n// wires the @fayz-ai/ui AppShell, and switches the main content on the hash path.\n// Custom pages (config.pages / manifest pages already resolved to components)\n// are merged into the same nav + route table.\n// ---------------------------------------------------------------------------\n\nexport interface AdminShellProps {\n appName: string\n layout?: 'sidebar' | 'topbar' | 'minimal'\n logo?: React.ReactNode\n pages?: CustomPage[]\n requireAuth?: boolean\n loginTagline?: string\n loginDescription?: string\n loginLogo?: React.ReactNode\n loginLayout?: 'split' | 'centered'\n showOAuth?: boolean\n oauthProviders?: Exclude<AuthProvider, 'email'>[]\n showSettings?: boolean\n showOrgSettings?: boolean\n /** Show the workspace/org switcher at the sidebar top. Default: true.\n * Single-org apps (config.org.multiOrg === false) get false from the\n * scaffold so B2C users never see an organization concept. */\n showOrgSwitcher?: boolean\n /** Show the branding (\"Identidade Visual\") + company \"Geral\" settings tabs.\n * Default: true. B2C apps pass false to hide org-identity settings. */\n showBranding?: boolean\n /** Wrap the main content in an inset \"framed\" card (default: true). The\n * sidebar is always flush/full-height. */\n contentFrame?: boolean\n /** How module-internal navigation renders. Defaults to 'tabs' for the\n * 'sidebar' layout and 'rail' for 'topbar'. */\n moduleNav?: ModuleNavVariant\n /** Mobile bottom tab bar, passed straight through to AppShell. */\n bottomNav?: BottomNavItem[]\n /** Fired when a bottom-nav `action` item (e.g. the center \"+\") is tapped. */\n onBottomNavAction?: (id: string) => void\n /** Mobile header treatment (<md), passed straight through to AppShell. */\n mobileHeader?: MobileHeaderVariant\n}\n\n// ---------------------------------------------------------------------------\n// WorkspaceSwitcher — sub-account / workspace selector at the sidebar top.\n// Reads the native org store (the one AdminProviders populates).\n// ---------------------------------------------------------------------------\n\nfunction WorkspaceSwitcher() {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n const userOrgs = useOrganizationStore((s) => s.userOrgs)\n const setCurrentOrg = useOrganizationStore((s) => s.setCurrentOrg)\n if (!currentOrg) return null\n\n const Building = LucideIcons.Building2\n const Chevron = LucideIcons.ChevronsUpDown\n const Check = LucideIcons.Check\n const options = userOrgs.length\n ? userOrgs\n : [{ orgId: currentOrg.id, orgName: currentOrg.name, orgSlug: currentOrg.slug }]\n\n return (\n <Dropdown>\n <DropdownTrigger asChild>\n <button className=\"flex w-full items-center gap-2 rounded-md border border-sidebar-border/60 bg-sidebar-accent/30 px-2 py-1.5 text-left transition-colors hover:bg-sidebar-accent\">\n <span className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-sidebar-accent text-sidebar-accent-foreground\">\n <Building className=\"h-3.5 w-3.5\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-sidebar-foreground\">{currentOrg.name}</span>\n <Chevron className=\"h-3.5 w-3.5 shrink-0 text-sidebar-muted\" />\n </button>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-56 bg-sidebar text-sidebar-foreground border-sidebar-border\">\n <DropdownLabel className=\"text-sidebar-muted\">Workspaces</DropdownLabel>\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {options.map((m) => (\n <DropdownItem\n key={m.orgId}\n onClick={() => setCurrentOrg({ id: m.orgId, name: m.orgName, slug: m.orgSlug, createdAt: '', updatedAt: '' })}\n className=\"flex items-center gap-2 focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{m.orgName}</span>\n {currentOrg.id === m.orgId && <Check className=\"h-4 w-4 shrink-0\" />}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n )\n}\n\n// ---------------------------------------------------------------------------\n// AdminUserMenu — user dropdown rendered in the sidebar bottom row.\n// ---------------------------------------------------------------------------\n\nfunction AdminUserMenu({\n user,\n onProfile,\n onSettings,\n onSignOut,\n}: {\n user?: { fullName?: string; email: string; avatarUrl?: string }\n onProfile?: () => void\n onSettings?: () => void\n onSignOut?: () => void\n}) {\n if (!user) return null\n const name = user.fullName ?? user.email\n const initials = name.replace(/[^A-Za-z0-9]/g, ' ').trim().split(/\\s+/).map((w) => w[0]).slice(0, 2).join('').toUpperCase() || '?'\n return (\n <Dropdown>\n <DropdownTrigger asChild>\n <button className=\"flex min-w-0 flex-1 items-center gap-2 rounded-md px-1.5 py-1 text-left transition-colors hover:bg-sidebar-accent/50\">\n <Avatar className=\"h-7 w-7 shrink-0\">\n {user.avatarUrl && <AvatarImage src={user.avatarUrl} alt={name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <span className=\"min-w-0 truncate text-xs font-medium text-sidebar-foreground\">{name}</span>\n </button>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-56 bg-sidebar text-sidebar-foreground border-sidebar-border\">\n <DropdownLabel className=\"truncate text-sidebar-muted\">{user.email}</DropdownLabel>\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {onProfile && (\n <DropdownItem onClick={onProfile} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Profile</DropdownItem>\n )}\n {onSettings && (\n <DropdownItem onClick={onSettings} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Settings</DropdownItem>\n )}\n <DropdownSeparator className=\"bg-sidebar-border\" />\n {onSignOut && (\n <DropdownItem onClick={onSignOut} className=\"focus:bg-sidebar-accent focus:text-sidebar-accent-foreground\">Sign out</DropdownItem>\n )}\n </DropdownContent>\n </Dropdown>\n )\n}\n\nfunction navEntryToItem(entry: PluginNavigationEntry): NavigationItem {\n return {\n id: entry.id ?? `${entry.route}`,\n label: entry.label,\n icon: entry.icon ?? 'LayoutTemplate',\n route: entry.route,\n section: entry.section,\n badge: entry.badge,\n }\n}\n\ntype OrderedNavigationItem = NavigationItem & { position: number }\n\ninterface RouteEntry {\n path: string\n Component: React.ComponentType<Record<string, unknown>>\n /** Render edge-to-edge with no page padding wrapper (chat, kanban, canvas). */\n fullBleed?: boolean\n}\n\nfunction registerEntityRoute(\n component: unknown,\n path: string,\n entityRouteMap: Map<string, string>,\n): void {\n const entityDef = (component as any)?.__entityDef\n if (!entityDef?.data) return\n\n if (entityDef.data.archetypeKind) {\n entityRouteMap.set(`${entityDef.data.archetype ?? ''}:${entityDef.data.archetypeKind}`, path)\n } else if (entityDef.data.archetype) {\n entityRouteMap.set(entityDef.data.archetype, path)\n }\n}\n\nfunction sectionOrder(section: NavigationItem['section']): number {\n return section === 'main' ? 0 : section === 'secondary' ? 1 : 2\n}\n\nfunction compareNavigation(a: NavigationItem & { position?: number }, b: NavigationItem & { position?: number }): number {\n const sectionDelta = sectionOrder(a.section) - sectionOrder(b.section)\n if (sectionDelta !== 0) return sectionDelta\n return (a.position ?? 0) - (b.position ?? 0)\n}\n\nfunction findModuleParent(\n item: OrderedNavigationItem,\n items: OrderedNavigationItem[],\n): OrderedNavigationItem | null {\n const candidates = items\n .filter((candidate) =>\n candidate.section === item.section &&\n candidate.route !== item.route &&\n item.route.startsWith(`${candidate.route}/`)\n )\n .sort((a, b) => b.route.length - a.route.length)\n\n return candidates[0] ?? null\n}\n\nfunction pageToNavigationItem(page: CustomPage, fallbackPosition: number): OrderedNavigationItem | null {\n if (!page.label) return null\n return {\n id: `page:${page.path}`,\n label: page.label,\n icon: page.icon ?? 'FileText',\n route: page.path,\n section: page.section ?? 'main',\n badge: page.badge,\n permission: page.permission,\n position: page.position ?? fallbackPosition,\n children: page.children\n ?.filter((child) => child.nav !== false)\n .map((child, index) => pageToNavigationItem(child, index))\n .filter((item): item is OrderedNavigationItem => Boolean(item)),\n }\n}\n\nfunction collectPageRoutes(\n pages: CustomPage[],\n out: RouteEntry[] = [],\n entityRouteMap: Map<string, string> = new Map(),\n): RouteEntry[] {\n for (const page of pages) {\n if (page.component && page.path !== '/settings') {\n if ((page.component as any).__isCrudPage) {\n ;(page.component as any).__crudBasePath = page.path\n registerEntityRoute(page.component, page.path, entityRouteMap)\n }\n out.push({ path: page.path, Component: page.component as React.ComponentType<Record<string, unknown>> })\n out.push({ path: `${page.path}/*`, Component: page.component as React.ComponentType<Record<string, unknown>> })\n }\n if (page.children?.length) collectPageRoutes(page.children, out, entityRouteMap)\n }\n return out\n}\n\nfunction buildSettingsTabs(\n pluginTabs: PluginSettingsTab[],\n can: (feature: string, action?: PermissionAction) => boolean,\n t: (key: string, params?: Record<string, string | number>) => string,\n showOrgSettings: boolean,\n): { id: string; label: string; icon?: React.ReactNode; component: React.ReactNode }[] {\n const settingsTabs: { id: string; label: string; icon?: React.ReactNode; component: React.ReactNode }[] = []\n\n if (showOrgSettings) {\n settingsTabs.push(\n { id: 'team', label: t('settings.team'), icon: <Users className=\"h-4 w-4\" />, component: <TeamTab /> },\n { id: 'permissions', label: t('settings.permissions'), icon: <ShieldCheck className=\"h-4 w-4\" />, component: <PermissionProfilesTab /> },\n { id: 'locations', label: t('settings.locations'), icon: <MapPin className=\"h-4 w-4\" />, component: <LocationsCrudPage /> },\n { id: 'field-rules', label: t('settings.fieldRules'), icon: <SlidersHorizontal className=\"h-4 w-4\" />, component: <ConnectedFieldRulesSettings /> },\n )\n }\n\n for (const tab of pluginTabs) {\n if (tab.permission && !can(tab.permission.feature, tab.permission.action)) continue\n if (!tab.component) continue\n\n const IconComp = tab.icon ? (LucideIcons as any)[tab.icon] ?? Puzzle : Puzzle\n const labelKey = `settings.plugin.${tab.id}`\n const translated = t(labelKey)\n settingsTabs.push({\n id: tab.id,\n label: translated === labelKey ? tab.label : translated,\n icon: React.createElement(IconComp as React.ComponentType<{ className?: string }>, { className: 'h-4 w-4' }),\n component: React.createElement(tab.component),\n // Flag plugin-contributed tabs so SettingsPage draws the core/plugins divider.\n isPlugin: true,\n } as any)\n }\n\n return settingsTabs\n}\n\nfunction AdminShellInner({ appName, layout = 'sidebar', logo, pages = [], showSettings = true, showOrgSettings = false, showBranding = true, showOrgSwitcher = true, contentFrame = true, moduleNav, bottomNav, onBottomNavAction, mobileHeader }: AdminShellProps) {\n const runtime = usePluginRuntime()\n const t = useTranslation()\n const can = usePermissionOptional()\n const tr = (key: string, fallback: string) => {\n const v = t(key)\n return !v || v === key ? fallback : v\n }\n const path = useAdminPath()\n const { user, signOut } = useAuth()\n\n // Navigation: plugin entries + custom pages (deduped, plugin order preserved).\n const navigation = React.useMemo<NavigationItem[]>(() => {\n const items: OrderedNavigationItem[] = runtime.navigation.map((entry) => ({\n ...navEntryToItem(entry),\n position: entry.position,\n }))\n for (const [index, page] of pages.entries()) {\n // `nav: false` routes the page but keeps it out of the sidebar/topbar nav\n // (mobile-only pages reached via bottomNav/avatar). Routes are still built\n // from `pages` in collectPageRoutes below, so the page remains navigable.\n if (page.nav === false) continue\n const item = pageToNavigationItem(page, index + 1000)\n if (!item) continue\n\n const parent = findModuleParent(item, items)\n if (parent) {\n const children = parent.children ?? [{\n ...parent,\n id: `${parent.id}:index`,\n children: undefined,\n position: -1,\n }]\n if (!children.some((child) => child.route === item.route)) {\n parent.children = [...children, item].sort(compareNavigation)\n }\n continue\n }\n\n items.push(item)\n }\n return items.sort(compareNavigation)\n }, [runtime.navigation, pages])\n\n // Command palette (⌘K + the topbar Search button). The palette owns the ⌘K\n // key listener, so it must be MOUNTED for the shortcut to work — the topbar\n // Search button drives the same shared layout store.\n const commandPaletteOpen = useLayoutStore((s) => s.commandPaletteOpen)\n const setCommandPaletteOpen = useLayoutStore((s) => s.setCommandPaletteOpen)\n const commandItems = React.useMemo<CommandItem[]>(() => {\n const navGroup = tr('layout.commandPalette.navigation', 'Navigation')\n const items: CommandItem[] = []\n for (const nav of navigation) {\n items.push({ id: nav.id, label: nav.label, icon: nav.icon, group: navGroup, action: () => navigateTo(nav.route) })\n for (const child of nav.children ?? []) {\n items.push({ id: child.id, label: `${nav.label} · ${child.label}`, icon: child.icon, group: navGroup, action: () => navigateTo(child.route) })\n }\n }\n return items\n }, [navigation])\n\n // Route table: plugin routes + custom pages, most-specific-first.\n const routes = React.useMemo<RouteEntry[]>(() => {\n const list: RouteEntry[] = []\n const entityRouteMap = new Map<string, string>()\n for (const r of runtime.routes as PluginRouteDefinition[]) {\n const Component = resolvePluginComponent(r) as React.ComponentType<Record<string, unknown>> | undefined\n if (Component) {\n list.push({ path: r.path, Component, fullBleed: r.fullBleed })\n list.push({ path: `${r.path}/*`, Component, fullBleed: r.fullBleed })\n }\n }\n if (showSettings) list.push({ path: '/settings/*', Component: SettingsPage as React.ComponentType<Record<string, unknown>> })\n if (showSettings) list.push({ path: '/settings', Component: SettingsPage as React.ComponentType<Record<string, unknown>> })\n collectPageRoutes(pages, list, entityRouteMap)\n setEntityRouteMap(entityRouteMap)\n return list.sort((a, b) => routeScore(b.path) - routeScore(a.path))\n }, [runtime.routes, pages, showSettings])\n\n const match = React.useMemo(() => {\n for (const r of routes) {\n const params = matchRoute(r.path, path)\n if (params) return { route: r, params }\n }\n return null\n }, [routes, path])\n\n // Treat '/' as the index: redirect to the first nav entry once it's known.\n React.useEffect(() => {\n if (!match && (path === '/' || path === '') && navigation.length > 0) {\n navigateTo(navigation[0]!.route)\n }\n }, [match, path, navigation])\n\n const ActiveComponent = match?.route.Component\n const activeParams = match?.params ?? {}\n const settingsTabs = React.useMemo(\n () => buildSettingsTabs(runtime.settingsTabs as PluginSettingsTab[], can, t, showOrgSettings),\n [runtime.settingsTabs, can, t, showOrgSettings],\n )\n\n const shellUser = user\n ? { fullName: user.fullName ?? user.email, email: user.email, avatarUrl: user.avatarUrl }\n : undefined\n\n // Module-internal nav style: explicit override, else by layout (GHL-style\n // tabs for sidebar products, left rail for topbar products).\n const moduleVariant: ModuleNavVariant = moduleNav ?? (layout === 'sidebar' ? 'tabs' : 'rail')\n\n // The layout owns the page title (shown in the top header), derived from the\n // active navigation entry — individual pages don't render their own title.\n const activePageTitle = React.useMemo(() => {\n if (path === '/settings' || path.startsWith('/settings/')) return tr('common.settings', 'Settings')\n const candidates = navigation\n .filter((n) => n.route)\n .sort((a, b) => b.route.length - a.route.length)\n const hit = candidates.find((n) =>\n n.route === '/' ? path === '/' || path === '' : path === n.route || path.startsWith(n.route + '/') || path.startsWith(n.route),\n )\n return hit?.label ?? candidates.find((n) => n.route === '/')?.label ?? ''\n }, [navigation, path, tr])\n\n const activeContent = ActiveComponent ? (\n match.route.path === '/settings' || match.route.path === '/settings/*'\n ? <SettingsPage extraTabs={settingsTabs} showCompany={showBranding} showBranding={showBranding} />\n : <ActiveComponent {...activeParams} />\n ) : null\n\n return (\n <ModuleLayoutProvider variant={moduleVariant}>\n <AppShell\n variant={layout}\n contentFrame={contentFrame}\n navigation={navigation}\n logo={logo ?? <span className=\"text-lg font-bold\">{appName}</span>}\n user={shellUser}\n pageTitle={activePageTitle}\n currentPath={path}\n bottomNav={bottomNav}\n onBottomNavAction={onBottomNavAction}\n mobileHeader={mobileHeader}\n onNavigate={(route) => navigateTo(route)}\n onSignOut={() => { void signOut() }}\n onProfile={() => navigateTo('/perfil')}\n onSettings={() => navigateTo('/settings')}\n sidebarTopContent={showOrgSwitcher ? <WorkspaceSwitcher /> : undefined}\n userMenuSlot={\n <AdminUserMenu\n user={shellUser}\n onSettings={() => navigateTo('/settings')}\n onSignOut={() => { void signOut() }}\n />\n }\n >\n {activeContent ? (\n <PageTransition\n transitionKey={match?.route.path ?? path}\n className={match?.route.fullBleed ? 'h-full min-h-0' : undefined}\n >\n {match?.route.fullBleed\n ? <div className=\"h-full min-h-0 overflow-hidden\">{activeContent}</div>\n : <div className=\"space-y-4 p-3 md:space-y-6 md:p-6\">{activeContent}</div>}\n </PageTransition>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center p-12 text-center\">\n <p className=\"text-lg font-semibold text-foreground\">\n {navigation.length ? tr('common.notFound', 'Page not found') : tr('common.welcome', 'Welcome')}\n </p>\n {navigation.length > 0 && (\n <button\n className=\"mt-3 text-sm text-primary underline\"\n onClick={() => navigateTo(navigation[0]!.route)}\n >\n {navigation[0]!.label}\n </button>\n )}\n </div>\n )}\n </AppShell>\n <CommandPalette\n commands={commandItems}\n open={commandPaletteOpen}\n onOpenChange={setCommandPaletteOpen}\n />\n </ModuleLayoutProvider>\n )\n}\n\n/** The shell + an auth gate in front of it. */\nexport function AdminShell(props: AdminShellProps) {\n return (\n <AuthGate\n requireAuth={props.requireAuth ?? true}\n appName={props.appName}\n logo={props.logo}\n loginLogo={props.loginLogo}\n layout={props.loginLayout}\n tagline={props.loginTagline}\n description={props.loginDescription}\n showOAuth={props.showOAuth}\n oauthProviders={props.oauthProviders}\n >\n <AdminShellInner {...props} />\n </AuthGate>\n )\n}\nAdminShell.displayName = 'AdminShell'\n","import * as React from 'react'\nimport type { OrgAdapter, AuthAdapter } from '@fayz-ai/core'\nimport {\n PluginRuntimeProvider,\n resolvePluginRuntime,\n I18nProvider,\n coreTranslations,\n mergeTranslations,\n setCurrentLocale,\n} from '@fayz-ai/core'\nimport {\n AuthProvider,\n createAuthRuntime,\n type AuthLayout,\n type AuthPluginOptions,\n type ResolvedAuthPlugin,\n} from '@fayz-ai/plugin-auth'\nimport { NavTransitionProvider } from '@fayz-ai/ui'\nimport { createFayzSupabaseClient, getFayzSupabaseClientOptional } from '../supabase/client'\nimport { OrgProvider } from '../org/context'\nimport { createSupabaseOrgAdapter } from '../org/adapters/supabase'\nimport { createMockOrgAdapter } from '../org/adapters/mock'\nimport { useOrganizationStore } from '../org/store'\nimport { PermissionsProvider } from '../permissions/context'\nimport { ToastProvider } from '../shell/components/notifications/ToastProvider'\nimport { ChatFab, ChatPanel } from '../shell/components/chat'\nimport { useBillingStore } from '../billing/store'\nimport type { Plan } from '@fayz-ai/core'\nimport type { PlanConfig } from '../shell/types/billing'\nimport { useThemeStore } from '../shell/stores/theme.store'\nimport { resolveTheme, isSaasTheme } from '../shell/config/theme/utils'\nimport { AdminShell } from './AdminShell'\nimport { useAdminPath } from './routing'\nimport type { FayzAppConfig } from './config'\n\n// ---------------------------------------------------------------------------\n// Adapter resolution\n// ---------------------------------------------------------------------------\n\nfunction isResolvedAuthPlugin(value: FayzAppConfig['auth']): value is ResolvedAuthPlugin {\n return Boolean(value && 'kind' in value && value.kind === 'auth')\n}\n\nfunction resolveAuthRuntime(config: FayzAppConfig): ResolvedAuthPlugin {\n const auth = config.auth\n if (isResolvedAuthPlugin(auth)) return auth\n\n const provider = auth?.provider ?? auth?.adapter ?? (config.supabaseUrl ? 'supabase' : 'mock')\n const oauth = auth?.oauth ?? {\n enabled: auth?.showOAuth ?? false,\n providers: auth?.oauthProviders ?? ['google'],\n }\n\n return createAuthRuntime({\n provider,\n requireAuth: auth?.requireAuth ?? true,\n layout: auth?.layout ?? auth?.loginLayout,\n logo: auth?.logo ?? auth?.loginLogo,\n tagline: auth?.tagline ?? auth?.loginTagline,\n description: auth?.description ?? auth?.loginDescription,\n oauth,\n routes: auth?.routes,\n supabase: {\n url: auth?.supabase?.url ?? config.supabaseUrl,\n anonKey: auth?.supabase?.anonKey ?? config.supabaseAnonKey,\n client: auth?.supabase?.client ?? getFayzSupabaseClientOptional() ?? undefined,\n callbackUrl: auth?.supabase?.callbackUrl,\n resetPasswordUrl: auth?.supabase?.resetPasswordUrl,\n },\n } satisfies AuthPluginOptions)\n}\n\nexport function getAuthShellProps(auth: FayzAppConfig['auth']): {\n requireAuth?: boolean\n loginTagline?: string\n loginDescription?: string\n loginLogo?: React.ReactNode\n loginLayout?: AuthLayout\n showOAuth?: boolean\n oauthProviders?: Exclude<import('@fayz-ai/core').AuthProvider, 'email'>[]\n} {\n if (!auth) return {}\n if (isResolvedAuthPlugin(auth)) {\n return {\n requireAuth: auth.requireAuth,\n loginTagline: auth.tagline,\n loginDescription: auth.description,\n loginLogo: auth.logo,\n loginLayout: auth.layout,\n showOAuth: auth.oauth.enabled,\n oauthProviders: auth.oauth.providers,\n }\n }\n return {\n requireAuth: auth.requireAuth,\n loginTagline: auth.tagline ?? auth.loginTagline,\n loginDescription: auth.description ?? auth.loginDescription,\n loginLogo: auth.logo ?? auth.loginLogo,\n loginLayout: auth.layout ?? auth.loginLayout,\n showOAuth: auth.oauth?.enabled ?? auth.showOAuth,\n oauthProviders: auth.oauth?.providers ?? auth.oauthProviders,\n }\n}\n\nfunction resolveOrgAdapter(config: FayzAppConfig, authAdapter?: AuthAdapter): OrgAdapter {\n const org = config.org\n if (org?.adapter && typeof org.adapter === 'object') return org.adapter as OrgAdapter\n\n const strategy = org?.adapter ?? (config.supabaseUrl ? 'supabase' : 'mock')\n // The app declares its own business roles via permissions.defaultProfiles; pass\n // their identity (id/name/description) to both adapters so the role SET is\n // app-owned, not baked into the SDK.\n const declaredRoles = config.permissions?.defaultProfiles?.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n }))\n // Inject the resolved auth adapter so the org adapter can DELIVER invites (send\n // the e-mail + create the auth user) — org owns the audit row + role, auth owns delivery.\n if (strategy === 'supabase') return createSupabaseOrgAdapter({ roles: declaredRoles, authAdapter })\n return createMockOrgAdapter(config.permissions?.defaultProfiles)\n}\n\nfunction buildI18nConfig(config: FayzAppConfig): {\n defaultLocale: string\n supported: string[]\n translations: Record<string, Record<string, string>>\n} {\n const defaultLocale = config.locale?.default ?? 'en'\n const supported = config.locale?.supported ?? [defaultLocale, 'pt-BR']\n\n const pluginTranslations: Array<Record<string, Record<string, string>>> = []\n for (const plugin of config.plugins ?? []) {\n if (plugin.locales) pluginTranslations.push(plugin.locales)\n }\n\n const translations = mergeTranslations(\n coreTranslations,\n ...pluginTranslations,\n config.locale?.translations,\n )\n\n return { defaultLocale, supported, translations }\n}\n\n// ---------------------------------------------------------------------------\n// BillingInitializer — seeds the billing store from config on mount\n// ---------------------------------------------------------------------------\n\nfunction BillingInitializer({ config }: { config: FayzAppConfig }) {\n const setPlans = useBillingStore((s) => s.setPlans)\n React.useEffect(() => {\n if (config.billing?.plans) setPlans(config.billing.plans.map(normalizeBillingPlan))\n }, [config.billing, setPlans])\n return null\n}\n\nfunction normalizeBillingPlan(plan: PlanConfig): Plan {\n return {\n id: plan.id,\n name: plan.name,\n description: plan.description,\n price: plan.priceMonthly ?? plan.prices?.monthly ?? 0,\n currency: plan.currency ?? 'USD',\n interval: 'month',\n features: plan.features,\n highlighted: plan.popular,\n stripePriceId: undefined,\n }\n}\n\nfunction ThemeInitializer({ config }: { config: FayzAppConfig }) {\n const initialize = useThemeStore((s) => s.initialize)\n const setOverrides = useThemeStore((s) => s.setOverrides)\n const setMode = useThemeStore((s) => s.setMode)\n\n React.useEffect(() => {\n if (config.theme) {\n const resolved = isSaasTheme(config.theme)\n ? resolveTheme(config.theme)\n : config.theme\n setOverrides(resolved)\n }\n if (config.defaultThemeMode && typeof window !== 'undefined' && !localStorage.getItem('saas-core:theme-mode')) {\n setMode(config.defaultThemeMode)\n }\n initialize()\n }, [config.defaultThemeMode, config.theme, initialize, setMode, setOverrides])\n\n return null\n}\n\n// ---------------------------------------------------------------------------\n// AdminProviders — the provider stack shared by the admin factory/createSaasApp\n// sugar path AND the manifest-driven AdminScaffold. Resolves adapters + i18n\n// once (stable refs) and recomputes the plugin runtime reactively as the path\n// changes, so route-scoped widget visibility stays correct.\n//\n// AuthProvider → OrgProvider → PluginRuntimeProvider\n// → PermissionsProvider → I18nProvider → (BillingInitializer + children)\n// ---------------------------------------------------------------------------\n\nexport function AdminProviders({ config, children }: { config: FayzAppConfig; children: React.ReactNode }) {\n const currentOrg = useOrganizationStore((s) => s.currentOrg)\n\n // Resolve adapters / i18n once per config identity.\n const resolved = React.useMemo(() => {\n if (config.supabaseUrl && config.supabaseAnonKey) {\n createFayzSupabaseClient(config.supabaseUrl, config.supabaseAnonKey)\n }\n const i18n = buildI18nConfig(config)\n const authRuntime = resolveAuthRuntime(config)\n return {\n authRuntime,\n orgAdapter: resolveOrgAdapter(config, authRuntime.adapter),\n i18n,\n plugins: config.plugins ?? [],\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config])\n\n React.useEffect(() => {\n setCurrentLocale(resolved.i18n.defaultLocale)\n }, [resolved.i18n.defaultLocale])\n\n // Recompute the plugin runtime when the hash path or tenant changes\n // (route-scoped visibility + tenant-scoped plugin data providers).\n const path = useAdminPath()\n const runtime = React.useMemo(\n () =>\n resolvePluginRuntime({\n plugins: resolved.plugins,\n context: {\n tenant: currentOrg\n ? {\n id: currentOrg.id,\n slug: currentOrg.slug,\n verticalId: currentOrg.verticalId,\n plan: currentOrg.plan,\n }\n : null,\n user: null,\n currentPath: path,\n matchedPath: path,\n layout: config.layout ?? 'sidebar',\n },\n }),\n [resolved.plugins, path, config.layout, currentOrg],\n )\n\n return (\n <AuthProvider adapter={resolved.authRuntime.adapter}>\n <OrgProvider adapter={resolved.orgAdapter} autoCreate={config.org?.autoCreate ?? true}>\n <PluginRuntimeProvider value={runtime}>\n <PermissionsProvider config={config.permissions}>\n <I18nProvider value={resolved.i18n}>\n <ThemeInitializer config={config} />\n <BillingInitializer config={config} />\n <ToastProvider />\n <NavTransitionProvider value={config.navTransition ?? 'slide'}>\n {children}\n </NavTransitionProvider>\n {config.chat?.enabled !== false && config.chat ? (\n <>\n <ChatFab apiEndpoint={config.chat.apiEndpoint} systemPrompt={config.chat.systemPrompt} />\n <ChatPanel title={config.chat.title} apiEndpoint={config.chat.apiEndpoint} systemPrompt={config.chat.systemPrompt} />\n </>\n ) : null}\n </I18nProvider>\n </PermissionsProvider>\n </PluginRuntimeProvider>\n </OrgProvider>\n </AuthProvider>\n )\n}\nAdminProviders.displayName = 'AdminProviders'\n\n// ---------------------------------------------------------------------------\n// createFayzApp — declarative admin app factory (sugar over the manifest path;\n// equivalent to renderApp(defineSaas(config)), sharing AdminProviders +\n// AdminShell with the scaffold).\n//\n// const App = createFayzApp({ name: 'Glow Studio', plugins: [...] })\n// export default App\n// ---------------------------------------------------------------------------\n\nexport function createFayzApp(config: FayzAppConfig): React.ComponentType {\n const authShellProps = getAuthShellProps(config.auth)\n function FayzApp({ children }: { children?: React.ReactNode }) {\n return (\n <AdminProviders config={config}>\n {children ?? (\n <AdminShell\n appName={config.name}\n logo={config.logo}\n layout={config.layout}\n contentFrame={config.contentFrame}\n moduleNav={config.moduleNav}\n bottomNav={config.bottomNav}\n pages={config.pages}\n {...authShellProps}\n showSettings\n showOrgSettings={config.orgSettings ?? Boolean(config.org)}\n showBranding={config.branding ?? true}\n />\n )}\n </AdminProviders>\n )\n }\n FayzApp.displayName = `FayzApp(${config.name})`\n return FayzApp\n}\n","import * as React from 'react'\nimport {\n registerScaffold,\n defineApp,\n getPluginFactory,\n getComponent,\n} from '@fayz-ai/core'\nimport type {\n AppManifest,\n PluginManifest,\n LocaleConfig,\n PermissionsConfig,\n BillingConfig as ManifestBillingConfig,\n} from '@fayz-ai/core'\nimport { AdminProviders, getAuthShellProps } from './admin-app'\nimport { AdminShell } from './AdminShell'\nimport type { FayzAppConfig, CustomPage } from './config'\n\n// ---------------------------------------------------------------------------\n// Admin scaffold — renders an admin app from a pure-data AppManifest. Mirrors\n// the storefront scaffold's dual path: defineSaas turns a FayzAppConfig into a\n// manifest (the sugar→data direction), and AdminScaffold turns a manifest back\n// into the provider stack + shell (the data→render direction). Plugins live in\n// the manifest as PluginRefs (id + JSON config) and are resolved to live\n// PluginManifests through the plugin-factory registry, exactly the contract a\n// generated app's plugins.generated.ts populates.\n// ---------------------------------------------------------------------------\n\nfunction slug(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'app'\n}\n\nconst liveConfigOption = '__fayzLiveConfigRef'\nconst liveSaasConfigs = new Map<string, FayzAppConfig>()\n\nfunction getAuthRequireAuth(config: FayzAppConfig): boolean {\n return config.auth?.requireAuth ?? true\n}\n\nfunction getLiveConfigRef(id: string): string {\n return `code:${id}`\n}\n\n/** Fayz/Saas config → AppManifest (sugar → data). During the Beauty/Resto\n * migration, config-authored apps keep a live config ref so renderApp can\n * preserve code-backed plugins and custom pages while the JSON manifest path\n * matures. Serialized manifests still resolve through plugin/page registries. */\nexport function defineSaas(config: FayzAppConfig): AppManifest {\n const id = slug(config.name)\n const configRef = getLiveConfigRef(id)\n liveSaasConfigs.set(configRef, config)\n return defineApp({\n id,\n name: config.name,\n backend: config.supabaseUrl\n ? { provider: 'supabase', url: config.supabaseUrl }\n : { provider: 'mock' },\n locale: config.locale as LocaleConfig | undefined,\n theme: config.theme as Record<string, unknown> | undefined,\n permissions: config.permissions,\n billing: config.billing as ManifestBillingConfig | undefined,\n surfaces: {\n admin: {\n scaffold: 'admin',\n plugins: (config.plugins ?? []).map((p) => ({ id: p.id })),\n options: {\n [liveConfigOption]: configRef,\n layout: config.layout ?? 'sidebar',\n requireAuth: getAuthRequireAuth(config),\n },\n },\n },\n })\n}\n\n/** Resolve a manifest's PluginRefs into live PluginManifests via the\n * plugin-factory registry. Unknown ids are skipped with a console warning so a\n * partial install degrades instead of crashing. */\nfunction resolvePlugins(manifest: AppManifest, surfaceName: string): PluginManifest[] {\n const refs = manifest.surfaces[surfaceName]?.plugins ?? []\n const plugins: PluginManifest[] = []\n for (const ref of refs) {\n if (ref.enabled === false) continue\n const factory = getPluginFactory(ref.id)\n if (!factory) {\n // eslint-disable-next-line no-console\n console.warn(`[@fayz-ai/saas] No plugin factory registered for \"${ref.id}\". Did plugins.generated.ts run?`)\n continue\n }\n plugins.push(factory(ref.config) as PluginManifest)\n }\n return plugins\n}\n\n/** Resolve manifest pages that reference a registered component id into the\n * CustomPage shape the shell renders. (entity/blocks pages are handled by the\n * plugins that own them; component pages are the app-level escape hatch.) */\nfunction resolvePages(manifest: AppManifest, surfaceName: string): CustomPage[] {\n const pages = manifest.surfaces[surfaceName]?.pages ?? []\n const out: CustomPage[] = []\n for (const p of pages) {\n if (!p.component) continue\n const Component = getComponent(p.component) as React.ComponentType | undefined\n if (!Component) {\n // eslint-disable-next-line no-console\n console.warn(`[@fayz-ai/saas] Manifest page \"${p.path}\" references unregistered component \"${p.component}\".`)\n continue\n }\n out.push({ path: p.path, label: p.label, icon: p.icon, section: p.section, component: Component })\n }\n return out\n}\n\n/** AppManifest → FayzAppConfig (data → render). */\nfunction manifestToFayzConfig(manifest: AppManifest, surfaceName: string): FayzAppConfig {\n const options = (manifest.surfaces[surfaceName]?.options ?? {}) as Record<string, unknown>\n const liveConfigRef = options[liveConfigOption]\n const liveConfig = typeof liveConfigRef === 'string' ? liveSaasConfigs.get(liveConfigRef) : undefined\n if (liveConfig) return liveConfig\n\n return {\n name: manifest.name,\n supabaseUrl: manifest.backend?.provider === 'supabase' ? manifest.backend.url : undefined,\n plugins: resolvePlugins(manifest, surfaceName),\n pages: resolvePages(manifest, surfaceName),\n theme: manifest.theme as FayzAppConfig['theme'],\n layout: (options.layout as FayzAppConfig['layout']) ?? 'sidebar',\n locale: manifest.locale as LocaleConfig | undefined,\n permissions: manifest.permissions as PermissionsConfig | undefined,\n billing: manifest.billing as FayzAppConfig['billing'],\n auth: { requireAuth: (options.requireAuth as boolean) ?? true },\n }\n}\n\nexport function AdminScaffold({ manifest, surface }: { manifest: AppManifest; surface: string }) {\n const config = React.useMemo(() => manifestToFayzConfig(manifest, surface), [manifest, surface])\n const authShellProps = React.useMemo(() => getAuthShellProps(config.auth), [config.auth])\n\n return (\n <AdminProviders config={config}>\n <AdminShell\n appName={config.name}\n logo={config.logo}\n layout={config.layout}\n bottomNav={config.bottomNav}\n onBottomNavAction={config.onBottomNavAction}\n mobileHeader={config.mobileHeader}\n pages={config.pages}\n {...authShellProps}\n showSettings\n showOrgSettings={config.orgSettings ?? Boolean(config.org)}\n showOrgSwitcher={config.org?.multiOrg !== false}\n showBranding={config.branding ?? true}\n />\n </AdminProviders>\n )\n}\nAdminScaffold.displayName = 'AdminScaffold'\n\n// Self-register so renderApp(manifest) can resolve the 'admin' scaffold once\n// this package is imported.\nregisterScaffold('admin', AdminScaffold, { source: 'sdk', label: 'Admin' })\n","import React, { useEffect, useState, useMemo, useCallback } from 'react'\nimport {\n CalendarDays, FileText, CircleDashed, CircleEllipsis, CircleCheckBig,\n CircleAlert, Ban, ShoppingBag, Clock, UserX, ExternalLink,\n} from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport type { EntityDef } from '../../../types/crud'\nimport type { ClientDocument, ClientDocumentStage, ClientOrdersProvider, ClientOrdersNavigator, ClientOrdersStageFilter } from '../../../types/client-orders'\n\n// ---------------------------------------------------------------------------\n// Stage badge config\n// ---------------------------------------------------------------------------\n\ninterface StageDef {\n icon: React.ElementType\n color: string\n labelKey: string\n}\n\nconst STAGE_CONFIG: Record<string, StageDef> = {\n draft: { icon: CircleDashed, color: 'bg-muted text-muted-foreground', labelKey: 'crud.orders.stage.draft' },\n quoted: { icon: FileText, color: 'bg-info-soft text-info-soft-foreground', labelKey: 'crud.orders.stage.quoted' },\n booked: { icon: CalendarDays, color: 'bg-magic-soft text-magic-soft-foreground', labelKey: 'crud.orders.stage.booked' },\n invoiced: { icon: FileText, color: 'bg-warning-soft text-warning-soft-foreground', labelKey: 'crud.orders.stage.invoiced' },\n paid: { icon: CircleCheckBig, color: 'bg-success-soft text-success-soft-foreground', labelKey: 'crud.orders.stage.paid' },\n partial: { icon: CircleEllipsis, color: 'bg-warning-soft text-warning-soft-foreground', labelKey: 'crud.orders.stage.partial' },\n overdue: { icon: CircleAlert, color: 'bg-destructive-soft text-destructive-soft-foreground', labelKey: 'crud.orders.stage.overdue' },\n cancelled: { icon: Ban, color: 'bg-muted text-muted-foreground', labelKey: 'crud.orders.stage.cancelled' },\n no_show: { icon: UserX, color: 'bg-destructive-soft text-destructive-soft-foreground', labelKey: 'crud.orders.stage.no_show' },\n completed: { icon: CircleCheckBig, color: 'bg-success-soft text-success-soft-foreground', labelKey: 'crud.orders.stage.completed' },\n}\n\n// ---------------------------------------------------------------------------\n// Column definitions\n// ---------------------------------------------------------------------------\n\nfunction useColumns(\n currency: { code: string; locale: string },\n t: (key: string) => string,\n onBookingClick?: (orderId: string) => void,\n onInvoiceClick?: (orderId: string) => void,\n): ColumnDef<ClientDocument, any>[] {\n return useMemo(() => [\n {\n accessorKey: 'date',\n header: t('crud.orders.columnDate'),\n size: 140,\n cell: ({ row }) => {\n const doc = row.original\n const dateStr = new Date(doc.date).toLocaleDateString(currency.locale, { day: '2-digit', month: 'short', year: '2-digit' })\n // If this order has a booking time, make it a clickable link\n if (doc.startsAt && onBookingClick) {\n const time = new Date(doc.startsAt).toLocaleTimeString(currency.locale, { hour: '2-digit', minute: '2-digit' })\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onBookingClick(doc.id) }}\n className=\"inline-flex items-center gap-1 text-xs text-magic hover:underline whitespace-nowrap\"\n >\n <CalendarDays className=\"h-3 w-3\" />\n {dateStr} {time}\n </button>\n )\n }\n return <span className=\"text-xs text-muted-foreground whitespace-nowrap\">{dateStr}</span>\n },\n },\n {\n id: 'stage',\n header: t('crud.orders.columnStage'),\n size: 120,\n cell: ({ row }) => {\n const cfg = STAGE_CONFIG[row.original.stage] ?? STAGE_CONFIG.draft\n const Icon = cfg.icon\n const translated = t(cfg.labelKey)\n const label = translated.startsWith('crud.orders.stage.') ? row.original.stage : translated\n return (\n <span className={`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${cfg.color}`}>\n <Icon className=\"h-2.5 w-2.5\" />\n {label}\n </span>\n )\n },\n },\n {\n accessorKey: 'referenceNumber',\n header: '#',\n size: 100,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num\n ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span>\n : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'description',\n header: t('crud.orders.columnDescription'),\n cell: ({ getValue }) => (\n <span className=\"text-sm truncate max-w-[200px] block\">\n {(getValue() as string) || '—'}\n </span>\n ),\n },\n {\n accessorKey: 'total',\n header: t('crud.orders.columnAmount'),\n size: 120,\n cell: ({ row }) => {\n const doc = row.original\n const val = doc.total\n if (!val) return <span className=\"text-muted-foreground\">—</span>\n const formatted = new Intl.NumberFormat(currency.locale, { style: 'currency', currency: currency.code }).format(val)\n const isFinancial = ['invoiced', 'paid', 'partial', 'overdue'].includes(doc.stage)\n // If invoiced/paid and has a reference, link to invoice detail\n if (isFinancial && onInvoiceClick) {\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onInvoiceClick(doc.id) }}\n className={`inline-flex items-center gap-1 font-medium text-sm text-primary hover:underline ${doc.stage === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}\n >\n {formatted}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n )\n }\n return (\n <span className={`font-medium text-sm ${doc.stage === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatted}\n </span>\n )\n },\n },\n ], [currency, t, onBookingClick, onInvoiceClick])\n}\n\n// ---------------------------------------------------------------------------\n// Tab Component\n// ---------------------------------------------------------------------------\n\nexport function ClientOrdersTab({\n item,\n entityDef,\n provider,\n navigator,\n initialStage,\n stageFilters,\n onBookingClick,\n onInvoiceClick,\n currency = { code: 'BRL', locale: 'pt-BR' },\n}: {\n item: any\n entityDef: EntityDef\n provider: ClientOrdersProvider\n navigator?: ClientOrdersNavigator\n initialStage?: string\n stageFilters?: ClientOrdersStageFilter[]\n onBookingClick?: (orderId: string) => void\n onInvoiceClick?: (orderId: string) => void\n currency?: { code: string; locale: string }\n}) {\n const { t } = useTranslation()\n const [docs, setDocs] = useState<ClientDocument[]>([])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(true)\n const [stageFilter, setStageFilter] = useState<string | undefined>(initialStage)\n\n const clientId = item.id as string\n\n const fetchDocs = useCallback(async () => {\n setLoading(true)\n try {\n const result = await provider.getDocuments({\n clientId,\n stages: stageFilter ? [stageFilter] : undefined,\n })\n setDocs(result.data)\n setTotal(result.total)\n } catch {\n setDocs([])\n setTotal(0)\n } finally {\n setLoading(false)\n }\n }, [clientId, stageFilter, provider])\n\n useEffect(() => { fetchDocs() }, [fetchDocs])\n\n useEffect(() => {\n setStageFilter(initialStage)\n }, [initialStage])\n\n const columns = useColumns(currency, t, onBookingClick, onInvoiceClick)\n\n const tags = useMemo(() => stageFilters ?? [\n { value: 'booked', label: t('crud.orders.stage.booked') },\n { value: 'invoiced', label: t('crud.orders.stage.invoiced') },\n { value: 'paid', label: t('crud.orders.stage.paid') },\n { value: 'quoted', label: t('crud.orders.stage.quoted') },\n ], [stageFilters, t])\n\n return (\n <ListView<ClientDocument>\n columns={columns}\n data={docs}\n loading={loading}\n searchPlaceholder={t('crud.orders.searchPlaceholder')}\n tags={tags}\n allTagLabel={t('crud.orders.all')}\n activeTag={stageFilter}\n onTagChange={(v: any) => setStageFilter(v)}\n onRowClick={navigator ? (row: any) => navigator.onNavigate(row) : undefined}\n emptyIcon={ShoppingBag}\n emptyMessage={t('crud.orders.noDocuments')}\n />\n )\n}\n","// ---------------------------------------------------------------------------\n// Factory: creates a ClientOrdersProvider that queries saas_core.orders\n// for a given client (party_id). The UI keeps the historical \"stage\" language,\n// but current archetype schemas expose this lifecycle as orders.status.\n// ---------------------------------------------------------------------------\n\nimport type { ClientOrdersProvider, ClientOrdersQuery, ClientDocument, ClientDocumentStage } from '../types/client-orders'\nimport { getSupabaseClientOptional } from './supabase'\n\nconst STAGE_FILTER_MAP: Record<string, string[]> = {\n quoted: ['draft', 'quoted'],\n booked: ['booked', 'scheduled', 'confirmed', 'in_progress', 'completed'],\n invoiced: ['invoiced', 'partial', 'overdue'],\n paid: ['paid'],\n}\n\nfunction mapOrderStatusToStage(status: string | null | undefined): ClientDocumentStage {\n switch (status) {\n case 'scheduled':\n case 'confirmed':\n case 'in_progress':\n return 'booked'\n case 'completed':\n return 'completed'\n case 'invoiced':\n case 'paid':\n case 'partial':\n case 'overdue':\n case 'cancelled':\n case 'no_show':\n case 'quoted':\n case 'draft':\n return status\n default:\n return 'draft'\n }\n}\n\nexport function createClientOrdersProvider(): ClientOrdersProvider {\n return {\n async getDocuments(query: ClientOrdersQuery): Promise<{ data: ClientDocument[]; total: number }> {\n const supabase = getSupabaseClientOptional()\n if (!supabase) return { data: [], total: 0 }\n\n try {\n let qb = supabase\n .schema('saas_core')\n .from('orders')\n .select('id, kind, status, total, reference_number, notes, metadata, created_at', { count: 'exact' })\n .eq('party_id', query.clientId)\n\n // Filter by stage groups against the current schema's status column.\n if (query.stages && query.stages.length > 0) {\n const allStages = query.stages.flatMap((s) => STAGE_FILTER_MAP[s] ?? [s])\n qb = qb.in('status', allStages)\n }\n\n qb = qb.order('created_at', { ascending: false })\n\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1)\n\n const { data, count } = await qb\n const orderIds = (data ?? []).map((row: any) => row.id).filter(Boolean)\n\n const bookingStartsByOrderId = new Map<string, string>()\n if (orderIds.length > 0) {\n const { data: bookings } = await supabase\n .schema('saas_core')\n .from('bookings')\n .select('order_id, starts_at')\n .in('order_id', orderIds)\n\n for (const booking of bookings ?? []) {\n if (booking.order_id && booking.starts_at && !bookingStartsByOrderId.has(booking.order_id)) {\n bookingStartsByOrderId.set(booking.order_id, booking.starts_at)\n }\n }\n }\n\n const results: ClientDocument[] = (data ?? []).map((row: any) => {\n const meta = (row.metadata ?? {}) as Record<string, unknown>\n const startsAt = bookingStartsByOrderId.get(row.id)\n return {\n id: row.id,\n kind: row.kind as string,\n stage: mapOrderStatusToStage(row.status as string | null | undefined),\n referenceNumber: row.reference_number ?? undefined,\n date: startsAt?.slice(0, 10) ?? (row.created_at as string)?.slice(0, 10) ?? '',\n startsAt,\n total: Number(row.total) || 0,\n paidAmount: Number(meta.paidAmount) || 0,\n description: (meta.itemsSummary as string) ?? (meta.serviceNames as string) ?? row.notes ?? undefined,\n createdAt: row.created_at as string,\n }\n })\n\n return { data: results, total: count ?? results.length }\n } catch {\n return { data: [], total: 0 }\n }\n },\n }\n}\n","import { getSupabaseClientOptional } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface EntityLookupResult {\n id: string\n label: string\n subtitle?: string\n group?: string\n icon?: string\n price?: number\n data?: Record<string, unknown>\n}\n\nexport type EntityLookupMap = Record<string, EntityLookup>\n\nexport interface EntityLookup {\n search(query: string): Promise<EntityLookupResult[]>\n getById(id: string): Promise<EntityLookupResult | null>\n list?(): Promise<EntityLookupResult[]>\n}\n\nexport type ArchetypeType = 'person' | 'product' | 'service' | 'location'\n\n// ---------------------------------------------------------------------------\n// Archetype display config\n// ---------------------------------------------------------------------------\n\nconst ARCHETYPE_DISPLAY: Record<ArchetypeType, {\n table: string\n labelField: string\n subtitleFields: string[]\n priceField?: string\n groupField?: string\n}> = {\n person: { table: 'persons', labelField: 'name', subtitleFields: ['phone'], groupField: 'kind' },\n product: { table: 'products', labelField: 'name', subtitleFields: ['sku', 'description'], priceField: 'price' },\n service: { table: 'services', labelField: 'name', subtitleFields: ['duration_minutes', 'description'], priceField: 'price' },\n location: { table: 'locations', labelField: 'name', subtitleFields: ['city', 'address'], groupField: 'kind' },\n}\n\ninterface ArchetypeLookupConfig {\n archetype: ArchetypeType\n kind?: string | string[]\n kindLabels?: Record<string, string>\n limit?: number\n subtitleFields?: string[]\n}\n\nfunction toResult(\n row: Record<string, unknown>,\n display: typeof ARCHETYPE_DISPLAY[ArchetypeType],\n kindLabels?: Record<string, string>,\n): EntityLookupResult {\n const label = String(row[display.labelField] ?? row.name ?? '')\n const subtitleParts = display.subtitleFields\n .map((f) => row[f])\n .filter(Boolean)\n .map((v) => {\n if (typeof v === 'number') return `${v}min`\n return String(v)\n })\n\n let group: string | undefined\n if (display.groupField && row[display.groupField]) {\n const rawGroup = String(row[display.groupField])\n group = kindLabels?.[rawGroup] ?? rawGroup\n }\n\n return {\n id: String(row.id),\n label,\n subtitle: subtitleParts.length > 0 ? subtitleParts.join(' · ') : undefined,\n group,\n price: display.priceField ? Number(row[display.priceField]) || undefined : undefined,\n data: row,\n }\n}\n\n/**\n * Create an EntityLookup that queries a saas_core archetype table via Supabase.\n * Returns empty results if Supabase is not configured.\n */\nexport function createArchetypeLookup(config: ArchetypeLookupConfig): EntityLookup {\n const baseDisplay = ARCHETYPE_DISPLAY[config.archetype]\n const display = config.subtitleFields\n ? { ...baseDisplay, subtitleFields: config.subtitleFields }\n : baseDisplay\n const limit = config.limit ?? 20\n const kinds = config.kind\n ? Array.isArray(config.kind) ? config.kind : [config.kind]\n : undefined\n\n function applyKindFilter(qb: any) {\n if (kinds && kinds.length === 1) return qb.eq('kind', kinds[0])\n if (kinds && kinds.length > 1) return qb.in('kind', kinds)\n return qb\n }\n\n return {\n async search(query: string) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n\n let qb = supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('is_active', true)\n .order(display.labelField, { ascending: true })\n .limit(limit)\n\n if (query) qb = qb.ilike(display.labelField, `%${query}%`)\n qb = applyKindFilter(qb)\n\n const { data } = await qb\n return (data ?? []).map((row: Record<string, unknown>) =>\n toResult(row, display, config.kindLabels),\n )\n },\n\n async list() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return []\n\n let qb = supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('is_active', true)\n .order(display.labelField, { ascending: true })\n .limit(limit)\n\n qb = applyKindFilter(qb)\n\n const { data } = await qb\n return (data ?? []).map((row: Record<string, unknown>) =>\n toResult(row, display, config.kindLabels),\n )\n },\n\n async getById(id: string) {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) return null\n\n const { data } = await supabase\n .schema('saas_core')\n .from(display.table)\n .select('*')\n .eq('id', id)\n .single()\n\n return data\n ? toResult(data as Record<string, unknown>, display, config.kindLabels)\n : null\n },\n }\n}\n","import React from 'react'\n\n/**\n * Page stub for modules that are planned but not built yet.\n * Usage: { path: '/marketing', label: 'Marketing', icon: 'Megaphone', component: createPlaceholder('Marketing') }\n */\nexport function createPlaceholder(title: string, description?: string): React.FC {\n return function PlaceholderPage() {\n return React.createElement(\n 'div',\n { className: 'mx-auto max-w-4xl' },\n React.createElement('h1', { className: 'text-3xl font-bold text-foreground' }, title),\n description\n ? React.createElement('p', { className: 'mt-1 text-muted-foreground' }, description)\n : null,\n React.createElement(\n 'div',\n { className: 'mt-8 flex items-center justify-center rounded-card border border-dashed border-border bg-card p-16' },\n React.createElement(\n 'div',\n { className: 'text-center' },\n React.createElement('p', { className: 'text-lg font-medium text-muted-foreground' }, 'Coming Soon'),\n React.createElement(\n 'p',\n { className: 'mt-1 text-sm text-muted-foreground/70' },\n 'This module is being built as a plugin.',\n ),\n ),\n ),\n )\n }\n}\n","import React from 'react'\nimport { cn } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// ToggleRow — a single setting with label, description, and checkbox\n// ---------------------------------------------------------------------------\n\nexport function ToggleRow({ label, description, checked, onChange, disabled }: {\n label: string\n description?: string\n checked: boolean\n onChange: (checked: boolean) => void\n disabled?: boolean\n}) {\n return (\n <label className={cn(\n 'flex items-center justify-between gap-4 py-3 cursor-pointer',\n disabled && 'opacity-50 cursor-not-allowed',\n )}>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{label}</p>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => !disabled && onChange(!checked)}\n className={cn(\n 'relative inline-flex h-5 w-9 shrink-0 rounded-full transition-colors duration-200',\n checked ? 'bg-primary' : 'bg-muted',\n disabled && 'cursor-not-allowed',\n )}\n >\n <span className={cn(\n 'inline-block h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200 mt-0.5',\n checked ? 'translate-x-4 ml-0.5' : 'translate-x-0.5',\n )} />\n </button>\n </label>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SelectRow — a single setting with label, description, and select dropdown\n// ---------------------------------------------------------------------------\n\nexport function SelectRow({ label, description, value, options, onChange, disabled }: {\n label: string\n description?: string\n value: string\n options: { value: string; label: string }[]\n onChange: (value: string) => void\n disabled?: boolean\n}) {\n return (\n <label className={cn(\n 'flex items-center justify-between gap-4 py-3',\n disabled && 'opacity-50 cursor-not-allowed',\n )}>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{label}</p>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n className=\"h-8 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 text-sm\"\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n </label>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SettingsGroup — a bordered section with title and children\n// ---------------------------------------------------------------------------\n\nexport function SettingsGroup({ title, description, children }: {\n title: string\n description?: string\n children: React.ReactNode\n}) {\n return (\n <div>\n <div className=\"px-1 pb-1 pt-4 first:pt-0\">\n <h3 className=\"text-sm font-semibold\">{title}</h3>\n {description && <p className=\"text-[10px] text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm px-5 divide-y\">\n {children}\n </div>\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { cn } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { ICON_MAP } from '@fayz-ai/ui'\nimport { useModuleLayout } from '@fayz-ai/ui'\nimport type { PluginQuickAction } from '@fayz-ai/core'\n\n/**\n * Quick actions button for plugin modules.\n * Shows a \"+\" button that opens a popover with contextual insert actions.\n * Reusable by any plugin.\n */\nexport function QuickActionsButton({ actions, className }: {\n actions: PluginQuickAction[]\n className?: string\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n // Solid primary in sidebar/tabs products (GHL-style), outline in topbar products.\n const variant = useModuleLayout() === 'tabs' ? 'default' : 'outline'\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n if (actions.length === 0) return null\n\n return (\n <div ref={ref} className={cn('relative', className)}>\n <Button\n variant={variant}\n size=\"sm\"\n onClick={() => setOpen(!open)}\n className={cn(open && variant === 'outline' && 'bg-muted')}\n >\n <Plus className={cn('h-3.5 w-3.5 transition-transform duration-200', open && 'rotate-45')} />\n <span>New</span>\n </Button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full right-0 z-50 mt-2 w-64 rounded-xl border bg-popover shadow-lg overflow-hidden animate-in fade-in-0 zoom-in-95 origin-top-right\">\n <div className=\"p-1.5\">\n {actions.map((action) => {\n const Icon = action.icon ? (ICON_MAP[action.icon] ?? Plus) : Plus\n return (\n <button\n key={action.id}\n onClick={() => { action.action(); setOpen(false) }}\n className=\"w-full flex items-center gap-3 rounded-lg px-3 py-2.5 text-left hover:bg-muted/50 transition-colors group\"\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted group-hover:bg-primary/10 transition-colors shrink-0\">\n <Icon className=\"h-4 w-4 text-muted-foreground group-hover:text-primary transition-colors\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{action.label}</p>\n {action.description && (\n <p className=\"text-[10px] text-muted-foreground leading-tight\">{action.description}</p>\n )}\n </div>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Settings } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport type { PluginQuickAction } from '@fayz-ai/core'\nimport { QuickActionsButton } from './QuickActionsButton'\n\n/**\n * ModuleActionBar — the single, standard top-right action area for every plugin\n * module page. Pass it straight to `ModulePage`'s `headerAction` prop.\n *\n * Owns the two things every module's header repeated by hand:\n * - a primary \"New\" action (rendered via QuickActionsButton, which adapts its\n * variant to the layout: solid in `tabs` products, outline in `rail`),\n * - a settings gear that deep-links into the central Settings area.\n *\n * Plugins stop hand-rolling `<div className=\"flex gap-2\">…gear…</div>` blocks:\n * headerAction={<ModuleActionBar quickActions={quickActions} settingsPath=\"/settings/crm\" />}\n */\nexport function ModuleActionBar({\n quickActions,\n settingsPath,\n settingsLabel,\n leading,\n trailing,\n}: {\n /** Primary insert actions. Omit (or empty) to hide the New button. */\n quickActions?: PluginQuickAction[]\n /** Hash route to the central settings tab, e.g. '/settings/crm'. Omit to hide the gear. */\n settingsPath?: string\n /** Accessible title for the gear button. */\n settingsLabel?: string\n /** Optional extra controls rendered before the New button (e.g. a filter). */\n leading?: React.ReactNode\n /** Optional extra controls rendered after the gear. */\n trailing?: React.ReactNode\n}) {\n const hasQuickActions = !!quickActions && quickActions.length > 0\n if (!hasQuickActions && !settingsPath && !leading && !trailing) return null\n\n return (\n <div className=\"flex items-center gap-2\">\n {leading}\n {hasQuickActions && <QuickActionsButton actions={quickActions} />}\n {settingsPath && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => { window.location.hash = settingsPath }}\n title={settingsLabel ?? 'Settings'}\n >\n <Settings className=\"h-4 w-4\" />\n </Button>\n )}\n {trailing}\n </div>\n )\n}\n","import React from 'react'\nimport { useStore as useZustandStore, type StoreApi } from 'zustand'\n\n/**\n * createPluginContext — the standard config/provider/store React context trio that\n * every plugin re-implemented by hand (~100 lines each). One call returns the\n * provider component plus the three typed hooks:\n *\n * const ctx = createPluginContext<ResolvedCrmConfig, CrmDataProvider, CrmUIState>('CrmPage')\n * export const CrmContextProvider = ctx.ContextProvider\n * export const useCrmConfig = ctx.useConfig\n * export const useCrmProvider = ctx.useProvider\n * export const useCrmStore = ctx.useStore\n *\n * `displayName` is only used in the \"must be used within …\" error messages.\n */\nexport interface PluginContextApi<TConfig, TProvider, TUIState> {\n ContextProvider: React.FC<{\n config: TConfig\n provider: TProvider\n store: StoreApi<TUIState>\n children?: React.ReactNode\n }>\n useConfig: () => TConfig\n useProvider: () => TProvider\n useStore: <T>(selector: (state: TUIState) => T) => T\n}\n\nexport function createPluginContext<TConfig, TProvider, TUIState>(\n displayName: string,\n): PluginContextApi<TConfig, TProvider, TUIState> {\n const ConfigContext = React.createContext<TConfig | null>(null)\n const ProviderContext = React.createContext<TProvider | null>(null)\n const StoreContext = React.createContext<StoreApi<TUIState> | null>(null)\n\n const ContextProvider: PluginContextApi<TConfig, TProvider, TUIState>['ContextProvider'] = ({\n config, provider, store, children,\n }) => (\n <ConfigContext.Provider value={config}>\n <ProviderContext.Provider value={provider}>\n <StoreContext.Provider value={store}>\n {children}\n </StoreContext.Provider>\n </ProviderContext.Provider>\n </ConfigContext.Provider>\n )\n ContextProvider.displayName = `${displayName}ContextProvider`\n\n function useConfig(): TConfig {\n const ctx = React.useContext(ConfigContext)\n if (!ctx) throw new Error(`useConfig must be used within ${displayName}`)\n return ctx\n }\n\n function useProvider(): TProvider {\n const ctx = React.useContext(ProviderContext)\n if (!ctx) throw new Error(`useProvider must be used within ${displayName}`)\n return ctx\n }\n\n function useStore<T>(selector: (state: TUIState) => T): T {\n const store = React.useContext(StoreContext)\n if (!store) throw new Error(`useStore must be used within ${displayName}`)\n return useZustandStore(store, selector)\n }\n\n return { ContextProvider, useConfig, useProvider, useStore }\n}\n","import React from 'react'\n\n/**\n * parseViewId — the ONE canonical way to split a module view string into its base\n * and optional `:id` param. Replaces the per-plugin mix of `.slice('x-detail:'.length)`,\n * `.split(':')[1]`, and regex. `'leads-detail:42'` → `{ base: 'leads-detail', id: '42' }`,\n * `'channels'` → `{ base: 'channels' }`.\n */\nexport function parseViewId(view: string): { base: string; id?: string } {\n const i = view.indexOf(':')\n return i === -1 ? { base: view } : { base: view.slice(0, i), id: view.slice(i + 1) }\n}\n\nexport interface ViewRoute {\n /** view base id, e.g. 'channels' (exact) or 'channel-detail' (matches 'channel-detail:<id>') */\n id: string\n /** render the view; `id` is the parsed `:id` param for detail/edit routes */\n render: (params: { id?: string }) => React.ReactNode\n}\n\n/**\n * createViewRouter — declarative replacement for the hand-written `renderView()`\n * switch every plugin repeated. Maps a view's base id to a renderer and falls back\n * to `fallbackId` for unknown views. Define routes inside the component so their\n * `render` closures can capture `navigate`/handlers:\n *\n * const renderView = createViewRouter([\n * { id: 'channels', render: () => <ChannelsView onOpen={(id) => navigate(`channel-detail:${id}`)} /> },\n * { id: 'channel-detail', render: ({ id }) => <ChannelDetailView channelId={id!} onBack={() => navigate('channels')} /> },\n * { id: 'overview', render: () => <OverviewView /> },\n * ], 'overview')\n * ...\n * {renderView(view)}\n *\n * Not a fit for plugins that collapse detail/edit into a parent view + mode\n * (e.g. financial's `parseIntent`) — those should still use `parseViewId` directly.\n */\nexport function createViewRouter(routes: ViewRoute[], fallbackId: string): (view: string) => React.ReactNode {\n const map = new Map(routes.map((r) => [r.id, r]))\n return (view: string) => {\n const { base, id } = parseViewId(view)\n const route = map.get(base) ?? map.get(fallbackId)\n return route ? route.render({ id }) : null\n }\n}\n","/**\n * Shared currency config + formatter. Every vertical plugin (crm, financial,\n * inventory, orders, menu, marketing) copied this same Intl.NumberFormat wrapper;\n * they now import it from here. Plugins may still re-export it under a local alias\n * (e.g. `export { formatCurrency } from '@fayz-ai/saas'`) to keep call sites short.\n */\nexport interface CurrencyConfig {\n code: string\n locale: string\n symbol: string\n}\n\nexport function formatCurrency(value: number, currency: CurrencyConfig): string {\n return new Intl.NumberFormat(currency.locale, {\n style: 'currency',\n currency: currency.code,\n minimumFractionDigits: 2,\n }).format(value)\n}\n","import React, { useState, useMemo } from 'react'\nimport type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { createCrudStore } from '../stores/createCrudStore'\nimport { createMockProvider } from '@fayz-ai/core'\nimport { CrudPage } from '../crud/CrudPage'\nimport { cn } from '@fayz-ai/ui'\nimport { ICON_MAP } from '@fayz-ai/ui'\n\n/**\n * Internal CRUD view for a single registry.\n * Manages its own store and uses a hash-based basePath for proper CRUD routing.\n */\nfunction RegistryCrudView({ registry, basePath }: { registry: PluginRegistryDef; basePath: string }) {\n const useStore = useMemo(() => {\n const data = (registry.mockData ?? registry.seedData ?? []) as any[]\n const provider = createMockProvider(registry.entity as EntityDef<any>, data)\n return createCrudStore(provider)\n }, [registry.id])\n\n return (\n <CrudPage\n entityDef={registry.entity as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={registry.display === 'cards' ? 'cards' : 'table'}\n readOnly={registry.readOnly}\n />\n )\n}\n\n/**\n * Reusable tabbed CRUD manager for plugin registries.\n * @param routeBase — hash route prefix for CRUD sub-routing (e.g. '/financial/settings')\n */\nexport function PluginRegistryManager({ registries, routeBase, className }: {\n registries: PluginRegistryDef[]\n /** Base route for CRUD navigation (e.g. '/financial/settings'). Each registry gets routeBase/registryId */\n routeBase?: string\n className?: string\n}) {\n // Derive active tab from hash if routeBase provided, otherwise use state\n const getTabFromHash = () => {\n if (!routeBase) return registries[0]?.id ?? ''\n const hash = window.location.hash.slice(1) || '/'\n if (hash.startsWith(routeBase + '/')) {\n const rest = hash.slice(routeBase.length + 1)\n const tabId = rest.split('/')[0]\n if (registries.find((r) => r.id === tabId)) return tabId\n }\n return registries[0]?.id ?? ''\n }\n\n const [activeTab, setActiveTab] = useState(getTabFromHash)\n\n // Sync tab from hash changes\n React.useEffect(() => {\n if (!routeBase) return\n const handler = () => setActiveTab(getTabFromHash())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase])\n\n function switchTab(tabId: string) {\n setActiveTab(tabId)\n if (routeBase) {\n window.location.hash = `${routeBase}/${tabId}`\n }\n }\n\n if (registries.length === 0) return null\n\n const activeRegistry = registries.find((r) => r.id === activeTab) ?? registries[0]\n const crudBasePath = routeBase ? `${routeBase}/${activeRegistry.id}` : `/__registry/${activeRegistry.id}`\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Tabs */}\n <div className=\"flex gap-1 overflow-x-auto pb-1\">\n {registries.map((reg) => {\n const Icon = reg.icon ? (ICON_MAP[reg.icon] ?? null) : null\n const active = reg.id === activeTab\n return (\n <button\n key={reg.id}\n onClick={() => switchTab(reg.id)}\n className={cn(\n 'flex items-center gap-1.5 whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-colors shrink-0',\n active\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/50'\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {reg.entity.name}\n </button>\n )\n })}\n </div>\n\n {/* Description */}\n {activeRegistry?.description && (\n <p className=\"text-xs text-muted-foreground\">{activeRegistry.description}</p>\n )}\n\n {/* CRUD content — keyed so it remounts when switching tabs */}\n {activeRegistry && <RegistryCrudView key={activeRegistry.id} registry={activeRegistry} basePath={crudBasePath} />}\n </div>\n )\n}\n","import { useState, useRef, useCallback, useEffect } from 'react'\n\n/**\n * Navigation direction for transition animations.\n * 'forward' = deeper into content (list → detail → edit, or main → settings)\n * 'back' = returning to parent (edit → detail → list, or settings → main)\n */\nexport type NavDirection = 'forward' | 'back'\n\n/**\n * View depth mapping — used to determine animation direction.\n * Higher depth = deeper in the navigation hierarchy.\n */\nexport type DepthMap = Record<string, number>\n\nconst DEFAULT_DEPTHS: DepthMap = {\n summary: 0,\n list: 0,\n new: 1,\n edit: 2,\n detail: 1,\n settings: 1,\n}\n\n/**\n * Reusable module navigation hook for plugins.\n * Manages view state, hash synchronization, and animation direction.\n *\n * @param hashBase — the base hash path for this module (e.g. '/financial')\n * @param depthMap — optional custom depth mapping for views\n */\nexport function useModuleNavigation(hashBase: string, depthMap?: DepthMap, homeView = 'summary') {\n const depths = { ...DEFAULT_DEPTHS, ...depthMap }\n\n function getInitialView(): string {\n const rawHash = window.location.hash.slice(1) || '/'\n // Strip query string from hash before parsing segments\n const hash = rawHash.split('?')[0]\n if (hash === hashBase || hash === hashBase + '/') return homeView\n if (hash.startsWith(hashBase + '/settings')) return 'settings'\n if (hash.startsWith(hashBase + '/')) {\n const rest = hash.slice(hashBase.length + 1)\n const segments = rest.split('/')\n // '/inventory/dashboard' → treat as home view\n if (segments.length === 1 && segments[0] === homeView) return homeView\n // Detect action + ID patterns: '/products/edit/uuid' or '/stock/detail/uuid'\n const ACTION_KEYWORDS = ['edit', 'detail', 'view', 'post']\n if (segments.length >= 3) {\n const maybeAction = segments[segments.length - 2]\n if (ACTION_KEYWORDS.includes(maybeAction)) {\n return segments.slice(0, -2).join('-') + '-' + maybeAction + ':' + segments[segments.length - 1]\n }\n }\n // Generic fallback: a trailing UUID is always an ID for the view formed\n // by the preceding segments ('/content/post/<uuid>' → 'content-post:<uuid>')\n const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\n if (segments.length >= 2 && UUID_RE.test(segments[segments.length - 1])) {\n return segments.slice(0, -1).join('-') + ':' + segments[segments.length - 1]\n }\n return segments.join('-')\n }\n return homeView\n }\n\n const [view, setView] = useState(getInitialView)\n const [direction, setDirection] = useState<NavDirection>('forward')\n const prevDepthRef = useRef(getDepth(getInitialView()))\n\n // Track recent in-module views so detail/subpages can render a context-aware\n // back link (\"Back to {where you came from}\") and return to the actual\n // previous page rather than a hard-coded parent route. Records every distinct\n // view (regardless of how it was reached: navigate(), topbar, browser back).\n const historyRef = useRef<string[]>([getInitialView()])\n const [previousView, setPreviousView] = useState<string | null>(null)\n useEffect(() => {\n const stack = historyRef.current\n if (stack[stack.length - 1] !== view) {\n stack.push(view)\n if (stack.length > 30) stack.shift()\n }\n setPreviousView(stack.length >= 2 ? stack[stack.length - 2] : null)\n }, [view])\n\n // Sync view from external hash changes (e.g., topbar nav clicking the module link)\n useEffect(() => {\n function handler() {\n const hash = (window.location.hash.slice(1) || '/').split('?')[0]\n // Only react if the hash is within our module's base\n if (hash === hashBase || hash === hashBase + '/' || hash.startsWith(hashBase + '/')) {\n const newView = getInitialView()\n if (newView !== view) {\n const nextDepth = getDepth(newView)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setView(newView)\n }\n }\n }\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [view, hashBase])\n\n function getDepth(v: string): number {\n // Check exact match first\n if (depths[v] !== undefined) return depths[v]\n // Check base view name (e.g. 'payables-list' → check 'list', 'payables-new' → check 'new')\n const parts = v.split('-')\n const suffix = parts[parts.length - 1]\n if (depths[suffix] !== undefined) return depths[suffix]\n // Edit with ID (e.g. 'payables-edit:123')\n if (v.includes('edit')) return depths.edit ?? 2\n return 0\n }\n\n const navigate = useCallback((nextView: string, hash?: string) => {\n const nextDepth = getDepth(nextView)\n setDirection(nextDepth > prevDepthRef.current ? 'forward' : 'back')\n prevDepthRef.current = nextDepth\n setView(nextView)\n\n // Sync hash — explicit hash takes priority, otherwise derive from view name\n if (hash) {\n window.location.hash = hash\n } else if (nextView === homeView || nextView === 'summary' || nextView === '') {\n window.location.hash = hashBase\n } else {\n // Convert view name to URL-friendly path: 'payables-list' → '/financial/payables/list'\n // 'payables-edit:uuid-with-dashes' → '/financial/payables/edit/uuid-with-dashes'\n const colonIdx = nextView.indexOf(':')\n if (colonIdx !== -1) {\n // Has an ID after colon — only convert dashes in the prefix, keep ID intact\n const prefix = nextView.slice(0, colonIdx).replace(/-/g, '/')\n const id = nextView.slice(colonIdx + 1)\n window.location.hash = `${hashBase}/${prefix}/${id}`\n } else {\n const path = nextView.replace(/-/g, '/')\n window.location.hash = `${hashBase}/${path}`\n }\n }\n }, [hashBase])\n\n // Return to the actual previous page. Uses the browser history when there's\n // in-app history to pop (preserving the prior page); otherwise navigates to a\n // sensible fallback (deep links / direct loads have nowhere to go back to).\n const back = useCallback((fallbackView?: string) => {\n if (historyRef.current.length >= 2) {\n window.history.back()\n } else {\n navigate(fallbackView ?? homeView)\n }\n }, [navigate, homeView])\n\n const animationClass = direction === 'forward' ? 'saas-nav-forward' : 'saas-nav-back'\n\n return { view, direction, animationClass, navigate, previousView, back }\n}\n","import React, { useState, useCallback, useRef } from 'react'\nimport { Mail, Phone, ExternalLink, Cake, Calendar } from 'lucide-react'\nimport { Popover, PopoverTrigger, PopoverContent } from '@fayz-ai/ui'\nimport { createArchetypeLookup } from '../../archetype-lookup'\nimport type { EntityLookupResult } from '../../archetype-lookup'\nimport { cn } from '@fayz-ai/ui'\nimport { resolveEntityHref } from '../../lib/entity-routes'\n\n// Singleton person lookup — shared across all PersonLink instances\nconst personLookup = createArchetypeLookup({ archetype: 'person' })\n\ninterface PersonLinkProps {\n /** Person UUID — required for fetching details */\n personId?: string | null\n /** Display name (shown as the clickable text) */\n name: string\n /** Optional href to navigate to the person's profile */\n profileHref?: string\n /** Optional tab to open on the detail page (e.g. \"schedule\") */\n tab?: string\n /** Size variant */\n size?: 'sm' | 'default'\n /** Additional className for the trigger */\n className?: string\n}\n\nfunction formatAge(dob: string): string | null {\n try {\n const birth = new Date(dob)\n const now = new Date()\n let age = now.getFullYear() - birth.getFullYear()\n if (now.getMonth() < birth.getMonth() || (now.getMonth() === birth.getMonth() && now.getDate() < birth.getDate())) age--\n return `${age}y`\n } catch { return null }\n}\n\nexport function PersonLink({ personId, name, profileHref, tab, size = 'default', className }: PersonLinkProps) {\n const [person, setPerson] = useState<EntityLookupResult | null>(null)\n const [loading, setLoading] = useState(false)\n const [fetched, setFetched] = useState(false)\n const [open, setOpen] = useState(false)\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const fetchPerson = useCallback(() => {\n if (!fetched && personId) {\n setLoading(true)\n personLookup.getById(personId).then((result) => {\n setPerson(result)\n setFetched(true)\n setLoading(false)\n }).catch(() => {\n setFetched(true)\n setLoading(false)\n })\n }\n }, [personId, fetched])\n\n const handleOpenChange = useCallback((v: boolean) => {\n setOpen(v)\n if (v) fetchPerson()\n }, [fetchPerson])\n\n function handleMouseEnter() {\n hoverTimer.current = setTimeout(() => { setOpen(true); fetchPerson() }, 800)\n }\n\n function handleMouseLeave() {\n if (hoverTimer.current) { clearTimeout(hoverTimer.current); hoverTimer.current = null }\n }\n\n // If no personId, just render the name as plain text\n if (!personId) {\n return <span className={cn(size === 'sm' ? 'text-xs' : 'text-sm', className)}>{name}</span>\n }\n\n const data = person?.data as Record<string, unknown> | undefined\n const email = data?.email as string | undefined\n const phone = data?.phone as string | undefined\n const kind = data?.kind as string | undefined ?? person?.group\n const isActive = data?.is_active as boolean | undefined\n const dob = data?.date_of_birth as string | undefined\n const createdAt = data?.created_at as string | undefined\n const age = dob ? formatAge(dob) : null\n const initial = name.charAt(0).toUpperCase()\n\n // Auto-derive profile href from person kind if not explicitly provided\n const resolvedHref = profileHref ?? (personId ? '#' + resolveEntityHref(personId, 'person', kind ?? undefined, tab) : undefined)\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => e.stopPropagation()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n 'font-medium text-foreground underline decoration-dashed decoration-muted-foreground/40 underline-offset-2 hover:decoration-primary hover:text-primary transition-colors truncate text-left',\n size === 'sm' ? 'text-xs' : 'text-sm',\n className\n )}\n >\n {name}\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"start\" sideOffset={6}>\n {loading ? (\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-muted/40 animate-pulse\" />\n <div className=\"space-y-1.5 flex-1\">\n <div className=\"h-3.5 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2.5 w-16 rounded bg-muted/30 animate-pulse\" />\n </div>\n </div>\n <div className=\"space-y-2 pt-1\">\n <div className=\"h-3 w-36 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/30 animate-pulse\" />\n </div>\n </div>\n ) : (\n <div>\n {/* Header with profile link */}\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary text-sm font-bold\">\n {initial}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold truncate\">{name}</p>\n <div className=\"flex items-center gap-1.5 mt-0.5\">\n {kind && (\n <span className=\"inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground capitalize\">\n {kind}\n </span>\n )}\n {isActive !== undefined && (\n <span className={`inline-flex items-center gap-1 text-[10px] ${isActive ? 'text-success' : 'text-muted-foreground/50'}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${isActive ? 'bg-success' : 'bg-muted-foreground/30'}`} />\n {isActive ? 'Active' : 'Inactive'}\n </span>\n )}\n </div>\n </div>\n {resolvedHref && (\n <a\n href={resolvedHref}\n onClick={(e) => { e.preventDefault(); window.location.hash = resolvedHref.replace(/^#/, '') }}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors shrink-0\"\n title=\"View profile\"\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n )}\n </div>\n\n {/* Contact details */}\n {(email || phone || age) && (\n <div className=\"px-4 pb-3 space-y-1.5\">\n {email && (\n <a href={`mailto:${email}`} className=\"flex items-center gap-2 text-xs text-muted-foreground hover:text-primary transition-colors\">\n <Mail className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">{email}</span>\n </a>\n )}\n {phone && (\n <a href={`tel:${phone}`} className=\"flex items-center gap-2 text-xs text-muted-foreground hover:text-primary transition-colors\">\n <Phone className=\"h-3 w-3 shrink-0\" />\n <span>{phone}</span>\n </a>\n )}\n {dob && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Cake className=\"h-3 w-3 shrink-0\" />\n <span>{new Date(dob).toLocaleDateString()}{age ? ` (${age})` : ''}</span>\n </div>\n )}\n </div>\n )}\n\n {/* No details found */}\n {!person && fetched && (\n <div className=\"px-4 pb-3\">\n <p className=\"text-xs text-muted-foreground\">No additional details available</p>\n </div>\n )}\n\n {/* Footer — created at */}\n {createdAt && (\n <div className=\"border-t px-4 py-2 flex items-center gap-1.5 text-[10px] text-muted-foreground/50\">\n <Calendar className=\"h-2.5 w-2.5\" />\n <span>Added {new Date(createdAt).toLocaleDateString()}</span>\n </div>\n )}\n </div>\n )}\n </PopoverContent>\n </Popover>\n )\n}\n","import { useState, useCallback, useMemo } from 'react'\n\n// ---------------------------------------------------------------------------\n// Plugin Preferences — localStorage-backed per-plugin user preferences\n//\n// Usage:\n// const prefs = usePluginPrefs('agenda', { calendarView: 'timeGridWeek', slotDuration: 30 })\n// prefs.get('calendarView') // 'timeGridWeek'\n// prefs.set('calendarView', 'dayGridMonth')\n// prefs.getAll() // { calendarView: 'dayGridMonth', slotDuration: 30 }\n// prefs.reset() // back to defaults\n//\n// Keys are namespaced: `saas:prefs:{pluginId}` in localStorage.\n// Each plugin gets its own isolated namespace.\n// ---------------------------------------------------------------------------\n\nconst STORAGE_PREFIX = 'saas:prefs:'\n\nfunction readStore<T extends Record<string, unknown>>(pluginId: string, defaults: T): T {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n if (!raw) return { ...defaults }\n return { ...defaults, ...JSON.parse(raw) }\n } catch {\n return { ...defaults }\n }\n}\n\nfunction writeStore<T extends Record<string, unknown>>(pluginId: string, data: T): void {\n try {\n localStorage.setItem(STORAGE_PREFIX + pluginId, JSON.stringify(data))\n } catch { /* quota exceeded or private browsing — silently ignore */ }\n}\n\nexport interface PluginPrefs<T extends Record<string, unknown>> {\n /** Get a single preference value */\n get<K extends keyof T>(key: K): T[K]\n /** Set a single preference value (persists immediately) */\n set<K extends keyof T>(key: K, value: T[K]): void\n /** Update multiple preferences at once */\n update(partial: Partial<T>): void\n /** Get all preferences as an object */\n getAll(): T\n /** Reset all preferences to defaults */\n reset(): void\n}\n\n/**\n * Hook for localStorage-backed plugin preferences.\n *\n * @param pluginId Unique plugin identifier (e.g. 'agenda', 'financial')\n * @param defaults Default values — also defines the shape of the prefs object\n * @returns PluginPrefs accessor with get/set/update/reset\n */\nexport function usePluginPrefs<T extends Record<string, unknown>>(\n pluginId: string,\n defaults: T,\n): PluginPrefs<T> {\n const [state, setState] = useState<T>(() => readStore(pluginId, defaults))\n\n const get = useCallback(<K extends keyof T>(key: K): T[K] => {\n return state[key]\n }, [state])\n\n const set = useCallback(<K extends keyof T>(key: K, value: T[K]): void => {\n setState((prev) => {\n const next = { ...prev, [key]: value }\n writeStore(pluginId, next)\n return next\n })\n }, [pluginId])\n\n const update = useCallback((partial: Partial<T>): void => {\n setState((prev) => {\n const next = { ...prev, ...partial }\n writeStore(pluginId, next)\n return next\n })\n }, [pluginId])\n\n const getAll = useCallback((): T => state, [state])\n\n const reset = useCallback((): void => {\n setState({ ...defaults })\n writeStore(pluginId, defaults)\n }, [pluginId, defaults])\n\n return useMemo(() => ({ get, set, update, getAll, reset }), [get, set, update, getAll, reset])\n}\n\n// ---------------------------------------------------------------------------\n// Non-hook utility for use outside React components (e.g. in store factories)\n// ---------------------------------------------------------------------------\n\nexport function getPluginPref<T>(pluginId: string, key: string, defaultValue: T): T {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n if (!raw) return defaultValue\n const parsed = JSON.parse(raw)\n return parsed[key] ?? defaultValue\n } catch {\n return defaultValue\n }\n}\n\nexport function setPluginPref(pluginId: string, key: string, value: unknown): void {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + pluginId)\n const existing = raw ? JSON.parse(raw) : {}\n existing[key] = value\n localStorage.setItem(STORAGE_PREFIX + pluginId, JSON.stringify(existing))\n } catch { /* ignore */ }\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Plug, CheckCircle2, Loader2, ChevronDown, Power } from 'lucide-react'\nimport { Button, ICON_MAP } from '@fayz-ai/ui'\nimport type { ConnectorDefinition, ConnectorStatus } from '@fayz-ai/core'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { toast } from '../notifications/ToastProvider'\n\n// ---------------------------------------------------------------------------\n// Connectors hub — the ONE unified setup experience every connector uses.\n//\n// An addon plugin contributes a ConnectorDefinition; the host plugin's settings\n// render this hub in its \"Integrations\" tab. Credential connectors (api-key /\n// mtls) get a declarative form (Test / Save); OAuth connectors get a Connect\n// button. Each connector's own extras (import statement, sync now, history) come\n// from its `ExtraPanel`. Adding a new connector needs no change here.\n// ---------------------------------------------------------------------------\n\nfunction ConnectorCard({ connector }: { connector: ConnectorDefinition }) {\n const { t } = useTranslation()\n const [status, setStatus] = useState<ConnectorStatus | null>(null)\n const [open, setOpen] = useState(false)\n const [values, setValues] = useState<Record<string, string>>({})\n const [testing, setTesting] = useState(false)\n const [saving, setSaving] = useState(false)\n const [oauthing, setOauthing] = useState(false)\n\n const loadStatus = useCallback(async () => {\n try { setStatus(await connector.getStatus()) } catch { setStatus({ connected: false }) }\n }, [connector])\n\n useEffect(() => { void loadStatus() }, [loadStatus])\n\n const connected = !!status?.connected\n const Icon = connector.icon ? (ICON_MAP[connector.icon] ?? Plug) : Plug\n\n async function handleTest() {\n if (!connector.testConnection) return\n setTesting(true)\n try {\n const res = await connector.testConnection(values)\n res.ok ? toast.success(res.message ?? t('connectors.connected')) : toast.error(res.message ?? t('common.error'))\n } catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n finally { setTesting(false) }\n }\n\n async function handleSave() {\n if (!connector.saveConnection) return\n setSaving(true)\n try {\n await connector.saveConnection(values)\n toast.success(t('connectors.save'))\n await loadStatus()\n } catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n finally { setSaving(false) }\n }\n\n async function handleConnectOAuth() {\n if (!connector.startOAuth) return\n setOauthing(true)\n try { window.location.href = await connector.startOAuth(window.location.href) }\n catch (e: any) { toast.error(e?.message ?? t('common.error')); setOauthing(false) }\n }\n\n async function handleDisconnect() {\n if (!connector.disconnect) return\n try { await connector.disconnect(); toast.success(t('connectors.disconnect')); await loadStatus() }\n catch (e: any) { toast.error(e?.message ?? t('common.error')) }\n }\n\n const ExtraPanel = connector.ExtraPanel\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n {/* Header — always visible */}\n <button\n onClick={() => setOpen((o) => !o)}\n className=\"w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/30 transition-colors\"\n >\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold truncate\">{connector.name}</p>\n {connector.description && <p className=\"text-[11px] text-muted-foreground truncate\">{connector.description}</p>}\n </div>\n <span className={`inline-flex items-center gap-1 text-[11px] shrink-0 ${connected ? 'text-success' : 'text-muted-foreground'}`}>\n {connected\n ? <><CheckCircle2 className=\"h-3.5 w-3.5\" /> {t('connectors.connected')}</>\n : t('connectors.notConnected')}\n </span>\n <ChevronDown className={`h-4 w-4 text-muted-foreground shrink-0 transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"border-t px-4 py-4 space-y-4\">\n {/* Connect panel — credentials form OR OAuth */}\n {connector.authKind === 'oauth' ? (\n <div className=\"flex items-center gap-2\">\n <Button onClick={handleConnectOAuth} disabled={oauthing}>\n {oauthing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plug className=\"h-4 w-4\" />}\n {connected ? t('connectors.connected') : `${t('connectors.connect')} ${connector.name}`}\n </Button>\n {connected && connector.disconnect && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleDisconnect}>\n <Power className=\"h-3.5 w-3.5\" /> {t('connectors.disconnect')}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {(connector.fields ?? []).map((f) => (\n <label key={f.key} className=\"block\">\n <span className=\"text-xs font-medium text-muted-foreground\">{f.label}</span>\n <input\n type={f.type}\n value={values[f.key] ?? ''}\n onChange={(e) => setValues((v) => ({ ...v, [f.key]: e.target.value }))}\n placeholder={f.placeholder}\n className=\"w-full mt-1 rounded-input border border-input bg-card px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </label>\n ))}\n </div>\n <div className=\"flex gap-2\">\n {connector.testConnection && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleTest} disabled={testing}>\n {testing ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Plug className=\"h-3.5 w-3.5\" />} {t('connectors.test')}\n </Button>\n )}\n {connector.saveConnection && (\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n {saving ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <CheckCircle2 className=\"h-3.5 w-3.5\" />} {t('connectors.save')}\n </Button>\n )}\n {connected && connector.disconnect && (\n <Button variant=\"outline\" size=\"sm\" onClick={handleDisconnect}>\n <Power className=\"h-3.5 w-3.5\" /> {t('connectors.disconnect')}\n </Button>\n )}\n </div>\n </div>\n )}\n\n {/* Connector-specific extras (import / sync / history) */}\n {ExtraPanel && <div className=\"pt-1\"><ExtraPanel /></div>}\n </div>\n )}\n </div>\n )\n}\n\nexport function ConnectorsHub({ connectors }: { connectors: ConnectorDefinition[] }) {\n const { t } = useTranslation()\n if (!connectors || connectors.length === 0) {\n return <p className=\"text-sm text-muted-foreground py-8 text-center\">{t('connectors.empty')}</p>\n }\n return (\n <div className=\"space-y-3 max-w-3xl\">\n {connectors.map((c) => <ConnectorCard key={c.id} connector={c} />)}\n </div>\n )\n}\n","import React, { useState, useMemo } from 'react'\nimport { ChevronLeft, Settings, Plug, TableProperties } from 'lucide-react'\nimport { cn } from '../../lib/cn'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ICON_MAP } from '@fayz-ai/ui'\nimport type { PluginRegistryDef } from '../../types/plugins'\nimport type { EntityDef } from '../../types/crud'\nimport { createCrudStore } from '../../../stores/createCrudStore'\nimport { resolveDataProvider, useConnectorsForPlugin } from '@fayz-ai/core'\nimport { CrudPage } from '../../../crud/CrudPage'\nimport { ConnectorsHub } from './ConnectorsHub'\n\n// ---------------------------------------------------------------------------\n// Settings tab definition — General, custom tabs, and registry tabs all unified\n// ---------------------------------------------------------------------------\n\nexport interface SettingsPanelTab {\n id: string\n label: string\n icon?: string\n content: React.ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Internal: CRUD view for a registry\n// ---------------------------------------------------------------------------\n\nfunction RegistryCrudView({ registry, basePath }: { registry: PluginRegistryDef; basePath: string }) {\n const useStore = useMemo(() => {\n const mockData = (registry.mockData ?? registry.seedData ?? []) as any[]\n const provider = resolveDataProvider(registry.entity as EntityDef<any>, mockData)\n return createCrudStore(provider)\n }, [registry.id])\n\n return (\n <CrudPage\n entityDef={registry.entity as EntityDef<any>}\n useStore={useStore as any}\n basePath={basePath}\n display={registry.display === 'cards' ? 'cards' : 'table'}\n readOnly={registry.readOnly}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Properties tab — the plugin's CRUD registries as an inner (pill) tab strip.\n// Sub-routes at `${routeBase}/_properties/<registryId>`; also accepts the legacy\n// flat `${routeBase}/<registryId>` deep links.\n// ---------------------------------------------------------------------------\n\nfunction PropertiesTab({ registries, routeBase, regLabel }: {\n registries: PluginRegistryDef[]\n routeBase: string\n regLabel: (id: string, fallback: string) => string\n}) {\n function getActive(): string {\n const hash = window.location.hash.slice(1)\n const nested = `${routeBase}/_properties/`\n if (hash.startsWith(nested)) {\n const id = hash.slice(nested.length).split('/')[0]\n if (registries.find((r) => r.id === id)) return id\n }\n const flat = `${routeBase}/`\n if (hash.startsWith(flat)) {\n const id = hash.slice(flat.length).split('/')[0]\n if (registries.find((r) => r.id === id)) return id // legacy deep link\n }\n return registries[0]?.id ?? ''\n }\n\n const [active, setActive] = useState(getActive)\n React.useEffect(() => {\n const handler = () => setActive(getActive())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase, registries])\n\n function select(id: string) {\n setActive(id)\n window.location.hash = `${routeBase}/_properties/${id}`\n }\n\n const activeReg = registries.find((r) => r.id === active) ?? registries[0]\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex gap-1.5 flex-wrap\">\n {registries.map((r) => {\n const Icon = r.icon ? (ICON_MAP[r.icon] ?? null) : null\n const on = r.id === activeReg?.id\n return (\n <button\n key={r.id}\n onClick={() => select(r.id)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors',\n on ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground hover:bg-muted/70',\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {regLabel(r.id, r.entity.namePlural ?? r.entity.name)}\n </button>\n )\n })}\n </div>\n {activeReg?.description && (\n <p className=\"text-xs text-muted-foreground\">{regLabel(activeReg.id + '.description', activeReg.description)}</p>\n )}\n {activeReg && (\n <RegistryCrudView key={activeReg.id} registry={activeReg} basePath={`${routeBase}/_properties/${activeReg.id}`} />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Plugin settings panel\n// ---------------------------------------------------------------------------\n\nexport function PluginSettingsPanel({ title, subtitle, generalSettings, registries, customTabs, routeBase, hostPluginId, onClose }: {\n title: string\n subtitle?: string\n /** General preferences component */\n generalSettings?: React.ReactNode\n /** CRUD registries — grouped under a \"Properties\" tab */\n registries?: PluginRegistryDef[]\n /** Additional custom tabs (e.g., Pipeline config for CRM) */\n customTabs?: SettingsPanelTab[]\n /** Hash route base for CRUD sub-routing */\n routeBase: string\n /** This plugin's id — used to surface connectors addons registered for it in an Integrations tab. */\n hostPluginId?: string\n /** Called when back button is clicked. If not provided, back button is hidden. */\n onClose?: () => void\n}) {\n const { t } = useTranslation()\n\n // Connectors that addon plugins registered against this host plugin.\n const connectors = useConnectorsForPlugin(hostPluginId ?? '')\n\n // Translate registry entity name: try t('registry.{id}'), fallback to raw name\n const regLabel = (id: string, fallback: string) => {\n const key = `registry.${id}`\n const translated = t(key)\n return translated === key ? fallback : translated\n }\n\n // Standard tab list: General → custom tabs → Integrations → Properties.\n // Standard tabs carry their lucide component directly (IconComp) so they render\n // regardless of ICON_MAP; custom tabs still resolve their string icon via ICON_MAP.\n type Tab = {\n id: string; label: string; type: 'general' | 'custom' | 'integrations' | 'properties'\n icon?: string; IconComp?: React.ComponentType<{ className?: string }>\n }\n const tabs = useMemo<Tab[]>(() => {\n const list: Tab[] = []\n\n if (generalSettings) {\n list.push({ id: '_general', label: t('settings.general'), IconComp: Settings, type: 'general' })\n }\n if (customTabs) {\n for (const tab of customTabs) {\n list.push({ id: tab.id, label: tab.label, icon: tab.icon, type: 'custom' })\n }\n }\n if (connectors.length > 0) {\n list.push({ id: '_integrations', label: t('connectors.title'), IconComp: Plug, type: 'integrations' })\n }\n if (registries && registries.length > 0) {\n list.push({ id: '_properties', label: t('settings.properties'), IconComp: TableProperties, type: 'properties' })\n }\n\n return list\n }, [generalSettings, customTabs, connectors.length, registries, t])\n\n // Always use hash routing — the app router now prefix-matches /settings/*\n const useHashRouting = true\n\n function getActiveFromHash(): string {\n if (!useHashRouting) return tabs[0]?.id ?? ''\n const hash = window.location.hash.slice(1) || '/'\n if (hash.startsWith(routeBase + '/')) {\n const rest = hash.slice(routeBase.length + 1).split('/')[0]\n const match = tabs.find((t) => t.id === rest)\n if (match) return match.id\n const legacyCustom = rest.startsWith('_custom_') ? rest.slice('_custom_'.length) : null\n if (legacyCustom && tabs.find((t) => t.id === legacyCustom && t.type === 'custom')) return legacyCustom\n // Legacy/nested: a registry id (flat or under _properties) → Properties tab.\n if (registries?.some((r) => r.id === rest) && tabs.some((t) => t.id === '_properties')) return '_properties'\n }\n return tabs[0]?.id ?? ''\n }\n\n const [activeTab, setActiveTab] = useState(getActiveFromHash)\n\n React.useEffect(() => {\n if (!useHashRouting) return\n const handler = () => setActiveTab(getActiveFromHash())\n window.addEventListener('hashchange', handler)\n return () => window.removeEventListener('hashchange', handler)\n }, [routeBase, tabs, useHashRouting])\n\n function switchTab(tabId: string) {\n setActiveTab(tabId)\n if (useHashRouting) {\n window.location.hash = `${routeBase}/${tabId}`\n }\n }\n\n const activeTabDef = tabs.find((t) => t.id === activeTab) ?? tabs[0]\n const customTabContent = customTabs?.find((t) => t.id === activeTab)\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-center gap-3\">\n {onClose && (\n <button onClick={onClose} className=\"flex h-8 w-8 items-center justify-center rounded-lg border hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\">\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n )}\n <div>\n <h2 className=\"text-lg font-bold\">{title}</h2>\n {subtitle && <p className=\"text-xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n\n {/* Unified tabs — underline style */}\n <div className=\"flex gap-0.5 overflow-x-auto border-b scrollbar-none\" style={{ scrollbarWidth: 'none' }}>\n {tabs.map((tab) => {\n const Icon = tab.IconComp ?? (tab.icon ? (ICON_MAP[tab.icon] ?? null) : null)\n const active = tab.id === activeTab\n return (\n <button\n key={tab.id}\n onClick={() => switchTab(tab.id)}\n className={cn(\n 'flex items-center gap-1.5 whitespace-nowrap px-3 py-2 text-sm font-medium transition-colors shrink-0 border-b-2 -mb-px',\n active\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-muted',\n )}\n >\n {Icon && <Icon className=\"h-3.5 w-3.5\" />}\n {tab.label}\n </button>\n )\n })}\n </div>\n\n {/* Content */}\n {activeTabDef?.type === 'general' && generalSettings && (\n <div>{generalSettings}</div>\n )}\n\n {activeTabDef?.type === 'custom' && customTabContent && (\n <div>{customTabContent.content}</div>\n )}\n\n {activeTabDef?.type === 'integrations' && (\n <ConnectorsHub connectors={connectors} />\n )}\n\n {activeTabDef?.type === 'properties' && registries && registries.length > 0 && (\n <PropertiesTab registries={registries} routeBase={routeBase} regLabel={regLabel} />\n )}\n </div>\n )\n}\n"]}