@census-ai/census-sdk 0.2.7 → 0.2.8
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/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client.ts","../../src/react/context.tsx","../../src/react/hooks.ts","../../src/react/components/FeedbackButton.tsx","../../src/react/components/KnowledgeBase.tsx","../../src/react/components/Requests.tsx","../../src/react/components/HelpCenter.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","feedbackId","eventType","properties","events","event","guideId","path","method","body","headers","errorMessage","args","createCensus","CensusContext","createContext","CensusProvider","apiKey","baseUrl","debug","theme","children","isReady","setIsReady","useState","isIdentified","setIsIdentified","client","useMemo","useEffect","value","jsx","useCensus","context","useContext","useCensusContext","useIdentify","isIdentifying","setIsIdentifying","setError","identify","useCallback","err","reset","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","setFeedbackId","submitFeedback","result","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","defaultSettings","useRequests","fetchRequests","useVote","isVoting","setIsVoting","useTrack","track","trackBatch","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","defaultStyles","positionStyles","feedbackTypeLabels","feedbackTypeEmojis","getThemeStyles","FeedbackButton","position","text","allowedTypes","themeProp","onSubmit","onError","contextTheme","isOpen","setIsOpen","selectedType","setSelectedType","message","setMessage","themeStyles","handleOpen","handleClose","handleSubmit","e","feedbackData","jsxs","Fragment","FeedbackModal","onClose","onTypeChange","onMessageChange","type","KnowledgeBase","showSearch","showCategories","defaultCategory","className","onArticleView","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","selectedArticleSlug","setSelectedArticleSlug","articles","isLoadingArticles","articlesError","selectedArticle","isLoadingArticle","articleError","categories","cats","handleArticleClick","handleBack","category","typeConfig","statusConfig","formatDate","dateString","FORM_TYPES","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","showForm","setShowForm","formType","setFormType","formMessage","setFormMessage","localVotes","setLocalVotes","requests","refetch","settings","vote","handleRequestClick","request","handleVote","currentCount","currentHasVoted","prev","getVoteInfo","local","renderForm","t","canVote","typeInfo","statusInfo","isHovered","voteInfo","defaultTabLabels","feedbackTypeConfig","SearchIcon","BookIcon","ChevronRightIcon","ChevronDownIcon","ArrowLeftIcon","ClockIcon","LayersIcon","MessageIcon","PlusIcon","LoaderIcon","themes","createStyles","createHoverStyles","isDark","HelpCenter","tabs","defaultTab","tabLabels","activeTab","setActiveTab","setSelectedArticle","expandedGroups","setExpandedGroups","selectedFeatureId","setSelectedFeatureId","searchInputRef","useRef","systemDark","setSystemDark","mediaQuery","handler","themeColors","styles","hoverStyles","articlesLoading","fullArticle","articleLoading","requestsLoading","refetchRequests","groupsLoading","mergedLabels","handleKeyDown","toggleGroup","groupId","next","filteredArticles","renderArticleDetail","renderArticles","renderRequestForm","renderRequests","tab","group","feature"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuidesResponse,\n GuideAnalyticsEvent,\n FeatureGroupsResponse,\n} from './types';\n\n/**\n * Default API base URL\n */\nconst DEFAULT_BASE_URL = 'https://api.census.ai';\n\n/**\n * Census SDK Client\n *\n * The main client for interacting with the Census API.\n * Use `createCensus()` to create an instance.\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({ apiKey: 'cs_live_xxx' });\n *\n * await census.identify({ userId: 'user_123', email: 'user@example.com' });\n * await census.submitFeedback({ type: 'bug_report', message: 'Button is broken' });\n * ```\n */\nexport class CensusClient {\n private apiKey: string;\n private baseUrl: string;\n private debug: boolean;\n private currentUserId: string | null = null;\n\n constructor(config: CensusConfig) {\n if (!config.apiKey) {\n throw new Error('Census: apiKey is required');\n }\n\n // Support both new (cs_) and legacy (op_) key prefixes\n const validPrefixes = ['cs_live_', 'cs_test_', 'op_live_', 'op_test_'];\n if (!validPrefixes.some(prefix => config.apiKey.startsWith(prefix))) {\n console.warn('Census: API key should start with \"cs_live_\" or \"cs_test_\"');\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n this.debug = config.debug || false;\n\n this.log('Initialized with base URL:', this.baseUrl);\n }\n\n /**\n * Identify a user for tracking purposes.\n * Call this when a user logs in or when you have user information.\n *\n * @param user - User identity information\n *\n * @example\n * ```typescript\n * await census.identify({\n * userId: 'user_123',\n * email: 'john@example.com',\n * name: 'John Doe',\n * organizationId: 'org_456',\n * organizationName: 'Acme Inc',\n * });\n * ```\n */\n async identify(user: UserIdentity): Promise<void> {\n if (!user.userId) {\n throw new Error('Census: userId is required for identify()');\n }\n\n this.currentUserId = user.userId;\n\n await this.request('/api/sdk/identify', 'POST', {\n userId: user.userId,\n email: user.email,\n name: user.name,\n avatarUrl: user.avatarUrl,\n metadata: user.metadata,\n organizationId: user.organizationId,\n organizationName: user.organizationName,\n organizationDomain: user.organizationDomain,\n organizationPlan: user.organizationPlan,\n });\n\n this.log('User identified:', user.userId);\n }\n\n /**\n * Clear the current user identity.\n * Call this when a user logs out.\n */\n reset(): void {\n this.currentUserId = null;\n this.log('User identity reset');\n }\n\n /**\n * Submit feedback, bug report, or feature request.\n *\n * @param options - Feedback options\n *\n * @example\n * ```typescript\n * // Submit a bug report\n * await census.submitFeedback({\n * type: 'bug_report',\n * message: 'The submit button is not working on Firefox',\n * });\n *\n * // Submit a feature request\n * await census.submitFeedback({\n * type: 'feature_request',\n * message: 'It would be great to have dark mode support',\n * });\n *\n * // Rate an article\n * await census.submitFeedback({\n * type: 'article_rating',\n * articleId: 'article_123',\n * helpful: true,\n * rating: 5,\n * });\n * ```\n */\n async submitFeedback(options: FeedbackOptions): Promise<{ feedbackId: string }> {\n const validTypes = ['feedback', 'bug_report', 'feature_request', 'article_rating'];\n if (!options.type || !validTypes.includes(options.type)) {\n throw new Error(`Census: type must be one of: ${validTypes.join(', ')}`);\n }\n\n if (options.type === 'article_rating') {\n if (options.rating === undefined && options.helpful === undefined) {\n throw new Error('Census: article_rating requires rating or helpful field');\n }\n } else if (!options.message) {\n throw new Error('Census: message is required for this feedback type');\n }\n\n const response = await this.request<{ success: boolean; feedbackId: string }>(\n '/api/sdk/feedback',\n 'POST',\n {\n type: options.type,\n message: options.message,\n rating: options.rating,\n helpful: options.helpful,\n userId: this.currentUserId,\n articleId: options.articleId,\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n metadata: options.metadata,\n }\n );\n\n this.log('Feedback submitted:', response.feedbackId);\n return { feedbackId: response.feedbackId };\n }\n\n /**\n * Fetch published articles from the knowledge base.\n *\n * @param options - Query options\n * @returns Articles and pagination info\n *\n * @example\n * ```typescript\n * // Get all articles\n * const { articles } = await census.getArticles();\n *\n * // Search articles\n * const { articles } = await census.getArticles({ search: 'getting started' });\n *\n * // Filter by category\n * const { articles } = await census.getArticles({ category: 'guides' });\n * ```\n */\n async getArticles(options?: ArticlesOptions): Promise<ArticlesResponse> {\n const params = new URLSearchParams();\n if (options?.category) params.set('category', options.category);\n if (options?.search) params.set('search', options.search);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const url = `/api/sdk/articles${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<ArticlesResponse>(url, 'GET');\n this.log('Fetched articles:', response.articles.length);\n return response;\n }\n\n /**\n * Fetch a single article by slug or ID.\n *\n * @param slugOrId - Article slug or ID\n * @returns Article or null if not found\n *\n * @example\n * ```typescript\n * const article = await census.getArticle('getting-started');\n * if (article) {\n * console.log(article.title, article.content_html);\n * }\n * ```\n */\n async getArticle(slugOrId: string): Promise<Article | null> {\n try {\n const response = await this.request<{ article: Article }>(\n `/api/sdk/articles/${encodeURIComponent(slugOrId)}`,\n 'GET'\n );\n this.log('Fetched article:', slugOrId);\n return response.article;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch feature groups with their features and article counts.\n * Used for navigation in the knowledge base.\n *\n * @returns Feature groups with nested features\n *\n * @example\n * ```typescript\n * const { feature_groups } = await census.getFeatureGroups();\n * feature_groups.forEach(group => {\n * console.log(group.name, group.features.length);\n * });\n * ```\n */\n async getFeatureGroups(): Promise<FeatureGroupsResponse> {\n const response = await this.request<FeatureGroupsResponse>(\n '/api/sdk/feature-groups',\n 'GET'\n );\n this.log('Fetched feature groups:', response.feature_groups.length);\n return response;\n }\n\n /**\n * Fetch the current user's submitted requests (feedback, bugs, feature requests).\n * Requires a user to be identified first.\n *\n * @param options - Query options\n * @returns Requests and pagination info\n *\n * @example\n * ```typescript\n * // Get all requests for the current user\n * const { requests } = await census.getRequests();\n *\n * // Filter by status\n * const { requests } = await census.getRequests({ status: 'in_progress' });\n *\n * // Filter by type\n * const { requests } = await census.getRequests({ type: 'bug_report' });\n * ```\n */\n async getRequests(options?: RequestsOptions): Promise<RequestsResponse> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before fetching requests. Call identify() first.');\n }\n\n const params = new URLSearchParams();\n params.set('userId', this.currentUserId);\n if (options?.status) params.set('status', options.status);\n if (options?.type) params.set('type', options.type);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const response = await this.request<RequestsResponse>(\n `/api/sdk/requests?${params.toString()}`,\n 'GET'\n );\n this.log('Fetched requests:', response.requests.length);\n return response;\n }\n\n /**\n * Vote on a feedback request (toggle).\n * If the user has already voted, removes the vote.\n * If the user hasn't voted, adds a vote.\n *\n * @param feedbackId - ID of the feedback to vote on\n * @returns Vote result with action taken and new vote count\n *\n * @example\n * ```typescript\n * // Vote on a feedback request\n * const result = await census.vote('feedback-id-123');\n * console.log(result.action); // 'added' or 'removed'\n * console.log(result.vote_count); // 5\n * console.log(result.user_has_voted); // true\n * ```\n */\n async vote(feedbackId: string): Promise<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before voting. Call identify() first.');\n }\n\n if (!feedbackId) {\n throw new Error('Census: feedbackId is required for vote()');\n }\n\n const response = await this.request<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }>('/api/sdk/requests/vote', 'POST', {\n feedbackId,\n userId: this.currentUserId,\n });\n\n this.log('Vote result:', response.action, 'for feedback:', feedbackId);\n return response;\n }\n\n /**\n * Track a custom analytics event.\n *\n * @param eventType - Name of the event\n * @param properties - Additional event properties\n *\n * @example\n * ```typescript\n * // Track a button click\n * await census.track('button_clicked', { buttonId: 'submit-form' });\n *\n * // Track a page view\n * await census.track('page_viewed', { page: '/pricing' });\n * ```\n */\n async track(eventType: string, properties?: Record<string, unknown>): Promise<void> {\n if (!eventType) {\n throw new Error('Census: eventType is required for track()');\n }\n\n await this.request('/api/sdk/events', 'POST', {\n eventType,\n userId: this.currentUserId,\n properties,\n });\n\n this.log('Event tracked:', eventType);\n }\n\n /**\n * Track multiple events in a single request.\n * More efficient than calling track() multiple times.\n *\n * @param events - Array of events to track\n *\n * @example\n * ```typescript\n * await census.trackBatch({\n * events: [\n * { eventType: 'page_viewed', properties: { page: '/home' } },\n * { eventType: 'button_clicked', properties: { button: 'cta' } },\n * ],\n * });\n * ```\n */\n async trackBatch(options: BatchEventsOptions): Promise<void> {\n if (!options.events || options.events.length === 0) {\n throw new Error('Census: at least one event is required');\n }\n\n if (options.events.length > 100) {\n throw new Error('Census: maximum 100 events per batch');\n }\n\n const events = options.events.map((event) => ({\n eventType: event.eventType,\n userId: this.currentUserId,\n articleId: event.articleId,\n featureId: event.featureId,\n properties: event.properties,\n }));\n\n await this.request('/api/sdk/events', 'POST', { events });\n\n this.log('Batch events tracked:', options.events.length);\n }\n\n /**\n * Fetch available guides for the current user.\n * Returns guides that match the user's context and haven't been completed.\n *\n * @returns Guides and list of completed guide IDs\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides();\n * guides.forEach(guide => console.log(guide.name));\n * ```\n */\n async getGuides(): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<GuidesResponse>(url, 'GET');\n this.log('Fetched guides:', response.guides.length);\n return response;\n }\n\n /**\n * Fetch a single guide by slug or ID.\n *\n * @param slugOrId - Guide slug or ID\n * @returns Guide or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('onboarding-tour');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(slugOrId: string): Promise<Guide | null> {\n try {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides/${encodeURIComponent(slugOrId)}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<{ guide: Guide }>(url, 'GET');\n this.log('Fetched guide:', slugOrId);\n return response.guide;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Track a guide analytics event.\n * Used to track user progress through guides.\n *\n * @param event - Guide analytics event\n *\n * @example\n * ```typescript\n * await census.trackGuideEvent({\n * guideId: 'guide_123',\n * eventType: 'step_completed',\n * stepId: 'step_456',\n * stepIndex: 2,\n * sessionId: 'session_789',\n * });\n * ```\n */\n async trackGuideEvent(event: GuideAnalyticsEvent): Promise<void> {\n if (!event.guideId || !event.eventType || !event.sessionId) {\n throw new Error('Census: guideId, eventType, and sessionId are required for trackGuideEvent()');\n }\n\n await this.request('/api/sdk/guides/events', 'POST', {\n guideId: event.guideId,\n eventType: event.eventType,\n stepId: event.stepId,\n stepIndex: event.stepIndex,\n pageUrl: event.pageUrl || (typeof window !== 'undefined' ? window.location.href : undefined),\n sessionId: event.sessionId,\n userId: event.userId || this.currentUserId,\n metadata: event.metadata,\n });\n\n this.log('Guide event tracked:', event.eventType, event.guideId);\n }\n\n /**\n * Mark a guide as completed for the current user.\n * Prevents the guide from showing again.\n *\n * @param guideId - ID of the guide to mark as completed\n *\n * @example\n * ```typescript\n * await census.markGuideCompleted('guide_123');\n * ```\n */\n async markGuideCompleted(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for markGuideCompleted()');\n }\n\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before marking guides complete. Call identify() first.');\n }\n\n await this.request('/api/sdk/guides/complete', 'POST', {\n guideId,\n userId: this.currentUserId,\n });\n\n this.log('Guide marked completed:', guideId);\n }\n\n /**\n * Get the current identified user ID\n */\n getCurrentUserId(): string | null {\n return this.currentUserId;\n }\n\n /**\n * Check if a user is currently identified\n */\n isIdentified(): boolean {\n return this.currentUserId !== null;\n }\n\n /**\n * Make an API request\n */\n private async request<T>(path: string, method: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'X-Census-Key': this.apiKey,\n };\n\n if (body) {\n headers['Content-Type'] = 'application/json';\n }\n\n this.log(`${method} ${path}`, body);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n // Use default error message\n }\n\n const error: CensusError = {\n error: errorMessage,\n status: response.status,\n };\n throw error;\n }\n\n return response.json();\n }\n\n /**\n * Log debug messages\n */\n private log(...args: unknown[]): void {\n if (this.debug) {\n console.log('[Census]', ...args);\n }\n }\n}\n\n/**\n * Create a new Census SDK client.\n *\n * @param config - Configuration options\n * @returns Census client instance\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({\n * apiKey: 'cs_live_your_key_here',\n * debug: true, // Enable debug logging\n * });\n * ```\n */\nexport function createCensus(config: CensusConfig): CensusClient {\n return new CensusClient(config);\n}\n","import { createContext, useContext, useEffect, useMemo, useState, useCallback } from 'react';\nimport { createCensus, CensusClient } from '../client';\nimport type { CensusProviderProps, CensusTheme, UserIdentity } from '../types';\n\n/**\n * Context value for the Census provider\n */\ninterface CensusContextValue {\n client: CensusClient;\n theme: CensusTheme;\n isReady: boolean;\n isIdentified: boolean;\n}\n\nconst CensusContext = createContext<CensusContextValue | null>(null);\n\n/**\n * Provider component for the Census SDK.\n * Wrap your app with this to use Census hooks and components.\n *\n * @example\n * ```tsx\n * import { CensusProvider } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <CensusProvider\n * apiKey=\"cs_live_xxx\"\n * user={{ userId: 'user_123', email: 'user@example.com' }}\n * >\n * <YourApp />\n * </CensusProvider>\n * );\n * }\n * ```\n */\nexport function CensusProvider({\n apiKey,\n baseUrl,\n debug,\n user,\n theme = {},\n children,\n}: CensusProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const [isIdentified, setIsIdentified] = useState(false);\n\n const client = useMemo(() => {\n return createCensus({ apiKey, baseUrl, debug });\n }, [apiKey, baseUrl, debug]);\n\n // Automatically identify user if provided\n useEffect(() => {\n if (user) {\n client\n .identify(user)\n .then(() => {\n setIsIdentified(true);\n setIsReady(true);\n })\n .catch((error) => {\n console.error('[Census] Failed to identify user:', error);\n setIsReady(true);\n });\n } else {\n setIsReady(true);\n }\n }, [client, user]);\n\n const value: CensusContextValue = useMemo(\n () => ({\n client,\n theme,\n isReady,\n isIdentified,\n }),\n [client, theme, isReady, isIdentified]\n );\n\n return <CensusContext.Provider value={value}>{children}</CensusContext.Provider>;\n}\n\n/**\n * Hook to access the Census client directly.\n *\n * @returns The Census client instance\n * @throws If used outside of CensusProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const census = useCensus();\n *\n * const handleClick = async () => {\n * await census.track('button_clicked');\n * };\n *\n * return <button onClick={handleClick}>Click me</button>;\n * }\n * ```\n */\nexport function useCensus(): CensusClient {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensus must be used within a CensusProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to access the Census context (client, theme, and state).\n *\n * @returns The full Census context\n * @throws If used outside of CensusProvider\n */\nexport function useCensusContext(): CensusContextValue {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensusContext must be used within a CensusProvider');\n }\n return context;\n}\n\n/**\n * Hook to identify a user.\n *\n * @returns Object with identify function and state\n *\n * @example\n * ```tsx\n * function LoginHandler() {\n * const { identify, isIdentifying } = useIdentify();\n *\n * const handleLogin = async (user) => {\n * await identify({\n * userId: user.id,\n * email: user.email,\n * name: user.name,\n * });\n * };\n * }\n * ```\n */\nexport function useIdentify() {\n const { client } = useCensusContext();\n const [isIdentifying, setIsIdentifying] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const identify = useCallback(\n async (user: UserIdentity) => {\n setIsIdentifying(true);\n setError(null);\n try {\n await client.identify(user);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to identify user'));\n throw err;\n } finally {\n setIsIdentifying(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n client.reset();\n }, [client]);\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n RequestsSettings,\n FeatureGroup,\n} from '../types';\n\n/**\n * Hook for submitting feedback.\n *\n * @returns Object with submit function and state\n *\n * @example\n * ```tsx\n * function FeedbackForm() {\n * const { submitFeedback, isSubmitting, isSuccess, error } = useFeedback();\n *\n * const handleSubmit = async (message: string) => {\n * await submitFeedback({\n * type: 'feedback',\n * message,\n * });\n * };\n *\n * return (\n * <form onSubmit={...}>\n * {isSuccess && <p>Thanks for your feedback!</p>}\n * {error && <p>Error: {error.message}</p>}\n * <button disabled={isSubmitting}>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useFeedback() {\n const { client } = useCensusContext();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [feedbackId, setFeedbackId] = useState<string | null>(null);\n\n const submitFeedback = useCallback(\n async (options: FeedbackOptions) => {\n setIsSubmitting(true);\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n\n try {\n const result = await client.submitFeedback(options);\n setFeedbackId(result.feedbackId);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to submit feedback');\n setError(error);\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n }, []);\n\n return {\n submitFeedback,\n reset,\n isSubmitting,\n isSuccess,\n error,\n feedbackId,\n };\n}\n\n/**\n * Hook for fetching articles from the knowledge base.\n *\n * @param options - Query options (optional)\n * @returns Object with articles data and loading state\n *\n * @example\n * ```tsx\n * function ArticleList() {\n * const { articles, isLoading, error, refetch } = useArticles();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {articles.map(article => (\n * <li key={article.id}>{article.title}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useArticles(options?: ArticlesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<ArticlesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticles = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticles(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch articles'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.category, options?.search, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticles();\n }\n }, [isReady, fetchArticles]);\n\n return {\n articles: data?.articles || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchArticles,\n };\n}\n\n/**\n * Hook for fetching a single article.\n *\n * @param slugOrId - Article slug or ID\n * @returns Object with article data and loading state\n *\n * @example\n * ```tsx\n * function ArticlePage({ slug }) {\n * const { article, isLoading, error } = useArticle(slug);\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n * if (!article) return <p>Article not found</p>;\n *\n * return (\n * <article>\n * <h1>{article.title}</h1>\n * <div dangerouslySetInnerHTML={{ __html: article.content_html }} />\n * </article>\n * );\n * }\n * ```\n */\nexport function useArticle(slugOrId: string) {\n const { client, isReady } = useCensusContext();\n const [article, setArticle] = useState<Article | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticle = useCallback(async () => {\n if (!slugOrId) {\n setArticle(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticle(slugOrId);\n setArticle(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch article'));\n } finally {\n setIsLoading(false);\n }\n }, [client, slugOrId]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticle();\n }\n }, [isReady, fetchArticle]);\n\n return {\n article,\n isLoading,\n error,\n refetch: fetchArticle,\n };\n}\n\nconst defaultSettings: RequestsSettings = {\n feedbackVisibility: 'own',\n allowVoting: false,\n allowRequestCreation: true,\n};\n\n/**\n * Hook for fetching the current user's submitted requests.\n *\n * @param options - Query options (optional)\n * @returns Object with requests data and loading state\n *\n * @example\n * ```tsx\n * function MyRequests() {\n * const { requests, isLoading, error, refetch, settings } = useRequests();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {requests.map(req => (\n * <li key={req.id}>{req.message} - {req.status}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useRequests(options?: RequestsOptions) {\n const { client, isReady, isIdentified } = useCensusContext();\n const [data, setData] = useState<RequestsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRequests = useCallback(async () => {\n if (!isIdentified) {\n setData(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getRequests(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch requests'));\n } finally {\n setIsLoading(false);\n }\n }, [client, isIdentified, options?.status, options?.type, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n if (isIdentified) {\n fetchRequests();\n } else {\n // Not identified - stop loading\n setIsLoading(false);\n }\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n settings: data?.settings || defaultSettings,\n isLoading,\n error,\n refetch: fetchRequests,\n };\n}\n\n/**\n * Hook for voting on requests.\n *\n * @returns Object with vote function and loading state\n *\n * @example\n * ```tsx\n * function VoteButton({ feedbackId }: { feedbackId: string }) {\n * const { vote, isVoting } = useVote();\n *\n * const handleVote = async () => {\n * const result = await vote(feedbackId);\n * console.log('Voted:', result.action); // 'added' or 'removed'\n * };\n *\n * return (\n * <button onClick={handleVote} disabled={isVoting}>\n * Vote\n * </button>\n * );\n * }\n * ```\n */\nexport function useVote() {\n const { client } = useCensusContext();\n const [isVoting, setIsVoting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const vote = useCallback(\n async (feedbackId: string) => {\n setIsVoting(true);\n setError(null);\n\n try {\n const result = await client.vote(feedbackId);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to vote');\n setError(error);\n throw error;\n } finally {\n setIsVoting(false);\n }\n },\n [client]\n );\n\n return {\n vote,\n isVoting,\n error,\n };\n}\n\n/**\n * Hook for tracking events.\n *\n * @returns Object with track function\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { track } = useTrack();\n *\n * useEffect(() => {\n * track('page_viewed', { page: 'home' });\n * }, []);\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTrack() {\n const { client } = useCensusContext();\n\n const track = useCallback(\n async (eventType: string, properties?: Record<string, unknown>) => {\n await client.track(eventType, properties);\n },\n [client]\n );\n\n const trackBatch = useCallback(\n async (\n events: Array<{\n eventType: string;\n articleId?: string;\n featureId?: string;\n properties?: Record<string, unknown>;\n }>\n ) => {\n await client.trackBatch({ events });\n },\n [client]\n );\n\n return {\n track,\n trackBatch,\n };\n}\n\n/**\n * Hook for fetching feature groups with their features.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading, error } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {featureGroups.map(group => (\n * <li key={group.id}>\n * {group.name} ({group.feature_count} features)\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroup[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchFeatureGroups = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getFeatureGroups();\n setFeatureGroups(result.feature_groups);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch feature groups'));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n if (isReady) {\n fetchFeatureGroups();\n }\n }, [isReady, fetchFeatureGroups]);\n\n return {\n featureGroups,\n isLoading,\n error,\n refetch: fetchFeatureGroups,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { FeedbackButtonProps, FeedbackType, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n button: {\n position: 'fixed' as const,\n padding: '12px 20px',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n fontWeight: '500' as const,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n },\n modal: {\n position: 'fixed' as const,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 10000,\n },\n modalContent: {\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n width: '100%',\n maxWidth: '400px',\n margin: '16px',\n boxShadow: '0 20px 50px rgba(0, 0, 0, 0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n input: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '16px',\n minHeight: '100px',\n resize: 'vertical' as const,\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n submitButton: {\n width: '100%',\n padding: '12px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500' as const,\n transition: 'opacity 0.2s',\n },\n typeButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n};\n\nconst positionStyles = {\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n};\n\nconst feedbackTypeLabels: Record<FeedbackType, string> = {\n feedback: 'General Feedback',\n bug_report: 'Bug Report',\n feature_request: 'Feature Request',\n article_rating: 'Article Rating',\n};\n\nconst feedbackTypeEmojis: Record<FeedbackType, string> = {\n feedback: '💬',\n bug_report: '🐛',\n feature_request: '💡',\n article_rating: '⭐',\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Floating feedback button component.\n * Displays a button that opens a modal for submitting feedback.\n *\n * @example\n * ```tsx\n * import { FeedbackButton } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <>\n * <YourApp />\n * <FeedbackButton\n * position=\"bottom-right\"\n * text=\"Send Feedback\"\n * allowedTypes={['feedback', 'bug_report', 'feature_request']}\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function FeedbackButton({\n position = 'bottom-right',\n text = 'Feedback',\n allowedTypes = ['feedback', 'bug_report', 'feature_request'],\n theme: themeProp,\n onSubmit,\n onError,\n children,\n}: FeedbackButtonProps) {\n const { theme: contextTheme } = useCensusContext();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedType, setSelectedType] = useState<FeedbackType>(allowedTypes[0]);\n const [message, setMessage] = useState('');\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n reset();\n }, [reset]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setMessage('');\n setSelectedType(allowedTypes[0]);\n }, [allowedTypes]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n const feedbackData = {\n type: selectedType,\n message,\n };\n\n try {\n await submitFeedback(feedbackData);\n onSubmit?.(feedbackData);\n // Close after a short delay to show success\n setTimeout(handleClose, 1500);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error('Failed to submit feedback'));\n }\n },\n [selectedType, message, submitFeedback, onSubmit, onError, handleClose]\n );\n\n // Custom trigger\n if (children) {\n return (\n <>\n <div onClick={handleOpen} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n }\n\n return (\n <>\n <button\n onClick={handleOpen}\n style={{\n ...defaultStyles.button,\n ...positionStyles[position],\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n borderRadius: themeStyles.borderRadius,\n fontFamily: themeStyles.fontFamily,\n }}\n aria-label=\"Open feedback form\"\n >\n {text}\n </button>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n}\n\ninterface FeedbackModalProps {\n isOpen: boolean;\n onClose: () => void;\n selectedType: FeedbackType;\n onTypeChange: (type: FeedbackType) => void;\n allowedTypes: FeedbackType[];\n message: string;\n onMessageChange: (message: string) => void;\n onSubmit: (e: React.FormEvent) => void;\n isSubmitting: boolean;\n isSuccess: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n}\n\nfunction FeedbackModal({\n isOpen,\n onClose,\n selectedType,\n onTypeChange,\n allowedTypes,\n message,\n onMessageChange,\n onSubmit,\n isSubmitting,\n isSuccess,\n themeStyles,\n}: FeedbackModalProps) {\n if (!isOpen) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n textAlign: 'center',\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>🎉</div>\n <h3 style={{ margin: '0 0 8px 0', color: themeStyles.textColor }}>\n Thanks for your feedback!\n </h3>\n <p style={{ margin: 0, color: '#666' }}>We appreciate you taking the time to share.</p>\n </div>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '20px',\n }}\n >\n <h3 style={{ margin: 0, color: themeStyles.textColor }}>Send Feedback</h3>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '24px',\n cursor: 'pointer',\n color: '#999',\n padding: '0',\n lineHeight: '1',\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Feedback type selection */}\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n What kind of feedback?\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap' }}>\n {allowedTypes.map((type) => (\n <button\n key={type}\n type=\"button\"\n onClick={() => onTypeChange(type)}\n style={{\n ...defaultStyles.typeButton,\n backgroundColor: selectedType === type ? themeStyles.primaryColor : 'white',\n color: selectedType === type ? 'white' : themeStyles.textColor,\n borderColor: selectedType === type ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {feedbackTypeEmojis[type]} {feedbackTypeLabels[type]}\n </button>\n ))}\n </div>\n </div>\n\n {/* Message input */}\n <div>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n Your message\n </label>\n <textarea\n value={message}\n onChange={(e) => onMessageChange(e.target.value)}\n placeholder={\n selectedType === 'bug_report'\n ? 'Describe the bug and steps to reproduce...'\n : selectedType === 'feature_request'\n ? 'Describe the feature you would like...'\n : 'Share your thoughts...'\n }\n style={defaultStyles.textarea}\n required\n />\n </div>\n\n <button\n type=\"submit\"\n disabled={isSubmitting || !message.trim()}\n style={{\n ...defaultStyles.submitButton,\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n opacity: isSubmitting || !message.trim() ? 0.6 : 1,\n cursor: isSubmitting || !message.trim() ? 'not-allowed' : 'pointer',\n }}\n >\n {isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </form>\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useArticles, useArticle } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { KnowledgeBaseProps, Article, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n maxWidth: '800px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n fontSize: '15px',\n marginBottom: '24px',\n boxSizing: 'border-box' as const,\n },\n categoryButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '20px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n articleCard: {\n padding: '20px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'box-shadow 0.2s, border-color 0.2s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: '600' as const,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#666',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: '12px',\n color: '#999',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#666',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '8px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Embeddable knowledge base component.\n * Displays a searchable list of articles with full article view.\n *\n * @example\n * ```tsx\n * import { KnowledgeBase } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <div className=\"help-container\">\n * <h1>Help Center</h1>\n * <KnowledgeBase\n * showSearch={true}\n * showCategories={true}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function KnowledgeBase({\n showSearch = true,\n showCategories = true,\n defaultCategory,\n theme: themeProp,\n className,\n onArticleView,\n}: KnowledgeBaseProps) {\n const { theme: contextTheme } = useCensusContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(defaultCategory);\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n category: selectedCategory,\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Extract unique categories\n const categories = useMemo(() => {\n const cats = new Set<string>();\n articles.forEach((article) => {\n if (article.category) {\n cats.add(article.category);\n }\n });\n return Array.from(cats).sort();\n }, [articles]);\n\n const handleArticleClick = (article: Article) => {\n setSelectedArticleSlug(article.slug);\n onArticleView?.(article);\n };\n\n const handleBack = () => {\n setSelectedArticleSlug(null);\n };\n\n // Article detail view\n if (selectedArticleSlug) {\n if (isLoadingArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <div style={defaultStyles.loading}>Loading article...</div>\n </div>\n );\n }\n\n if (articleError) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article. Please try again.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.empty}>Article not found.</div>\n </div>\n );\n }\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 16px 0', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#666', marginBottom: '24px' }}>\n {selectedArticle.read_time_minutes} min read\n </div>\n )}\n {selectedArticle.content_html ? (\n <div\n style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}\n dangerouslySetInnerHTML={{ __html: selectedArticle.content_html }}\n />\n ) : (\n <div style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}>\n {typeof selectedArticle.content === 'string'\n ? selectedArticle.content\n : 'No content available.'}\n </div>\n )}\n </article>\n </div>\n );\n }\n\n // Articles list view\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Search */}\n {showSearch && (\n <input\n type=\"text\"\n placeholder=\"Search articles...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={defaultStyles.searchInput}\n />\n )}\n\n {/* Categories */}\n {showCategories && categories.length > 0 && (\n <div style={{ marginBottom: '24px' }}>\n <button\n onClick={() => setSelectedCategory(undefined)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: !selectedCategory ? themeStyles.primaryColor : 'white',\n color: !selectedCategory ? 'white' : themeStyles.textColor,\n borderColor: !selectedCategory ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n All\n </button>\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setSelectedCategory(category)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: selectedCategory === category ? themeStyles.primaryColor : 'white',\n color: selectedCategory === category ? 'white' : themeStyles.textColor,\n borderColor: selectedCategory === category ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Loading */}\n {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {/* Error */}\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {/* Empty state */}\n {!isLoadingArticles && !articlesError && articles.length === 0 && (\n <div style={defaultStyles.empty}>\n {searchQuery\n ? `No articles found for \"${searchQuery}\"`\n : 'No articles available yet.'}\n </div>\n )}\n\n {/* Articles list */}\n {!isLoadingArticles && !articlesError && articles.length > 0 && (\n <div>\n {articles.map((article) => (\n <div\n key={article.id}\n onClick={() => handleArticleClick(article)}\n style={defaultStyles.articleCard}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleArticleClick(article);\n }\n }}\n >\n <h3 style={{ ...defaultStyles.articleTitle, color: themeStyles.textColor }}>\n {article.title}\n </h3>\n {article.seo_description && (\n <p style={defaultStyles.articleDescription}>{article.seo_description}</p>\n )}\n <div style={defaultStyles.articleMeta}>\n {article.category && <span>{article.category}</span>}\n {article.read_time_minutes && <span>{article.read_time_minutes} min read</span>}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRequests, useVote, useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { RequestsProps, Request, FeedbackType } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n list: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n },\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n },\n cardHover: {\n borderColor: '#d1d5db',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n marginBottom: '8px',\n },\n badges: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n message: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n meta: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n fontSize: '12px',\n color: '#6b7280',\n },\n empty: {\n textAlign: 'center' as const,\n padding: '32px 16px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 12px',\n color: '#d1d5db',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#6b7280',\n },\n error: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#dc2626',\n },\n voteButton: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n minWidth: '48px',\n transition: 'all 0.15s',\n },\n voteButtonActive: {\n backgroundColor: '#dbeafe',\n borderColor: '#2563eb',\n color: '#2563eb',\n },\n voteCount: {\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n },\n cardWithVote: {\n display: 'flex',\n gap: '12px',\n },\n cardContent: {\n flex: 1,\n },\n form: {\n marginBottom: '16px',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n border: '1px solid #e5e7eb',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n typeButtonActive: {\n backgroundColor: '#111827',\n borderColor: '#111827',\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n },\n successMessage: {\n padding: '12px',\n backgroundColor: '#d1fae5',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n },\n ownBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n marginLeft: '6px',\n },\n};\n\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n/**\n * Requests component for displaying user's submitted feedback and requests.\n *\n * @example\n * ```tsx\n * import { Requests } from '@census-ai/census-sdk/react';\n *\n * function MyRequestsPage() {\n * return (\n * <div>\n * <h1>My Requests</h1>\n * <Requests onRequestClick={(req) => console.log('Clicked:', req)} />\n * </div>\n * );\n * }\n * ```\n */\nexport function Requests({\n status,\n type,\n limit = 50,\n className,\n showEmptyState = true,\n onRequestClick,\n}: RequestsProps) {\n const { isIdentified } = useCensusContext();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const [localVotes, setLocalVotes] = useState<Record<string, { count: number; hasVoted: boolean }>>({});\n\n const { requests, isLoading, error, refetch, settings } = useRequests({\n status,\n type,\n limit,\n });\n\n const { vote, isVoting } = useVote();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\n );\n\n const handleVote = useCallback(\n async (feedbackId: string, currentCount: number, currentHasVoted: boolean) => {\n if (isVoting) return;\n\n // Optimistic update\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentHasVoted ? currentCount - 1 : currentCount + 1,\n hasVoted: !currentHasVoted,\n },\n }));\n\n try {\n const result = await vote(feedbackId);\n // Update with actual result\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: result.vote_count,\n hasVoted: result.user_has_voted,\n },\n }));\n } catch {\n // Revert on error\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentCount,\n hasVoted: currentHasVoted,\n },\n }));\n }\n },\n [vote, isVoting]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n // Refetch after a short delay to allow DB to update\n setTimeout(() => {\n refetch();\n reset();\n }, 500);\n } catch {\n // Error is handled by useFeedback hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetch, reset]\n );\n\n const getVoteInfo = (request: Request) => {\n const local = localVotes[request.id];\n return {\n count: local?.count ?? request.vote_count,\n hasVoted: local?.hasVoted ?? request.user_has_voted,\n };\n };\n\n if (!isIdentified) {\n return showEmptyState ? (\n <div style={defaultStyles.empty}>\n <p>Please sign in to view your requests.</p>\n </div>\n ) : null;\n }\n\n if (isLoading) {\n return (\n <div style={defaultStyles.loading}>\n <p>Loading requests...</p>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>Failed to load requests. <button onClick={refetch} style={{ color: 'inherit', textDecoration: 'underline', background: 'none', border: 'none', cursor: 'pointer' }}>Try again</button></p>\n </div>\n );\n }\n\n // Request creation form component\n const renderForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button\n onClick={() => setShowForm(true)}\n style={{\n ...defaultStyles.submitButton,\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={defaultStyles.form}>\n <div style={defaultStyles.formHeader}>\n <p style={defaultStyles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280' }}\n >\n ✕\n </button>\n </div>\n <div style={defaultStyles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...defaultStyles.typeButton,\n ...(formType === t.value ? defaultStyles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={defaultStyles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{\n ...defaultStyles.submitButton,\n opacity: isSubmitting ? 0.6 : 1,\n }}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n if (requests.length === 0 && showEmptyState) {\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <div style={defaultStyles.empty}>\n <svg\n style={defaultStyles.emptyIcon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\"\n />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>No requests yet</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : 'When you submit feedback, bug reports, or feature requests, they\\'ll appear here.'}\n </p>\n </div>\n </div>\n );\n }\n\n const canVote = settings.allowVoting && settings.feedbackVisibility !== 'own';\n\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <ul style={defaultStyles.list}>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n const isHovered = hoveredId === request.id;\n const voteInfo = getVoteInfo(request);\n\n return (\n <li\n key={request.id}\n style={{\n ...defaultStyles.card,\n ...(isHovered ? defaultStyles.cardHover : {}),\n }}\n onMouseEnter={() => setHoveredId(request.id)}\n onMouseLeave={() => setHoveredId(null)}\n >\n <div style={canVote ? defaultStyles.cardWithVote : undefined}>\n {canVote && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleVote(request.id, voteInfo.count, voteInfo.hasVoted);\n }}\n disabled={isVoting}\n style={{\n ...defaultStyles.voteButton,\n ...(voteInfo.hasVoted ? defaultStyles.voteButtonActive : {}),\n }}\n title={voteInfo.hasVoted ? 'Remove vote' : 'Upvote this request'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill={voteInfo.hasVoted ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n <span style={{\n ...defaultStyles.voteCount,\n ...(voteInfo.hasVoted ? { color: '#2563eb' } : {}),\n }}>\n {voteInfo.count}\n </span>\n </button>\n )}\n <div\n style={canVote ? defaultStyles.cardContent : undefined}\n onClick={() => handleRequestClick(request)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleRequestClick(request);\n }\n }}\n >\n <div style={defaultStyles.header}>\n <div style={defaultStyles.badges}>\n <span\n style={{\n ...defaultStyles.badge,\n color: typeInfo.color,\n backgroundColor: typeInfo.bg,\n }}\n >\n {typeInfo.label}\n </span>\n <span\n style={{\n ...defaultStyles.badge,\n color: statusInfo.color,\n backgroundColor: statusInfo.bg,\n }}\n >\n {statusInfo.label}\n </span>\n {request.is_own && (\n <span style={defaultStyles.ownBadge}>You</span>\n )}\n </div>\n </div>\n <p style={defaultStyles.message}>\n {request.message || 'No message provided'}\n </p>\n <div style={defaultStyles.meta}>\n <span>{formatDate(request.created_at)}</span>\n {!canVote && voteInfo.count > 0 && (\n <span>{voteInfo.count} vote{voteInfo.count !== 1 ? 's' : ''}</span>\n )}\n {request.page_url && (\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '200px' }}>\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { useArticles, useArticle, useRequests, useFeedback, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { Article, FeedbackType } from '../../types';\n\nexport type HelpCenterTab = 'articles' | 'requests';\nexport type HelpCenterTheme = 'light' | 'dark' | 'auto';\n\nexport interface HelpCenterProps {\n tabs?: HelpCenterTab[];\n defaultTab?: HelpCenterTab;\n tabLabels?: Partial<Record<HelpCenterTab, string>>;\n showSearch?: boolean;\n className?: string;\n /** Theme mode: 'light', 'dark', or 'auto' (inherits from system/parent) */\n theme?: HelpCenterTheme;\n}\n\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Documentation',\n requests: 'My Requests',\n};\n\nconst feedbackTypeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n return new Date(dateString).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n// Icons as inline SVGs\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst BookIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst ArrowLeftIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst LayersIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\" />\n </svg>\n);\n\nconst MessageIcon = () => (\n <svg width=\"48\" height=\"48\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style={{ animation: 'spin 1s linear infinite' }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\n// Theme definitions\nconst themes = {\n light: {\n primary: '#c45a2c',\n primaryHover: '#a84a24',\n primaryLight: 'rgba(196, 90, 44, 0.08)',\n primaryLightHover: 'rgba(196, 90, 44, 0.15)',\n background: 'transparent',\n surface: '#ffffff',\n surfaceHover: '#fafafa',\n border: 'rgba(0, 0, 0, 0.08)',\n borderHover: 'rgba(196, 90, 44, 0.25)',\n text: '#1a1a1a',\n textSecondary: '#525252',\n textMuted: '#737373',\n textLight: '#a3a3a3',\n },\n dark: {\n primary: '#e07347',\n primaryHover: '#f08a5d',\n primaryLight: 'rgba(224, 115, 71, 0.12)',\n primaryLightHover: 'rgba(224, 115, 71, 0.2)',\n background: 'transparent',\n surface: 'rgba(255, 255, 255, 0.03)',\n surfaceHover: 'rgba(255, 255, 255, 0.06)',\n border: 'rgba(255, 255, 255, 0.08)',\n borderHover: 'rgba(224, 115, 71, 0.35)',\n text: '#fafafa',\n textSecondary: '#d4d4d4',\n textMuted: '#a3a3a3',\n textLight: '#737373',\n },\n};\n\ntype ThemeColors = typeof themes.light;\n\n// Create styles dynamically based on theme\nconst createStyles = (t: ThemeColors) => ({\n container: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n minHeight: '400px',\n color: t.text,\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: '220px 1fr',\n gap: '40px',\n },\n sidebar: {\n position: 'sticky' as const,\n top: '24px',\n height: 'fit-content',\n },\n main: {\n minWidth: 0,\n },\n tabs: {\n display: 'flex',\n borderBottom: `1px solid ${t.border}`,\n marginBottom: '28px',\n gap: '0',\n },\n tab: {\n padding: '10px 20px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderBottom: '2px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.15s',\n backgroundColor: 'transparent',\n color: t.textMuted,\n marginBottom: '-1px',\n },\n tabActive: {\n color: t.primary,\n borderBottom: `2px solid ${t.primary}`,\n },\n searchContainer: {\n position: 'relative' as const,\n marginBottom: '20px',\n },\n searchIcon: {\n position: 'absolute' as const,\n left: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: t.textLight,\n },\n searchInput: {\n width: '100%',\n padding: '8px 10px 8px 32px',\n fontSize: '13px',\n border: `1px solid ${t.border}`,\n borderRadius: '6px',\n outline: 'none',\n backgroundColor: 'transparent',\n color: t.text,\n boxSizing: 'border-box' as const,\n },\n sectionTitle: {\n fontSize: '10px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: t.textLight,\n marginBottom: '8px',\n marginTop: '20px',\n },\n navList: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n },\n navItem: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '6px 10px',\n fontSize: '13px',\n color: t.textSecondary,\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n textAlign: 'left' as const,\n transition: 'all 0.15s',\n },\n navItemActive: {\n backgroundColor: t.surfaceHover,\n color: t.text,\n fontWeight: 500,\n },\n subNav: {\n marginLeft: '20px',\n marginTop: '2px',\n paddingLeft: '10px',\n borderLeft: `1px solid ${t.border}`,\n },\n articleGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: '12px',\n },\n articleCard: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '14px',\n border: `1px solid ${t.border}`,\n borderRadius: '8px',\n backgroundColor: t.surface,\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n textAlign: 'left' as const,\n },\n articleIcon: {\n flexShrink: 0,\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: t.primaryLight,\n borderRadius: '8px',\n color: t.primary,\n transition: 'background-color 0.2s',\n },\n articleContent: {\n flex: 1,\n minWidth: 0,\n },\n articleTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: t.text,\n margin: 0,\n lineHeight: 1.4,\n },\n articleDesc: {\n fontSize: '12px',\n color: t.textMuted,\n margin: '4px 0 0',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n lineHeight: 1.5,\n },\n articleMeta: {\n fontSize: '11px',\n color: t.textLight,\n marginTop: '6px',\n },\n articleChevron: {\n flexShrink: 0,\n color: t.textLight,\n transition: 'color 0.2s',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 0',\n fontSize: '13px',\n color: t.textMuted,\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n marginBottom: '20px',\n transition: 'color 0.15s',\n },\n articleDetail: {\n maxWidth: '720px',\n },\n articleDetailTitle: {\n fontSize: '28px',\n fontWeight: 600,\n color: t.text,\n margin: 0,\n lineHeight: 1.3,\n },\n articleDetailMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: t.textMuted,\n marginTop: '10px',\n },\n articleDetailContent: {\n marginTop: '28px',\n fontSize: '15px',\n lineHeight: 1.7,\n color: t.textSecondary,\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '48px 24px',\n color: t.textMuted,\n },\n emptyIcon: {\n color: t.textLight,\n marginBottom: '12px',\n opacity: 0.5,\n },\n emptyTitle: {\n fontSize: '16px',\n fontWeight: 500,\n color: t.text,\n margin: '0 0 6px',\n },\n emptyText: {\n fontSize: '13px',\n margin: 0,\n color: t.textMuted,\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '10px',\n padding: '48px',\n color: t.textMuted,\n fontSize: '13px',\n },\n // Request styles\n requestCard: {\n border: `1px solid ${t.border}`,\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: t.surface,\n marginBottom: '10px',\n transition: 'border-color 0.2s',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n marginBottom: '10px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '3px 8px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '14px',\n color: t.text,\n margin: 0,\n lineHeight: 1.5,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: t.textMuted,\n },\n form: {\n padding: '16px',\n backgroundColor: t.surface,\n borderRadius: '8px',\n border: `1px solid ${t.border}`,\n marginBottom: '20px',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: t.text,\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '6px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${t.border}`,\n backgroundColor: 'transparent',\n color: t.textSecondary,\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n fontWeight: 500,\n },\n typeButtonActive: {\n backgroundColor: t.primary,\n borderColor: t.primary,\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: `1px solid ${t.border}`,\n fontSize: '13px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n backgroundColor: 'transparent',\n color: t.text,\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: t.primary,\n color: '#ffffff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n newRequestButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: t.primary,\n color: '#ffffff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n marginBottom: '20px',\n transition: 'background-color 0.15s',\n },\n successMessage: {\n padding: '12px 14px',\n backgroundColor: 'rgba(5, 150, 105, 0.1)',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '13px',\n marginBottom: '12px',\n fontWeight: 500,\n },\n});\n\n// Create dynamic CSS for hover states\nconst createHoverStyles = (t: ThemeColors, isDark: boolean) => `\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .census-hc .census-article-card:hover {\n border-color: ${t.borderHover} !important;\n box-shadow: ${isDark ? '0 4px 12px rgba(0, 0, 0, 0.3)' : '0 4px 12px rgba(0, 0, 0, 0.06)'};\n }\n\n .census-hc .census-article-card:hover .census-article-icon {\n background-color: ${t.primaryLightHover} !important;\n }\n\n .census-hc .census-article-card:hover .census-article-chevron {\n color: ${t.textSecondary} !important;\n }\n\n .census-hc .census-nav-item:hover {\n background-color: ${t.surfaceHover} !important;\n color: ${t.text} !important;\n }\n\n .census-hc .census-back-btn:hover {\n color: ${t.text} !important;\n }\n\n .census-hc .census-submit-btn:hover {\n background-color: ${t.primaryHover} !important;\n }\n\n .census-hc .census-new-request-btn:hover {\n background-color: ${t.primaryHover} !important;\n }\n\n .census-hc .census-tab:hover {\n color: ${t.text} !important;\n }\n\n .census-hc .census-search-input:focus {\n border-color: ${t.primary} !important;\n outline: none !important;\n box-shadow: 0 0 0 1px ${t.primary} !important;\n }\n\n .census-hc .census-search-input::placeholder {\n color: ${t.textLight};\n }\n\n .census-hc .census-textarea::placeholder {\n color: ${t.textLight};\n }\n`;\n\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab = 'articles',\n tabLabels = {},\n showSearch = true,\n className,\n theme: themeProp = 'auto',\n}: HelpCenterProps) {\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(defaultTab);\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticle, setSelectedArticle] = useState<Article | null>(null);\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const [selectedFeatureId, setSelectedFeatureId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n const [systemDark, setSystemDark] = useState(false);\n\n // Detect system theme\n useEffect(() => {\n if (themeProp === 'auto') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemDark(mediaQuery.matches);\n\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n }, [themeProp]);\n\n // Resolve the actual theme\n const isDark = themeProp === 'dark' || (themeProp === 'auto' && systemDark);\n const themeColors = isDark ? themes.dark : themes.light;\n const styles = useMemo(() => createStyles(themeColors), [themeColors]);\n const hoverStyles = useMemo(() => createHoverStyles(themeColors, isDark), [themeColors, isDark]);\n\n const { isIdentified, isReady } = useCensusContext();\n const { articles, isLoading: articlesLoading } = useArticles({ search: searchQuery || undefined });\n const { article: fullArticle, isLoading: articleLoading } = useArticle(selectedArticle?.slug || '');\n const { requests, isLoading: requestsLoading, refetch: refetchRequests, settings } = useRequests({ limit: 50 });\n const { featureGroups, isLoading: groupsLoading } = useFeatureGroups();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Cmd+K keyboard shortcut\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const toggleGroup = (groupId: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupId)) {\n next.delete(groupId);\n } else {\n next.add(groupId);\n }\n return next;\n });\n };\n\n const filteredArticles = useMemo(() => {\n return articles.filter((article) => {\n const matchesFeature = !selectedFeatureId || (article as any).feature_id === selectedFeatureId;\n return matchesFeature;\n });\n }, [articles, selectedFeatureId]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n setTimeout(() => {\n refetchRequests();\n reset();\n }, 500);\n } catch {\n // Error handled by hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetchRequests, reset]\n );\n\n const renderArticleDetail = () => {\n if (articleLoading || !fullArticle) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading article...</span>\n </div>\n );\n }\n\n return (\n <div style={styles.articleDetail}>\n <button onClick={() => setSelectedArticle(null)} style={styles.backButton} className=\"census-back-btn\">\n <ArrowLeftIcon />\n Back to articles\n </button>\n\n <h1 style={styles.articleDetailTitle}>{fullArticle.title}</h1>\n {fullArticle.read_time_minutes && (\n <div style={styles.articleDetailMeta}>\n <ClockIcon />\n {fullArticle.read_time_minutes} min read\n </div>\n )}\n\n {fullArticle.content_html ? (\n <div\n style={styles.articleDetailContent}\n dangerouslySetInnerHTML={{ __html: fullArticle.content_html }}\n />\n ) : (\n <p style={{ ...styles.articleDetailContent, color: '#6b7280' }}>No content available.</p>\n )}\n </div>\n );\n };\n\n const renderArticles = () => {\n if (selectedArticle) {\n return renderArticleDetail();\n }\n\n if (articlesLoading || groupsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (filteredArticles.length === 0) {\n return (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><BookIcon /></div>\n <h3 style={styles.emptyTitle}>No articles found</h3>\n <p style={styles.emptyText}>\n {searchQuery ? `No results for \"${searchQuery}\"` : 'No documentation articles available yet.'}\n </p>\n </div>\n );\n }\n\n return (\n <div style={styles.articleGrid}>\n {filteredArticles.map((article) => (\n <button\n key={article.id}\n onClick={() => setSelectedArticle(article)}\n style={styles.articleCard}\n className=\"census-article-card\"\n >\n <div style={styles.articleIcon} className=\"census-article-icon\">\n <BookIcon />\n </div>\n <div style={styles.articleContent}>\n <h3 style={styles.articleTitle}>{article.title}</h3>\n {article.seo_description && (\n <p style={styles.articleDesc}>{article.seo_description}</p>\n )}\n {article.read_time_minutes && (\n <p style={styles.articleMeta}>{article.read_time_minutes} min read</p>\n )}\n </div>\n <span style={styles.articleChevron} className=\"census-article-chevron\">\n <ChevronRightIcon />\n </span>\n </button>\n ))}\n </div>\n );\n };\n\n const renderRequestForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={styles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button onClick={() => setShowForm(true)} style={styles.newRequestButton} className=\"census-new-request-btn\">\n <PlusIcon />\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n <div style={styles.formHeader}>\n <p style={styles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280', fontSize: '18px' }}\n >\n ×\n </button>\n </div>\n <div style={styles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...styles.typeButton,\n ...(formType === t.value ? styles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={styles.textarea}\n className=\"census-textarea\"\n required\n />\n <button\n type=\"submit\"\n style={{ ...styles.submitButton, opacity: isSubmitting ? 0.6 : 1 }}\n disabled={isSubmitting}\n className=\"census-submit-btn\"\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n const renderRequests = () => {\n // Wait for SDK to be ready before checking identification\n if (!isReady) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (!isIdentified) {\n return (\n <div style={styles.emptyState}>\n <p style={styles.emptyText}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (requestsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading requests...</span>\n </div>\n );\n }\n\n return (\n <div>\n {renderRequestForm()}\n\n {requests.length === 0 ? (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><MessageIcon /></div>\n <h3 style={styles.emptyTitle}>No requests yet</h3>\n <p style={styles.emptyText}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : \"When you submit feedback, they'll appear here.\"}\n </p>\n </div>\n ) : (\n <div>\n {requests.map((request) => {\n const typeInfo = feedbackTypeConfig[request.feedback_type] || feedbackTypeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div key={request.id} style={styles.requestCard}>\n <div style={styles.requestHeader}>\n <span style={{ ...styles.badge, color: typeInfo.color, backgroundColor: typeInfo.bg }}>\n {typeInfo.label}\n </span>\n <span style={{ ...styles.badge, color: statusInfo.color, backgroundColor: statusInfo.bg }}>\n {statusInfo.label}\n </span>\n </div>\n <p style={styles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={styles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div style={styles.container} className={`census-hc ${className || ''}`}>\n <style>{hoverStyles}</style>\n\n {/* Tabs */}\n {tabs.length > 1 && (\n <div style={styles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n ...styles.tab,\n ...(activeTab === tab ? styles.tabActive : {}),\n }}\n className={activeTab !== tab ? 'census-tab' : undefined}\n >\n {mergedLabels[tab]}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.grid}>\n {/* Sidebar */}\n <aside style={styles.sidebar}>\n {/* Search */}\n {showSearch && activeTab === 'articles' && (\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}><SearchIcon /></div>\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={styles.searchInput}\n className=\"census-search-input\"\n />\n </div>\n )}\n\n {/* Feature Groups */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <nav>\n <h3 style={styles.sectionTitle}>Features</h3>\n <ul style={styles.navList}>\n <li>\n <button\n onClick={() => setSelectedFeatureId(null)}\n style={{\n ...styles.navItem,\n ...(!selectedFeatureId ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId ? 'census-nav-item' : undefined}\n >\n All Articles\n </button>\n </li>\n {featureGroups.map((group) => (\n <li key={group.id}>\n <button\n onClick={() => toggleGroup(group.id)}\n style={styles.navItem}\n className=\"census-nav-item\"\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <LayersIcon />\n {group.name}\n </span>\n {expandedGroups.has(group.id) ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n {expandedGroups.has(group.id) && group.features.length > 0 && (\n <ul style={styles.subNav}>\n {group.features.map((feature) => (\n <li key={feature.id}>\n <button\n onClick={() => setSelectedFeatureId(feature.id)}\n style={{\n ...styles.navItem,\n padding: '6px 12px',\n fontSize: '13px',\n ...(selectedFeatureId === feature.id ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId !== feature.id ? 'census-nav-item' : undefined}\n >\n {feature.name}\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n )}\n </aside>\n\n {/* Main Content */}\n <main style={styles.main}>\n {activeTab === 'articles' && renderArticles()}\n {activeTab === 'requests' && renderRequests()}\n </main>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client.ts","../../src/react/context.tsx","../../src/react/hooks.ts","../../src/react/components/FeedbackButton.tsx","../../src/react/components/KnowledgeBase.tsx","../../src/react/components/Requests.tsx","../../src/react/components/HelpCenter.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","feedbackId","eventType","properties","events","event","guideId","path","method","body","headers","errorMessage","args","createCensus","CensusContext","createContext","CensusProvider","apiKey","baseUrl","debug","theme","children","isReady","setIsReady","useState","isIdentified","setIsIdentified","client","useMemo","useEffect","value","jsx","useCensus","context","useContext","useCensusContext","useIdentify","isIdentifying","setIsIdentifying","setError","identify","useCallback","err","reset","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","setFeedbackId","submitFeedback","result","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","defaultSettings","useRequests","fetchRequests","useVote","isVoting","setIsVoting","useTrack","track","trackBatch","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","defaultStyles","positionStyles","feedbackTypeLabels","feedbackTypeEmojis","getThemeStyles","FeedbackButton","position","text","allowedTypes","themeProp","onSubmit","onError","contextTheme","isOpen","setIsOpen","selectedType","setSelectedType","message","setMessage","themeStyles","handleOpen","handleClose","handleSubmit","e","feedbackData","jsxs","Fragment","FeedbackModal","onClose","onTypeChange","onMessageChange","type","KnowledgeBase","showSearch","showCategories","defaultCategory","className","onArticleView","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","selectedArticleSlug","setSelectedArticleSlug","articles","isLoadingArticles","articlesError","selectedArticle","isLoadingArticle","articleError","categories","cats","handleArticleClick","handleBack","category","typeConfig","statusConfig","formatDate","dateString","FORM_TYPES","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","showForm","setShowForm","formType","setFormType","formMessage","setFormMessage","localVotes","setLocalVotes","requests","refetch","settings","vote","handleRequestClick","request","handleVote","currentCount","currentHasVoted","prev","getVoteInfo","local","renderForm","t","canVote","typeInfo","statusInfo","isHovered","voteInfo","defaultTabLabels","feedbackTypeConfig","SearchIcon","BookIcon","ChevronRightIcon","ChevronDownIcon","ArrowLeftIcon","ClockIcon","LayersIcon","MessageIcon","PlusIcon","LoaderIcon","themes","createStyles","createHoverStyles","isDark","HelpCenter","tabs","defaultTab","tabLabels","activeTab","setActiveTab","setSelectedArticle","expandedGroups","setExpandedGroups","selectedFeatureId","setSelectedFeatureId","searchInputRef","useRef","systemDark","setSystemDark","mediaQuery","handler","themeColors","styles","hoverStyles","articlesLoading","fullArticle","articleLoading","requestsLoading","refetchRequests","groupsLoading","mergedLabels","handleKeyDown","toggleGroup","groupId","next","filteredArticles","renderArticleDetail","renderArticles","renderRequestForm","renderRequests","tab","group","feature"],"mappings":"gFAoBA,IAAMA,EAAAA,CAAmB,uBAAA,CAkBZC,GAAN,KAAmB,CAMxB,YAAYC,CAAAA,CAAsB,CAFlC,KAAQ,aAAA,CAA+B,IAAA,CAGrC,GAAI,CAACA,CAAAA,CAAO,OACV,MAAM,IAAI,MAAM,4BAA4B,CAAA,CAIxB,CAAC,UAAA,CAAY,UAAA,CAAY,WAAY,UAAU,CAAA,CAClD,KAAKC,CAAAA,EAAUD,CAAAA,CAAO,MAAA,CAAO,UAAA,CAAWC,CAAM,CAAC,GAChE,OAAA,CAAQ,IAAA,CAAK,4DAA4D,CAAA,CAG3E,IAAA,CAAK,OAASD,CAAAA,CAAO,MAAA,CACrB,KAAK,OAAA,CAAUA,CAAAA,CAAO,SAAWF,EAAAA,CACjC,IAAA,CAAK,MAAQE,CAAAA,CAAO,KAAA,EAAS,MAE7B,IAAA,CAAK,GAAA,CAAI,6BAA8B,IAAA,CAAK,OAAO,EACrD,CAmBA,MAAM,SAASE,CAAAA,CAAmC,CAChD,GAAI,CAACA,CAAAA,CAAK,OACR,MAAM,IAAI,MAAM,2CAA2C,CAAA,CAG7D,KAAK,aAAA,CAAgBA,CAAAA,CAAK,OAE1B,MAAM,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAqB,MAAA,CAAQ,CAC9C,OAAQA,CAAAA,CAAK,MAAA,CACb,MAAOA,CAAAA,CAAK,KAAA,CACZ,KAAMA,CAAAA,CAAK,IAAA,CACX,UAAWA,CAAAA,CAAK,SAAA,CAChB,SAAUA,CAAAA,CAAK,QAAA,CACf,eAAgBA,CAAAA,CAAK,cAAA,CACrB,iBAAkBA,CAAAA,CAAK,gBAAA,CACvB,mBAAoBA,CAAAA,CAAK,kBAAA,CACzB,iBAAkBA,CAAAA,CAAK,gBACzB,CAAC,CAAA,CAED,IAAA,CAAK,IAAI,kBAAA,CAAoBA,CAAAA,CAAK,MAAM,EAC1C,CAMA,OAAc,CACZ,IAAA,CAAK,cAAgB,IAAA,CACrB,IAAA,CAAK,IAAI,qBAAqB,EAChC,CA8BA,MAAM,cAAA,CAAeC,CAAAA,CAA2D,CAC9E,IAAMC,CAAAA,CAAa,CAAC,UAAA,CAAY,YAAA,CAAc,kBAAmB,gBAAgB,CAAA,CACjF,GAAI,CAACD,CAAAA,CAAQ,MAAQ,CAACC,CAAAA,CAAW,SAASD,CAAAA,CAAQ,IAAI,EACpD,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgCC,CAAAA,CAAW,KAAK,IAAI,CAAC,EAAE,CAAA,CAGzE,GAAID,EAAQ,IAAA,GAAS,gBAAA,CAAA,CACnB,GAAIA,CAAAA,CAAQ,MAAA,GAAW,QAAaA,CAAAA,CAAQ,OAAA,GAAY,OACtD,MAAM,IAAI,MAAM,yDAAyD,CAAA,CAAA,KAAA,GAElE,CAACA,CAAAA,CAAQ,OAAA,CAClB,MAAM,IAAI,KAAA,CAAM,oDAAoD,EAGtE,IAAME,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAC1B,oBACA,MAAA,CACA,CACE,KAAMF,CAAAA,CAAQ,IAAA,CACd,QAASA,CAAAA,CAAQ,OAAA,CACjB,OAAQA,CAAAA,CAAQ,MAAA,CAChB,QAASA,CAAAA,CAAQ,OAAA,CACjB,OAAQ,IAAA,CAAK,aAAA,CACb,UAAWA,CAAAA,CAAQ,SAAA,CACnB,QAAS,OAAO,MAAA,CAAW,IAAc,MAAA,CAAO,QAAA,CAAS,KAAO,MAAA,CAChE,QAAA,CAAUA,EAAQ,QACpB,CACF,EAEA,OAAA,IAAA,CAAK,GAAA,CAAI,qBAAA,CAAuBE,CAAAA,CAAS,UAAU,CAAA,CAC5C,CAAE,UAAA,CAAYA,CAAAA,CAAS,UAAW,CAC3C,CAoBA,MAAM,WAAA,CAAYF,CAAAA,CAAsD,CACtE,IAAMG,CAAAA,CAAS,IAAI,eAAA,CACfH,CAAAA,EAAS,UAAUG,CAAAA,CAAO,GAAA,CAAI,WAAYH,CAAAA,CAAQ,QAAQ,EAC1DA,CAAAA,EAAS,MAAA,EAAQG,EAAO,GAAA,CAAI,QAAA,CAAUH,EAAQ,MAAM,CAAA,CACpDA,GAAS,KAAA,EAAOG,CAAAA,CAAO,IAAI,OAAA,CAAS,MAAA,CAAOH,EAAQ,KAAK,CAAC,EACzDA,CAAAA,EAAS,MAAA,EAAQG,EAAO,GAAA,CAAI,QAAA,CAAU,MAAA,CAAOH,CAAAA,CAAQ,MAAM,CAAC,EAEhE,IAAMI,CAAAA,CAAcD,EAAO,QAAA,EAAS,CAC9BE,EAAM,CAAA,iBAAA,EAAoBD,CAAAA,CAAc,IAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAE9DF,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAA0BG,EAAK,KAAK,CAAA,CAChE,YAAK,GAAA,CAAI,mBAAA,CAAqBH,EAAS,QAAA,CAAS,MAAM,EAC/CA,CACT,CAgBA,MAAM,UAAA,CAAWI,CAAAA,CAA2C,CAC1D,GAAI,CACF,IAAMJ,CAAAA,CAAW,MAAM,KAAK,OAAA,CAC1B,CAAA,kBAAA,EAAqB,mBAAmBI,CAAQ,CAAC,CAAA,CAAA,CACjD,KACF,CAAA,CACA,OAAA,IAAA,CAAK,IAAI,kBAAA,CAAoBA,CAAQ,EAC9BJ,CAAAA,CAAS,OAClB,OAASK,CAAAA,CAAO,CACd,GAAKA,CAAAA,CAAsB,MAAA,GAAW,IACpC,OAAO,IAAA,CAET,MAAMA,CACR,CACF,CAgBA,MAAM,gBAAA,EAAmD,CACvD,IAAML,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAC1B,0BACA,KACF,CAAA,CACA,YAAK,GAAA,CAAI,yBAAA,CAA2BA,EAAS,cAAA,CAAe,MAAM,EAC3DA,CACT,CAqBA,MAAM,WAAA,CAAYF,CAAAA,CAAsD,CACtE,GAAI,CAAC,IAAA,CAAK,aAAA,CACR,MAAM,IAAI,MAAM,kFAAkF,CAAA,CAGpG,IAAMG,CAAAA,CAAS,IAAI,gBACnBA,CAAAA,CAAO,GAAA,CAAI,SAAU,IAAA,CAAK,aAAa,EACnCH,CAAAA,EAAS,MAAA,EAAQG,EAAO,GAAA,CAAI,QAAA,CAAUH,EAAQ,MAAM,CAAA,CACpDA,GAAS,IAAA,EAAMG,CAAAA,CAAO,IAAI,MAAA,CAAQH,CAAAA,CAAQ,IAAI,CAAA,CAC9CA,CAAAA,EAAS,OAAOG,CAAAA,CAAO,GAAA,CAAI,QAAS,MAAA,CAAOH,CAAAA,CAAQ,KAAK,CAAC,CAAA,CACzDA,GAAS,MAAA,EAAQG,CAAAA,CAAO,IAAI,QAAA,CAAU,MAAA,CAAOH,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAEhE,IAAME,CAAAA,CAAW,MAAM,KAAK,OAAA,CAC1B,CAAA,kBAAA,EAAqBC,EAAO,QAAA,EAAU,GACtC,KACF,CAAA,CACA,YAAK,GAAA,CAAI,mBAAA,CAAqBD,EAAS,QAAA,CAAS,MAAM,EAC/CA,CACT,CAmBA,MAAM,IAAA,CAAKM,CAAAA,CAKR,CACD,GAAI,CAAC,KAAK,aAAA,CACR,MAAM,IAAI,KAAA,CAAM,uEAAuE,EAGzF,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2CAA2C,CAAA,CAG7D,IAAMN,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAKzB,wBAAA,CAA0B,MAAA,CAAQ,CACnC,UAAA,CAAAM,CAAAA,CACA,OAAQ,IAAA,CAAK,aACf,CAAC,CAAA,CAED,OAAA,IAAA,CAAK,IAAI,cAAA,CAAgBN,CAAAA,CAAS,OAAQ,eAAA,CAAiBM,CAAU,EAC9DN,CACT,CAiBA,MAAM,KAAA,CAAMO,CAAAA,CAAmBC,EAAqD,CAClF,GAAI,CAACD,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,2CAA2C,EAG7D,MAAM,IAAA,CAAK,QAAQ,iBAAA,CAAmB,MAAA,CAAQ,CAC5C,SAAA,CAAAA,CAAAA,CACA,OAAQ,IAAA,CAAK,aAAA,CACb,WAAAC,CACF,CAAC,CAAA,CAED,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAkBD,CAAS,EACtC,CAkBA,MAAM,UAAA,CAAWT,CAAAA,CAA4C,CAC3D,GAAI,CAACA,EAAQ,MAAA,EAAUA,CAAAA,CAAQ,OAAO,MAAA,GAAW,CAAA,CAC/C,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA,CAG1D,GAAIA,EAAQ,MAAA,CAAO,MAAA,CAAS,IAC1B,MAAM,IAAI,MAAM,sCAAsC,CAAA,CAGxD,IAAMW,CAAAA,CAASX,CAAAA,CAAQ,OAAO,GAAA,CAAKY,CAAAA,GAAW,CAC5C,SAAA,CAAWA,CAAAA,CAAM,UACjB,MAAA,CAAQ,IAAA,CAAK,cACb,SAAA,CAAWA,CAAAA,CAAM,SAAA,CACjB,SAAA,CAAWA,CAAAA,CAAM,SAAA,CACjB,WAAYA,CAAAA,CAAM,UACpB,EAAE,CAAA,CAEF,MAAM,KAAK,OAAA,CAAQ,iBAAA,CAAmB,OAAQ,CAAE,MAAA,CAAAD,CAAO,CAAC,CAAA,CAExD,KAAK,GAAA,CAAI,uBAAA,CAAyBX,EAAQ,MAAA,CAAO,MAAM,EACzD,CAcA,MAAM,WAAqC,CACzC,IAAMG,EAAS,IAAI,eAAA,CACf,KAAK,aAAA,EACPA,CAAAA,CAAO,IAAI,QAAA,CAAU,IAAA,CAAK,aAAa,CAAA,CAGzC,IAAMC,EAAcD,CAAAA,CAAO,QAAA,GACrBE,CAAAA,CAAM,CAAA,eAAA,EAAkBD,CAAAA,CAAc,CAAA,CAAA,EAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAE5DF,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAAwBG,EAAK,KAAK,CAAA,CAC9D,YAAK,GAAA,CAAI,iBAAA,CAAmBH,EAAS,MAAA,CAAO,MAAM,EAC3CA,CACT,CAgBA,MAAM,QAAA,CAASI,CAAAA,CAAyC,CACtD,GAAI,CACF,IAAMH,CAAAA,CAAS,IAAI,gBACf,IAAA,CAAK,aAAA,EACPA,EAAO,GAAA,CAAI,QAAA,CAAU,KAAK,aAAa,CAAA,CAGzC,IAAMC,CAAAA,CAAcD,CAAAA,CAAO,UAAS,CAC9BE,CAAAA,CAAM,mBAAmB,kBAAA,CAAmBC,CAAQ,CAAC,CAAA,EAAGF,CAAAA,CAAc,CAAA,CAAA,EAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,GAE5FF,CAAAA,CAAW,MAAM,KAAK,OAAA,CAA0BG,CAAAA,CAAK,KAAK,CAAA,CAChE,OAAA,IAAA,CAAK,IAAI,gBAAA,CAAkBC,CAAQ,EAC5BJ,CAAAA,CAAS,KAClB,OAASK,CAAAA,CAAO,CACd,GAAKA,CAAAA,CAAsB,MAAA,GAAW,IACpC,OAAO,IAAA,CAET,MAAMA,CACR,CACF,CAmBA,MAAM,eAAA,CAAgBK,EAA2C,CAC/D,GAAI,CAACA,CAAAA,CAAM,OAAA,EAAW,CAACA,CAAAA,CAAM,SAAA,EAAa,CAACA,CAAAA,CAAM,SAAA,CAC/C,MAAM,IAAI,KAAA,CAAM,8EAA8E,EAGhG,MAAM,IAAA,CAAK,QAAQ,wBAAA,CAA0B,MAAA,CAAQ,CACnD,OAAA,CAASA,CAAAA,CAAM,QACf,SAAA,CAAWA,CAAAA,CAAM,UACjB,MAAA,CAAQA,CAAAA,CAAM,OACd,SAAA,CAAWA,CAAAA,CAAM,UACjB,OAAA,CAASA,CAAAA,CAAM,OAAA,GAAY,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,QAAA,CAAS,IAAA,CAAO,QAClF,SAAA,CAAWA,CAAAA,CAAM,UACjB,MAAA,CAAQA,CAAAA,CAAM,QAAU,IAAA,CAAK,aAAA,CAC7B,SAAUA,CAAAA,CAAM,QAClB,CAAC,CAAA,CAED,IAAA,CAAK,IAAI,sBAAA,CAAwBA,CAAAA,CAAM,SAAA,CAAWA,CAAAA,CAAM,OAAO,EACjE,CAaA,MAAM,kBAAA,CAAmBC,EAAgC,CACvD,GAAI,CAACA,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,sDAAsD,EAGxE,GAAI,CAAC,KAAK,aAAA,CACR,MAAM,IAAI,KAAA,CAAM,wFAAwF,EAG1G,MAAM,IAAA,CAAK,QAAQ,0BAAA,CAA4B,MAAA,CAAQ,CACrD,OAAA,CAAAA,CAAAA,CACA,OAAQ,IAAA,CAAK,aACf,CAAC,CAAA,CAED,IAAA,CAAK,IAAI,yBAAA,CAA2BA,CAAO,EAC7C,CAKA,gBAAA,EAAkC,CAChC,OAAO,IAAA,CAAK,aACd,CAKA,YAAA,EAAwB,CACtB,OAAO,IAAA,CAAK,aAAA,GAAkB,IAChC,CAKA,MAAc,QAAWC,CAAAA,CAAcC,CAAAA,CAAgBC,EAA4B,CACjF,IAAMX,EAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAGS,CAAI,GAE5BG,CAAAA,CAAkC,CACtC,eAAgB,IAAA,CAAK,MACvB,EAEID,CAAAA,GACFC,CAAAA,CAAQ,cAAc,CAAA,CAAI,kBAAA,CAAA,CAG5B,KAAK,GAAA,CAAI,CAAA,EAAGF,CAAM,CAAA,CAAA,EAAID,CAAI,GAAIE,CAAI,CAAA,CAElC,IAAMd,CAAAA,CAAW,MAAM,MAAMG,CAAAA,CAAK,CAChC,MAAA,CAAAU,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,KAAMD,CAAAA,CAAO,IAAA,CAAK,UAAUA,CAAI,CAAA,CAAI,MACtC,CAAC,CAAA,CAED,GAAI,CAACd,CAAAA,CAAS,GAAI,CAChB,IAAIgB,EAAe,CAAA,2BAAA,EAA8BhB,CAAAA,CAAS,MAAM,CAAA,CAAA,CAChE,GAAI,CAEFgB,CAAAA,CAAAA,CADkB,MAAMhB,EAAS,IAAA,EAAK,EACb,OAASgB,EACpC,CAAA,KAAQ,CAER,CAMA,MAJ2B,CACzB,KAAA,CAAOA,CAAAA,CACP,OAAQhB,CAAAA,CAAS,MACnB,CAEF,CAEA,OAAOA,EAAS,IAAA,EAClB,CAKQ,GAAA,CAAA,GAAOiB,CAAAA,CAAuB,CAChC,KAAK,KAAA,EACP,OAAA,CAAQ,IAAI,UAAA,CAAY,GAAGA,CAAI,EAEnC,CACF,EAkBO,SAASC,EAAAA,CAAavB,EAAoC,CAC/D,OAAO,IAAID,EAAAA,CAAaC,CAAM,CAChC,CC1lBA,IAAMwB,GAAgBC,mBAAAA,CAAyC,IAAI,EAsB5D,SAASC,EAAAA,CAAe,CAC7B,MAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,IAAA,CAAA3B,CAAAA,CACA,MAAA4B,CAAAA,CAAQ,GACR,QAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,GAAM,CAACC,EAASC,CAAU,CAAA,CAAIC,eAAS,KAAK,CAAA,CACtC,CAACC,CAAAA,CAAcC,CAAe,EAAIF,cAAAA,CAAS,KAAK,EAEhDG,CAAAA,CAASC,aAAAA,CAAQ,IACdf,EAAAA,CAAa,CAAE,OAAAI,CAAAA,CAAQ,OAAA,CAAAC,EAAS,KAAA,CAAAC,CAAM,CAAC,CAAA,CAC7C,CAACF,EAAQC,CAAAA,CAASC,CAAK,CAAC,CAAA,CAG3BU,eAAAA,CAAU,IAAM,CACVrC,CAAAA,CACFmC,EACG,QAAA,CAASnC,CAAI,EACb,IAAA,CAAK,IAAM,CACVkC,CAAAA,CAAgB,IAAI,CAAA,CACpBH,CAAAA,CAAW,IAAI,EACjB,CAAC,CAAA,CACA,KAAA,CAAOvB,GAAU,CAChB,IAAMW,EAAeX,CAAAA,EAAO,KAAA,EAASA,GAAO,OAAA,EAAW,IAAA,CAAK,UAAUA,CAAK,CAAA,CAC3E,QAAQ,KAAA,CAAM,mCAAA,CAAqCW,CAAY,CAAA,CAC/DY,CAAAA,CAAW,IAAI,EACjB,CAAC,EAEHA,CAAAA,CAAW,IAAI,EAEnB,CAAA,CAAG,CAACI,EAAQnC,CAAI,CAAC,EAEjB,IAAMsC,CAAAA,CAA4BF,cAChC,KAAO,CACL,OAAAD,CAAAA,CACA,KAAA,CAAAP,EACA,OAAA,CAAAE,CAAAA,CACA,YAAA,CAAAG,CACF,CAAA,CAAA,CACA,CAACE,EAAQP,CAAAA,CAAOE,CAAAA,CAASG,CAAY,CACvC,CAAA,CAEA,OAAOM,cAAAA,CAACjB,EAAAA,CAAc,SAAd,CAAuB,KAAA,CAAOgB,EAAQ,QAAA,CAAAT,CAAAA,CAAS,CACzD,CAqBO,SAASW,IAA0B,CACxC,IAAMC,EAAUC,gBAAAA,CAAWpB,EAAa,EACxC,GAAI,CAACmB,EACH,MAAM,IAAI,MAAM,gDAAgD,CAAA,CAElE,OAAOA,CAAAA,CAAQ,MACjB,CAQO,SAASE,CAAAA,EAAuC,CACrD,IAAMF,CAAAA,CAAUC,iBAAWpB,EAAa,CAAA,CACxC,GAAI,CAACmB,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,uDAAuD,EAEzE,OAAOA,CACT,CAsBO,SAASG,EAAAA,EAAc,CAC5B,GAAM,CAAE,OAAAT,CAAO,CAAA,CAAIQ,GAAiB,CAC9B,CAACE,EAAeC,CAAgB,CAAA,CAAId,cAAAA,CAAS,KAAK,CAAA,CAClD,CAACxB,EAAOuC,CAAQ,CAAA,CAAIf,eAAuB,IAAI,CAAA,CAE/CgB,EAAWC,iBAAAA,CACf,MAAOjD,GAAuB,CAC5B8C,CAAAA,CAAiB,IAAI,CAAA,CACrBC,CAAAA,CAAS,IAAI,CAAA,CACb,GAAI,CACF,MAAMZ,CAAAA,CAAO,QAAA,CAASnC,CAAI,EAC5B,CAAA,MAASkD,EAAK,CACZ,MAAAH,EAASG,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA,CACpEA,CACR,CAAA,OAAE,CACAJ,EAAiB,KAAK,EACxB,CACF,CAAA,CACA,CAACX,CAAM,CACT,CAAA,CAEMgB,EAAQF,iBAAAA,CAAY,IAAM,CAC9Bd,CAAAA,CAAO,KAAA,GACT,CAAA,CAAG,CAACA,CAAM,CAAC,CAAA,CAEX,OAAO,CACL,QAAA,CAAAa,EACA,KAAA,CAAAG,CAAAA,CACA,cAAAN,CAAAA,CACA,YAAA,CAAcV,CAAAA,CAAO,YAAA,EAAa,CAClC,KAAA,CAAA3B,CACF,CACF,CCxIO,SAAS4C,GAAc,CAC5B,GAAM,CAAE,MAAA,CAAAjB,CAAO,EAAIQ,CAAAA,EAAiB,CAC9B,CAACU,CAAAA,CAAcC,CAAe,EAAItB,cAAAA,CAAS,KAAK,EAChD,CAACuB,CAAAA,CAAWC,CAAY,CAAA,CAAIxB,cAAAA,CAAS,KAAK,CAAA,CAC1C,CAACxB,EAAOuC,CAAQ,CAAA,CAAIf,eAAuB,IAAI,CAAA,CAC/C,CAACvB,CAAAA,CAAYgD,CAAa,CAAA,CAAIzB,cAAAA,CAAwB,IAAI,CAAA,CAE1D0B,EAAiBT,iBAAAA,CACrB,MAAOhD,GAA6B,CAClCqD,CAAAA,CAAgB,IAAI,CAAA,CACpBE,CAAAA,CAAa,KAAK,CAAA,CAClBT,CAAAA,CAAS,IAAI,CAAA,CACbU,CAAAA,CAAc,IAAI,CAAA,CAElB,GAAI,CACF,IAAME,CAAAA,CAAS,MAAMxB,CAAAA,CAAO,cAAA,CAAelC,CAAO,CAAA,CAClD,OAAAwD,EAAcE,CAAAA,CAAO,UAAU,EAC/BH,CAAAA,CAAa,CAAA,CAAI,EACVG,CACT,CAAA,MAAST,EAAK,CACZ,IAAM1C,EAAQ0C,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,2BAA2B,CAAA,CAChF,MAAAH,CAAAA,CAASvC,CAAK,CAAA,CACRA,CACR,QAAE,CACA8C,CAAAA,CAAgB,KAAK,EACvB,CACF,EACA,CAACnB,CAAM,CACT,CAAA,CAEMgB,CAAAA,CAAQF,kBAAY,IAAM,CAC9BO,EAAa,KAAK,CAAA,CAClBT,EAAS,IAAI,CAAA,CACbU,EAAc,IAAI,EACpB,EAAG,EAAE,EAEL,OAAO,CACL,eAAAC,CAAAA,CACA,KAAA,CAAAP,EACA,YAAA,CAAAE,CAAAA,CACA,UAAAE,CAAAA,CACA,KAAA,CAAA/C,EACA,UAAA,CAAAC,CACF,CACF,CA0BO,SAASmD,EAAAA,CAAY3D,EAA2B,CACrD,GAAM,CAAE,MAAA,CAAAkC,CAAAA,CAAQ,QAAAL,CAAQ,CAAA,CAAIa,GAAiB,CACvC,CAACkB,EAAMC,CAAO,CAAA,CAAI9B,eAAkC,IAAI,CAAA,CACxD,CAAC+B,CAAAA,CAAWC,CAAY,EAAIhC,cAAAA,CAAS,IAAI,EACzC,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAE/CiC,CAAAA,CAAgBhB,kBAAY,SAAY,CAC5Ce,EAAa,IAAI,CAAA,CACjBjB,EAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMY,CAAAA,CAAS,MAAMxB,CAAAA,CAAO,WAAA,CAAYlC,CAAO,CAAA,CAC/C6D,CAAAA,CAAQH,CAAM,EAChB,CAAA,MAAST,EAAK,CACZH,CAAAA,CAASG,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,0BAA0B,CAAC,EAC7E,CAAA,OAAE,CACAc,CAAAA,CAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC7B,CAAAA,CAAQlC,CAAAA,EAAS,SAAUA,CAAAA,EAAS,MAAA,CAAQA,GAAS,KAAA,CAAOA,CAAAA,EAAS,MAAM,CAAC,CAAA,CAEhF,OAAAoC,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFmC,CAAAA,GAEJ,CAAA,CAAG,CAACnC,CAAAA,CAASmC,CAAa,CAAC,CAAA,CAEpB,CACL,QAAA,CAAUJ,CAAAA,EAAM,UAAY,EAAC,CAC7B,WAAYA,CAAAA,EAAM,UAAA,CAClB,UAAAE,CAAAA,CACA,KAAA,CAAAvD,EACA,OAAA,CAASyD,CACX,CACF,CA0BO,SAASC,GAAW3D,CAAAA,CAAkB,CAC3C,GAAM,CAAE,MAAA,CAAA4B,EAAQ,OAAA,CAAAL,CAAQ,EAAIa,CAAAA,EAAiB,CACvC,CAACwB,CAAAA,CAASC,CAAU,EAAIpC,cAAAA,CAAyB,IAAI,EACrD,CAAC+B,CAAAA,CAAWC,CAAY,CAAA,CAAIhC,cAAAA,CAAS,IAAI,CAAA,CACzC,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAE/CqC,CAAAA,CAAepB,kBAAY,SAAY,CAC3C,GAAI,CAAC1C,CAAAA,CAAU,CACb6D,CAAAA,CAAW,IAAI,EACfJ,CAAAA,CAAa,KAAK,EAClB,MACF,CAEAA,EAAa,IAAI,CAAA,CACjBjB,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMY,CAAAA,CAAS,MAAMxB,CAAAA,CAAO,UAAA,CAAW5B,CAAQ,CAAA,CAC/C6D,CAAAA,CAAWT,CAAM,EACnB,CAAA,MAAST,EAAK,CACZH,CAAAA,CAASG,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,yBAAyB,CAAC,EAC5E,CAAA,OAAE,CACAc,EAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC7B,EAAQ5B,CAAQ,CAAC,EAErB,OAAA8B,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFuC,IAEJ,CAAA,CAAG,CAACvC,CAAAA,CAASuC,CAAY,CAAC,CAAA,CAEnB,CACL,QAAAF,CAAAA,CACA,SAAA,CAAAJ,EACA,KAAA,CAAAvD,CAAAA,CACA,QAAS6D,CACX,CACF,CAEA,IAAMC,EAAAA,CAAoC,CACxC,kBAAA,CAAoB,KAAA,CACpB,YAAa,KAAA,CACb,oBAAA,CAAsB,IACxB,CAAA,CA0BO,SAASC,EAAAA,CAAYtE,CAAAA,CAA2B,CACrD,GAAM,CAAE,MAAA,CAAAkC,CAAAA,CAAQ,QAAAL,CAAAA,CAAS,YAAA,CAAAG,CAAa,CAAA,CAAIU,CAAAA,GACpC,CAACkB,CAAAA,CAAMC,CAAO,CAAA,CAAI9B,cAAAA,CAAkC,IAAI,CAAA,CACxD,CAAC+B,EAAWC,CAAY,CAAA,CAAIhC,eAAS,IAAI,CAAA,CACzC,CAACxB,CAAAA,CAAOuC,CAAQ,EAAIf,cAAAA,CAAuB,IAAI,EAE/CwC,CAAAA,CAAgBvB,iBAAAA,CAAY,SAAY,CAC5C,GAAI,CAAChB,CAAAA,CAAc,CACjB6B,EAAQ,IAAI,CAAA,CACZE,EAAa,KAAK,CAAA,CAClB,MACF,CAEAA,CAAAA,CAAa,IAAI,EACjBjB,CAAAA,CAAS,IAAI,EAEb,GAAI,CACF,IAAMY,CAAAA,CAAS,MAAMxB,EAAO,WAAA,CAAYlC,CAAO,EAC/C6D,CAAAA,CAAQH,CAAM,EAChB,CAAA,MAAST,CAAAA,CAAK,CACZH,CAAAA,CAASG,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,0BAA0B,CAAC,EAC7E,CAAA,OAAE,CACAc,EAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC7B,EAAQF,CAAAA,CAAchC,CAAAA,EAAS,OAAQA,CAAAA,EAAS,IAAA,CAAMA,GAAS,KAAA,CAAOA,CAAAA,EAAS,MAAM,CAAC,CAAA,CAE1F,OAAAoC,gBAAU,IAAM,CACVP,IACEG,CAAAA,CACFuC,CAAAA,GAGAR,CAAAA,CAAa,KAAK,GAGxB,CAAA,CAAG,CAAClC,EAASG,CAAAA,CAAcuC,CAAa,CAAC,CAAA,CAElC,CACL,SAAUX,CAAAA,EAAM,QAAA,EAAY,EAAC,CAC7B,UAAA,CAAYA,GAAM,UAAA,CAClB,QAAA,CAAUA,GAAM,QAAA,EAAYS,EAAAA,CAC5B,UAAAP,CAAAA,CACA,KAAA,CAAAvD,EACA,OAAA,CAASgE,CACX,CACF,CAyBO,SAASC,IAAU,CACxB,GAAM,CAAE,MAAA,CAAAtC,CAAO,CAAA,CAAIQ,CAAAA,EAAiB,CAC9B,CAAC+B,EAAUC,CAAW,CAAA,CAAI3C,eAAS,KAAK,CAAA,CACxC,CAACxB,CAAAA,CAAOuC,CAAQ,EAAIf,cAAAA,CAAuB,IAAI,EAqBrD,OAAO,CACL,KApBWiB,iBAAAA,CACX,MAAOxC,GAAuB,CAC5BkE,CAAAA,CAAY,IAAI,CAAA,CAChB5B,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CAEF,OADe,MAAMZ,EAAO,IAAA,CAAK1B,CAAU,CAE7C,CAAA,MAASyC,CAAAA,CAAK,CACZ,IAAM1C,CAAAA,CAAQ0C,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,gBAAgB,CAAA,CACrE,MAAAH,CAAAA,CAASvC,CAAK,EACRA,CACR,CAAA,OAAE,CACAmE,CAAAA,CAAY,KAAK,EACnB,CACF,CAAA,CACA,CAACxC,CAAM,CACT,EAIE,QAAA,CAAAuC,CAAAA,CACA,MAAAlE,CACF,CACF,CAoBO,SAASoE,EAAAA,EAAW,CACzB,GAAM,CAAE,OAAAzC,CAAO,CAAA,CAAIQ,GAAiB,CAE9BkC,CAAAA,CAAQ5B,kBACZ,MAAOvC,CAAAA,CAAmBC,IAAyC,CACjE,MAAMwB,EAAO,KAAA,CAAMzB,CAAAA,CAAWC,CAAU,EAC1C,CAAA,CACA,CAACwB,CAAM,CACT,CAAA,CAEM2C,CAAAA,CAAa7B,iBAAAA,CACjB,MACErC,GAMG,CACH,MAAMuB,EAAO,UAAA,CAAW,CAAE,OAAAvB,CAAO,CAAC,EACpC,CAAA,CACA,CAACuB,CAAM,CACT,CAAA,CAEA,OAAO,CACL,KAAA,CAAA0C,EACA,UAAA,CAAAC,CACF,CACF,CA2BO,SAASC,IAAmB,CACjC,GAAM,CAAE,MAAA,CAAA5C,CAAAA,CAAQ,QAAAL,CAAQ,CAAA,CAAIa,GAAiB,CACvC,CAACqC,EAAeC,CAAgB,CAAA,CAAIjD,eAAyB,EAAE,EAC/D,CAAC+B,CAAAA,CAAWC,CAAY,CAAA,CAAIhC,cAAAA,CAAS,IAAI,EACzC,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAE/CkD,CAAAA,CAAqBjC,kBAAY,SAAY,CACjDe,EAAa,IAAI,CAAA,CACjBjB,EAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMY,EAAS,MAAMxB,CAAAA,CAAO,kBAAiB,CAC7C8C,CAAAA,CAAiBtB,EAAO,cAAc,EACxC,OAAST,CAAAA,CAAK,CACZH,EAASG,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,gCAAgC,CAAC,EACnF,QAAE,CACAc,CAAAA,CAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC7B,CAAM,CAAC,EAEX,OAAAE,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFoD,IAEJ,CAAA,CAAG,CAACpD,CAAAA,CAASoD,CAAkB,CAAC,CAAA,CAEzB,CACL,cAAAF,CAAAA,CACA,SAAA,CAAAjB,EACA,KAAA,CAAAvD,CAAAA,CACA,QAAS0E,CACX,CACF,CCxbA,IAAMC,EAAgB,CACpB,MAAA,CAAQ,CACN,QAAA,CAAU,OAAA,CACV,OAAA,CAAS,YACT,MAAA,CAAQ,MAAA,CACR,aAAc,KAAA,CACd,MAAA,CAAQ,UACR,UAAA,CAAY,sCAAA,CACZ,SAAU,MAAA,CACV,UAAA,CAAY,MACZ,SAAA,CAAW,gCAAA,CACX,WAAY,iCAAA,CACZ,MAAA,CAAQ,IACV,CAAA,CACA,KAAA,CAAO,CACL,QAAA,CAAU,OAAA,CACV,MAAO,CAAA,CACP,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,eAAA,CAAiB,qBACjB,MAAA,CAAQ,GACV,EACA,YAAA,CAAc,CACZ,gBAAiB,OAAA,CACjB,YAAA,CAAc,OACd,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,MAAA,CACP,QAAA,CAAU,OAAA,CACV,OAAQ,MAAA,CACR,SAAA,CAAW,iCACX,UAAA,CAAY,sCACd,EAWA,QAAA,CAAU,CACR,KAAA,CAAO,MAAA,CACP,QAAS,WAAA,CACT,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,SAAU,MAAA,CACV,YAAA,CAAc,OACd,SAAA,CAAW,OAAA,CACX,OAAQ,UAAA,CACR,SAAA,CAAW,YAAA,CACX,UAAA,CAAY,SACd,CAAA,CACA,aAAc,CACZ,KAAA,CAAO,OACP,OAAA,CAAS,MAAA,CACT,OAAQ,MAAA,CACR,YAAA,CAAc,MACd,MAAA,CAAQ,SAAA,CACR,SAAU,MAAA,CACV,UAAA,CAAY,MACZ,UAAA,CAAY,cACd,EACA,UAAA,CAAY,CACV,QAAS,UAAA,CACT,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,OAAQ,SAAA,CACR,QAAA,CAAU,OACV,eAAA,CAAiB,OAAA,CACjB,WAAY,UAAA,CACZ,WAAA,CAAa,MACb,YAAA,CAAc,KAChB,CACF,CAAA,CAEMC,EAAAA,CAAiB,CACrB,cAAA,CAAgB,CAAE,MAAA,CAAQ,MAAA,CAAQ,KAAA,CAAO,MAAO,EAChD,aAAA,CAAe,CAAE,OAAQ,MAAA,CAAQ,IAAA,CAAM,MAAO,CAAA,CAC9C,WAAA,CAAa,CAAE,GAAA,CAAK,MAAA,CAAQ,MAAO,MAAO,CAAA,CAC1C,WAAY,CAAE,GAAA,CAAK,OAAQ,IAAA,CAAM,MAAO,CAC1C,CAAA,CAEMC,EAAAA,CAAmD,CACvD,QAAA,CAAU,kBAAA,CACV,WAAY,YAAA,CACZ,eAAA,CAAiB,kBACjB,cAAA,CAAgB,gBAClB,EAEMC,EAAAA,CAAmD,CACvD,SAAU,WAAA,CACV,UAAA,CAAY,YACZ,eAAA,CAAiB,WAAA,CACjB,eAAgB,QAClB,CAAA,CAEA,SAASC,EAAAA,CAAe3D,CAAAA,CAAoB,CAC1C,OAAO,CACL,YAAA,CAAcA,EAAM,YAAA,EAAgB,SAAA,CACpC,UAAWA,CAAAA,CAAM,SAAA,EAAa,UAC9B,eAAA,CAAiBA,CAAAA,CAAM,iBAAmB,SAAA,CAC1C,YAAA,CAAcA,EAAM,YAAA,EAAgB,KAAA,CACpC,WAAYA,CAAAA,CAAM,UAAA,EAAc,sCAClC,CACF,CAwBO,SAAS4D,EAAAA,CAAe,CAC7B,SAAAC,CAAAA,CAAW,cAAA,CACX,KAAAC,CAAAA,CAAO,UAAA,CACP,aAAAC,CAAAA,CAAe,CAAC,WAAY,YAAA,CAAc,iBAAiB,EAC3D,KAAA,CAAOC,CAAAA,CACP,SAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAjE,CACF,CAAA,CAAwB,CACtB,GAAM,CAAE,MAAOkE,CAAa,CAAA,CAAIpD,GAAiB,CAC3C,CAAE,eAAAe,CAAAA,CAAgB,YAAA,CAAAL,EAAc,SAAA,CAAAE,CAAAA,CAAW,MAAAJ,CAAM,CAAA,CAAIC,GAAY,CAEjE,CAAC4C,EAAQC,CAAS,CAAA,CAAIjE,eAAS,KAAK,CAAA,CACpC,CAACkE,CAAAA,CAAcC,CAAe,EAAInE,cAAAA,CAAuB2D,CAAAA,CAAa,CAAC,CAAC,CAAA,CACxE,CAACS,CAAAA,CAASC,CAAU,EAAIrE,cAAAA,CAAS,EAAE,EAEnCJ,CAAAA,CAAQ,CAAE,GAAGmE,CAAAA,CAAc,GAAGH,CAAU,EACxCU,CAAAA,CAAcf,EAAAA,CAAe3D,CAAK,CAAA,CAElC2E,CAAAA,CAAatD,kBAAY,IAAM,CACnCgD,EAAU,IAAI,CAAA,CACd9C,IACF,CAAA,CAAG,CAACA,CAAK,CAAC,EAEJqD,CAAAA,CAAcvD,iBAAAA,CAAY,IAAM,CACpCgD,CAAAA,CAAU,KAAK,EACfI,CAAAA,CAAW,EAAE,EACbF,CAAAA,CAAgBR,CAAAA,CAAa,CAAC,CAAC,EACjC,EAAG,CAACA,CAAY,CAAC,CAAA,CAEXc,CAAAA,CAAexD,kBACnB,MAAOyD,CAAAA,EAAuB,CAC5BA,CAAAA,CAAE,cAAA,EAAe,CAEjB,IAAMC,CAAAA,CAAe,CACnB,KAAMT,CAAAA,CACN,OAAA,CAAAE,CACF,CAAA,CAEA,GAAI,CACF,MAAM1C,CAAAA,CAAeiD,CAAY,CAAA,CACjCd,CAAAA,GAAWc,CAAY,CAAA,CAEvB,UAAA,CAAWH,EAAa,IAAI,EAC9B,OAAStD,CAAAA,CAAK,CACZ4C,IAAU5C,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,2BAA2B,CAAC,EAC/E,CACF,CAAA,CACA,CAACgD,EAAcE,CAAAA,CAAS1C,CAAAA,CAAgBmC,EAAUC,CAAAA,CAASU,CAAW,CACxE,CAAA,CAGA,OAAI3E,EAEA+E,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAtE,cAAAA,CAAC,KAAA,CAAA,CAAI,QAASgE,CAAAA,CAAY,KAAA,CAAO,CAAE,MAAA,CAAQ,SAAU,EAClD,QAAA,CAAA1E,CAAAA,CACH,EACCmE,CAAAA,EACCzD,cAAAA,CAACuE,GAAA,CACC,MAAA,CAAQd,EACR,OAAA,CAASQ,CAAAA,CACT,aAAcN,CAAAA,CACd,YAAA,CAAcC,EACd,YAAA,CAAcR,CAAAA,CACd,QAASS,CAAAA,CACT,eAAA,CAAiBC,EACjB,QAAA,CAAUI,CAAAA,CACV,aAAcpD,CAAAA,CACd,SAAA,CAAWE,EACX,WAAA,CAAa+C,CAAAA,CACf,GAEJ,CAAA,CAKFM,eAAAA,CAAAC,oBAAA,CACE,QAAA,CAAA,CAAAtE,eAAC,QAAA,CAAA,CACC,OAAA,CAASgE,CAAAA,CACT,KAAA,CAAO,CACL,GAAGpB,EAAc,MAAA,CACjB,GAAGC,GAAeK,CAAQ,CAAA,CAC1B,gBAAiBa,CAAAA,CAAY,YAAA,CAC7B,MAAO,OAAA,CACP,YAAA,CAAcA,EAAY,YAAA,CAC1B,UAAA,CAAYA,EAAY,UAC1B,CAAA,CACA,aAAW,oBAAA,CAEV,QAAA,CAAAZ,EACH,CAAA,CACCM,CAAAA,EACCzD,eAACuE,EAAAA,CAAA,CACC,OAAQd,CAAAA,CACR,OAAA,CAASQ,EACT,YAAA,CAAcN,CAAAA,CACd,aAAcC,CAAAA,CACd,YAAA,CAAcR,EACd,OAAA,CAASS,CAAAA,CACT,gBAAiBC,CAAAA,CACjB,QAAA,CAAUI,EACV,YAAA,CAAcpD,CAAAA,CACd,SAAA,CAAWE,CAAAA,CACX,WAAA,CAAa+C,CAAAA,CACf,GAEJ,CAEJ,CAgBA,SAASQ,EAAAA,CAAc,CACrB,OAAAd,CAAAA,CACA,OAAA,CAAAe,EACA,YAAA,CAAAb,CAAAA,CACA,aAAAc,CAAAA,CACA,YAAA,CAAArB,EACA,OAAA,CAAAS,CAAAA,CACA,gBAAAa,CAAAA,CACA,QAAA,CAAApB,EACA,YAAA,CAAAxC,CAAAA,CACA,UAAAE,CAAAA,CACA,WAAA,CAAA+C,CACF,CAAA,CAAuB,CACrB,OAAKN,CAAAA,CAEDzC,CAAAA,CAEAhB,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO4C,EAAc,KAAA,CAAO,OAAA,CAAS4B,EACxC,QAAA,CAAAH,eAAAA,CAAC,OACC,KAAA,CAAO,CACL,GAAGzB,CAAAA,CAAc,YAAA,CACjB,SAAA,CAAW,SACX,UAAA,CAAYmB,CAAAA,CAAY,UAC1B,CAAA,CACA,OAAA,CAAUI,GAAMA,CAAAA,CAAE,eAAA,GAElB,QAAA,CAAA,CAAAnE,cAAAA,CAAC,OAAI,KAAA,CAAO,CAAE,SAAU,MAAA,CAAQ,YAAA,CAAc,MAAO,CAAA,CAAG,QAAA,CAAA,WAAA,CAAE,EAC1DA,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO,CAAE,MAAA,CAAQ,YAAa,KAAA,CAAO+D,CAAAA,CAAY,SAAU,CAAA,CAAG,QAAA,CAAA,2BAAA,CAElE,EACA/D,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAO,CAAE,MAAA,CAAQ,EAAG,KAAA,CAAO,MAAO,EAAG,QAAA,CAAA,6CAAA,CAA2C,CAAA,CAAA,CACrF,CAAA,CACF,CAAA,CAKFA,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,KAAA,CAAO,QAAS4B,CAAAA,CACxC,QAAA,CAAAH,gBAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAGzB,CAAAA,CAAc,aACjB,UAAA,CAAYmB,CAAAA,CAAY,UAC1B,CAAA,CACA,OAAA,CAAUI,GAAMA,CAAAA,CAAE,eAAA,GAElB,QAAA,CAAA,CAAAE,eAAAA,CAAC,OACC,KAAA,CAAO,CACL,QAAS,MAAA,CACT,cAAA,CAAgB,gBAChB,UAAA,CAAY,QAAA,CACZ,aAAc,MAChB,CAAA,CAEA,UAAArE,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO,CAAE,MAAA,CAAQ,EAAG,KAAA,CAAO+D,CAAAA,CAAY,SAAU,CAAA,CAAG,QAAA,CAAA,eAAA,CAAa,CAAA,CACrE/D,eAAC,QAAA,CAAA,CACC,OAAA,CAASwE,EACT,KAAA,CAAO,CACL,WAAY,MAAA,CACZ,MAAA,CAAQ,OACR,QAAA,CAAU,MAAA,CACV,OAAQ,SAAA,CACR,KAAA,CAAO,OACP,OAAA,CAAS,GAAA,CACT,WAAY,GACd,CAAA,CACA,aAAW,OAAA,CACZ,QAAA,CAAA,MAAA,CAED,GACF,CAAA,CAEAH,eAAAA,CAAC,QAAK,QAAA,CAAUf,CAAAA,CAEd,UAAAe,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,YAAA,CAAc,MAAO,CAAA,CACjC,QAAA,CAAA,CAAArE,eAAC,OAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,OAAA,CACT,YAAA,CAAc,KAAA,CACd,QAAA,CAAU,MAAA,CACV,MAAO,MAAA,CACP,UAAA,CAAY,KACd,CAAA,CACD,QAAA,CAAA,wBAAA,CAED,EACAA,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,OAAA,CAAS,OAAQ,QAAA,CAAU,MAAO,EAC7C,QAAA,CAAAoD,CAAAA,CAAa,IAAKuB,CAAAA,EACjBN,eAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMI,CAAAA,CAAaE,CAAI,EAChC,KAAA,CAAO,CACL,GAAG/B,CAAAA,CAAc,UAAA,CACjB,gBAAiBe,CAAAA,GAAiBgB,CAAAA,CAAOZ,EAAY,YAAA,CAAe,OAAA,CACpE,MAAOJ,CAAAA,GAAiBgB,CAAAA,CAAO,QAAUZ,CAAAA,CAAY,SAAA,CACrD,WAAA,CAAaJ,CAAAA,GAAiBgB,CAAAA,CAAOZ,CAAAA,CAAY,aAAe,SAClE,CAAA,CAEC,UAAAhB,EAAAA,CAAmB4B,CAAI,EAAE,GAAA,CAAE7B,EAAAA,CAAmB6B,CAAI,CAAA,CAAA,CAAA,CAV9CA,CAWP,CACD,CAAA,CACH,CAAA,CAAA,CACF,EAGAN,eAAAA,CAAC,KAAA,CAAA,CACC,UAAArE,cAAAA,CAAC,OAAA,CAAA,CACC,MAAO,CACL,OAAA,CAAS,QACT,YAAA,CAAc,KAAA,CACd,SAAU,MAAA,CACV,KAAA,CAAO,OACP,UAAA,CAAY,KACd,EACD,QAAA,CAAA,cAAA,CAED,CAAA,CACAA,eAAC,UAAA,CAAA,CACC,KAAA,CAAO6D,EACP,QAAA,CAAWM,CAAAA,EAAMO,EAAgBP,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC/C,WAAA,CACER,CAAAA,GAAiB,aACb,4CAAA,CACAA,CAAAA,GAAiB,kBACf,wCAAA,CACA,wBAAA,CAER,MAAOf,CAAAA,CAAc,QAAA,CACrB,SAAQ,IAAA,CACV,CAAA,CAAA,CACF,EAEA5C,cAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,QAAA,CAAUc,GAAgB,CAAC+C,CAAAA,CAAQ,MAAK,CACxC,KAAA,CAAO,CACL,GAAGjB,CAAAA,CAAc,aACjB,eAAA,CAAiBmB,CAAAA,CAAY,aAC7B,KAAA,CAAO,OAAA,CACP,QAASjD,CAAAA,EAAgB,CAAC+C,EAAQ,IAAA,EAAK,CAAI,GAAM,CAAA,CACjD,MAAA,CAAQ/C,GAAgB,CAAC+C,CAAAA,CAAQ,IAAA,EAAK,CAAI,aAAA,CAAgB,SAC5D,EAEC,QAAA,CAAA/C,CAAAA,CAAe,aAAe,eAAA,CACjC,CAAA,CAAA,CACF,GACF,CAAA,CACF,CAAA,CAtIkB,IAwItB,CCtZA,IAAM8B,CAAAA,CAAgB,CACpB,SAAA,CAAW,CACT,WAAY,sCAAA,CACZ,QAAA,CAAU,OACZ,CAAA,CACA,WAAA,CAAa,CACX,KAAA,CAAO,MAAA,CACP,QAAS,WAAA,CACT,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,SAAU,MAAA,CACV,YAAA,CAAc,MAAA,CACd,SAAA,CAAW,YACb,CAAA,CACA,eAAgB,CACd,OAAA,CAAS,WACT,MAAA,CAAQ,mBAAA,CACR,aAAc,MAAA,CACd,MAAA,CAAQ,UACR,QAAA,CAAU,MAAA,CACV,gBAAiB,OAAA,CACjB,UAAA,CAAY,WACZ,WAAA,CAAa,KAAA,CACb,aAAc,KAChB,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,YAAA,CAAc,OACd,MAAA,CAAQ,SAAA,CACR,WAAY,oCAAA,CACZ,eAAA,CAAiB,OACnB,CAAA,CACA,YAAA,CAAc,CACZ,MAAA,CAAQ,WAAA,CACR,SAAU,MAAA,CACV,UAAA,CAAY,KACd,CAAA,CACA,kBAAA,CAAoB,CAClB,OAAQ,CAAA,CACR,QAAA,CAAU,OACV,KAAA,CAAO,MAAA,CACP,WAAY,GACd,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,GAAA,CAAK,MAAA,CACL,UAAW,MAAA,CACX,QAAA,CAAU,OACV,KAAA,CAAO,MACT,EACA,UAAA,CAAY,CACV,QAAS,aAAA,CACT,UAAA,CAAY,SACZ,GAAA,CAAK,KAAA,CACL,QAAS,OAAA,CACT,MAAA,CAAQ,OACR,UAAA,CAAY,MAAA,CACZ,OAAQ,SAAA,CACR,QAAA,CAAU,OACV,KAAA,CAAO,MAAA,CACP,aAAc,MAChB,CAAA,CACA,cAAA,CAAgB,CACd,UAAA,CAAY,GAAA,CACZ,SAAU,MACZ,CAAA,CACA,QAAS,CACP,SAAA,CAAW,SACX,OAAA,CAAS,MAAA,CACT,MAAO,MACT,CAAA,CACA,MAAO,CACL,OAAA,CAAS,OACT,eAAA,CAAiB,SAAA,CACjB,aAAc,KAAA,CACd,KAAA,CAAO,UACP,SAAA,CAAW,QACb,EACA,KAAA,CAAO,CACL,UAAW,QAAA,CACX,OAAA,CAAS,OACT,KAAA,CAAO,MACT,CACF,CAAA,CAEA,SAASI,GAAe3D,CAAAA,CAAoB,CAC1C,OAAO,CACL,YAAA,CAAcA,EAAM,YAAA,EAAgB,SAAA,CACpC,SAAA,CAAWA,CAAAA,CAAM,SAAA,EAAa,SAAA,CAC9B,gBAAiBA,CAAAA,CAAM,eAAA,EAAmB,UAC1C,YAAA,CAAcA,CAAAA,CAAM,cAAgB,KAAA,CACpC,UAAA,CAAYA,EAAM,UAAA,EAAc,sCAClC,CACF,CAuBO,SAASuF,GAAc,CAC5B,UAAA,CAAAC,EAAa,IAAA,CACb,cAAA,CAAAC,EAAiB,IAAA,CACjB,eAAA,CAAAC,EACA,KAAA,CAAO1B,CAAAA,CACP,UAAA2B,CAAAA,CACA,aAAA,CAAAC,CACF,CAAA,CAAuB,CACrB,GAAM,CAAE,KAAA,CAAOzB,CAAa,CAAA,CAAIpD,CAAAA,GAC1B,CAAC8E,CAAAA,CAAaC,CAAc,CAAA,CAAI1F,cAAAA,CAAS,EAAE,CAAA,CAC3C,CAAC2F,CAAAA,CAAkBC,CAAmB,CAAA,CAAI5F,cAAAA,CAA6BsF,CAAe,CAAA,CACtF,CAACO,EAAqBC,CAAsB,CAAA,CAAI9F,eAAwB,IAAI,CAAA,CAE5EJ,EAAQ,CAAE,GAAGmE,EAAc,GAAGH,CAAU,EACxCU,CAAAA,CAAcf,EAAAA,CAAe3D,CAAK,CAAA,CAElC,CACJ,QAAA,CAAAmG,EACA,SAAA,CAAWC,CAAAA,CACX,MAAOC,CACT,CAAA,CAAIrE,GAAY,CACd,QAAA,CAAU+D,EACV,MAAA,CAAQF,CAAAA,EAAe,MACzB,CAAC,CAAA,CAEK,CACJ,OAAA,CAASS,CAAAA,CACT,UAAWC,CAAAA,CACX,KAAA,CAAOC,CACT,CAAA,CAAIlE,EAAAA,CAAW2D,CAAAA,EAAuB,EAAE,CAAA,CAGlCQ,CAAAA,CAAajG,cAAQ,IAAM,CAC/B,IAAMkG,CAAAA,CAAO,IAAI,IACjB,OAAAP,CAAAA,CAAS,QAAS5D,CAAAA,EAAY,CACxBA,EAAQ,QAAA,EACVmE,CAAAA,CAAK,IAAInE,CAAAA,CAAQ,QAAQ,EAE7B,CAAC,CAAA,CACM,MAAM,IAAA,CAAKmE,CAAI,EAAE,IAAA,EAC1B,EAAG,CAACP,CAAQ,CAAC,CAAA,CAEPQ,CAAAA,CAAsBpE,GAAqB,CAC/C2D,CAAAA,CAAuB3D,EAAQ,IAAI,CAAA,CACnCqD,IAAgBrD,CAAO,EACzB,CAAA,CAEMqE,CAAAA,CAAa,IAAM,CACvBV,EAAuB,IAAI,EAC7B,EAGA,OAAID,CAAAA,CACEM,EAEA5F,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,GAAG4C,EAAc,SAAA,CAAW,UAAA,CAAYmB,EAAY,UAAW,CAAA,CAAG,UAAWiB,CAAAA,CACzF,QAAA,CAAAhF,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO4C,EAAc,OAAA,CAAS,QAAA,CAAA,oBAAA,CAAkB,EACvD,CAAA,CAIAiD,CAAAA,CAEAxB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,UAAW,UAAA,CAAYmB,CAAAA,CAAY,UAAW,CAAA,CAAG,SAAA,CAAWiB,EACzF,QAAA,CAAA,CAAAhF,cAAAA,CAAC,QAAA,CAAA,CAAO,OAAA,CAASiG,CAAAA,CAAY,KAAA,CAAOrD,EAAc,UAAA,CAAY,QAAA,CAAA,yBAAA,CAE9D,EACA5C,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,KAAA,CAAO,qDAAyC,CAAA,CAAA,CAC5E,CAAA,CAIC+C,EAYHtB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,GAAGzB,EAAc,SAAA,CAAW,UAAA,CAAYmB,EAAY,UAAW,CAAA,CAAG,UAAWiB,CAAAA,CACzF,QAAA,CAAA,CAAAhF,eAAC,QAAA,CAAA,CAAO,OAAA,CAASiG,EAAY,KAAA,CAAOrD,CAAAA,CAAc,WAAY,QAAA,CAAA,yBAAA,CAE9D,CAAA,CACAyB,gBAAC,SAAA,CAAA,CACC,QAAA,CAAA,CAAArE,eAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,MAAA,CAAQ,YAAA,CAAc,KAAA,CAAO+D,CAAAA,CAAY,SAAU,CAAA,CAC7D,SAAA4B,CAAAA,CAAgB,KAAA,CACnB,EACCA,CAAAA,CAAgB,iBAAA,EACftB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,QAAA,CAAU,MAAA,CAAQ,MAAO,MAAA,CAAQ,YAAA,CAAc,MAAO,CAAA,CACjE,QAAA,CAAA,CAAAsB,EAAgB,iBAAA,CAAkB,WAAA,CAAA,CACrC,EAEDA,CAAAA,CAAgB,YAAA,CACf3F,eAAC,KAAA,CAAA,CACC,KAAA,CAAO,CAAE,GAAG4C,CAAAA,CAAc,eAAgB,KAAA,CAAOmB,CAAAA,CAAY,SAAU,CAAA,CACvE,uBAAA,CAAyB,CAAE,MAAA,CAAQ4B,CAAAA,CAAgB,YAAa,CAAA,CAClE,CAAA,CAEA3F,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAG4C,CAAAA,CAAc,cAAA,CAAgB,MAAOmB,CAAAA,CAAY,SAAU,EACzE,QAAA,CAAA,OAAO4B,CAAAA,CAAgB,SAAY,QAAA,CAChCA,CAAAA,CAAgB,QAChB,uBAAA,CACN,CAAA,CAAA,CAEJ,GACF,CAAA,CApCEtB,eAAAA,CAAC,OAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,SAAA,CAAW,WAAYmB,CAAAA,CAAY,UAAW,EAAG,SAAA,CAAWiB,CAAAA,CACzF,UAAAhF,cAAAA,CAAC,QAAA,CAAA,CAAO,QAASiG,CAAAA,CAAY,KAAA,CAAOrD,EAAc,UAAA,CAAY,QAAA,CAAA,yBAAA,CAE9D,EACA5C,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,KAAA,CAAO,8BAAkB,CAAA,CAAA,CACrD,CAAA,CAqCJyB,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,SAAA,CAAW,WAAYmB,CAAAA,CAAY,UAAW,EAAG,SAAA,CAAWiB,CAAAA,CAExF,UAAAH,CAAAA,EACC7E,cAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,YAAY,oBAAA,CACZ,KAAA,CAAOkF,EACP,QAAA,CAAWf,CAAAA,EAAMgB,EAAehB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,KAAA,CAAOvB,EAAc,WAAA,CACvB,CAAA,CAIDkC,GAAkBgB,CAAAA,CAAW,MAAA,CAAS,GACrCzB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,YAAA,CAAc,MAAO,CAAA,CACjC,QAAA,CAAA,CAAArE,eAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMqF,CAAAA,CAAoB,MAAS,CAAA,CAC5C,MAAO,CACL,GAAGzC,EAAc,cAAA,CACjB,eAAA,CAAkBwC,EAA8C,OAAA,CAA3BrB,CAAAA,CAAY,aACjD,KAAA,CAAQqB,CAAAA,CAA6BrB,EAAY,SAAA,CAAtB,OAAA,CAC3B,YAAcqB,CAAAA,CAA8C,SAAA,CAA3BrB,EAAY,YAC/C,CAAA,CACD,eAED,CAAA,CACC+B,CAAAA,CAAW,IAAKI,CAAAA,EACflG,cAAAA,CAAC,UAEC,OAAA,CAAS,IAAMqF,EAAoBa,CAAQ,CAAA,CAC3C,MAAO,CACL,GAAGtD,EAAc,cAAA,CACjB,eAAA,CAAiBwC,IAAqBc,CAAAA,CAAWnC,CAAAA,CAAY,aAAe,OAAA,CAC5E,KAAA,CAAOqB,CAAAA,GAAqBc,CAAAA,CAAW,OAAA,CAAUnC,CAAAA,CAAY,UAC7D,WAAA,CAAaqB,CAAAA,GAAqBc,EAAWnC,CAAAA,CAAY,YAAA,CAAe,SAC1E,CAAA,CAEC,QAAA,CAAAmC,GATIA,CAUP,CACD,GACH,CAAA,CAIDT,CAAAA,EAAqBzF,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO4C,EAAc,OAAA,CAAS,QAAA,CAAA,qBAAA,CAAmB,EAG3E8C,CAAAA,EACC1F,cAAAA,CAAC,OAAI,KAAA,CAAO4C,CAAAA,CAAc,MAAO,QAAA,CAAA,4CAAA,CAA0C,CAAA,CAI5E,CAAC6C,CAAAA,EAAqB,CAACC,GAAiBF,CAAAA,CAAS,MAAA,GAAW,GAC3DxF,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,KAAA,CACvB,SAAAsC,CAAAA,CACG,CAAA,uBAAA,EAA0BA,CAAW,CAAA,CAAA,CAAA,CACrC,4BAAA,CACN,CAAA,CAID,CAACO,CAAAA,EAAqB,CAACC,GAAiBF,CAAAA,CAAS,MAAA,CAAS,GACzDxF,cAAAA,CAAC,KAAA,CAAA,CACE,SAAAwF,CAAAA,CAAS,GAAA,CAAK5D,GACbyC,eAAAA,CAAC,KAAA,CAAA,CAEC,QAAS,IAAM2B,CAAAA,CAAmBpE,CAAO,CAAA,CACzC,KAAA,CAAOgB,EAAc,WAAA,CACrB,IAAA,CAAK,SACL,QAAA,CAAU,CAAA,CACV,UAAYuB,CAAAA,EAAM,CAAA,CACZA,EAAE,GAAA,GAAQ,OAAA,EAAWA,EAAE,GAAA,GAAQ,GAAA,GACjC6B,EAAmBpE,CAAO,EAE9B,EAEA,QAAA,CAAA,CAAA5B,cAAAA,CAAC,MAAG,KAAA,CAAO,CAAE,GAAG4C,CAAAA,CAAc,YAAA,CAAc,KAAA,CAAOmB,EAAY,SAAU,CAAA,CACtE,SAAAnC,CAAAA,CAAQ,KAAA,CACX,EACCA,CAAAA,CAAQ,eAAA,EACP5B,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO4C,EAAc,kBAAA,CAAqB,QAAA,CAAAhB,EAAQ,eAAA,CAAgB,CAAA,CAEvEyC,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,WAAA,CACvB,QAAA,CAAA,CAAAhB,EAAQ,QAAA,EAAY5B,cAAAA,CAAC,QAAM,QAAA,CAAA4B,CAAAA,CAAQ,SAAS,CAAA,CAC5CA,CAAAA,CAAQ,mBAAqByC,eAAAA,CAAC,MAAA,CAAA,CAAM,UAAAzC,CAAAA,CAAQ,iBAAA,CAAkB,aAAS,CAAA,CAAA,CAC1E,CAAA,CAAA,CAAA,CApBKA,EAAQ,EAqBf,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,CAEJ,CCpUA,IAAMgB,EAAgB,CACpB,SAAA,CAAW,CACT,UAAA,CAAY,sCACd,EACA,IAAA,CAAM,CACJ,UAAW,MAAA,CACX,OAAA,CAAS,EACT,MAAA,CAAQ,CAAA,CACR,QAAS,MAAA,CACT,aAAA,CAAe,SACf,GAAA,CAAK,MACP,EACA,IAAA,CAAM,CACJ,OAAQ,mBAAA,CACR,YAAA,CAAc,MACd,OAAA,CAAS,MAAA,CACT,gBAAiB,SAAA,CACjB,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,sCACd,CAAA,CACA,UAAW,CACT,WAAA,CAAa,UACb,SAAA,CAAW,8BACb,EACA,MAAA,CAAQ,CACN,QAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgB,eAAA,CAChB,IAAK,KAAA,CACL,YAAA,CAAc,KAChB,CAAA,CACA,MAAA,CAAQ,CACN,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,KACP,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,MACL,OAAA,CAAS,SAAA,CACT,aAAc,QAAA,CACd,QAAA,CAAU,OACV,UAAA,CAAY,GACd,CAAA,CACA,OAAA,CAAS,CACP,QAAA,CAAU,OACV,KAAA,CAAO,SAAA,CACP,OAAQ,CAAA,CACR,UAAA,CAAY,GACd,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,MAAA,CACT,IAAK,MAAA,CACL,SAAA,CAAW,MACX,QAAA,CAAU,MAAA,CACV,MAAO,SACT,CAAA,CACA,MAAO,CACL,SAAA,CAAW,SACX,OAAA,CAAS,WAAA,CACT,MAAO,SACT,CAAA,CACA,UAAW,CACT,KAAA,CAAO,OACP,MAAA,CAAQ,MAAA,CACR,OAAQ,aAAA,CACR,KAAA,CAAO,SACT,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,QAAA,CACX,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,SACT,EACA,KAAA,CAAO,CACL,UAAW,QAAA,CACX,OAAA,CAAS,OACT,KAAA,CAAO,SACT,EACA,UAAA,CAAY,CACV,QAAS,MAAA,CACT,aAAA,CAAe,SACf,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,OAAA,CAAS,MACT,YAAA,CAAc,KAAA,CACd,OAAQ,mBAAA,CACR,eAAA,CAAiB,UACjB,MAAA,CAAQ,SAAA,CACR,SAAU,MAAA,CACV,UAAA,CAAY,WACd,CAAA,CACA,gBAAA,CAAkB,CAChB,eAAA,CAAiB,SAAA,CACjB,YAAa,SAAA,CACb,KAAA,CAAO,SACT,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,MAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,SACT,EACA,YAAA,CAAc,CACZ,QAAS,MAAA,CACT,GAAA,CAAK,MACP,CAAA,CACA,WAAA,CAAa,CACX,IAAA,CAAM,CACR,EACA,IAAA,CAAM,CACJ,aAAc,MAAA,CACd,OAAA,CAAS,OACT,eAAA,CAAiB,SAAA,CACjB,aAAc,KAAA,CACd,MAAA,CAAQ,mBACV,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,gBAChB,YAAA,CAAc,MAChB,EACA,SAAA,CAAW,CACT,SAAU,MAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,CACV,CAAA,CACA,YAAA,CAAc,CACZ,OAAA,CAAS,MAAA,CACT,IAAK,KAAA,CACL,YAAA,CAAc,MAChB,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,UAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,oBACR,eAAA,CAAiB,SAAA,CACjB,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,SAAA,CACR,WAAY,WACd,CAAA,CACA,iBAAkB,CAChB,eAAA,CAAiB,UACjB,WAAA,CAAa,SAAA,CACb,MAAO,SACT,CAAA,CACA,SAAU,CACR,KAAA,CAAO,OACP,OAAA,CAAS,WAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,mBAAA,CACR,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,WACR,SAAA,CAAW,MAAA,CACX,WAAY,SAAA,CACZ,YAAA,CAAc,MAChB,CAAA,CACA,YAAA,CAAc,CACZ,OAAA,CAAS,UAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,OACR,eAAA,CAAiB,SAAA,CACjB,MAAO,SAAA,CACP,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,OAAQ,SAAA,CACR,UAAA,CAAY,eACd,CAAA,CACA,cAAA,CAAgB,CACd,OAAA,CAAS,MAAA,CACT,gBAAiB,SAAA,CACjB,YAAA,CAAc,MACd,KAAA,CAAO,SAAA,CACP,SAAU,MAAA,CACV,YAAA,CAAc,MAChB,CAAA,CACA,QAAA,CAAU,CACR,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,SACZ,OAAA,CAAS,SAAA,CACT,aAAc,QAAA,CACd,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,gBAAiB,SAAA,CACjB,KAAA,CAAO,UACP,UAAA,CAAY,KACd,CACF,CAAA,CAEMuD,EAAAA,CAAiF,CACrF,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC/D,UAAA,CAAY,CAAE,MAAO,YAAA,CAAc,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EACnE,eAAA,CAAiB,CAAE,MAAO,iBAAA,CAAmB,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,CAAA,CAC7E,cAAA,CAAgB,CAAE,KAAA,CAAO,iBAAkB,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAC7E,EAEMC,EAAAA,CAA6E,CACjF,IAAK,CAAE,KAAA,CAAO,MAAO,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CACrD,SAAU,CAAE,KAAA,CAAO,WAAY,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CAC/D,YAAa,CAAE,KAAA,CAAO,cAAe,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CACrE,SAAU,CAAE,KAAA,CAAO,WAAY,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CAC/D,MAAA,CAAQ,CAAE,KAAA,CAAO,QAAA,CAAU,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAC7D,CAAA,CAEA,SAASC,EAAAA,CAAWC,CAAAA,CAA4B,CAE9C,OADa,IAAI,KAAKA,CAAU,CAAA,CACpB,mBAAmB,OAAA,CAAS,CACtC,MAAO,OAAA,CACP,GAAA,CAAK,UACL,IAAA,CAAM,SACR,CAAC,CACH,CAEA,IAAMC,EAAAA,CAAuD,CAC3D,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,UAAW,CAAA,CACvC,CAAE,KAAA,CAAO,YAAA,CAAc,MAAO,KAAM,CAAA,CACpC,CAAE,KAAA,CAAO,iBAAA,CAAmB,KAAA,CAAO,SAAU,CAC/C,CAAA,CAmBO,SAASC,EAAAA,CAAS,CACvB,OAAAC,CAAAA,CACA,IAAA,CAAA9B,EACA,KAAA,CAAA+B,CAAAA,CAAQ,GACR,SAAA,CAAA1B,CAAAA,CACA,eAAA2B,CAAAA,CAAiB,IAAA,CACjB,eAAAC,CACF,CAAA,CAAkB,CAChB,GAAM,CAAE,aAAAlH,CAAa,CAAA,CAAIU,GAAiB,CACpC,CAACyG,EAAWC,CAAY,CAAA,CAAIrH,eAAwB,IAAI,CAAA,CACxD,CAACsH,CAAAA,CAAUC,CAAW,EAAIvH,cAAAA,CAAS,KAAK,EACxC,CAACwH,CAAAA,CAAUC,CAAW,CAAA,CAAIzH,cAAAA,CAAuB,UAAU,CAAA,CAC3D,CAAC0H,CAAAA,CAAaC,CAAc,CAAA,CAAI3H,cAAAA,CAAS,EAAE,CAAA,CAC3C,CAAC4H,EAAYC,CAAa,CAAA,CAAI7H,eAA+D,EAAE,EAE/F,CAAE,QAAA,CAAA8H,EAAU,SAAA,CAAA/F,CAAAA,CAAW,MAAAvD,CAAAA,CAAO,OAAA,CAAAuJ,EAAS,QAAA,CAAAC,CAAS,EAAIzF,EAAAA,CAAY,CACpE,OAAAyE,CAAAA,CACA,IAAA,CAAA9B,EACA,KAAA,CAAA+B,CACF,CAAC,CAAA,CAEK,CAAE,KAAAgB,CAAAA,CAAM,QAAA,CAAAvF,CAAS,CAAA,CAAID,EAAAA,GACrB,CAAE,cAAA,CAAAf,CAAAA,CAAgB,YAAA,CAAAL,CAAAA,CAAc,SAAA,CAAAE,EAAW,KAAA,CAAAJ,CAAM,EAAIC,CAAAA,EAAY,CAEjE8G,GAAqBjH,iBAAAA,CACxBkH,CAAAA,EAAqB,CACpBhB,CAAAA,GAAiBgB,CAAO,EAC1B,CAAA,CACA,CAAChB,CAAc,CACjB,CAAA,CAEMiB,GAAanH,iBAAAA,CACjB,MAAOxC,EAAoB4J,CAAAA,CAAsBC,CAAAA,GAA6B,CAC5E,GAAI,CAAA5F,EAGJ,CAAAmF,CAAAA,CAAeU,IAAU,CACvB,GAAGA,EACH,CAAC9J,CAAU,EAAG,CACZ,KAAA,CAAO6J,EAAkBD,CAAAA,CAAe,CAAA,CAAIA,EAAe,CAAA,CAC3D,QAAA,CAAU,CAACC,CACb,CACF,CAAA,CAAE,EAEF,GAAI,CACF,IAAM3G,CAAAA,CAAS,MAAMsG,EAAKxJ,CAAU,CAAA,CAEpCoJ,EAAeU,CAAAA,GAAU,CACvB,GAAGA,CAAAA,CACH,CAAC9J,CAAU,EAAG,CACZ,MAAOkD,CAAAA,CAAO,UAAA,CACd,QAAA,CAAUA,CAAAA,CAAO,cACnB,CACF,EAAE,EACJ,CAAA,KAAQ,CAENkG,CAAAA,CAAeU,CAAAA,GAAU,CACvB,GAAGA,CAAAA,CACH,CAAC9J,CAAU,EAAG,CACZ,KAAA,CAAO4J,CAAAA,CACP,SAAUC,CACZ,CACF,EAAE,EACJ,CAAA,CACF,CAAA,CACA,CAACL,CAAAA,CAAMvF,CAAQ,CACjB,CAAA,CAEM+B,EAAAA,CAAexD,kBACnB,MAAOyD,CAAAA,EAAuB,CAE5B,GADAA,CAAAA,CAAE,gBAAe,CACb,EAAA,CAACgD,EAAY,IAAA,EAAK,EAAKrG,GAE3B,GAAI,CACF,MAAMK,CAAAA,CAAe,CACnB,KAAM8F,CAAAA,CACN,OAAA,CAASE,CACX,CAAC,CAAA,CACDC,EAAe,EAAE,CAAA,CACjBJ,EAAY,CAAA,CAAK,CAAA,CAEjB,WAAW,IAAM,CACfQ,GAAQ,CACR5G,CAAAA,GACF,CAAA,CAAG,GAAG,EACR,CAAA,KAAQ,CAER,CACF,CAAA,CACA,CAACqG,CAAAA,CAAUE,EAAarG,CAAAA,CAAcK,CAAAA,CAAgBqG,EAAS5G,CAAK,CACtE,EAEMqH,EAAAA,CAAeL,CAAAA,EAAqB,CACxC,IAAMM,CAAAA,CAAQb,EAAWO,CAAAA,CAAQ,EAAE,EACnC,OAAO,CACL,MAAOM,CAAAA,EAAO,KAAA,EAASN,EAAQ,UAAA,CAC/B,QAAA,CAAUM,GAAO,QAAA,EAAYN,CAAAA,CAAQ,cACvC,CACF,CAAA,CAEA,GAAI,CAAClI,CAAAA,CACH,OAAOiH,CAAAA,CACL3G,cAAAA,CAAC,OAAI,KAAA,CAAO4C,CAAAA,CAAc,MACxB,QAAA,CAAA5C,cAAAA,CAAC,KAAE,QAAA,CAAA,uCAAA,CAAqC,CAAA,CAC1C,CAAA,CACE,IAAA,CAGN,GAAIwB,CAAAA,CACF,OACExB,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,OAAA,CACxB,SAAA5C,cAAAA,CAAC,GAAA,CAAA,CAAE,+BAAmB,CAAA,CACxB,CAAA,CAIJ,GAAI/B,CAAAA,CACF,OACE+B,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO4C,EAAc,KAAA,CACxB,QAAA,CAAAyB,gBAAC,GAAA,CAAA,CAAE,QAAA,CAAA,CAAA,2BAAA,CAAyBrE,eAAC,QAAA,CAAA,CAAO,OAAA,CAASwH,EAAS,KAAA,CAAO,CAAE,MAAO,SAAA,CAAW,cAAA,CAAgB,YAAa,UAAA,CAAY,MAAA,CAAQ,OAAQ,MAAA,CAAQ,MAAA,CAAQ,SAAU,CAAA,CAAG,QAAA,CAAA,WAAA,CAAS,GAAS,CAAA,CAC3L,CAAA,CAKJ,IAAMW,EAAAA,CAAa,IACZV,CAAAA,CAAS,qBAEVzG,CAAAA,CAEAhB,cAAAA,CAAC,OAAI,KAAA,CAAO4C,CAAAA,CAAc,eAAgB,QAAA,CAAA,kDAAA,CAE1C,CAAA,CAICmE,EAqBH1C,eAAAA,CAAC,MAAA,CAAA,CAAK,SAAUH,EAAAA,CAAc,KAAA,CAAOtB,EAAc,IAAA,CACjD,QAAA,CAAA,CAAAyB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,UAAA,CACxB,QAAA,CAAA,CAAA5C,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO4C,EAAc,SAAA,CAAW,QAAA,CAAA,kBAAA,CAAgB,EACnD5C,cAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAAS,IAAMgH,CAAAA,CAAY,KAAK,EAChC,KAAA,CAAO,CAAE,WAAY,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,SAAA,CAAW,KAAA,CAAO,SAAU,CAAA,CAClF,QAAA,CAAA,QAAA,CAED,GACF,CAAA,CACAhH,cAAAA,CAAC,OAAI,KAAA,CAAO4C,CAAAA,CAAc,aACvB,QAAA,CAAA2D,EAAAA,CAAW,IAAK6B,CAAAA,EACfpI,cAAAA,CAAC,UAEC,IAAA,CAAK,QAAA,CACL,QAAS,IAAMkH,CAAAA,CAAYkB,EAAE,KAAK,CAAA,CAClC,MAAO,CACL,GAAGxF,EAAc,UAAA,CACjB,GAAIqE,IAAamB,CAAAA,CAAE,KAAA,CAAQxF,EAAc,gBAAA,CAAmB,EAC9D,CAAA,CAEC,QAAA,CAAAwF,EAAE,KAAA,CAAA,CAREA,CAAAA,CAAE,KAST,CACD,CAAA,CACH,CAAA,CACApI,cAAAA,CAAC,UAAA,CAAA,CACC,KAAA,CAAOmH,EACP,QAAA,CAAWhD,CAAAA,EAAMiD,EAAejD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,WAAA,CAAY,2BACZ,KAAA,CAAOvB,CAAAA,CAAc,SACrB,QAAA,CAAQ,IAAA,CACV,EACA5C,cAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,KAAA,CAAO,CACL,GAAG4C,CAAAA,CAAc,aACjB,OAAA,CAAS9B,CAAAA,CAAe,GAAM,CAChC,CAAA,CACA,SAAUA,CAAAA,CAET,QAAA,CAAAA,EAAe,eAAA,CAAkB,QAAA,CACpC,GACF,CAAA,CA9DEuD,eAAAA,CAAC,UACC,OAAA,CAAS,IAAM2C,EAAY,IAAI,CAAA,CAC/B,KAAA,CAAO,CACL,GAAGpE,CAAAA,CAAc,aACjB,YAAA,CAAc,MAAA,CACd,QAAS,MAAA,CACT,UAAA,CAAY,SACZ,GAAA,CAAK,KACP,EAEA,QAAA,CAAA,CAAA5C,cAAAA,CAAC,OAAI,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CACjE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAAM,eAER,CAAA,CA1BuC,IAAA,CA8E7C,GAAIuH,CAAAA,CAAS,MAAA,GAAW,GAAKZ,CAAAA,CAC3B,OACEtC,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,CAAAA,CAAc,UAAW,SAAA,CAAWoC,CAAAA,CAC7C,UAAAmD,EAAAA,EAAW,CACZ9D,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,KAAA,CACxB,QAAA,CAAA,CAAA5C,eAAC,KAAA,CAAA,CACC,KAAA,CAAO4C,EAAc,SAAA,CACrB,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA5C,cAAAA,CAAC,QACC,aAAA,CAAc,OAAA,CACd,eAAe,OAAA,CACf,WAAA,CAAa,IACb,CAAA,CAAE,2GAAA,CACJ,EACF,CAAA,CACAA,cAAAA,CAAC,KAAE,KAAA,CAAO,CAAE,OAAQ,CAAA,CAAG,UAAA,CAAY,IAAK,KAAA,CAAO,SAAU,CAAA,CAAG,QAAA,CAAA,iBAAA,CAAe,CAAA,CAC3EA,cAAAA,CAAC,KAAE,KAAA,CAAO,CAAE,OAAQ,SAAA,CAAW,QAAA,CAAU,MAAO,CAAA,CAC7C,QAAA,CAAAyH,EAAS,oBAAA,CACN,kCAAA,CACA,mFACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAIJ,IAAMY,CAAAA,CAAUZ,EAAS,WAAA,EAAeA,CAAAA,CAAS,qBAAuB,KAAA,CAExE,OACEpD,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,SAAA,CAAW,SAAA,CAAWoC,EAC7C,QAAA,CAAA,CAAAmD,EAAAA,GACDnI,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO4C,CAAAA,CAAc,IAAA,CACtB,SAAA2E,CAAAA,CAAS,GAAA,CAAKK,GAAY,CACzB,IAAMU,CAAAA,CAAWnC,EAAAA,CAAWyB,CAAAA,CAAQ,aAAa,GAAKzB,EAAAA,CAAW,QAAA,CAC3DoC,EAAanC,EAAAA,CAAawB,CAAAA,CAAQ,MAAM,CAAA,EAAKxB,EAAAA,CAAa,IAC1DoC,CAAAA,CAAY3B,CAAAA,GAAce,EAAQ,EAAA,CAClCa,CAAAA,CAAWR,GAAYL,CAAO,CAAA,CAEpC,OACE5H,cAAAA,CAAC,IAAA,CAAA,CAEC,MAAO,CACL,GAAG4C,EAAc,IAAA,CACjB,GAAI4F,EAAY5F,CAAAA,CAAc,SAAA,CAAY,EAC5C,CAAA,CACA,aAAc,IAAMkE,CAAAA,CAAac,EAAQ,EAAE,CAAA,CAC3C,aAAc,IAAMd,CAAAA,CAAa,IAAI,CAAA,CAErC,QAAA,CAAAzC,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOgE,CAAAA,CAAUzF,EAAc,YAAA,CAAe,MAAA,CAChD,UAAAyF,CAAAA,EACChE,eAAAA,CAAC,UACC,OAAA,CAAUF,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,GACF0D,EAAAA,CAAWD,CAAAA,CAAQ,GAAIa,CAAAA,CAAS,KAAA,CAAOA,EAAS,QAAQ,EAC1D,EACA,QAAA,CAAUtG,CAAAA,CACV,MAAO,CACL,GAAGS,EAAc,UAAA,CACjB,GAAI6F,EAAS,QAAA,CAAW7F,CAAAA,CAAc,iBAAmB,EAC3D,EACA,KAAA,CAAO6F,CAAAA,CAAS,SAAW,aAAA,CAAgB,qBAAA,CAE3C,UAAAzI,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,QAAQ,WAAA,CACR,IAAA,CAAMyI,EAAS,QAAA,CAAW,cAAA,CAAiB,OAC3C,MAAA,CAAO,cAAA,CACP,YAAa,CAAA,CAEb,QAAA,CAAAzI,eAAC,MAAA,CAAA,CACC,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,EAAE,eAAA,CACJ,CAAA,CACF,EACAA,cAAAA,CAAC,MAAA,CAAA,CAAK,MAAO,CACX,GAAG4C,EAAc,SAAA,CACjB,GAAI6F,EAAS,QAAA,CAAW,CAAE,MAAO,SAAU,CAAA,CAAI,EACjD,CAAA,CACG,SAAAA,CAAAA,CAAS,KAAA,CACZ,GACF,CAAA,CAEFpE,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOgE,CAAAA,CAAUzF,CAAAA,CAAc,YAAc,MAAA,CAC7C,OAAA,CAAS,IAAM+E,EAAAA,CAAmBC,CAAO,EACzC,IAAA,CAAK,QAAA,CACL,SAAU,CAAA,CACV,SAAA,CAAYzD,GAAM,CAAA,CACZA,CAAAA,CAAE,MAAQ,OAAA,EAAWA,CAAAA,CAAE,MAAQ,GAAA,GACjCwD,EAAAA,CAAmBC,CAAO,EAE9B,CAAA,CAEA,UAAA5H,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4C,CAAAA,CAAc,MAAA,CACxB,SAAAyB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOzB,CAAAA,CAAc,MAAA,CACxB,UAAA5C,cAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,GAAG4C,EAAc,KAAA,CACjB,KAAA,CAAO0F,CAAAA,CAAS,KAAA,CAChB,eAAA,CAAiBA,CAAAA,CAAS,EAC5B,CAAA,CAEC,QAAA,CAAAA,EAAS,KAAA,CACZ,CAAA,CACAtI,eAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAG4C,CAAAA,CAAc,MACjB,KAAA,CAAO2F,CAAAA,CAAW,MAClB,eAAA,CAAiBA,CAAAA,CAAW,EAC9B,CAAA,CAEC,QAAA,CAAAA,EAAW,KAAA,CACd,CAAA,CACCX,EAAQ,MAAA,EACP5H,cAAAA,CAAC,QAAK,KAAA,CAAO4C,CAAAA,CAAc,SAAU,QAAA,CAAA,KAAA,CAAG,CAAA,CAAA,CAE5C,EACF,CAAA,CACA5C,cAAAA,CAAC,KAAE,KAAA,CAAO4C,CAAAA,CAAc,QACrB,QAAA,CAAAgF,CAAAA,CAAQ,SAAW,qBAAA,CACtB,CAAA,CACAvD,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,CAAAA,CAAc,KACxB,QAAA,CAAA,CAAA5C,cAAAA,CAAC,QAAM,QAAA,CAAAqG,EAAAA,CAAWuB,EAAQ,UAAU,CAAA,CAAE,EACrC,CAACS,CAAAA,EAAWI,EAAS,KAAA,CAAQ,CAAA,EAC5BpE,gBAAC,MAAA,CAAA,CAAM,QAAA,CAAA,CAAAoE,EAAS,KAAA,CAAM,OAAA,CAAMA,EAAS,KAAA,GAAU,CAAA,CAAI,IAAM,EAAA,CAAA,CAAG,CAAA,CAE7Db,EAAQ,QAAA,EACPvD,eAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,SAAU,QAAA,CAAU,YAAA,CAAc,WAAY,UAAA,CAAY,QAAA,CAAU,SAAU,OAAQ,CAAA,CAAG,mBAC/FuD,CAAAA,CAAQ,QAAA,CAAA,CACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CA/FKA,EAAQ,EAgGf,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CC7jBA,IAAMc,EAAAA,CAAkD,CACtD,SAAU,eAAA,CACV,QAAA,CAAU,aACZ,CAAA,CAEMC,EAAAA,CAAyF,CAC7F,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC/D,UAAA,CAAY,CAAE,KAAA,CAAO,YAAA,CAAc,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CACnE,gBAAiB,CAAE,KAAA,CAAO,kBAAmB,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CAC7E,eAAgB,CAAE,KAAA,CAAO,iBAAkB,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAC7E,EAEMvC,EAAAA,CAA6E,CACjF,IAAK,CAAE,KAAA,CAAO,MAAO,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CACrD,SAAU,CAAE,KAAA,CAAO,WAAY,KAAA,CAAO,SAAA,CAAW,GAAI,SAAU,CAAA,CAC/D,YAAa,CAAE,KAAA,CAAO,aAAA,CAAe,KAAA,CAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CACrE,QAAA,CAAU,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CAC/D,MAAA,CAAQ,CAAE,KAAA,CAAO,QAAA,CAAU,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAC7D,CAAA,CAEA,SAASC,EAAAA,CAAWC,CAAAA,CAA4B,CAC9C,OAAO,IAAI,KAAKA,CAAU,CAAA,CAAE,mBAAmB,OAAA,CAAS,CACtD,MAAO,OAAA,CACP,GAAA,CAAK,UACL,IAAA,CAAM,SACR,CAAC,CACH,CAEA,IAAMC,EAAAA,CAAuD,CAC3D,CAAE,KAAA,CAAO,UAAA,CAAY,KAAA,CAAO,UAAW,CAAA,CACvC,CAAE,MAAO,YAAA,CAAc,KAAA,CAAO,KAAM,CAAA,CACpC,CAAE,MAAO,iBAAA,CAAmB,KAAA,CAAO,SAAU,CAC/C,CAAA,CAGMqC,GAAa,IACjB5I,cAAAA,CAAC,OAAI,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CACpE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,8CAA8C,CAAA,CACrH,CAAA,CAGI6I,GAAW,IACf7I,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,IAAK,CAAA,CAAE,oPAAA,CAAqP,EAC9T,CAAA,CAGI8I,EAAAA,CAAmB,IACvB9I,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,cAAA,CAAe,CAAA,CACtF,CAAA,CAGI+I,EAAAA,CAAkB,IACtB/I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,gBAAA,CAAiB,CAAA,CACxF,EAGIgJ,EAAAA,CAAgB,IACpBhJ,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,8BAA8B,CAAA,CACrG,CAAA,CAGIiJ,GAAY,IAChBjJ,cAAAA,CAAC,OAAI,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CACpE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,8CAA8C,CAAA,CACrH,CAAA,CAGIkJ,GAAa,IACjBlJ,cAAAA,CAAC,OAAI,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CACpE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,wJAAA,CAAyJ,EAChO,CAAA,CAGImJ,EAAAA,CAAc,IAClBnJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,IAAK,CAAA,CAAE,2GAAA,CAA4G,EACrL,CAAA,CAGIoJ,EAAAA,CAAW,IACfpJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,gBAAA,CAAiB,CAAA,CACxF,EAGIqJ,EAAAA,CAAa,IACjBrJ,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CAAY,KAAA,CAAO,CAAE,SAAA,CAAW,yBAA0B,EAC9H,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,iHAAA,CAAkH,EACzL,CAAA,CAIIsJ,EAAAA,CAAS,CACb,KAAA,CAAO,CACL,OAAA,CAAS,UACT,YAAA,CAAc,SAAA,CACd,aAAc,yBAAA,CACd,iBAAA,CAAmB,0BACnB,UAAA,CAAY,aAAA,CACZ,QAAS,SAAA,CACT,YAAA,CAAc,UACd,MAAA,CAAQ,qBAAA,CACR,YAAa,yBAAA,CACb,IAAA,CAAM,UACN,aAAA,CAAe,SAAA,CACf,UAAW,SAAA,CACX,SAAA,CAAW,SACb,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,SAAA,CACT,aAAc,SAAA,CACd,YAAA,CAAc,2BACd,iBAAA,CAAmB,yBAAA,CACnB,WAAY,aAAA,CACZ,OAAA,CAAS,4BACT,YAAA,CAAc,2BAAA,CACd,OAAQ,2BAAA,CACR,WAAA,CAAa,0BAAA,CACb,IAAA,CAAM,SAAA,CACN,aAAA,CAAe,UACf,SAAA,CAAW,SAAA,CACX,UAAW,SACb,CACF,EAKMC,EAAAA,CAAgB,CAAA,GAAoB,CACxC,SAAA,CAAW,CACT,WAAY,8EAAA,CACZ,SAAA,CAAW,QACX,KAAA,CAAO,CAAA,CAAE,IACX,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,MAAA,CACT,oBAAqB,WAAA,CACrB,GAAA,CAAK,MACP,CAAA,CACA,OAAA,CAAS,CACP,QAAA,CAAU,QAAA,CACV,IAAK,MAAA,CACL,MAAA,CAAQ,aACV,CAAA,CACA,IAAA,CAAM,CACJ,QAAA,CAAU,CACZ,EACA,IAAA,CAAM,CACJ,OAAA,CAAS,MAAA,CACT,YAAA,CAAc,CAAA,UAAA,EAAa,EAAE,MAAM,CAAA,CAAA,CACnC,aAAc,MAAA,CACd,GAAA,CAAK,GACP,CAAA,CACA,GAAA,CAAK,CACH,OAAA,CAAS,WAAA,CACT,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,MAAA,CAAQ,MAAA,CACR,aAAc,uBAAA,CACd,MAAA,CAAQ,UACR,UAAA,CAAY,WAAA,CACZ,gBAAiB,aAAA,CACjB,KAAA,CAAO,EAAE,SAAA,CACT,YAAA,CAAc,MAChB,CAAA,CACA,SAAA,CAAW,CACT,KAAA,CAAO,CAAA,CAAE,QACT,YAAA,CAAc,CAAA,UAAA,EAAa,EAAE,OAAO,CAAA,CACtC,EACA,eAAA,CAAiB,CACf,QAAA,CAAU,UAAA,CACV,YAAA,CAAc,MAChB,EACA,UAAA,CAAY,CACV,SAAU,UAAA,CACV,IAAA,CAAM,OACN,GAAA,CAAK,KAAA,CACL,UAAW,kBAAA,CACX,KAAA,CAAO,EAAE,SACX,CAAA,CACA,YAAa,CACX,KAAA,CAAO,OACP,OAAA,CAAS,mBAAA,CACT,SAAU,MAAA,CACV,MAAA,CAAQ,aAAa,CAAA,CAAE,MAAM,GAC7B,YAAA,CAAc,KAAA,CACd,QAAS,MAAA,CACT,eAAA,CAAiB,cACjB,KAAA,CAAO,CAAA,CAAE,KACT,SAAA,CAAW,YACb,EACA,YAAA,CAAc,CACZ,SAAU,MAAA,CACV,UAAA,CAAY,GAAA,CACZ,aAAA,CAAe,WAAA,CACf,aAAA,CAAe,SACf,KAAA,CAAO,CAAA,CAAE,UACT,YAAA,CAAc,KAAA,CACd,UAAW,MACb,CAAA,CACA,QAAS,CACP,SAAA,CAAW,OACX,OAAA,CAAS,CAAA,CACT,OAAQ,CACV,CAAA,CACA,QAAS,CACP,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,eAAgB,eAAA,CAChB,KAAA,CAAO,OACP,OAAA,CAAS,UAAA,CACT,SAAU,MAAA,CACV,KAAA,CAAO,EAAE,aAAA,CACT,eAAA,CAAiB,cACjB,MAAA,CAAQ,MAAA,CACR,aAAc,KAAA,CACd,MAAA,CAAQ,UACR,SAAA,CAAW,MAAA,CACX,UAAA,CAAY,WACd,CAAA,CACA,aAAA,CAAe,CACb,eAAA,CAAiB,CAAA,CAAE,aACnB,KAAA,CAAO,CAAA,CAAE,KACT,UAAA,CAAY,GACd,EACA,MAAA,CAAQ,CACN,WAAY,MAAA,CACZ,SAAA,CAAW,MACX,WAAA,CAAa,MAAA,CACb,WAAY,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CACnC,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,mBAAA,CAAqB,uCAAA,CACrB,IAAK,MACP,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,UAAA,CAAY,YAAA,CACZ,IAAK,MAAA,CACL,OAAA,CAAS,OACT,MAAA,CAAQ,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CAAA,CAC7B,YAAA,CAAc,MACd,eAAA,CAAiB,CAAA,CAAE,QACnB,MAAA,CAAQ,SAAA,CACR,WAAY,eAAA,CACZ,SAAA,CAAW,MACb,CAAA,CACA,WAAA,CAAa,CACX,UAAA,CAAY,CAAA,CACZ,MAAO,MAAA,CACP,MAAA,CAAQ,OACR,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,eAAA,CAAiB,CAAA,CAAE,aACnB,YAAA,CAAc,KAAA,CACd,MAAO,CAAA,CAAE,OAAA,CACT,WAAY,uBACd,CAAA,CACA,eAAgB,CACd,IAAA,CAAM,EACN,QAAA,CAAU,CACZ,EACA,YAAA,CAAc,CACZ,QAAA,CAAU,MAAA,CACV,UAAA,CAAY,GAAA,CACZ,MAAO,CAAA,CAAE,IAAA,CACT,OAAQ,CAAA,CACR,UAAA,CAAY,GACd,CAAA,CACA,WAAA,CAAa,CACX,QAAA,CAAU,MAAA,CACV,MAAO,CAAA,CAAE,SAAA,CACT,OAAQ,SAAA,CACR,OAAA,CAAS,cACT,eAAA,CAAiB,CAAA,CACjB,eAAA,CAAiB,UAAA,CACjB,QAAA,CAAU,QAAA,CACV,WAAY,GACd,CAAA,CACA,YAAa,CACX,QAAA,CAAU,OACV,KAAA,CAAO,CAAA,CAAE,UACT,SAAA,CAAW,KACb,EACA,cAAA,CAAgB,CACd,WAAY,CAAA,CACZ,KAAA,CAAO,EAAE,SAAA,CACT,UAAA,CAAY,YACd,CAAA,CACA,UAAA,CAAY,CACV,QAAS,aAAA,CACT,UAAA,CAAY,SACZ,GAAA,CAAK,KAAA,CACL,QAAS,OAAA,CACT,QAAA,CAAU,OACV,KAAA,CAAO,CAAA,CAAE,UACT,eAAA,CAAiB,aAAA,CACjB,OAAQ,MAAA,CACR,MAAA,CAAQ,UACR,YAAA,CAAc,MAAA,CACd,WAAY,aACd,CAAA,CACA,cAAe,CACb,QAAA,CAAU,OACZ,CAAA,CACA,kBAAA,CAAoB,CAClB,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,KAAA,CAAO,EAAE,IAAA,CACT,MAAA,CAAQ,EACR,UAAA,CAAY,GACd,EACA,iBAAA,CAAmB,CACjB,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,IAAK,KAAA,CACL,QAAA,CAAU,OACV,KAAA,CAAO,CAAA,CAAE,UACT,SAAA,CAAW,MACb,EACA,oBAAA,CAAsB,CACpB,UAAW,MAAA,CACX,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,MAAO,CAAA,CAAE,aACX,EACA,UAAA,CAAY,CACV,UAAW,QAAA,CACX,OAAA,CAAS,YACT,KAAA,CAAO,CAAA,CAAE,SACX,CAAA,CACA,SAAA,CAAW,CACT,KAAA,CAAO,CAAA,CAAE,UACT,YAAA,CAAc,MAAA,CACd,QAAS,EACX,CAAA,CACA,WAAY,CACV,QAAA,CAAU,MAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,EAAE,IAAA,CACT,MAAA,CAAQ,SACV,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,MAAA,CACV,OAAQ,CAAA,CACR,KAAA,CAAO,EAAE,SACX,CAAA,CACA,QAAS,CACP,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,GAAA,CAAK,OACL,OAAA,CAAS,MAAA,CACT,MAAO,CAAA,CAAE,SAAA,CACT,SAAU,MACZ,CAAA,CAEA,YAAa,CACX,MAAA,CAAQ,aAAa,CAAA,CAAE,MAAM,GAC7B,YAAA,CAAc,KAAA,CACd,QAAS,MAAA,CACT,eAAA,CAAiB,CAAA,CAAE,OAAA,CACnB,YAAA,CAAc,MAAA,CACd,WAAY,mBACd,CAAA,CACA,cAAe,CACb,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,IAAK,KAAA,CACL,YAAA,CAAc,MAChB,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,OAAA,CAAS,UACT,YAAA,CAAc,QAAA,CACd,SAAU,MAAA,CACV,UAAA,CAAY,GACd,CAAA,CACA,cAAA,CAAgB,CACd,QAAA,CAAU,MAAA,CACV,MAAO,CAAA,CAAE,IAAA,CACT,OAAQ,CAAA,CACR,UAAA,CAAY,GACd,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,MAAA,CACT,GAAA,CAAK,MAAA,CACL,SAAA,CAAW,MAAA,CACX,SAAU,MAAA,CACV,KAAA,CAAO,EAAE,SACX,CAAA,CACA,KAAM,CACJ,OAAA,CAAS,OACT,eAAA,CAAiB,CAAA,CAAE,QACnB,YAAA,CAAc,KAAA,CACd,OAAQ,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CAAA,CAC7B,YAAA,CAAc,MAChB,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,gBAChB,YAAA,CAAc,MAChB,EACA,SAAA,CAAW,CACT,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,CAAA,CAAE,KACT,MAAA,CAAQ,CACV,CAAA,CACA,YAAA,CAAc,CACZ,OAAA,CAAS,OACT,GAAA,CAAK,KAAA,CACL,aAAc,MAChB,CAAA,CACA,WAAY,CACV,OAAA,CAAS,WACT,YAAA,CAAc,KAAA,CACd,OAAQ,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CAAA,CAC7B,eAAA,CAAiB,cACjB,KAAA,CAAO,CAAA,CAAE,cACT,QAAA,CAAU,MAAA,CACV,OAAQ,SAAA,CACR,UAAA,CAAY,YACZ,UAAA,CAAY,GACd,EACA,gBAAA,CAAkB,CAChB,gBAAiB,CAAA,CAAE,OAAA,CACnB,YAAa,CAAA,CAAE,OAAA,CACf,MAAO,SACT,CAAA,CACA,SAAU,CACR,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,WAAA,CACT,YAAA,CAAc,MACd,MAAA,CAAQ,CAAA,UAAA,EAAa,EAAE,MAAM,CAAA,CAAA,CAC7B,SAAU,MAAA,CACV,MAAA,CAAQ,WACR,SAAA,CAAW,MAAA,CACX,WAAY,SAAA,CACZ,YAAA,CAAc,OACd,SAAA,CAAW,YAAA,CACX,gBAAiB,aAAA,CACjB,KAAA,CAAO,EAAE,IACX,CAAA,CACA,aAAc,CACZ,OAAA,CAAS,WACT,YAAA,CAAc,KAAA,CACd,OAAQ,MAAA,CACR,eAAA,CAAiB,EAAE,OAAA,CACnB,KAAA,CAAO,UACP,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,MAAA,CAAQ,UACR,UAAA,CAAY,WACd,CAAA,CACA,gBAAA,CAAkB,CAChB,OAAA,CAAS,cACT,UAAA,CAAY,QAAA,CACZ,IAAK,KAAA,CACL,OAAA,CAAS,WACT,YAAA,CAAc,KAAA,CACd,OAAQ,MAAA,CACR,eAAA,CAAiB,EAAE,OAAA,CACnB,KAAA,CAAO,UACP,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,MAAA,CAAQ,SAAA,CACR,YAAA,CAAc,MAAA,CACd,UAAA,CAAY,wBACd,CAAA,CACA,cAAA,CAAgB,CACd,OAAA,CAAS,WAAA,CACT,gBAAiB,wBAAA,CACjB,YAAA,CAAc,MACd,KAAA,CAAO,SAAA,CACP,SAAU,MAAA,CACV,YAAA,CAAc,OACd,UAAA,CAAY,GACd,CACF,CAAA,CAAA,CAGMC,EAAAA,CAAoB,CAAC,CAAA,CAAgBC,CAAAA,GAAoB;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,kBAAA,EAO3C,EAAE,WAAW,CAAA;AAAA,gBAAA,EACfA,CAAAA,CAAS,gCAAkC,gCAAgC,CAAA;AAAA;;AAAA;AAAA,sBAAA,EAIrE,EAAE,iBAAiB,CAAA;AAAA;;AAAA;AAAA,WAAA,EAI9B,EAAE,aAAa,CAAA;AAAA;;AAAA;AAAA,sBAAA,EAIJ,EAAE,YAAY,CAAA;AAAA,WAAA,EACzB,EAAE,IAAI,CAAA;AAAA;;AAAA;AAAA,WAAA,EAIN,EAAE,IAAI,CAAA;AAAA;;AAAA;AAAA,sBAAA,EAIK,EAAE,YAAY,CAAA;AAAA;;AAAA;AAAA,sBAAA,EAId,EAAE,YAAY,CAAA;AAAA;;AAAA;AAAA,WAAA,EAIzB,EAAE,IAAI,CAAA;AAAA;;AAAA;AAAA,kBAAA,EAIC,EAAE,OAAO,CAAA;AAAA;AAAA,0BAAA,EAED,EAAE,OAAO,CAAA;AAAA;;AAAA;AAAA,WAAA,EAIxB,EAAE,SAAS,CAAA;AAAA;;AAAA;AAAA,WAAA,EAIX,EAAE,SAAS,CAAA;AAAA;AAAA,CAAA,CAIjB,SAASC,EAAAA,CAAW,CACzB,IAAA,CAAAC,CAAAA,CAAO,CAAC,UAAA,CAAY,UAAU,CAAA,CAC9B,UAAA,CAAAC,EAAa,UAAA,CACb,SAAA,CAAAC,CAAAA,CAAY,GACZ,UAAA,CAAAhF,CAAAA,CAAa,IAAA,CACb,SAAA,CAAAG,EACA,KAAA,CAAO3B,CAAAA,CAAY,MACrB,CAAA,CAAoB,CAClB,GAAM,CAACyG,CAAAA,CAAWC,CAAY,EAAItK,cAAAA,CAAwBmK,CAAU,CAAA,CAC9D,CAAC1E,EAAaC,CAAc,CAAA,CAAI1F,cAAAA,CAAS,EAAE,EAC3C,CAACkG,CAAAA,CAAiBqE,CAAkB,CAAA,CAAIvK,eAAyB,IAAI,CAAA,CACrE,CAACwK,CAAAA,CAAgBC,CAAiB,CAAA,CAAIzK,cAAAA,CAAsB,IAAI,GAAK,EACrE,CAAC0K,CAAAA,CAAmBC,CAAoB,CAAA,CAAI3K,eAAwB,IAAI,CAAA,CACxE,CAACsH,CAAAA,CAAUC,CAAW,CAAA,CAAIvH,cAAAA,CAAS,KAAK,CAAA,CACxC,CAACwH,CAAAA,CAAUC,CAAW,EAAIzH,cAAAA,CAAuB,UAAU,EAC3D,CAAC0H,CAAAA,CAAaC,CAAc,CAAA,CAAI3H,eAAS,EAAE,CAAA,CAC3C4K,CAAAA,CAAiBC,YAAAA,CAAyB,IAAI,CAAA,CAC9C,CAACC,CAAAA,CAAYC,CAAa,EAAI/K,cAAAA,CAAS,KAAK,CAAA,CAGlDK,eAAAA,CAAU,IAAM,CACd,GAAIuD,CAAAA,GAAc,MAAA,CAAQ,CACxB,IAAMoH,CAAAA,CAAa,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CACnED,CAAAA,CAAcC,CAAAA,CAAW,OAAO,EAEhC,IAAMC,CAAAA,CAAWvG,GAA2BqG,CAAAA,CAAcrG,CAAAA,CAAE,OAAO,CAAA,CACnE,OAAAsG,CAAAA,CAAW,gBAAA,CAAiB,SAAUC,CAAO,CAAA,CACtC,IAAMD,CAAAA,CAAW,oBAAoB,QAAA,CAAUC,CAAO,CAC/D,CACF,EAAG,CAACrH,CAAS,CAAC,CAAA,CAGd,IAAMoG,CAAAA,CAASpG,CAAAA,GAAc,MAAA,EAAWA,CAAAA,GAAc,QAAUkH,CAAAA,CAC1DI,CAAAA,CAAclB,CAAAA,CAASH,EAAAA,CAAO,KAAOA,EAAAA,CAAO,KAAA,CAC5CsB,CAAAA,CAAS/K,aAAAA,CAAQ,IAAM0J,EAAAA,CAAaoB,CAAW,EAAG,CAACA,CAAW,CAAC,CAAA,CAC/DE,EAAAA,CAAchL,aAAAA,CAAQ,IAAM2J,GAAkBmB,CAAAA,CAAalB,CAAM,CAAA,CAAG,CAACkB,EAAalB,CAAM,CAAC,CAAA,CAEzF,CAAE,aAAA/J,EAAAA,CAAc,OAAA,CAAAH,EAAQ,CAAA,CAAIa,GAAiB,CAC7C,CAAE,QAAA,CAAAoF,EAAAA,CAAU,UAAWsF,EAAgB,CAAA,CAAIzJ,EAAAA,CAAY,CAAE,OAAQ6D,CAAAA,EAAe,MAAU,CAAC,CAAA,CAC3F,CAAE,OAAA,CAAS6F,CAAAA,CAAa,UAAWC,CAAe,CAAA,CAAIrJ,GAAWgE,CAAAA,EAAiB,IAAA,EAAQ,EAAE,CAAA,CAC5F,CAAE,QAAA,CAAA4B,CAAAA,CAAU,SAAA,CAAW0D,CAAAA,CAAiB,QAASC,CAAAA,CAAiB,QAAA,CAAAzD,CAAS,CAAA,CAAIzF,GAAY,CAAE,KAAA,CAAO,EAAG,CAAC,EACxG,CAAE,aAAA,CAAAS,CAAAA,CAAe,SAAA,CAAW0I,EAAc,CAAA,CAAI3I,EAAAA,EAAiB,CAC/D,CAAE,eAAArB,EAAAA,CAAgB,YAAA,CAAAL,EAAAA,CAAc,SAAA,CAAAE,GAAW,KAAA,CAAAJ,EAAM,EAAIC,CAAAA,EAAY,CAEjEuK,GAAe,CAAE,GAAG1C,EAAAA,CAAkB,GAAGmB,CAAU,CAAA,CAGzD/J,eAAAA,CAAU,IAAM,CACd,IAAMuL,CAAAA,CAAiBlH,CAAAA,EAAqB,CAAA,CACrCA,CAAAA,CAAE,SAAWA,CAAAA,CAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,MACxCA,CAAAA,CAAE,cAAA,EAAe,CACjBkG,CAAAA,CAAe,SAAS,KAAA,EAAM,EAElC,CAAA,CACA,OAAA,QAAA,CAAS,iBAAiB,SAAA,CAAWgB,CAAa,CAAA,CAC3C,IAAM,SAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAa,CACpE,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMC,EAAAA,CAAeC,GAAoB,CACvCrB,CAAAA,CAAmBlC,CAAAA,EAAS,CAC1B,IAAMwD,CAAAA,CAAO,IAAI,GAAA,CAAIxD,CAAI,EACzB,OAAIwD,CAAAA,CAAK,GAAA,CAAID,CAAO,EAClBC,CAAAA,CAAK,MAAA,CAAOD,CAAO,CAAA,CAEnBC,EAAK,GAAA,CAAID,CAAO,CAAA,CAEXC,CACT,CAAC,EACH,CAAA,CAEMC,EAAAA,CAAmB5L,aAAAA,CAAQ,IACxB2F,EAAAA,CAAS,MAAA,CAAQ5D,GACC,CAACuI,CAAAA,EAAsBvI,EAAgB,UAAA,GAAeuI,CAE9E,CAAA,CACA,CAAC3E,GAAU2E,CAAiB,CAAC,CAAA,CAE1BjG,EAAAA,CAAexD,kBACnB,MAAOyD,CAAAA,EAAuB,CAE5B,GADAA,EAAE,cAAA,EAAe,CACb,EAAA,CAACgD,CAAAA,CAAY,MAAK,EAAKrG,EAAAA,CAAAA,CAE3B,GAAI,CACF,MAAMK,EAAAA,CAAe,CACnB,IAAA,CAAM8F,CAAAA,CACN,QAASE,CACX,CAAC,CAAA,CACDC,CAAAA,CAAe,EAAE,CAAA,CACjBJ,CAAAA,CAAY,CAAA,CAAK,CAAA,CACjB,WAAW,IAAM,CACfkE,CAAAA,EAAgB,CAChBtK,KACF,CAAA,CAAG,GAAG,EACR,MAAQ,CAER,CACF,CAAA,CACA,CAACqG,EAAUE,CAAAA,CAAarG,EAAAA,CAAcK,EAAAA,CAAgB+J,CAAAA,CAAiBtK,EAAK,CAC9E,CAAA,CAEM8K,EAAAA,CAAsB,IACtBV,GAAkB,CAACD,CAAAA,CAEnB1G,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOuG,CAAAA,CAAO,OAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAACqJ,GAAA,EAAW,CAAA,CACZrJ,eAAC,MAAA,CAAA,CAAK,QAAA,CAAA,oBAAA,CAAkB,GAC1B,CAAA,CAKFqE,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,aAAA,CACjB,QAAA,CAAA,CAAAvG,eAAAA,CAAC,QAAA,CAAA,CAAO,QAAS,IAAM2F,CAAAA,CAAmB,IAAI,CAAA,CAAG,MAAOY,CAAAA,CAAO,UAAA,CAAY,SAAA,CAAU,iBAAA,CACnF,UAAA5K,cAAAA,CAACgJ,EAAAA,CAAA,EAAc,CAAA,CAAE,oBAEnB,CAAA,CAEAhJ,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO4K,EAAO,kBAAA,CAAqB,QAAA,CAAAG,CAAAA,CAAY,KAAA,CAAM,EACxDA,CAAAA,CAAY,iBAAA,EACX1G,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,iBAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAACiJ,EAAAA,CAAA,EAAU,CAAA,CACV8B,CAAAA,CAAY,iBAAA,CAAkB,WAAA,CAAA,CACjC,EAGDA,CAAAA,CAAY,YAAA,CACX/K,cAAAA,CAAC,KAAA,CAAA,CACC,MAAO4K,CAAAA,CAAO,oBAAA,CACd,uBAAA,CAAyB,CAAE,OAAQG,CAAAA,CAAY,YAAa,CAAA,CAC9D,CAAA,CAEA/K,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO,CAAE,GAAG4K,EAAO,oBAAA,CAAsB,KAAA,CAAO,SAAU,CAAA,CAAG,iCAAqB,CAAA,CAAA,CAEzF,CAAA,CAIEe,GAAiB,IACjBhG,CAAAA,CACK+F,IAAoB,CAGzBZ,EAAAA,EAAmBK,EAAAA,CAEnB9G,eAAAA,CAAC,OAAI,KAAA,CAAOuG,CAAAA,CAAO,OAAA,CACjB,QAAA,CAAA,CAAA5K,eAACqJ,EAAAA,CAAA,EAAW,CAAA,CACZrJ,cAAAA,CAAC,QAAK,QAAA,CAAA,YAAA,CAAU,CAAA,CAAA,CAClB,CAAA,CAIAyL,EAAAA,CAAiB,SAAW,CAAA,CAE5BpH,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,UAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4K,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA5K,cAAAA,CAAC6I,GAAA,EAAS,CAAA,CAAE,EAC1C7I,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO4K,CAAAA,CAAO,UAAA,CAAY,QAAA,CAAA,mBAAA,CAAiB,CAAA,CAC/C5K,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO4K,CAAAA,CAAO,SAAA,CACd,SAAA1F,CAAAA,CAAc,CAAA,gBAAA,EAAmBA,CAAW,CAAA,CAAA,CAAA,CAAM,2CACrD,CAAA,CAAA,CACF,CAAA,CAKFlF,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4K,CAAAA,CAAO,WAAA,CAChB,QAAA,CAAAa,EAAAA,CAAiB,IAAK7J,CAAAA,EACrByC,eAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM2F,CAAAA,CAAmBpI,CAAO,CAAA,CACzC,KAAA,CAAOgJ,EAAO,WAAA,CACd,SAAA,CAAU,sBAEV,QAAA,CAAA,CAAA5K,cAAAA,CAAC,OAAI,KAAA,CAAO4K,CAAAA,CAAO,WAAA,CAAa,SAAA,CAAU,sBACxC,QAAA,CAAA5K,cAAAA,CAAC6I,EAAAA,CAAA,EAAS,EACZ,CAAA,CACAxE,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,cAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO4K,CAAAA,CAAO,YAAA,CAAe,QAAA,CAAAhJ,CAAAA,CAAQ,MAAM,CAAA,CAC9CA,CAAAA,CAAQ,eAAA,EACP5B,cAAAA,CAAC,KAAE,KAAA,CAAO4K,CAAAA,CAAO,WAAA,CAAc,QAAA,CAAAhJ,EAAQ,eAAA,CAAgB,CAAA,CAExDA,EAAQ,iBAAA,EACPyC,eAAAA,CAAC,KAAE,KAAA,CAAOuG,CAAAA,CAAO,WAAA,CAAc,QAAA,CAAA,CAAAhJ,EAAQ,iBAAA,CAAkB,WAAA,CAAA,CAAS,CAAA,CAAA,CAEtE,CAAA,CACA5B,eAAC,MAAA,CAAA,CAAK,KAAA,CAAO4K,CAAAA,CAAO,cAAA,CAAgB,UAAU,wBAAA,CAC5C,QAAA,CAAA5K,cAAAA,CAAC8I,EAAAA,CAAA,EAAiB,CAAA,CACpB,CAAA,CAAA,CAAA,CAnBKlH,CAAAA,CAAQ,EAoBf,CACD,CAAA,CACH,CAAA,CAIEgK,EAAAA,CAAoB,IACnBnE,EAAS,oBAAA,CAEVzG,EAAAA,CAEAhB,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4K,CAAAA,CAAO,cAAA,CAAgB,4DAEnC,CAAA,CAIC7D,CAAAA,CAUH1C,gBAAC,MAAA,CAAA,CAAK,QAAA,CAAUH,EAAAA,CAAc,KAAA,CAAO0G,EAAO,IAAA,CAC1C,QAAA,CAAA,CAAAvG,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOuG,CAAAA,CAAO,UAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAAC,KAAE,KAAA,CAAO4K,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA,kBAAA,CAAgB,EAC5C5K,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAS,IAAMgH,CAAAA,CAAY,KAAK,CAAA,CAChC,MAAO,CAAE,UAAA,CAAY,MAAA,CAAQ,MAAA,CAAQ,OAAQ,MAAA,CAAQ,SAAA,CAAW,KAAA,CAAO,SAAA,CAAW,SAAU,MAAO,CAAA,CACpG,QAAA,CAAA,MAAA,CAED,CAAA,CAAA,CACF,EACAhH,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4K,CAAAA,CAAO,aAChB,QAAA,CAAArE,EAAAA,CAAW,GAAA,CAAK6B,CAAAA,EACfpI,eAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMkH,CAAAA,CAAYkB,CAAAA,CAAE,KAAK,CAAA,CAClC,MAAO,CACL,GAAGwC,CAAAA,CAAO,UAAA,CACV,GAAI3D,CAAAA,GAAamB,CAAAA,CAAE,KAAA,CAAQwC,CAAAA,CAAO,iBAAmB,EACvD,EAEC,QAAA,CAAAxC,CAAAA,CAAE,OAREA,CAAAA,CAAE,KAST,CACD,CAAA,CACH,EACApI,cAAAA,CAAC,UAAA,CAAA,CACC,KAAA,CAAOmH,CAAAA,CACP,SAAWhD,CAAAA,EAAMiD,CAAAA,CAAejD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,WAAA,CAAY,0BAAA,CACZ,KAAA,CAAOyG,EAAO,QAAA,CACd,SAAA,CAAU,iBAAA,CACV,QAAA,CAAQ,KACV,CAAA,CACA5K,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,KAAA,CAAO,CAAE,GAAG4K,CAAAA,CAAO,aAAc,OAAA,CAAS9J,EAAAA,CAAe,GAAM,CAAE,CAAA,CACjE,SAAUA,EAAAA,CACV,SAAA,CAAU,mBAAA,CAET,QAAA,CAAAA,GAAe,eAAA,CAAkB,QAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAlDEuD,gBAAC,QAAA,CAAA,CAAO,OAAA,CAAS,IAAM2C,CAAAA,CAAY,IAAI,CAAA,CAAG,KAAA,CAAO4D,CAAAA,CAAO,gBAAA,CAAkB,UAAU,wBAAA,CAClF,QAAA,CAAA,CAAA5K,cAAAA,CAACoJ,EAAAA,CAAA,EAAS,CAAA,CAAE,aAAA,CAAA,CAEd,CAAA,CAfuC,IAAA,CAkEvCyC,GAAiB,IAEhBtM,EAAAA,CASAG,EAAAA,CAQDuL,CAAAA,CAEA5G,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,OAAA,CACjB,QAAA,CAAA,CAAA5K,eAACqJ,EAAAA,CAAA,EAAW,CAAA,CACZrJ,cAAAA,CAAC,QAAK,QAAA,CAAA,qBAAA,CAAmB,CAAA,CAAA,CAC3B,CAAA,CAKFqE,eAAAA,CAAC,OACE,QAAA,CAAA,CAAAuH,EAAAA,EAAkB,CAElBrE,CAAAA,CAAS,SAAW,CAAA,CACnBlD,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,UAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4K,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA5K,cAAAA,CAACmJ,GAAA,EAAY,CAAA,CAAE,CAAA,CAC7CnJ,cAAAA,CAAC,MAAG,KAAA,CAAO4K,CAAAA,CAAO,WAAY,QAAA,CAAA,iBAAA,CAAe,CAAA,CAC7C5K,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO4K,CAAAA,CAAO,SAAA,CACd,SAAAnD,CAAAA,CAAS,oBAAA,CACN,kCAAA,CACA,gDAAA,CACN,GACF,CAAA,CAEAzH,cAAAA,CAAC,KAAA,CAAA,CACE,QAAA,CAAAuH,EAAS,GAAA,CAAKK,CAAAA,EAAY,CACzB,IAAMU,EAAWK,EAAAA,CAAmBf,CAAAA,CAAQ,aAAa,CAAA,EAAKe,GAAmB,QAAA,CAC3EJ,CAAAA,CAAanC,EAAAA,CAAawB,CAAAA,CAAQ,MAAM,CAAA,EAAKxB,EAAAA,CAAa,GAAA,CAEhE,OACE/B,gBAAC,KAAA,CAAA,CAAqB,KAAA,CAAOuG,EAAO,WAAA,CAClC,QAAA,CAAA,CAAAvG,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,CAAAA,CAAO,aAAA,CACjB,UAAA5K,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAG4K,CAAAA,CAAO,KAAA,CAAO,KAAA,CAAOtC,CAAAA,CAAS,MAAO,eAAA,CAAiBA,CAAAA,CAAS,EAAG,CAAA,CACjF,SAAAA,CAAAA,CAAS,KAAA,CACZ,CAAA,CACAtI,cAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,GAAG4K,CAAAA,CAAO,MAAO,KAAA,CAAOrC,CAAAA,CAAW,KAAA,CAAO,eAAA,CAAiBA,EAAW,EAAG,CAAA,CACrF,SAAAA,CAAAA,CAAW,KAAA,CACd,GACF,CAAA,CACAvI,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAO4K,EAAO,cAAA,CAAiB,QAAA,CAAAhD,CAAAA,CAAQ,OAAA,EAAW,sBAAsB,CAAA,CAC3E5H,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4K,EAAO,WAAA,CACjB,QAAA,CAAA5K,cAAAA,CAAC,MAAA,CAAA,CAAM,SAAAqG,EAAAA,CAAWuB,CAAAA,CAAQ,UAAU,CAAA,CAAE,EACxC,CAAA,CAAA,CAAA,CAZQA,CAAAA,CAAQ,EAalB,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAtDE5H,cAAAA,CAAC,OAAI,KAAA,CAAO4K,CAAAA,CAAO,WACjB,QAAA,CAAA5K,cAAAA,CAAC,KAAE,KAAA,CAAO4K,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA,uCAAA,CAAqC,EACnE,CAAA,CAXAvG,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,OAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAACqJ,EAAAA,CAAA,EAAW,CAAA,CACZrJ,cAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,YAAA,CAAU,GAClB,CAAA,CAgEN,OACEqE,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOuG,CAAAA,CAAO,SAAA,CAAW,SAAA,CAAW,CAAA,UAAA,EAAa5F,GAAa,EAAE,CAAA,CAAA,CACnE,QAAA,CAAA,CAAAhF,cAAAA,CAAC,SAAO,QAAA,CAAA6K,EAAAA,CAAY,EAGnBlB,CAAAA,CAAK,MAAA,CAAS,GACb3J,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4K,CAAAA,CAAO,KAChB,QAAA,CAAAjB,CAAAA,CAAK,GAAA,CAAKmC,CAAAA,EACT9L,eAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM+J,CAAAA,CAAa+B,CAAG,CAAA,CAC/B,KAAA,CAAO,CACL,GAAGlB,EAAO,GAAA,CACV,GAAId,CAAAA,GAAcgC,CAAAA,CAAMlB,EAAO,SAAA,CAAY,EAC7C,CAAA,CACA,UAAWd,CAAAA,GAAcgC,CAAAA,CAAM,YAAA,CAAe,MAAA,CAE7C,SAAAV,EAAAA,CAAaU,CAAG,GARZA,CASP,CACD,EACH,CAAA,CAGFzH,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,IAAA,CAEjB,QAAA,CAAA,CAAAvG,eAAAA,CAAC,OAAA,CAAA,CAAM,MAAOuG,CAAAA,CAAO,OAAA,CAElB,QAAA,CAAA,CAAA/F,CAAAA,EAAciF,IAAc,UAAA,EAC3BzF,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOuG,EAAO,eAAA,CACjB,QAAA,CAAA,CAAA5K,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO4K,CAAAA,CAAO,UAAA,CAAY,QAAA,CAAA5K,cAAAA,CAAC4I,GAAA,EAAW,CAAA,CAAE,CAAA,CAC7C5I,cAAAA,CAAC,SACC,GAAA,CAAKqK,CAAAA,CACL,KAAK,MAAA,CACL,WAAA,CAAY,YACZ,KAAA,CAAOnF,CAAAA,CACP,QAAA,CAAWf,CAAAA,EAAMgB,EAAehB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,MAAOyG,CAAAA,CAAO,WAAA,CACd,SAAA,CAAU,qBAAA,CACZ,GACF,CAAA,CAIDd,CAAAA,GAAc,UAAA,EAAcrH,CAAAA,CAAc,OAAS,CAAA,EAClD4B,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAArE,eAAC,IAAA,CAAA,CAAG,KAAA,CAAO4K,CAAAA,CAAO,YAAA,CAAc,oBAAQ,CAAA,CACxCvG,eAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOuG,EAAO,OAAA,CAChB,QAAA,CAAA,CAAA5K,eAAC,IAAA,CAAA,CACC,QAAA,CAAAA,eAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMoK,CAAAA,CAAqB,IAAI,CAAA,CACxC,KAAA,CAAO,CACL,GAAGQ,EAAO,OAAA,CACV,GAAKT,CAAAA,CAA2C,GAAvBS,CAAAA,CAAO,aAClC,CAAA,CACA,SAAA,CAAWT,EAAoB,iBAAA,CAAoB,MAAA,CACpD,QAAA,CAAA,cAAA,CAED,CAAA,CACF,EACC1H,CAAAA,CAAc,GAAA,CAAKsJ,CAAAA,EAClB1H,eAAAA,CAAC,MACC,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMiH,EAAAA,CAAYS,CAAAA,CAAM,EAAE,CAAA,CACnC,KAAA,CAAOnB,EAAO,OAAA,CACd,SAAA,CAAU,iBAAA,CAEV,QAAA,CAAA,CAAAvG,gBAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,OAAA,CAAS,OAAQ,UAAA,CAAY,QAAA,CAAU,GAAA,CAAK,KAAM,EAC/D,QAAA,CAAA,CAAArE,cAAAA,CAACkJ,EAAAA,CAAA,EAAW,EACX6C,CAAAA,CAAM,IAAA,CAAA,CACT,CAAA,CACC9B,CAAAA,CAAe,IAAI8B,CAAAA,CAAM,EAAE,CAAA,CAAI/L,cAAAA,CAAC+I,GAAA,EAAgB,CAAA,CAAK/I,cAAAA,CAAC8I,EAAAA,CAAA,EAAiB,CAAA,CAAA,CAC1E,CAAA,CACCmB,EAAe,GAAA,CAAI8B,CAAAA,CAAM,EAAE,CAAA,EAAKA,CAAAA,CAAM,QAAA,CAAS,MAAA,CAAS,GACvD/L,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAO4K,CAAAA,CAAO,OACf,QAAA,CAAAmB,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAKC,GACnBhM,cAAAA,CAAC,IAAA,CAAA,CACC,QAAA,CAAAA,cAAAA,CAAC,UACC,OAAA,CAAS,IAAMoK,CAAAA,CAAqB4B,CAAAA,CAAQ,EAAE,CAAA,CAC9C,KAAA,CAAO,CACL,GAAGpB,EAAO,OAAA,CACV,OAAA,CAAS,UAAA,CACT,QAAA,CAAU,OACV,GAAIT,CAAAA,GAAsB6B,EAAQ,EAAA,CAAKpB,CAAAA,CAAO,cAAgB,EAChE,CAAA,CACA,SAAA,CAAWT,IAAsB6B,CAAAA,CAAQ,EAAA,CAAK,iBAAA,CAAoB,MAAA,CAEjE,SAAAA,CAAAA,CAAQ,IAAA,CACX,CAAA,CAAA,CAZOA,CAAAA,CAAQ,EAajB,CACD,CAAA,CACH,CAAA,CAAA,CAAA,CA9BKD,CAAAA,CAAM,EAgCf,CACD,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,EAGA1H,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAOuG,CAAAA,CAAO,KACjB,QAAA,CAAA,CAAAd,CAAAA,GAAc,UAAA,EAAc6B,EAAAA,GAC5B7B,CAAAA,GAAc,UAAA,EAAc+B,IAAe,CAAA,CAC9C,CAAA,CAAA,CACF,GACF,CAEJ","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuidesResponse,\n GuideAnalyticsEvent,\n FeatureGroupsResponse,\n} from './types';\n\n/**\n * Default API base URL\n */\nconst DEFAULT_BASE_URL = 'https://api.census.ai';\n\n/**\n * Census SDK Client\n *\n * The main client for interacting with the Census API.\n * Use `createCensus()` to create an instance.\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({ apiKey: 'cs_live_xxx' });\n *\n * await census.identify({ userId: 'user_123', email: 'user@example.com' });\n * await census.submitFeedback({ type: 'bug_report', message: 'Button is broken' });\n * ```\n */\nexport class CensusClient {\n private apiKey: string;\n private baseUrl: string;\n private debug: boolean;\n private currentUserId: string | null = null;\n\n constructor(config: CensusConfig) {\n if (!config.apiKey) {\n throw new Error('Census: apiKey is required');\n }\n\n // Support both new (cs_) and legacy (op_) key prefixes\n const validPrefixes = ['cs_live_', 'cs_test_', 'op_live_', 'op_test_'];\n if (!validPrefixes.some(prefix => config.apiKey.startsWith(prefix))) {\n console.warn('Census: API key should start with \"cs_live_\" or \"cs_test_\"');\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n this.debug = config.debug || false;\n\n this.log('Initialized with base URL:', this.baseUrl);\n }\n\n /**\n * Identify a user for tracking purposes.\n * Call this when a user logs in or when you have user information.\n *\n * @param user - User identity information\n *\n * @example\n * ```typescript\n * await census.identify({\n * userId: 'user_123',\n * email: 'john@example.com',\n * name: 'John Doe',\n * organizationId: 'org_456',\n * organizationName: 'Acme Inc',\n * });\n * ```\n */\n async identify(user: UserIdentity): Promise<void> {\n if (!user.userId) {\n throw new Error('Census: userId is required for identify()');\n }\n\n this.currentUserId = user.userId;\n\n await this.request('/api/sdk/identify', 'POST', {\n userId: user.userId,\n email: user.email,\n name: user.name,\n avatarUrl: user.avatarUrl,\n metadata: user.metadata,\n organizationId: user.organizationId,\n organizationName: user.organizationName,\n organizationDomain: user.organizationDomain,\n organizationPlan: user.organizationPlan,\n });\n\n this.log('User identified:', user.userId);\n }\n\n /**\n * Clear the current user identity.\n * Call this when a user logs out.\n */\n reset(): void {\n this.currentUserId = null;\n this.log('User identity reset');\n }\n\n /**\n * Submit feedback, bug report, or feature request.\n *\n * @param options - Feedback options\n *\n * @example\n * ```typescript\n * // Submit a bug report\n * await census.submitFeedback({\n * type: 'bug_report',\n * message: 'The submit button is not working on Firefox',\n * });\n *\n * // Submit a feature request\n * await census.submitFeedback({\n * type: 'feature_request',\n * message: 'It would be great to have dark mode support',\n * });\n *\n * // Rate an article\n * await census.submitFeedback({\n * type: 'article_rating',\n * articleId: 'article_123',\n * helpful: true,\n * rating: 5,\n * });\n * ```\n */\n async submitFeedback(options: FeedbackOptions): Promise<{ feedbackId: string }> {\n const validTypes = ['feedback', 'bug_report', 'feature_request', 'article_rating'];\n if (!options.type || !validTypes.includes(options.type)) {\n throw new Error(`Census: type must be one of: ${validTypes.join(', ')}`);\n }\n\n if (options.type === 'article_rating') {\n if (options.rating === undefined && options.helpful === undefined) {\n throw new Error('Census: article_rating requires rating or helpful field');\n }\n } else if (!options.message) {\n throw new Error('Census: message is required for this feedback type');\n }\n\n const response = await this.request<{ success: boolean; feedbackId: string }>(\n '/api/sdk/feedback',\n 'POST',\n {\n type: options.type,\n message: options.message,\n rating: options.rating,\n helpful: options.helpful,\n userId: this.currentUserId,\n articleId: options.articleId,\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n metadata: options.metadata,\n }\n );\n\n this.log('Feedback submitted:', response.feedbackId);\n return { feedbackId: response.feedbackId };\n }\n\n /**\n * Fetch published articles from the knowledge base.\n *\n * @param options - Query options\n * @returns Articles and pagination info\n *\n * @example\n * ```typescript\n * // Get all articles\n * const { articles } = await census.getArticles();\n *\n * // Search articles\n * const { articles } = await census.getArticles({ search: 'getting started' });\n *\n * // Filter by category\n * const { articles } = await census.getArticles({ category: 'guides' });\n * ```\n */\n async getArticles(options?: ArticlesOptions): Promise<ArticlesResponse> {\n const params = new URLSearchParams();\n if (options?.category) params.set('category', options.category);\n if (options?.search) params.set('search', options.search);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const url = `/api/sdk/articles${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<ArticlesResponse>(url, 'GET');\n this.log('Fetched articles:', response.articles.length);\n return response;\n }\n\n /**\n * Fetch a single article by slug or ID.\n *\n * @param slugOrId - Article slug or ID\n * @returns Article or null if not found\n *\n * @example\n * ```typescript\n * const article = await census.getArticle('getting-started');\n * if (article) {\n * console.log(article.title, article.content_html);\n * }\n * ```\n */\n async getArticle(slugOrId: string): Promise<Article | null> {\n try {\n const response = await this.request<{ article: Article }>(\n `/api/sdk/articles/${encodeURIComponent(slugOrId)}`,\n 'GET'\n );\n this.log('Fetched article:', slugOrId);\n return response.article;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch feature groups with their features and article counts.\n * Used for navigation in the knowledge base.\n *\n * @returns Feature groups with nested features\n *\n * @example\n * ```typescript\n * const { feature_groups } = await census.getFeatureGroups();\n * feature_groups.forEach(group => {\n * console.log(group.name, group.features.length);\n * });\n * ```\n */\n async getFeatureGroups(): Promise<FeatureGroupsResponse> {\n const response = await this.request<FeatureGroupsResponse>(\n '/api/sdk/feature-groups',\n 'GET'\n );\n this.log('Fetched feature groups:', response.feature_groups.length);\n return response;\n }\n\n /**\n * Fetch the current user's submitted requests (feedback, bugs, feature requests).\n * Requires a user to be identified first.\n *\n * @param options - Query options\n * @returns Requests and pagination info\n *\n * @example\n * ```typescript\n * // Get all requests for the current user\n * const { requests } = await census.getRequests();\n *\n * // Filter by status\n * const { requests } = await census.getRequests({ status: 'in_progress' });\n *\n * // Filter by type\n * const { requests } = await census.getRequests({ type: 'bug_report' });\n * ```\n */\n async getRequests(options?: RequestsOptions): Promise<RequestsResponse> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before fetching requests. Call identify() first.');\n }\n\n const params = new URLSearchParams();\n params.set('userId', this.currentUserId);\n if (options?.status) params.set('status', options.status);\n if (options?.type) params.set('type', options.type);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const response = await this.request<RequestsResponse>(\n `/api/sdk/requests?${params.toString()}`,\n 'GET'\n );\n this.log('Fetched requests:', response.requests.length);\n return response;\n }\n\n /**\n * Vote on a feedback request (toggle).\n * If the user has already voted, removes the vote.\n * If the user hasn't voted, adds a vote.\n *\n * @param feedbackId - ID of the feedback to vote on\n * @returns Vote result with action taken and new vote count\n *\n * @example\n * ```typescript\n * // Vote on a feedback request\n * const result = await census.vote('feedback-id-123');\n * console.log(result.action); // 'added' or 'removed'\n * console.log(result.vote_count); // 5\n * console.log(result.user_has_voted); // true\n * ```\n */\n async vote(feedbackId: string): Promise<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before voting. Call identify() first.');\n }\n\n if (!feedbackId) {\n throw new Error('Census: feedbackId is required for vote()');\n }\n\n const response = await this.request<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }>('/api/sdk/requests/vote', 'POST', {\n feedbackId,\n userId: this.currentUserId,\n });\n\n this.log('Vote result:', response.action, 'for feedback:', feedbackId);\n return response;\n }\n\n /**\n * Track a custom analytics event.\n *\n * @param eventType - Name of the event\n * @param properties - Additional event properties\n *\n * @example\n * ```typescript\n * // Track a button click\n * await census.track('button_clicked', { buttonId: 'submit-form' });\n *\n * // Track a page view\n * await census.track('page_viewed', { page: '/pricing' });\n * ```\n */\n async track(eventType: string, properties?: Record<string, unknown>): Promise<void> {\n if (!eventType) {\n throw new Error('Census: eventType is required for track()');\n }\n\n await this.request('/api/sdk/events', 'POST', {\n eventType,\n userId: this.currentUserId,\n properties,\n });\n\n this.log('Event tracked:', eventType);\n }\n\n /**\n * Track multiple events in a single request.\n * More efficient than calling track() multiple times.\n *\n * @param events - Array of events to track\n *\n * @example\n * ```typescript\n * await census.trackBatch({\n * events: [\n * { eventType: 'page_viewed', properties: { page: '/home' } },\n * { eventType: 'button_clicked', properties: { button: 'cta' } },\n * ],\n * });\n * ```\n */\n async trackBatch(options: BatchEventsOptions): Promise<void> {\n if (!options.events || options.events.length === 0) {\n throw new Error('Census: at least one event is required');\n }\n\n if (options.events.length > 100) {\n throw new Error('Census: maximum 100 events per batch');\n }\n\n const events = options.events.map((event) => ({\n eventType: event.eventType,\n userId: this.currentUserId,\n articleId: event.articleId,\n featureId: event.featureId,\n properties: event.properties,\n }));\n\n await this.request('/api/sdk/events', 'POST', { events });\n\n this.log('Batch events tracked:', options.events.length);\n }\n\n /**\n * Fetch available guides for the current user.\n * Returns guides that match the user's context and haven't been completed.\n *\n * @returns Guides and list of completed guide IDs\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides();\n * guides.forEach(guide => console.log(guide.name));\n * ```\n */\n async getGuides(): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<GuidesResponse>(url, 'GET');\n this.log('Fetched guides:', response.guides.length);\n return response;\n }\n\n /**\n * Fetch a single guide by slug or ID.\n *\n * @param slugOrId - Guide slug or ID\n * @returns Guide or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('onboarding-tour');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(slugOrId: string): Promise<Guide | null> {\n try {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides/${encodeURIComponent(slugOrId)}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<{ guide: Guide }>(url, 'GET');\n this.log('Fetched guide:', slugOrId);\n return response.guide;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Track a guide analytics event.\n * Used to track user progress through guides.\n *\n * @param event - Guide analytics event\n *\n * @example\n * ```typescript\n * await census.trackGuideEvent({\n * guideId: 'guide_123',\n * eventType: 'step_completed',\n * stepId: 'step_456',\n * stepIndex: 2,\n * sessionId: 'session_789',\n * });\n * ```\n */\n async trackGuideEvent(event: GuideAnalyticsEvent): Promise<void> {\n if (!event.guideId || !event.eventType || !event.sessionId) {\n throw new Error('Census: guideId, eventType, and sessionId are required for trackGuideEvent()');\n }\n\n await this.request('/api/sdk/guides/events', 'POST', {\n guideId: event.guideId,\n eventType: event.eventType,\n stepId: event.stepId,\n stepIndex: event.stepIndex,\n pageUrl: event.pageUrl || (typeof window !== 'undefined' ? window.location.href : undefined),\n sessionId: event.sessionId,\n userId: event.userId || this.currentUserId,\n metadata: event.metadata,\n });\n\n this.log('Guide event tracked:', event.eventType, event.guideId);\n }\n\n /**\n * Mark a guide as completed for the current user.\n * Prevents the guide from showing again.\n *\n * @param guideId - ID of the guide to mark as completed\n *\n * @example\n * ```typescript\n * await census.markGuideCompleted('guide_123');\n * ```\n */\n async markGuideCompleted(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for markGuideCompleted()');\n }\n\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before marking guides complete. Call identify() first.');\n }\n\n await this.request('/api/sdk/guides/complete', 'POST', {\n guideId,\n userId: this.currentUserId,\n });\n\n this.log('Guide marked completed:', guideId);\n }\n\n /**\n * Get the current identified user ID\n */\n getCurrentUserId(): string | null {\n return this.currentUserId;\n }\n\n /**\n * Check if a user is currently identified\n */\n isIdentified(): boolean {\n return this.currentUserId !== null;\n }\n\n /**\n * Make an API request\n */\n private async request<T>(path: string, method: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'X-Census-Key': this.apiKey,\n };\n\n if (body) {\n headers['Content-Type'] = 'application/json';\n }\n\n this.log(`${method} ${path}`, body);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n // Use default error message\n }\n\n const error: CensusError = {\n error: errorMessage,\n status: response.status,\n };\n throw error;\n }\n\n return response.json();\n }\n\n /**\n * Log debug messages\n */\n private log(...args: unknown[]): void {\n if (this.debug) {\n console.log('[Census]', ...args);\n }\n }\n}\n\n/**\n * Create a new Census SDK client.\n *\n * @param config - Configuration options\n * @returns Census client instance\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({\n * apiKey: 'cs_live_your_key_here',\n * debug: true, // Enable debug logging\n * });\n * ```\n */\nexport function createCensus(config: CensusConfig): CensusClient {\n return new CensusClient(config);\n}\n","import { createContext, useContext, useEffect, useMemo, useState, useCallback } from 'react';\nimport { createCensus, CensusClient } from '../client';\nimport type { CensusProviderProps, CensusTheme, UserIdentity } from '../types';\n\n/**\n * Context value for the Census provider\n */\ninterface CensusContextValue {\n client: CensusClient;\n theme: CensusTheme;\n isReady: boolean;\n isIdentified: boolean;\n}\n\nconst CensusContext = createContext<CensusContextValue | null>(null);\n\n/**\n * Provider component for the Census SDK.\n * Wrap your app with this to use Census hooks and components.\n *\n * @example\n * ```tsx\n * import { CensusProvider } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <CensusProvider\n * apiKey=\"cs_live_xxx\"\n * user={{ userId: 'user_123', email: 'user@example.com' }}\n * >\n * <YourApp />\n * </CensusProvider>\n * );\n * }\n * ```\n */\nexport function CensusProvider({\n apiKey,\n baseUrl,\n debug,\n user,\n theme = {},\n children,\n}: CensusProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const [isIdentified, setIsIdentified] = useState(false);\n\n const client = useMemo(() => {\n return createCensus({ apiKey, baseUrl, debug });\n }, [apiKey, baseUrl, debug]);\n\n // Automatically identify user if provided\n useEffect(() => {\n if (user) {\n client\n .identify(user)\n .then(() => {\n setIsIdentified(true);\n setIsReady(true);\n })\n .catch((error) => {\n const errorMessage = error?.error || error?.message || JSON.stringify(error);\n console.error('[Census] Failed to identify user:', errorMessage);\n setIsReady(true);\n });\n } else {\n setIsReady(true);\n }\n }, [client, user]);\n\n const value: CensusContextValue = useMemo(\n () => ({\n client,\n theme,\n isReady,\n isIdentified,\n }),\n [client, theme, isReady, isIdentified]\n );\n\n return <CensusContext.Provider value={value}>{children}</CensusContext.Provider>;\n}\n\n/**\n * Hook to access the Census client directly.\n *\n * @returns The Census client instance\n * @throws If used outside of CensusProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const census = useCensus();\n *\n * const handleClick = async () => {\n * await census.track('button_clicked');\n * };\n *\n * return <button onClick={handleClick}>Click me</button>;\n * }\n * ```\n */\nexport function useCensus(): CensusClient {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensus must be used within a CensusProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to access the Census context (client, theme, and state).\n *\n * @returns The full Census context\n * @throws If used outside of CensusProvider\n */\nexport function useCensusContext(): CensusContextValue {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensusContext must be used within a CensusProvider');\n }\n return context;\n}\n\n/**\n * Hook to identify a user.\n *\n * @returns Object with identify function and state\n *\n * @example\n * ```tsx\n * function LoginHandler() {\n * const { identify, isIdentifying } = useIdentify();\n *\n * const handleLogin = async (user) => {\n * await identify({\n * userId: user.id,\n * email: user.email,\n * name: user.name,\n * });\n * };\n * }\n * ```\n */\nexport function useIdentify() {\n const { client } = useCensusContext();\n const [isIdentifying, setIsIdentifying] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const identify = useCallback(\n async (user: UserIdentity) => {\n setIsIdentifying(true);\n setError(null);\n try {\n await client.identify(user);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to identify user'));\n throw err;\n } finally {\n setIsIdentifying(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n client.reset();\n }, [client]);\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n RequestsSettings,\n FeatureGroup,\n} from '../types';\n\n/**\n * Hook for submitting feedback.\n *\n * @returns Object with submit function and state\n *\n * @example\n * ```tsx\n * function FeedbackForm() {\n * const { submitFeedback, isSubmitting, isSuccess, error } = useFeedback();\n *\n * const handleSubmit = async (message: string) => {\n * await submitFeedback({\n * type: 'feedback',\n * message,\n * });\n * };\n *\n * return (\n * <form onSubmit={...}>\n * {isSuccess && <p>Thanks for your feedback!</p>}\n * {error && <p>Error: {error.message}</p>}\n * <button disabled={isSubmitting}>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useFeedback() {\n const { client } = useCensusContext();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [feedbackId, setFeedbackId] = useState<string | null>(null);\n\n const submitFeedback = useCallback(\n async (options: FeedbackOptions) => {\n setIsSubmitting(true);\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n\n try {\n const result = await client.submitFeedback(options);\n setFeedbackId(result.feedbackId);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to submit feedback');\n setError(error);\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n }, []);\n\n return {\n submitFeedback,\n reset,\n isSubmitting,\n isSuccess,\n error,\n feedbackId,\n };\n}\n\n/**\n * Hook for fetching articles from the knowledge base.\n *\n * @param options - Query options (optional)\n * @returns Object with articles data and loading state\n *\n * @example\n * ```tsx\n * function ArticleList() {\n * const { articles, isLoading, error, refetch } = useArticles();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {articles.map(article => (\n * <li key={article.id}>{article.title}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useArticles(options?: ArticlesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<ArticlesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticles = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticles(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch articles'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.category, options?.search, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticles();\n }\n }, [isReady, fetchArticles]);\n\n return {\n articles: data?.articles || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchArticles,\n };\n}\n\n/**\n * Hook for fetching a single article.\n *\n * @param slugOrId - Article slug or ID\n * @returns Object with article data and loading state\n *\n * @example\n * ```tsx\n * function ArticlePage({ slug }) {\n * const { article, isLoading, error } = useArticle(slug);\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n * if (!article) return <p>Article not found</p>;\n *\n * return (\n * <article>\n * <h1>{article.title}</h1>\n * <div dangerouslySetInnerHTML={{ __html: article.content_html }} />\n * </article>\n * );\n * }\n * ```\n */\nexport function useArticle(slugOrId: string) {\n const { client, isReady } = useCensusContext();\n const [article, setArticle] = useState<Article | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticle = useCallback(async () => {\n if (!slugOrId) {\n setArticle(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticle(slugOrId);\n setArticle(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch article'));\n } finally {\n setIsLoading(false);\n }\n }, [client, slugOrId]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticle();\n }\n }, [isReady, fetchArticle]);\n\n return {\n article,\n isLoading,\n error,\n refetch: fetchArticle,\n };\n}\n\nconst defaultSettings: RequestsSettings = {\n feedbackVisibility: 'own',\n allowVoting: false,\n allowRequestCreation: true,\n};\n\n/**\n * Hook for fetching the current user's submitted requests.\n *\n * @param options - Query options (optional)\n * @returns Object with requests data and loading state\n *\n * @example\n * ```tsx\n * function MyRequests() {\n * const { requests, isLoading, error, refetch, settings } = useRequests();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {requests.map(req => (\n * <li key={req.id}>{req.message} - {req.status}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useRequests(options?: RequestsOptions) {\n const { client, isReady, isIdentified } = useCensusContext();\n const [data, setData] = useState<RequestsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRequests = useCallback(async () => {\n if (!isIdentified) {\n setData(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getRequests(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch requests'));\n } finally {\n setIsLoading(false);\n }\n }, [client, isIdentified, options?.status, options?.type, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n if (isIdentified) {\n fetchRequests();\n } else {\n // Not identified - stop loading\n setIsLoading(false);\n }\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n settings: data?.settings || defaultSettings,\n isLoading,\n error,\n refetch: fetchRequests,\n };\n}\n\n/**\n * Hook for voting on requests.\n *\n * @returns Object with vote function and loading state\n *\n * @example\n * ```tsx\n * function VoteButton({ feedbackId }: { feedbackId: string }) {\n * const { vote, isVoting } = useVote();\n *\n * const handleVote = async () => {\n * const result = await vote(feedbackId);\n * console.log('Voted:', result.action); // 'added' or 'removed'\n * };\n *\n * return (\n * <button onClick={handleVote} disabled={isVoting}>\n * Vote\n * </button>\n * );\n * }\n * ```\n */\nexport function useVote() {\n const { client } = useCensusContext();\n const [isVoting, setIsVoting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const vote = useCallback(\n async (feedbackId: string) => {\n setIsVoting(true);\n setError(null);\n\n try {\n const result = await client.vote(feedbackId);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to vote');\n setError(error);\n throw error;\n } finally {\n setIsVoting(false);\n }\n },\n [client]\n );\n\n return {\n vote,\n isVoting,\n error,\n };\n}\n\n/**\n * Hook for tracking events.\n *\n * @returns Object with track function\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { track } = useTrack();\n *\n * useEffect(() => {\n * track('page_viewed', { page: 'home' });\n * }, []);\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTrack() {\n const { client } = useCensusContext();\n\n const track = useCallback(\n async (eventType: string, properties?: Record<string, unknown>) => {\n await client.track(eventType, properties);\n },\n [client]\n );\n\n const trackBatch = useCallback(\n async (\n events: Array<{\n eventType: string;\n articleId?: string;\n featureId?: string;\n properties?: Record<string, unknown>;\n }>\n ) => {\n await client.trackBatch({ events });\n },\n [client]\n );\n\n return {\n track,\n trackBatch,\n };\n}\n\n/**\n * Hook for fetching feature groups with their features.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading, error } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {featureGroups.map(group => (\n * <li key={group.id}>\n * {group.name} ({group.feature_count} features)\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroup[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchFeatureGroups = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getFeatureGroups();\n setFeatureGroups(result.feature_groups);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch feature groups'));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n if (isReady) {\n fetchFeatureGroups();\n }\n }, [isReady, fetchFeatureGroups]);\n\n return {\n featureGroups,\n isLoading,\n error,\n refetch: fetchFeatureGroups,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { FeedbackButtonProps, FeedbackType, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n button: {\n position: 'fixed' as const,\n padding: '12px 20px',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n fontWeight: '500' as const,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n },\n modal: {\n position: 'fixed' as const,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 10000,\n },\n modalContent: {\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n width: '100%',\n maxWidth: '400px',\n margin: '16px',\n boxShadow: '0 20px 50px rgba(0, 0, 0, 0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n input: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '16px',\n minHeight: '100px',\n resize: 'vertical' as const,\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n submitButton: {\n width: '100%',\n padding: '12px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500' as const,\n transition: 'opacity 0.2s',\n },\n typeButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n};\n\nconst positionStyles = {\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n};\n\nconst feedbackTypeLabels: Record<FeedbackType, string> = {\n feedback: 'General Feedback',\n bug_report: 'Bug Report',\n feature_request: 'Feature Request',\n article_rating: 'Article Rating',\n};\n\nconst feedbackTypeEmojis: Record<FeedbackType, string> = {\n feedback: '💬',\n bug_report: '🐛',\n feature_request: '💡',\n article_rating: '⭐',\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Floating feedback button component.\n * Displays a button that opens a modal for submitting feedback.\n *\n * @example\n * ```tsx\n * import { FeedbackButton } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <>\n * <YourApp />\n * <FeedbackButton\n * position=\"bottom-right\"\n * text=\"Send Feedback\"\n * allowedTypes={['feedback', 'bug_report', 'feature_request']}\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function FeedbackButton({\n position = 'bottom-right',\n text = 'Feedback',\n allowedTypes = ['feedback', 'bug_report', 'feature_request'],\n theme: themeProp,\n onSubmit,\n onError,\n children,\n}: FeedbackButtonProps) {\n const { theme: contextTheme } = useCensusContext();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedType, setSelectedType] = useState<FeedbackType>(allowedTypes[0]);\n const [message, setMessage] = useState('');\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n reset();\n }, [reset]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setMessage('');\n setSelectedType(allowedTypes[0]);\n }, [allowedTypes]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n const feedbackData = {\n type: selectedType,\n message,\n };\n\n try {\n await submitFeedback(feedbackData);\n onSubmit?.(feedbackData);\n // Close after a short delay to show success\n setTimeout(handleClose, 1500);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error('Failed to submit feedback'));\n }\n },\n [selectedType, message, submitFeedback, onSubmit, onError, handleClose]\n );\n\n // Custom trigger\n if (children) {\n return (\n <>\n <div onClick={handleOpen} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n }\n\n return (\n <>\n <button\n onClick={handleOpen}\n style={{\n ...defaultStyles.button,\n ...positionStyles[position],\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n borderRadius: themeStyles.borderRadius,\n fontFamily: themeStyles.fontFamily,\n }}\n aria-label=\"Open feedback form\"\n >\n {text}\n </button>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n}\n\ninterface FeedbackModalProps {\n isOpen: boolean;\n onClose: () => void;\n selectedType: FeedbackType;\n onTypeChange: (type: FeedbackType) => void;\n allowedTypes: FeedbackType[];\n message: string;\n onMessageChange: (message: string) => void;\n onSubmit: (e: React.FormEvent) => void;\n isSubmitting: boolean;\n isSuccess: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n}\n\nfunction FeedbackModal({\n isOpen,\n onClose,\n selectedType,\n onTypeChange,\n allowedTypes,\n message,\n onMessageChange,\n onSubmit,\n isSubmitting,\n isSuccess,\n themeStyles,\n}: FeedbackModalProps) {\n if (!isOpen) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n textAlign: 'center',\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>🎉</div>\n <h3 style={{ margin: '0 0 8px 0', color: themeStyles.textColor }}>\n Thanks for your feedback!\n </h3>\n <p style={{ margin: 0, color: '#666' }}>We appreciate you taking the time to share.</p>\n </div>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '20px',\n }}\n >\n <h3 style={{ margin: 0, color: themeStyles.textColor }}>Send Feedback</h3>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '24px',\n cursor: 'pointer',\n color: '#999',\n padding: '0',\n lineHeight: '1',\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Feedback type selection */}\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n What kind of feedback?\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap' }}>\n {allowedTypes.map((type) => (\n <button\n key={type}\n type=\"button\"\n onClick={() => onTypeChange(type)}\n style={{\n ...defaultStyles.typeButton,\n backgroundColor: selectedType === type ? themeStyles.primaryColor : 'white',\n color: selectedType === type ? 'white' : themeStyles.textColor,\n borderColor: selectedType === type ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {feedbackTypeEmojis[type]} {feedbackTypeLabels[type]}\n </button>\n ))}\n </div>\n </div>\n\n {/* Message input */}\n <div>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n Your message\n </label>\n <textarea\n value={message}\n onChange={(e) => onMessageChange(e.target.value)}\n placeholder={\n selectedType === 'bug_report'\n ? 'Describe the bug and steps to reproduce...'\n : selectedType === 'feature_request'\n ? 'Describe the feature you would like...'\n : 'Share your thoughts...'\n }\n style={defaultStyles.textarea}\n required\n />\n </div>\n\n <button\n type=\"submit\"\n disabled={isSubmitting || !message.trim()}\n style={{\n ...defaultStyles.submitButton,\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n opacity: isSubmitting || !message.trim() ? 0.6 : 1,\n cursor: isSubmitting || !message.trim() ? 'not-allowed' : 'pointer',\n }}\n >\n {isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </form>\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useArticles, useArticle } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { KnowledgeBaseProps, Article, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n maxWidth: '800px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n fontSize: '15px',\n marginBottom: '24px',\n boxSizing: 'border-box' as const,\n },\n categoryButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '20px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n articleCard: {\n padding: '20px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'box-shadow 0.2s, border-color 0.2s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: '600' as const,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#666',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: '12px',\n color: '#999',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#666',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '8px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Embeddable knowledge base component.\n * Displays a searchable list of articles with full article view.\n *\n * @example\n * ```tsx\n * import { KnowledgeBase } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <div className=\"help-container\">\n * <h1>Help Center</h1>\n * <KnowledgeBase\n * showSearch={true}\n * showCategories={true}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function KnowledgeBase({\n showSearch = true,\n showCategories = true,\n defaultCategory,\n theme: themeProp,\n className,\n onArticleView,\n}: KnowledgeBaseProps) {\n const { theme: contextTheme } = useCensusContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(defaultCategory);\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n category: selectedCategory,\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Extract unique categories\n const categories = useMemo(() => {\n const cats = new Set<string>();\n articles.forEach((article) => {\n if (article.category) {\n cats.add(article.category);\n }\n });\n return Array.from(cats).sort();\n }, [articles]);\n\n const handleArticleClick = (article: Article) => {\n setSelectedArticleSlug(article.slug);\n onArticleView?.(article);\n };\n\n const handleBack = () => {\n setSelectedArticleSlug(null);\n };\n\n // Article detail view\n if (selectedArticleSlug) {\n if (isLoadingArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <div style={defaultStyles.loading}>Loading article...</div>\n </div>\n );\n }\n\n if (articleError) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article. Please try again.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.empty}>Article not found.</div>\n </div>\n );\n }\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 16px 0', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#666', marginBottom: '24px' }}>\n {selectedArticle.read_time_minutes} min read\n </div>\n )}\n {selectedArticle.content_html ? (\n <div\n style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}\n dangerouslySetInnerHTML={{ __html: selectedArticle.content_html }}\n />\n ) : (\n <div style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}>\n {typeof selectedArticle.content === 'string'\n ? selectedArticle.content\n : 'No content available.'}\n </div>\n )}\n </article>\n </div>\n );\n }\n\n // Articles list view\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Search */}\n {showSearch && (\n <input\n type=\"text\"\n placeholder=\"Search articles...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={defaultStyles.searchInput}\n />\n )}\n\n {/* Categories */}\n {showCategories && categories.length > 0 && (\n <div style={{ marginBottom: '24px' }}>\n <button\n onClick={() => setSelectedCategory(undefined)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: !selectedCategory ? themeStyles.primaryColor : 'white',\n color: !selectedCategory ? 'white' : themeStyles.textColor,\n borderColor: !selectedCategory ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n All\n </button>\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setSelectedCategory(category)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: selectedCategory === category ? themeStyles.primaryColor : 'white',\n color: selectedCategory === category ? 'white' : themeStyles.textColor,\n borderColor: selectedCategory === category ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Loading */}\n {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {/* Error */}\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {/* Empty state */}\n {!isLoadingArticles && !articlesError && articles.length === 0 && (\n <div style={defaultStyles.empty}>\n {searchQuery\n ? `No articles found for \"${searchQuery}\"`\n : 'No articles available yet.'}\n </div>\n )}\n\n {/* Articles list */}\n {!isLoadingArticles && !articlesError && articles.length > 0 && (\n <div>\n {articles.map((article) => (\n <div\n key={article.id}\n onClick={() => handleArticleClick(article)}\n style={defaultStyles.articleCard}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleArticleClick(article);\n }\n }}\n >\n <h3 style={{ ...defaultStyles.articleTitle, color: themeStyles.textColor }}>\n {article.title}\n </h3>\n {article.seo_description && (\n <p style={defaultStyles.articleDescription}>{article.seo_description}</p>\n )}\n <div style={defaultStyles.articleMeta}>\n {article.category && <span>{article.category}</span>}\n {article.read_time_minutes && <span>{article.read_time_minutes} min read</span>}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRequests, useVote, useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { RequestsProps, Request, FeedbackType } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n list: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n },\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n },\n cardHover: {\n borderColor: '#d1d5db',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n marginBottom: '8px',\n },\n badges: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n message: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n meta: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n fontSize: '12px',\n color: '#6b7280',\n },\n empty: {\n textAlign: 'center' as const,\n padding: '32px 16px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 12px',\n color: '#d1d5db',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#6b7280',\n },\n error: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#dc2626',\n },\n voteButton: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n minWidth: '48px',\n transition: 'all 0.15s',\n },\n voteButtonActive: {\n backgroundColor: '#dbeafe',\n borderColor: '#2563eb',\n color: '#2563eb',\n },\n voteCount: {\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n },\n cardWithVote: {\n display: 'flex',\n gap: '12px',\n },\n cardContent: {\n flex: 1,\n },\n form: {\n marginBottom: '16px',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n border: '1px solid #e5e7eb',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n typeButtonActive: {\n backgroundColor: '#111827',\n borderColor: '#111827',\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n },\n successMessage: {\n padding: '12px',\n backgroundColor: '#d1fae5',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n },\n ownBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n marginLeft: '6px',\n },\n};\n\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n/**\n * Requests component for displaying user's submitted feedback and requests.\n *\n * @example\n * ```tsx\n * import { Requests } from '@census-ai/census-sdk/react';\n *\n * function MyRequestsPage() {\n * return (\n * <div>\n * <h1>My Requests</h1>\n * <Requests onRequestClick={(req) => console.log('Clicked:', req)} />\n * </div>\n * );\n * }\n * ```\n */\nexport function Requests({\n status,\n type,\n limit = 50,\n className,\n showEmptyState = true,\n onRequestClick,\n}: RequestsProps) {\n const { isIdentified } = useCensusContext();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const [localVotes, setLocalVotes] = useState<Record<string, { count: number; hasVoted: boolean }>>({});\n\n const { requests, isLoading, error, refetch, settings } = useRequests({\n status,\n type,\n limit,\n });\n\n const { vote, isVoting } = useVote();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\n );\n\n const handleVote = useCallback(\n async (feedbackId: string, currentCount: number, currentHasVoted: boolean) => {\n if (isVoting) return;\n\n // Optimistic update\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentHasVoted ? currentCount - 1 : currentCount + 1,\n hasVoted: !currentHasVoted,\n },\n }));\n\n try {\n const result = await vote(feedbackId);\n // Update with actual result\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: result.vote_count,\n hasVoted: result.user_has_voted,\n },\n }));\n } catch {\n // Revert on error\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentCount,\n hasVoted: currentHasVoted,\n },\n }));\n }\n },\n [vote, isVoting]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n // Refetch after a short delay to allow DB to update\n setTimeout(() => {\n refetch();\n reset();\n }, 500);\n } catch {\n // Error is handled by useFeedback hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetch, reset]\n );\n\n const getVoteInfo = (request: Request) => {\n const local = localVotes[request.id];\n return {\n count: local?.count ?? request.vote_count,\n hasVoted: local?.hasVoted ?? request.user_has_voted,\n };\n };\n\n if (!isIdentified) {\n return showEmptyState ? (\n <div style={defaultStyles.empty}>\n <p>Please sign in to view your requests.</p>\n </div>\n ) : null;\n }\n\n if (isLoading) {\n return (\n <div style={defaultStyles.loading}>\n <p>Loading requests...</p>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>Failed to load requests. <button onClick={refetch} style={{ color: 'inherit', textDecoration: 'underline', background: 'none', border: 'none', cursor: 'pointer' }}>Try again</button></p>\n </div>\n );\n }\n\n // Request creation form component\n const renderForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button\n onClick={() => setShowForm(true)}\n style={{\n ...defaultStyles.submitButton,\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={defaultStyles.form}>\n <div style={defaultStyles.formHeader}>\n <p style={defaultStyles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280' }}\n >\n ✕\n </button>\n </div>\n <div style={defaultStyles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...defaultStyles.typeButton,\n ...(formType === t.value ? defaultStyles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={defaultStyles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{\n ...defaultStyles.submitButton,\n opacity: isSubmitting ? 0.6 : 1,\n }}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n if (requests.length === 0 && showEmptyState) {\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <div style={defaultStyles.empty}>\n <svg\n style={defaultStyles.emptyIcon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\"\n />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>No requests yet</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : 'When you submit feedback, bug reports, or feature requests, they\\'ll appear here.'}\n </p>\n </div>\n </div>\n );\n }\n\n const canVote = settings.allowVoting && settings.feedbackVisibility !== 'own';\n\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <ul style={defaultStyles.list}>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n const isHovered = hoveredId === request.id;\n const voteInfo = getVoteInfo(request);\n\n return (\n <li\n key={request.id}\n style={{\n ...defaultStyles.card,\n ...(isHovered ? defaultStyles.cardHover : {}),\n }}\n onMouseEnter={() => setHoveredId(request.id)}\n onMouseLeave={() => setHoveredId(null)}\n >\n <div style={canVote ? defaultStyles.cardWithVote : undefined}>\n {canVote && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleVote(request.id, voteInfo.count, voteInfo.hasVoted);\n }}\n disabled={isVoting}\n style={{\n ...defaultStyles.voteButton,\n ...(voteInfo.hasVoted ? defaultStyles.voteButtonActive : {}),\n }}\n title={voteInfo.hasVoted ? 'Remove vote' : 'Upvote this request'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill={voteInfo.hasVoted ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n <span style={{\n ...defaultStyles.voteCount,\n ...(voteInfo.hasVoted ? { color: '#2563eb' } : {}),\n }}>\n {voteInfo.count}\n </span>\n </button>\n )}\n <div\n style={canVote ? defaultStyles.cardContent : undefined}\n onClick={() => handleRequestClick(request)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleRequestClick(request);\n }\n }}\n >\n <div style={defaultStyles.header}>\n <div style={defaultStyles.badges}>\n <span\n style={{\n ...defaultStyles.badge,\n color: typeInfo.color,\n backgroundColor: typeInfo.bg,\n }}\n >\n {typeInfo.label}\n </span>\n <span\n style={{\n ...defaultStyles.badge,\n color: statusInfo.color,\n backgroundColor: statusInfo.bg,\n }}\n >\n {statusInfo.label}\n </span>\n {request.is_own && (\n <span style={defaultStyles.ownBadge}>You</span>\n )}\n </div>\n </div>\n <p style={defaultStyles.message}>\n {request.message || 'No message provided'}\n </p>\n <div style={defaultStyles.meta}>\n <span>{formatDate(request.created_at)}</span>\n {!canVote && voteInfo.count > 0 && (\n <span>{voteInfo.count} vote{voteInfo.count !== 1 ? 's' : ''}</span>\n )}\n {request.page_url && (\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '200px' }}>\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { useArticles, useArticle, useRequests, useFeedback, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { Article, FeedbackType } from '../../types';\n\nexport type HelpCenterTab = 'articles' | 'requests';\nexport type HelpCenterTheme = 'light' | 'dark' | 'auto';\n\nexport interface HelpCenterProps {\n tabs?: HelpCenterTab[];\n defaultTab?: HelpCenterTab;\n tabLabels?: Partial<Record<HelpCenterTab, string>>;\n showSearch?: boolean;\n className?: string;\n /** Theme mode: 'light', 'dark', or 'auto' (inherits from system/parent) */\n theme?: HelpCenterTheme;\n}\n\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Documentation',\n requests: 'My Requests',\n};\n\nconst feedbackTypeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n return new Date(dateString).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n// Icons as inline SVGs\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst BookIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst ArrowLeftIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst LayersIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\" />\n </svg>\n);\n\nconst MessageIcon = () => (\n <svg width=\"48\" height=\"48\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style={{ animation: 'spin 1s linear infinite' }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\n// Theme definitions\nconst themes = {\n light: {\n primary: '#c45a2c',\n primaryHover: '#a84a24',\n primaryLight: 'rgba(196, 90, 44, 0.08)',\n primaryLightHover: 'rgba(196, 90, 44, 0.15)',\n background: 'transparent',\n surface: '#ffffff',\n surfaceHover: '#fafafa',\n border: 'rgba(0, 0, 0, 0.08)',\n borderHover: 'rgba(196, 90, 44, 0.25)',\n text: '#1a1a1a',\n textSecondary: '#525252',\n textMuted: '#737373',\n textLight: '#a3a3a3',\n },\n dark: {\n primary: '#e07347',\n primaryHover: '#f08a5d',\n primaryLight: 'rgba(224, 115, 71, 0.12)',\n primaryLightHover: 'rgba(224, 115, 71, 0.2)',\n background: 'transparent',\n surface: 'rgba(255, 255, 255, 0.03)',\n surfaceHover: 'rgba(255, 255, 255, 0.06)',\n border: 'rgba(255, 255, 255, 0.08)',\n borderHover: 'rgba(224, 115, 71, 0.35)',\n text: '#fafafa',\n textSecondary: '#d4d4d4',\n textMuted: '#a3a3a3',\n textLight: '#737373',\n },\n};\n\ntype ThemeColors = typeof themes.light;\n\n// Create styles dynamically based on theme\nconst createStyles = (t: ThemeColors) => ({\n container: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n minHeight: '400px',\n color: t.text,\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: '220px 1fr',\n gap: '40px',\n },\n sidebar: {\n position: 'sticky' as const,\n top: '24px',\n height: 'fit-content',\n },\n main: {\n minWidth: 0,\n },\n tabs: {\n display: 'flex',\n borderBottom: `1px solid ${t.border}`,\n marginBottom: '28px',\n gap: '0',\n },\n tab: {\n padding: '10px 20px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderBottom: '2px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.15s',\n backgroundColor: 'transparent',\n color: t.textMuted,\n marginBottom: '-1px',\n },\n tabActive: {\n color: t.primary,\n borderBottom: `2px solid ${t.primary}`,\n },\n searchContainer: {\n position: 'relative' as const,\n marginBottom: '20px',\n },\n searchIcon: {\n position: 'absolute' as const,\n left: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: t.textLight,\n },\n searchInput: {\n width: '100%',\n padding: '8px 10px 8px 32px',\n fontSize: '13px',\n border: `1px solid ${t.border}`,\n borderRadius: '6px',\n outline: 'none',\n backgroundColor: 'transparent',\n color: t.text,\n boxSizing: 'border-box' as const,\n },\n sectionTitle: {\n fontSize: '10px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: t.textLight,\n marginBottom: '8px',\n marginTop: '20px',\n },\n navList: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n },\n navItem: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '6px 10px',\n fontSize: '13px',\n color: t.textSecondary,\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n textAlign: 'left' as const,\n transition: 'all 0.15s',\n },\n navItemActive: {\n backgroundColor: t.surfaceHover,\n color: t.text,\n fontWeight: 500,\n },\n subNav: {\n marginLeft: '20px',\n marginTop: '2px',\n paddingLeft: '10px',\n borderLeft: `1px solid ${t.border}`,\n },\n articleGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: '12px',\n },\n articleCard: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '14px',\n border: `1px solid ${t.border}`,\n borderRadius: '8px',\n backgroundColor: t.surface,\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n textAlign: 'left' as const,\n },\n articleIcon: {\n flexShrink: 0,\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: t.primaryLight,\n borderRadius: '8px',\n color: t.primary,\n transition: 'background-color 0.2s',\n },\n articleContent: {\n flex: 1,\n minWidth: 0,\n },\n articleTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: t.text,\n margin: 0,\n lineHeight: 1.4,\n },\n articleDesc: {\n fontSize: '12px',\n color: t.textMuted,\n margin: '4px 0 0',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n lineHeight: 1.5,\n },\n articleMeta: {\n fontSize: '11px',\n color: t.textLight,\n marginTop: '6px',\n },\n articleChevron: {\n flexShrink: 0,\n color: t.textLight,\n transition: 'color 0.2s',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 0',\n fontSize: '13px',\n color: t.textMuted,\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n marginBottom: '20px',\n transition: 'color 0.15s',\n },\n articleDetail: {\n maxWidth: '720px',\n },\n articleDetailTitle: {\n fontSize: '28px',\n fontWeight: 600,\n color: t.text,\n margin: 0,\n lineHeight: 1.3,\n },\n articleDetailMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: t.textMuted,\n marginTop: '10px',\n },\n articleDetailContent: {\n marginTop: '28px',\n fontSize: '15px',\n lineHeight: 1.7,\n color: t.textSecondary,\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '48px 24px',\n color: t.textMuted,\n },\n emptyIcon: {\n color: t.textLight,\n marginBottom: '12px',\n opacity: 0.5,\n },\n emptyTitle: {\n fontSize: '16px',\n fontWeight: 500,\n color: t.text,\n margin: '0 0 6px',\n },\n emptyText: {\n fontSize: '13px',\n margin: 0,\n color: t.textMuted,\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '10px',\n padding: '48px',\n color: t.textMuted,\n fontSize: '13px',\n },\n // Request styles\n requestCard: {\n border: `1px solid ${t.border}`,\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: t.surface,\n marginBottom: '10px',\n transition: 'border-color 0.2s',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n marginBottom: '10px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '3px 8px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '14px',\n color: t.text,\n margin: 0,\n lineHeight: 1.5,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: t.textMuted,\n },\n form: {\n padding: '16px',\n backgroundColor: t.surface,\n borderRadius: '8px',\n border: `1px solid ${t.border}`,\n marginBottom: '20px',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: t.text,\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '6px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${t.border}`,\n backgroundColor: 'transparent',\n color: t.textSecondary,\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n fontWeight: 500,\n },\n typeButtonActive: {\n backgroundColor: t.primary,\n borderColor: t.primary,\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: `1px solid ${t.border}`,\n fontSize: '13px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n backgroundColor: 'transparent',\n color: t.text,\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: t.primary,\n color: '#ffffff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n newRequestButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: t.primary,\n color: '#ffffff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n marginBottom: '20px',\n transition: 'background-color 0.15s',\n },\n successMessage: {\n padding: '12px 14px',\n backgroundColor: 'rgba(5, 150, 105, 0.1)',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '13px',\n marginBottom: '12px',\n fontWeight: 500,\n },\n});\n\n// Create dynamic CSS for hover states\nconst createHoverStyles = (t: ThemeColors, isDark: boolean) => `\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .census-hc .census-article-card:hover {\n border-color: ${t.borderHover} !important;\n box-shadow: ${isDark ? '0 4px 12px rgba(0, 0, 0, 0.3)' : '0 4px 12px rgba(0, 0, 0, 0.06)'};\n }\n\n .census-hc .census-article-card:hover .census-article-icon {\n background-color: ${t.primaryLightHover} !important;\n }\n\n .census-hc .census-article-card:hover .census-article-chevron {\n color: ${t.textSecondary} !important;\n }\n\n .census-hc .census-nav-item:hover {\n background-color: ${t.surfaceHover} !important;\n color: ${t.text} !important;\n }\n\n .census-hc .census-back-btn:hover {\n color: ${t.text} !important;\n }\n\n .census-hc .census-submit-btn:hover {\n background-color: ${t.primaryHover} !important;\n }\n\n .census-hc .census-new-request-btn:hover {\n background-color: ${t.primaryHover} !important;\n }\n\n .census-hc .census-tab:hover {\n color: ${t.text} !important;\n }\n\n .census-hc .census-search-input:focus {\n border-color: ${t.primary} !important;\n outline: none !important;\n box-shadow: 0 0 0 1px ${t.primary} !important;\n }\n\n .census-hc .census-search-input::placeholder {\n color: ${t.textLight};\n }\n\n .census-hc .census-textarea::placeholder {\n color: ${t.textLight};\n }\n`;\n\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab = 'articles',\n tabLabels = {},\n showSearch = true,\n className,\n theme: themeProp = 'auto',\n}: HelpCenterProps) {\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(defaultTab);\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticle, setSelectedArticle] = useState<Article | null>(null);\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const [selectedFeatureId, setSelectedFeatureId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n const [systemDark, setSystemDark] = useState(false);\n\n // Detect system theme\n useEffect(() => {\n if (themeProp === 'auto') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemDark(mediaQuery.matches);\n\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n }, [themeProp]);\n\n // Resolve the actual theme\n const isDark = themeProp === 'dark' || (themeProp === 'auto' && systemDark);\n const themeColors = isDark ? themes.dark : themes.light;\n const styles = useMemo(() => createStyles(themeColors), [themeColors]);\n const hoverStyles = useMemo(() => createHoverStyles(themeColors, isDark), [themeColors, isDark]);\n\n const { isIdentified, isReady } = useCensusContext();\n const { articles, isLoading: articlesLoading } = useArticles({ search: searchQuery || undefined });\n const { article: fullArticle, isLoading: articleLoading } = useArticle(selectedArticle?.slug || '');\n const { requests, isLoading: requestsLoading, refetch: refetchRequests, settings } = useRequests({ limit: 50 });\n const { featureGroups, isLoading: groupsLoading } = useFeatureGroups();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Cmd+K keyboard shortcut\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const toggleGroup = (groupId: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupId)) {\n next.delete(groupId);\n } else {\n next.add(groupId);\n }\n return next;\n });\n };\n\n const filteredArticles = useMemo(() => {\n return articles.filter((article) => {\n const matchesFeature = !selectedFeatureId || (article as any).feature_id === selectedFeatureId;\n return matchesFeature;\n });\n }, [articles, selectedFeatureId]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n setTimeout(() => {\n refetchRequests();\n reset();\n }, 500);\n } catch {\n // Error handled by hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetchRequests, reset]\n );\n\n const renderArticleDetail = () => {\n if (articleLoading || !fullArticle) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading article...</span>\n </div>\n );\n }\n\n return (\n <div style={styles.articleDetail}>\n <button onClick={() => setSelectedArticle(null)} style={styles.backButton} className=\"census-back-btn\">\n <ArrowLeftIcon />\n Back to articles\n </button>\n\n <h1 style={styles.articleDetailTitle}>{fullArticle.title}</h1>\n {fullArticle.read_time_minutes && (\n <div style={styles.articleDetailMeta}>\n <ClockIcon />\n {fullArticle.read_time_minutes} min read\n </div>\n )}\n\n {fullArticle.content_html ? (\n <div\n style={styles.articleDetailContent}\n dangerouslySetInnerHTML={{ __html: fullArticle.content_html }}\n />\n ) : (\n <p style={{ ...styles.articleDetailContent, color: '#6b7280' }}>No content available.</p>\n )}\n </div>\n );\n };\n\n const renderArticles = () => {\n if (selectedArticle) {\n return renderArticleDetail();\n }\n\n if (articlesLoading || groupsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (filteredArticles.length === 0) {\n return (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><BookIcon /></div>\n <h3 style={styles.emptyTitle}>No articles found</h3>\n <p style={styles.emptyText}>\n {searchQuery ? `No results for \"${searchQuery}\"` : 'No documentation articles available yet.'}\n </p>\n </div>\n );\n }\n\n return (\n <div style={styles.articleGrid}>\n {filteredArticles.map((article) => (\n <button\n key={article.id}\n onClick={() => setSelectedArticle(article)}\n style={styles.articleCard}\n className=\"census-article-card\"\n >\n <div style={styles.articleIcon} className=\"census-article-icon\">\n <BookIcon />\n </div>\n <div style={styles.articleContent}>\n <h3 style={styles.articleTitle}>{article.title}</h3>\n {article.seo_description && (\n <p style={styles.articleDesc}>{article.seo_description}</p>\n )}\n {article.read_time_minutes && (\n <p style={styles.articleMeta}>{article.read_time_minutes} min read</p>\n )}\n </div>\n <span style={styles.articleChevron} className=\"census-article-chevron\">\n <ChevronRightIcon />\n </span>\n </button>\n ))}\n </div>\n );\n };\n\n const renderRequestForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={styles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button onClick={() => setShowForm(true)} style={styles.newRequestButton} className=\"census-new-request-btn\">\n <PlusIcon />\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n <div style={styles.formHeader}>\n <p style={styles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280', fontSize: '18px' }}\n >\n ×\n </button>\n </div>\n <div style={styles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...styles.typeButton,\n ...(formType === t.value ? styles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={styles.textarea}\n className=\"census-textarea\"\n required\n />\n <button\n type=\"submit\"\n style={{ ...styles.submitButton, opacity: isSubmitting ? 0.6 : 1 }}\n disabled={isSubmitting}\n className=\"census-submit-btn\"\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n const renderRequests = () => {\n // Wait for SDK to be ready before checking identification\n if (!isReady) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (!isIdentified) {\n return (\n <div style={styles.emptyState}>\n <p style={styles.emptyText}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (requestsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading requests...</span>\n </div>\n );\n }\n\n return (\n <div>\n {renderRequestForm()}\n\n {requests.length === 0 ? (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><MessageIcon /></div>\n <h3 style={styles.emptyTitle}>No requests yet</h3>\n <p style={styles.emptyText}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : \"When you submit feedback, they'll appear here.\"}\n </p>\n </div>\n ) : (\n <div>\n {requests.map((request) => {\n const typeInfo = feedbackTypeConfig[request.feedback_type] || feedbackTypeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div key={request.id} style={styles.requestCard}>\n <div style={styles.requestHeader}>\n <span style={{ ...styles.badge, color: typeInfo.color, backgroundColor: typeInfo.bg }}>\n {typeInfo.label}\n </span>\n <span style={{ ...styles.badge, color: statusInfo.color, backgroundColor: statusInfo.bg }}>\n {statusInfo.label}\n </span>\n </div>\n <p style={styles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={styles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div style={styles.container} className={`census-hc ${className || ''}`}>\n <style>{hoverStyles}</style>\n\n {/* Tabs */}\n {tabs.length > 1 && (\n <div style={styles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n ...styles.tab,\n ...(activeTab === tab ? styles.tabActive : {}),\n }}\n className={activeTab !== tab ? 'census-tab' : undefined}\n >\n {mergedLabels[tab]}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.grid}>\n {/* Sidebar */}\n <aside style={styles.sidebar}>\n {/* Search */}\n {showSearch && activeTab === 'articles' && (\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}><SearchIcon /></div>\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={styles.searchInput}\n className=\"census-search-input\"\n />\n </div>\n )}\n\n {/* Feature Groups */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <nav>\n <h3 style={styles.sectionTitle}>Features</h3>\n <ul style={styles.navList}>\n <li>\n <button\n onClick={() => setSelectedFeatureId(null)}\n style={{\n ...styles.navItem,\n ...(!selectedFeatureId ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId ? 'census-nav-item' : undefined}\n >\n All Articles\n </button>\n </li>\n {featureGroups.map((group) => (\n <li key={group.id}>\n <button\n onClick={() => toggleGroup(group.id)}\n style={styles.navItem}\n className=\"census-nav-item\"\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <LayersIcon />\n {group.name}\n </span>\n {expandedGroups.has(group.id) ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n {expandedGroups.has(group.id) && group.features.length > 0 && (\n <ul style={styles.subNav}>\n {group.features.map((feature) => (\n <li key={feature.id}>\n <button\n onClick={() => setSelectedFeatureId(feature.id)}\n style={{\n ...styles.navItem,\n padding: '6px 12px',\n fontSize: '13px',\n ...(selectedFeatureId === feature.id ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId !== feature.id ? 'census-nav-item' : undefined}\n >\n {feature.name}\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n )}\n </aside>\n\n {/* Main Content */}\n <main style={styles.main}>\n {activeTab === 'articles' && renderArticles()}\n {activeTab === 'requests' && renderRequests()}\n </main>\n </div>\n </div>\n );\n}\n"]}
|