@census-ai/census-sdk 0.4.2 → 0.4.3
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","../../src/react/components/GuideBuilder/StepEditor.tsx","../../src/react/components/GuideBuilder/ElementSelector.tsx","../../src/react/components/GuideBuilder/index.tsx","../../src/react/components/GuideRenderer/positioning.ts","../../src/react/components/GuideRenderer/Backdrop.tsx","../../src/react/components/GuideRenderer/StepButtons.tsx","../../src/react/components/GuideRenderer/StepContent.tsx","../../src/react/components/GuideRenderer/TooltipStep.tsx","../../src/react/components/GuideRenderer/ModalStep.tsx","../../src/react/components/GuideRenderer/SlideoutStep.tsx","../../src/react/components/GuideRenderer/HotspotStep.tsx","../../src/react/components/GuideRenderer/BannerStep.tsx","../../src/react/components/GuideRenderer/index.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","eventType","properties","events","event","guideId","body","stepId","stepOrder","path","method","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","err","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","feedbackId","setFeedbackId","submitFeedback","useCallback","result","reset","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","useRequests","fetchRequests","useTrack","track","trackBatch","useGuides","fetchGuides","useGuideBuilder","guide","setGuide","steps","setSteps","isSaving","setIsSaving","selectedStepId","setSelectedStepId","hasUnsavedChanges","useRef","loadGuide","loadedGuide","createGuide","newGuide","updateGuide","updatedGuide","publishGuide","unpublishGuide","deleteGuide","addStep","newStep","prev","updateStep","updatedStep","step","deleteStep","reorderSteps","newOrder","reorderedSteps","moveStepUp","currentIndex","s","index","moveStepDown","selectedStep","useGuideRenderer","activeGuide","setActiveGuide","currentStepIndex","setCurrentStepIndex","isPlaying","setIsPlaying","completedGuideIds","setCompletedGuideIds","dismissedGuideIds","setDismissedGuideIds","startGuide","startStep","nextStep","prevStep","goToStep","stepIndex","dismiss","pause","resume","trackStepView","trackGuideComplete","trackGuideDismiss","currentStep","totalSteps","isLastStep","isFirstStep","isGuideCompleted","isGuideDismissed","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","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","requests","refetch","handleRequestClick","request","typeInfo","statusInfo","isHovered","defaultTabLabels","FeatureGroupCard","group","onClick","ArticlesContent","featureId","featureName","onBack","filteredArticles","a","RequestsContent","HelpCenter","tabs","defaultTab","tabLabels","_showCategories","onTabChange","initialTab","activeTab","setActiveTab","selectedGroupId","setSelectedGroupId","selectedFeature","setSelectedFeature","isLoadingGroups","openRequestsCount","r","mergedLabels","selectedGroup","g","handleTabChange","tab","handleGroupClick","handleFeatureClick","feature","handleBackToGroups","handleBackToFeatures","showTabs","stepTypeLabels","stepTypeDescriptions","positionOptions","advanceTriggerOptions","StepEditor","onUpdate","onSelectElement","isSelectingElement","stepType","setStepType","title","setTitle","setBody","setPosition","selector","setSelector","backdrop","setBackdrop","advanceTrigger","setAdvanceTrigger","advanceDelay","setAdvanceDelay","handleSave","selectorStrategy","richContent","displayConfig","advanceConfig","needsSelector","opt","generateSelector","element","testId","parts","current","depth","maxDepth","classes","c","parent","siblings","child","testSelector","count","ElementSelector","isActive","onSelect","onCancel","ignoreSelector","zIndex","hoveredElement","setHoveredElement","highlightRect","setHighlightRect","generatedSelector","setGeneratedSelector","overlayRef","updateHighlight","handleMouseMove","target","el","handleScroll","handleClick","handleKeyDown","selectorTest","GuideBuilder","controlledIsOpen","onSave","onPublish","trigger","internalIsOpen","setInternalIsOpen","handlePublish","publishedGuide","handleAddStep","GuideBuilderModal","onAddStep","onSelectStep","onUpdateStep","onDeleteStep","onMoveStepUp","onMoveStepDown","setIsSelectingElement","handleElementSelect","_element","btn","i","getElementRect","rect","getViewport","hasSpaceForPosition","targetRect","tooltipWidth","tooltipHeight","padding","viewport","scrollX","scrollY","viewportWidth","viewportHeight","findBestPosition","positionOrder","calculatePosition","targetElement","preferredPosition","offset","containerPadding","arrowSize","finalPosition","opposite","top","left","arrowPosition","gap","minLeft","maxLeft","minTop","maxTop","originalLeft","originalTop","scrollIntoView","isAboveViewport","isBelowViewport","isLeftOfViewport","isRightOfViewport","findElement","walker","node","getSpotlightClipPath","paddedRect","Backdrop","visible","spotlightElement","spotlightPadding","dismissOnClick","opacity","clipPath","setClipPath","updateClipPath","StepButtons","buttons","onNext","onPrev","onDismiss","onCustomAction","accentColor","handleButtonClick","button","getButtonStyle","style","StepContent","textColor","showTitle","sanitizeHTML","html","allowedTags","temp","script","attr","name","TooltipStep","showProgress","globalStyle","tooltipRef","setTargetElement","isVisible","setIsVisible","backgroundColor","borderRadius","updatePosition","tooltipRect","newPosition","timer","ModalStep","width","dismissOnBackdropClick","originalOverflow","_","SlideoutStep","isAnimating","setIsAnimating","side","showBackdrop","baseStyles","HotspotStep","popoverRef","isExpanded","setIsExpanded","beaconPosition","setBeaconPosition","popoverPosition","setPopoverPosition","updateBeaconPosition","updatePopoverPosition","popoverRect","handleClickOutside","pulseKeyframes","variantStyles","BannerStep","variant","handleDismiss","hasButtons","GuideRenderer","onComplete","onStepChange","setIsActive","handleNext","handlePrev","handleCustomAction","actionName","stepProps"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n FeatureGroupsResponse,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuideStep,\n GuidesOptions,\n GuidesResponse,\n GuideAnalyticsEvent,\n CreateGuideOptions,\n UpdateGuideOptions,\n CreateGuideStepOptions,\n UpdateGuideStepOptions,\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.\n * Used by the HelpCenter component for navigation.\n *\n * @returns Feature groups with features and article counts\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 * 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 // Guide Builder Methods\n // ============================================================================\n\n /**\n * Get published guides.\n *\n * @param options - Query options\n * @returns Guides and completion status\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides({\n * url: window.location.href,\n * userId: 'user_123',\n * });\n * ```\n */\n async getGuides(options?: GuidesOptions): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (options?.projectId) params.set('project_id', options.projectId);\n if (options?.url) params.set('url', options.url);\n if (options?.userId) params.set('user_id', options.userId);\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 * Get a single guide by ID.\n *\n * @param guideId - Guide ID\n * @returns Guide with steps or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('guide_123');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(guideId: string): Promise<Guide | null> {\n try {\n const response = await this.request<{ guide: Guide }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'GET'\n );\n this.log('Fetched guide:', guideId);\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 * Create a new guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param options - Guide creation options\n * @returns Created guide\n *\n * @example\n * ```typescript\n * const guide = await census.createGuide({\n * name: 'Welcome Tour',\n * slug: 'welcome-tour',\n * description: 'Introduction to the app',\n * triggerType: 'first_visit',\n * });\n * ```\n */\n async createGuide(options: CreateGuideOptions): Promise<Guide> {\n if (!options.name || !options.slug) {\n throw new Error('Census: name and slug are required for createGuide()');\n }\n\n const response = await this.request<{ guide: Guide }>(\n '/api/sdk/guides',\n 'POST',\n {\n name: options.name,\n slug: options.slug,\n description: options.description,\n project_id: options.projectId,\n trigger_type: options.triggerType || 'manual',\n trigger_config: options.triggerConfig || {},\n theme: options.theme || {},\n allow_skip: options.allowSkip ?? true,\n show_progress: options.showProgress ?? true,\n }\n );\n\n this.log('Guide created:', response.guide.id);\n return response.guide;\n }\n\n /**\n * Update an existing guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID to update\n * @param options - Update options\n * @returns Updated guide\n *\n * @example\n * ```typescript\n * const guide = await census.updateGuide('guide_123', {\n * name: 'Updated Tour Name',\n * status: 'published',\n * });\n * ```\n */\n async updateGuide(guideId: string, options: UpdateGuideOptions): Promise<Guide> {\n if (!guideId) {\n throw new Error('Census: guideId is required for updateGuide()');\n }\n\n const body: Record<string, unknown> = {};\n if (options.name !== undefined) body.name = options.name;\n if (options.slug !== undefined) body.slug = options.slug;\n if (options.description !== undefined) body.description = options.description;\n if (options.triggerType !== undefined) body.trigger_type = options.triggerType;\n if (options.triggerConfig !== undefined) body.trigger_config = options.triggerConfig;\n if (options.theme !== undefined) body.theme = options.theme;\n if (options.allowSkip !== undefined) body.allow_skip = options.allowSkip;\n if (options.showProgress !== undefined) body.show_progress = options.showProgress;\n if (options.status !== undefined) body.status = options.status;\n\n const response = await this.request<{ guide: Guide }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'PUT',\n body\n );\n\n this.log('Guide updated:', guideId);\n return response.guide;\n }\n\n /**\n * Delete a guide.\n * Requires guides:admin scope.\n *\n * @param guideId - Guide ID to delete\n *\n * @example\n * ```typescript\n * await census.deleteGuide('guide_123');\n * ```\n */\n async deleteGuide(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for deleteGuide()');\n }\n\n await this.request(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'DELETE'\n );\n\n this.log('Guide deleted:', guideId);\n }\n\n /**\n * Get steps for a guide.\n *\n * @param guideId - Guide ID\n * @returns Array of steps\n *\n * @example\n * ```typescript\n * const steps = await census.getGuideSteps('guide_123');\n * ```\n */\n async getGuideSteps(guideId: string): Promise<GuideStep[]> {\n const response = await this.request<{ steps: GuideStep[] }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'GET'\n );\n this.log('Fetched steps for guide:', guideId);\n return response.steps;\n }\n\n /**\n * Add a step to a guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param options - Step creation options\n * @returns Created step\n *\n * @example\n * ```typescript\n * const step = await census.addGuideStep('guide_123', {\n * stepType: 'tooltip',\n * selectorStrategy: { css: '.welcome-button' },\n * richContent: {\n * title: 'Welcome!',\n * body: 'Click here to get started',\n * },\n * });\n * ```\n */\n async addGuideStep(guideId: string, options: CreateGuideStepOptions): Promise<GuideStep> {\n if (!guideId) {\n throw new Error('Census: guideId is required for addGuideStep()');\n }\n\n const response = await this.request<{ step: GuideStep }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'POST',\n {\n step_type: options.stepType || 'tooltip',\n sort_order: options.sortOrder,\n selector_strategy: options.selectorStrategy || {},\n title: options.title,\n content: options.content,\n tooltip_position: options.tooltipPosition || 'auto',\n rich_content: options.richContent || {},\n display_config: options.displayConfig || {},\n advance_config: options.advanceConfig || { trigger: 'button' },\n style_config: options.styleConfig || {},\n }\n );\n\n this.log('Step added to guide:', guideId);\n return response.step;\n }\n\n /**\n * Update a guide step.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepId - Step ID\n * @param options - Update options\n * @returns Updated step\n *\n * @example\n * ```typescript\n * const step = await census.updateGuideStep('guide_123', 'step_456', {\n * richContent: { title: 'Updated title' },\n * });\n * ```\n */\n async updateGuideStep(\n guideId: string,\n stepId: string,\n options: UpdateGuideStepOptions\n ): Promise<GuideStep> {\n if (!guideId || !stepId) {\n throw new Error('Census: guideId and stepId are required for updateGuideStep()');\n }\n\n const body: Record<string, unknown> = {};\n if (options.stepType !== undefined) body.step_type = options.stepType;\n if (options.sortOrder !== undefined) body.sort_order = options.sortOrder;\n if (options.selectorStrategy !== undefined) body.selector_strategy = options.selectorStrategy;\n if (options.title !== undefined) body.title = options.title;\n if (options.content !== undefined) body.content = options.content;\n if (options.tooltipPosition !== undefined) body.tooltip_position = options.tooltipPosition;\n if (options.richContent !== undefined) body.rich_content = options.richContent;\n if (options.displayConfig !== undefined) body.display_config = options.displayConfig;\n if (options.advanceConfig !== undefined) body.advance_config = options.advanceConfig;\n if (options.styleConfig !== undefined) body.style_config = options.styleConfig;\n\n const response = await this.request<{ step: GuideStep }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps/${encodeURIComponent(stepId)}`,\n 'PUT',\n body\n );\n\n this.log('Step updated:', stepId);\n return response.step;\n }\n\n /**\n * Delete a guide step.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepId - Step ID\n *\n * @example\n * ```typescript\n * await census.deleteGuideStep('guide_123', 'step_456');\n * ```\n */\n async deleteGuideStep(guideId: string, stepId: string): Promise<void> {\n if (!guideId || !stepId) {\n throw new Error('Census: guideId and stepId are required for deleteGuideStep()');\n }\n\n await this.request(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps/${encodeURIComponent(stepId)}`,\n 'DELETE'\n );\n\n this.log('Step deleted:', stepId);\n }\n\n /**\n * Reorder steps in a guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepOrder - Array of { id, sort_order } to define new order\n * @returns Updated steps\n *\n * @example\n * ```typescript\n * const steps = await census.reorderGuideSteps('guide_123', [\n * { id: 'step_a', sort_order: 0 },\n * { id: 'step_b', sort_order: 1 },\n * { id: 'step_c', sort_order: 2 },\n * ]);\n * ```\n */\n async reorderGuideSteps(\n guideId: string,\n stepOrder: Array<{ id: string; sort_order: number }>\n ): Promise<GuideStep[]> {\n if (!guideId) {\n throw new Error('Census: guideId is required for reorderGuideSteps()');\n }\n\n const response = await this.request<{ steps: GuideStep[] }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'PUT',\n { steps: stepOrder }\n );\n\n this.log('Steps reordered for guide:', guideId);\n return response.steps;\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 } 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 = 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\n const reset = () => {\n client.reset();\n };\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n FeatureGroupsResponse,\n RequestsOptions,\n RequestsResponse,\n Guide,\n GuideStep,\n GuidesResponse,\n CreateGuideOptions,\n UpdateGuideOptions,\n CreateGuideStepOptions,\n UpdateGuideStepOptions,\n GuidesOptions,\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\n/**\n * Hook for fetching feature groups with their features.\n * Used by the HelpCenter component for navigation.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n *\n * return (\n * <nav>\n * {featureGroups.map(group => (\n * <div key={group.id}>\n * <h3>{group.name}</h3>\n * <ul>\n * {group.features.map(feature => (\n * <li key={feature.id}>{feature.name}</li>\n * ))}\n * </ul>\n * </div>\n * ))}\n * </nav>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroupsResponse['feature_groups']>([]);\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\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 } = 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 && isIdentified) {\n fetchRequests();\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchRequests,\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// Guide Builder Hooks\n// ============================================================================\n\n/**\n * Hook for fetching guides.\n *\n * @param options - Query options (optional)\n * @returns Object with guides data and loading state\n *\n * @example\n * ```tsx\n * function GuidesList() {\n * const { guides, isLoading, completedGuides } = useGuides({\n * url: window.location.href,\n * });\n *\n * if (isLoading) return <p>Loading...</p>;\n *\n * return (\n * <ul>\n * {guides.map(guide => (\n * <li key={guide.id}>\n * {guide.name}\n * {completedGuides.includes(guide.id) && ' (completed)'}\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useGuides(options?: GuidesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<GuidesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchGuides = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getGuides(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch guides'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.projectId, options?.url, options?.userId]);\n\n useEffect(() => {\n if (isReady) {\n fetchGuides();\n }\n }, [isReady, fetchGuides]);\n\n return {\n guides: data?.guides || [],\n completedGuides: data?.completedGuides || [],\n isLoading,\n error,\n refetch: fetchGuides,\n };\n}\n\n/**\n * Hook for the Guide Builder - manages creation and editing of guides.\n *\n * @returns Object with guide builder state and actions\n *\n * @example\n * ```tsx\n * function GuideBuilderUI() {\n * const {\n * guide,\n * steps,\n * isLoading,\n * isSaving,\n * createGuide,\n * updateGuide,\n * addStep,\n * updateStep,\n * deleteStep,\n * reorderSteps,\n * publishGuide,\n * } = useGuideBuilder();\n *\n * const handleCreateGuide = async () => {\n * await createGuide({\n * name: 'My Tour',\n * slug: 'my-tour',\n * });\n * };\n *\n * return (\n * <div>\n * <button onClick={handleCreateGuide} disabled={isSaving}>\n * Create Guide\n * </button>\n * {guide && (\n * <div>\n * <h2>{guide.name}</h2>\n * <p>{steps.length} steps</p>\n * </div>\n * )}\n * </div>\n * );\n * }\n * ```\n */\nexport function useGuideBuilder() {\n const { client, isReady } = useCensusContext();\n const [guide, setGuide] = useState<Guide | null>(null);\n const [steps, setSteps] = useState<GuideStep[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [selectedStepId, setSelectedStepId] = useState<string | null>(null);\n\n // Track unsaved changes\n const hasUnsavedChanges = useRef(false);\n\n // Load a guide by ID\n const loadGuide = useCallback(\n async (guideId: string) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const loadedGuide = await client.getGuide(guideId);\n if (loadedGuide) {\n setGuide(loadedGuide);\n setSteps(loadedGuide.guide_steps || []);\n setSelectedStepId(loadedGuide.guide_steps?.[0]?.id || null);\n }\n return loadedGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load guide'));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n // Create a new guide\n const createGuide = useCallback(\n async (options: CreateGuideOptions) => {\n setIsSaving(true);\n setError(null);\n\n try {\n const newGuide = await client.createGuide(options);\n setGuide(newGuide);\n setSteps([]);\n setSelectedStepId(null);\n return newGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client]\n );\n\n // Update current guide\n const updateGuide = useCallback(\n async (options: UpdateGuideOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const updatedGuide = await client.updateGuide(guide.id, options);\n setGuide(updatedGuide);\n hasUnsavedChanges.current = false;\n return updatedGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Publish the guide\n const publishGuide = useCallback(async () => {\n return updateGuide({ status: 'published' });\n }, [updateGuide]);\n\n // Unpublish the guide\n const unpublishGuide = useCallback(async () => {\n return updateGuide({ status: 'draft' });\n }, [updateGuide]);\n\n // Delete the guide\n const deleteGuide = useCallback(async () => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n await client.deleteGuide(guide.id);\n setGuide(null);\n setSteps([]);\n setSelectedStepId(null);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n }, [client, guide]);\n\n // Add a step\n const addStep = useCallback(\n async (options: CreateGuideStepOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const newStep = await client.addGuideStep(guide.id, options);\n setSteps((prev) => [...prev, newStep]);\n setSelectedStepId(newStep.id);\n hasUnsavedChanges.current = true;\n return newStep;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to add step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Update a step\n const updateStep = useCallback(\n async (stepId: string, options: UpdateGuideStepOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const updatedStep = await client.updateGuideStep(guide.id, stepId, options);\n setSteps((prev) =>\n prev.map((step) => (step.id === stepId ? updatedStep : step))\n );\n hasUnsavedChanges.current = true;\n return updatedStep;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Delete a step\n const deleteStep = useCallback(\n async (stepId: string) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n await client.deleteGuideStep(guide.id, stepId);\n setSteps((prev) => prev.filter((step) => step.id !== stepId));\n if (selectedStepId === stepId) {\n setSelectedStepId(steps[0]?.id || null);\n }\n hasUnsavedChanges.current = true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide, selectedStepId, steps]\n );\n\n // Reorder steps\n const reorderSteps = useCallback(\n async (newOrder: Array<{ id: string; sort_order: number }>) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const reorderedSteps = await client.reorderGuideSteps(guide.id, newOrder);\n setSteps(reorderedSteps);\n hasUnsavedChanges.current = true;\n return reorderedSteps;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to reorder steps'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Move step up/down helpers\n const moveStepUp = useCallback(\n async (stepId: string) => {\n const currentIndex = steps.findIndex((s) => s.id === stepId);\n if (currentIndex <= 0) return;\n\n const newOrder = steps.map((step, index) => {\n if (index === currentIndex) {\n return { id: step.id, sort_order: currentIndex - 1 };\n }\n if (index === currentIndex - 1) {\n return { id: step.id, sort_order: currentIndex };\n }\n return { id: step.id, sort_order: index };\n });\n\n return reorderSteps(newOrder);\n },\n [steps, reorderSteps]\n );\n\n const moveStepDown = useCallback(\n async (stepId: string) => {\n const currentIndex = steps.findIndex((s) => s.id === stepId);\n if (currentIndex < 0 || currentIndex >= steps.length - 1) return;\n\n const newOrder = steps.map((step, index) => {\n if (index === currentIndex) {\n return { id: step.id, sort_order: currentIndex + 1 };\n }\n if (index === currentIndex + 1) {\n return { id: step.id, sort_order: currentIndex };\n }\n return { id: step.id, sort_order: index };\n });\n\n return reorderSteps(newOrder);\n },\n [steps, reorderSteps]\n );\n\n // Get selected step\n const selectedStep = selectedStepId\n ? steps.find((s) => s.id === selectedStepId) || null\n : null;\n\n // Reset state\n const reset = useCallback(() => {\n setGuide(null);\n setSteps([]);\n setSelectedStepId(null);\n setError(null);\n hasUnsavedChanges.current = false;\n }, []);\n\n return {\n // State\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n isReady,\n hasUnsavedChanges: hasUnsavedChanges.current,\n\n // Actions\n loadGuide,\n createGuide,\n updateGuide,\n publishGuide,\n unpublishGuide,\n deleteGuide,\n addStep,\n updateStep,\n deleteStep,\n reorderSteps,\n moveStepUp,\n moveStepDown,\n setSelectedStepId,\n reset,\n };\n}\n\n/**\n * Hook for rendering guides - manages playback state for the GuideRenderer.\n *\n * @returns Object with guide renderer state and controls\n *\n * @example\n * ```tsx\n * function GuidePlayer() {\n * const {\n * activeGuide,\n * currentStepIndex,\n * isPlaying,\n * startGuide,\n * nextStep,\n * prevStep,\n * dismiss,\n * } = useGuideRenderer();\n *\n * if (!activeGuide || !isPlaying) return null;\n *\n * return (\n * <GuideRenderer\n * guide={activeGuide}\n * onComplete={() => dismiss()}\n * onDismiss={() => dismiss()}\n * />\n * );\n * }\n * ```\n */\nexport function useGuideRenderer() {\n const { client, isReady } = useCensusContext();\n const [activeGuide, setActiveGuide] = useState<Guide | null>(null);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [isPlaying, setIsPlaying] = useState(false);\n const [completedGuideIds, setCompletedGuideIds] = useState<string[]>([]);\n const [dismissedGuideIds, setDismissedGuideIds] = useState<string[]>([]);\n\n // Start a guide\n const startGuide = useCallback((guide: Guide, startStep: number = 0) => {\n setActiveGuide(guide);\n setCurrentStepIndex(startStep);\n setIsPlaying(true);\n }, []);\n\n // Go to next step\n const nextStep = useCallback(() => {\n if (!activeGuide) return;\n\n const steps = activeGuide.guide_steps || [];\n if (currentStepIndex < steps.length - 1) {\n setCurrentStepIndex((prev) => prev + 1);\n } else {\n // Guide completed\n setCompletedGuideIds((prev) => [...prev, activeGuide.id]);\n setIsPlaying(false);\n setActiveGuide(null);\n }\n }, [activeGuide, currentStepIndex]);\n\n // Go to previous step\n const prevStep = useCallback(() => {\n if (currentStepIndex > 0) {\n setCurrentStepIndex((prev) => prev - 1);\n }\n }, [currentStepIndex]);\n\n // Go to a specific step\n const goToStep = useCallback((stepIndex: number) => {\n if (!activeGuide) return;\n\n const steps = activeGuide.guide_steps || [];\n if (stepIndex >= 0 && stepIndex < steps.length) {\n setCurrentStepIndex(stepIndex);\n }\n }, [activeGuide]);\n\n // Dismiss the guide\n const dismiss = useCallback(() => {\n if (activeGuide) {\n setDismissedGuideIds((prev) => [...prev, activeGuide.id]);\n }\n setIsPlaying(false);\n setActiveGuide(null);\n setCurrentStepIndex(0);\n }, [activeGuide]);\n\n // Pause playback\n const pause = useCallback(() => {\n setIsPlaying(false);\n }, []);\n\n // Resume playback\n const resume = useCallback(() => {\n if (activeGuide) {\n setIsPlaying(true);\n }\n }, [activeGuide]);\n\n // Track step view event\n const trackStepView = useCallback(\n async (guide: Guide, stepIndex: number) => {\n const step = guide.guide_steps?.[stepIndex];\n if (!step) return;\n\n try {\n await client.track('guide_step_viewed', {\n guide_id: guide.id,\n guide_name: guide.name,\n step_id: step.id,\n step_index: stepIndex,\n step_type: step.step_type,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Track guide completion event\n const trackGuideComplete = useCallback(\n async (guide: Guide) => {\n try {\n await client.track('guide_completed', {\n guide_id: guide.id,\n guide_name: guide.name,\n total_steps: guide.guide_steps?.length || 0,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Track guide dismiss event\n const trackGuideDismiss = useCallback(\n async (guide: Guide, stepIndex: number) => {\n try {\n await client.track('guide_dismissed', {\n guide_id: guide.id,\n guide_name: guide.name,\n dismissed_at_step: stepIndex,\n total_steps: guide.guide_steps?.length || 0,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Get current step\n const currentStep = activeGuide?.guide_steps?.[currentStepIndex] || null;\n const totalSteps = activeGuide?.guide_steps?.length || 0;\n const isLastStep = currentStepIndex === totalSteps - 1;\n const isFirstStep = currentStepIndex === 0;\n\n // Check if a guide has been completed or dismissed\n const isGuideCompleted = useCallback(\n (guideId: string) => completedGuideIds.includes(guideId),\n [completedGuideIds]\n );\n\n const isGuideDismissed = useCallback(\n (guideId: string) => dismissedGuideIds.includes(guideId),\n [dismissedGuideIds]\n );\n\n return {\n // State\n activeGuide,\n currentStep,\n currentStepIndex,\n totalSteps,\n isPlaying,\n isFirstStep,\n isLastStep,\n isReady,\n\n // Controls\n startGuide,\n nextStep,\n prevStep,\n goToStep,\n dismiss,\n pause,\n resume,\n\n // Tracking\n trackStepView,\n trackGuideComplete,\n trackGuideDismiss,\n\n // Status\n completedGuideIds,\n dismissedGuideIds,\n isGuideCompleted,\n isGuideDismissed,\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 } 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};\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\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\n const { requests, isLoading, error, refetch } = useRequests({\n status,\n type,\n limit,\n });\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\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 if (requests.length === 0 && showEmptyState) {\n return (\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 When you submit feedback, bug reports, or feature requests, they'll appear here.\n </p>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.container} className={className}>\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\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 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 </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 {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 </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { useArticles, useArticle, useRequests, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type {\n HelpCenterProps,\n HelpCenterTab,\n Article,\n Request,\n Feature,\n FeatureGroup,\n FeedbackType,\n CensusTheme,\n} from '../../types';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n display: 'flex',\n minHeight: '400px',\n },\n // Left sidebar\n sidebar: {\n width: '240px',\n flexShrink: 0,\n borderRight: '1px solid #e5e7eb',\n paddingRight: '16px',\n marginRight: '24px',\n },\n sidebarSection: {\n marginBottom: '24px',\n },\n sidebarLabel: {\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: '#6b7280',\n marginBottom: '8px',\n paddingLeft: '8px',\n },\n sidebarItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#374151',\n transition: 'background-color 0.15s, color 0.15s',\n border: 'none',\n background: 'none',\n width: '100%',\n textAlign: 'left' as const,\n },\n sidebarItemActive: {\n backgroundColor: '#f3f4f6',\n color: '#111827',\n fontWeight: 500,\n },\n sidebarFeature: {\n padding: '6px 12px 6px 32px',\n fontSize: '13px',\n },\n sidebarBadge: {\n marginLeft: 'auto',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#e5e7eb',\n color: '#374151',\n },\n // Main content\n main: {\n flex: 1,\n minWidth: 0,\n },\n // Tabs\n tabs: {\n display: 'flex',\n gap: '4px',\n marginBottom: '24px',\n borderBottom: '1px solid #e5e7eb',\n },\n tab: {\n padding: '12px 20px',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#6b7280',\n borderBottom: '2px solid transparent',\n marginBottom: '-1px',\n transition: 'color 0.15s, border-color 0.15s',\n },\n tabActive: {\n color: '#111827',\n borderBottomColor: '#111827',\n },\n tabBadge: {\n marginLeft: '6px',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 600,\n backgroundColor: '#e5e7eb',\n color: '#374151',\n },\n // Feature group cards\n groupCardsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))',\n gap: '16px',\n marginBottom: '24px',\n },\n groupCard: {\n padding: '20px',\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n backgroundColor: 'white',\n },\n groupCardHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n marginBottom: '8px',\n },\n groupCardIcon: {\n width: '40px',\n height: '40px',\n borderRadius: '10px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n },\n groupCardName: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n margin: 0,\n },\n groupCardMeta: {\n fontSize: '13px',\n color: '#6b7280',\n marginTop: '4px',\n },\n // Search\n searchInput: {\n width: '100%',\n padding: '10px 14px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n fontSize: '14px',\n marginBottom: '20px',\n boxSizing: 'border-box' as const,\n },\n // Article cards\n articleCard: {\n padding: '16px',\n border: '1px solid #e5e7eb',\n borderRadius: '10px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 6px 0',\n fontSize: '15px',\n fontWeight: 600,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: '#9ca3af',\n },\n // Article detail\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n // Request cards\n requestCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '10px',\n padding: '16px',\n backgroundColor: '#ffffff',\n marginBottom: '12px',\n transition: 'border-color 0.15s',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '3px 10px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: '#9ca3af',\n },\n // Section header\n sectionHeader: {\n marginBottom: '16px',\n },\n sectionTitle: {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 4px 0',\n },\n sectionDescription: {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n },\n // States\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#6b7280',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '10px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '48px 24px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 16px',\n color: '#d1d5db',\n },\n};\n\n// Type and status configs for requests\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: '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\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#111827',\n textColor: theme.textColor || '#111827',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '10px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n// Default tab labels\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Articles',\n requests: 'My Requests',\n};\n\n// ============================================================================\n// Feature Group Card Component\n// ============================================================================\n\nfunction FeatureGroupCard({\n group,\n onClick,\n}: {\n group: FeatureGroup;\n onClick: () => void;\n}) {\n return (\n <div\n style={defaultStyles.groupCard}\n onClick={onClick}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') onClick();\n }}\n >\n <div>\n <h3 style={defaultStyles.groupCardName}>{group.name}</h3>\n <p style={defaultStyles.groupCardMeta}>\n {group.feature_count} feature{group.feature_count !== 1 ? 's' : ''} · {group.article_count} article\n {group.article_count !== 1 ? 's' : ''}\n </p>\n </div>\n {group.description && (\n <p style={{ ...defaultStyles.articleDescription, marginTop: '8px' }}>{group.description}</p>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Articles Content (for a specific feature or all)\n// ============================================================================\n\nfunction ArticlesContent({\n featureId,\n featureName,\n showSearch,\n themeStyles,\n onArticleView,\n onBack,\n}: {\n featureId?: string;\n featureName?: string;\n showSearch: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n onArticleView?: (article: Article) => void;\n onBack?: () => void;\n}) {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Filter articles by feature if specified\n const filteredArticles = useMemo(() => {\n if (!featureId) return articles;\n return articles.filter((a) => a.features?.id === featureId);\n }, [articles, featureId]);\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 <div style={defaultStyles.loading}>Loading article...</div>;\n }\n\n if (articleError) {\n return (\n <div>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div>\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>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 12px 0', fontSize: '24px', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#6b7280', 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>\n {featureName && onBack && (\n <div style={defaultStyles.sectionHeader}>\n <button onClick={onBack} style={defaultStyles.backButton}>\n ← Back to features\n </button>\n <h2 style={defaultStyles.sectionTitle}>{featureName}</h2>\n <p style={defaultStyles.sectionDescription}>Documentation and guides for this feature</p>\n </div>\n )}\n\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 {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {!isLoadingArticles && !articlesError && filteredArticles.length === 0 && (\n <div style={defaultStyles.empty}>\n <svg style={defaultStyles.emptyIcon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n 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 />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>\n {searchQuery ? `No articles found for \"${searchQuery}\"` : 'No articles yet'}\n </p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>Check back soon for helpful content.</p>\n </div>\n )}\n\n {!isLoadingArticles && !articlesError && filteredArticles.length > 0 && (\n <div>\n {filteredArticles.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\n// ============================================================================\n// Requests Tab Content\n// ============================================================================\n\nfunction RequestsContent({ onRequestClick }: { onRequestClick?: (request: Request) => void }) {\n const { isIdentified } = useCensusContext();\n const { requests, isLoading, error, refetch } = useRequests({ limit: 50 });\n\n if (!isIdentified) {\n return (\n <div style={defaultStyles.empty}>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>Sign in required</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (isLoading) {\n return <div style={defaultStyles.loading}>Loading requests...</div>;\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>\n Failed to load requests.{' '}\n <button\n onClick={refetch}\n style={{\n color: 'inherit',\n textDecoration: 'underline',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </p>\n </div>\n );\n }\n\n if (requests.length === 0) {\n return (\n <div style={defaultStyles.empty}>\n <svg style={defaultStyles.emptyIcon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\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 When you submit feedback, bug reports, or feature requests, they'll appear here.\n </p>\n </div>\n );\n }\n\n return (\n <div>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div\n key={request.id}\n style={defaultStyles.requestCard}\n onClick={() => onRequestClick?.(request)}\n role={onRequestClick ? 'button' : undefined}\n tabIndex={onRequestClick ? 0 : undefined}\n onKeyDown={\n onRequestClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onRequestClick(request);\n }\n }\n : undefined\n }\n >\n <div style={defaultStyles.requestHeader}>\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 </div>\n <p style={defaultStyles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={defaultStyles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n {request.page_url && (\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '200px',\n }}\n >\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================================================\n// Main HelpCenter Component\n// ============================================================================\n\n/**\n * Unified help center component with left navigation showing feature groups.\n *\n * @example\n * ```tsx\n * import { HelpCenter } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <HelpCenter\n * tabs={['articles', 'requests']}\n * showSearch\n * />\n * );\n * }\n * ```\n */\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab,\n tabLabels,\n showSearch = true,\n showCategories: _showCategories = true, // Reserved for future use\n theme: themeProp,\n className,\n onArticleView,\n onRequestClick,\n onTabChange,\n}: HelpCenterProps) {\n void _showCategories; // Suppress unused warning\n const { theme: contextTheme } = useCensusContext();\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n // Tab state\n const initialTab = defaultTab && tabs.includes(defaultTab) ? defaultTab : tabs[0];\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(initialTab);\n\n // Navigation state\n const [selectedGroupId, setSelectedGroupId] = useState<string | null>(null);\n const [selectedFeature, setSelectedFeature] = useState<Feature | null>(null);\n\n // Data\n const { featureGroups, isLoading: isLoadingGroups } = useFeatureGroups();\n const { requests } = useRequests({ limit: 100 });\n\n const openRequestsCount = requests.filter((r) =>\n ['new', 'reviewed', 'in_progress'].includes(r.status)\n ).length;\n\n // Merge tab labels\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Get selected group\n const selectedGroup = useMemo(\n () => featureGroups.find((g) => g.id === selectedGroupId) || null,\n [featureGroups, selectedGroupId]\n );\n\n const handleTabChange = (tab: HelpCenterTab) => {\n setActiveTab(tab);\n setSelectedGroupId(null);\n setSelectedFeature(null);\n onTabChange?.(tab);\n };\n\n const handleGroupClick = (group: FeatureGroup) => {\n setSelectedGroupId(group.id);\n setSelectedFeature(null);\n };\n\n const handleFeatureClick = (feature: Feature) => {\n setSelectedFeature(feature);\n };\n\n const handleBackToGroups = () => {\n setSelectedGroupId(null);\n setSelectedFeature(null);\n };\n\n const handleBackToFeatures = () => {\n setSelectedFeature(null);\n };\n\n // If only one tab, don't show tabs UI\n const showTabs = tabs.length > 1;\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Left Sidebar */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <div style={defaultStyles.sidebar}>\n {/* Resources section - could add general links here */}\n <div style={defaultStyles.sidebarSection}>\n <div style={defaultStyles.sidebarLabel}>Resources</div>\n <button\n style={{\n ...defaultStyles.sidebarItem,\n ...(!selectedGroupId ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={handleBackToGroups}\n >\n <span>🏠</span>\n <span>All Features</span>\n </button>\n </div>\n\n {/* Feature Groups section */}\n <div style={defaultStyles.sidebarSection}>\n <div style={defaultStyles.sidebarLabel}>Features</div>\n {isLoadingGroups ? (\n <div style={{ padding: '8px 12px', fontSize: '13px', color: '#6b7280' }}>Loading...</div>\n ) : (\n featureGroups.map((group) => (\n <div key={group.id}>\n <button\n style={{\n ...defaultStyles.sidebarItem,\n ...(selectedGroupId === group.id ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={() => handleGroupClick(group)}\n >\n <span style={{ flex: 1 }}>{group.name}</span>\n <span style={defaultStyles.sidebarBadge}>{group.feature_count}</span>\n </button>\n {/* Show features when group is selected */}\n {selectedGroupId === group.id && (\n <div>\n {group.features.map((feature) => (\n <button\n key={feature.id}\n style={{\n ...defaultStyles.sidebarItem,\n ...defaultStyles.sidebarFeature,\n ...(selectedFeature?.id === feature.id ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={() => handleFeatureClick(feature)}\n >\n {feature.name}\n {feature.article_count > 0 && (\n <span style={defaultStyles.sidebarBadge}>{feature.article_count}</span>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n\n {/* Main Content */}\n <div style={defaultStyles.main}>\n {showTabs && (\n <div style={defaultStyles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => handleTabChange(tab)}\n style={{\n ...defaultStyles.tab,\n ...(activeTab === tab ? defaultStyles.tabActive : {}),\n ...(activeTab === tab\n ? { borderBottomColor: themeStyles.primaryColor, color: themeStyles.primaryColor }\n : {}),\n }}\n >\n {mergedLabels[tab]}\n {tab === 'requests' && openRequestsCount > 0 && (\n <span style={defaultStyles.tabBadge}>{openRequestsCount}</span>\n )}\n </button>\n ))}\n </div>\n )}\n\n {/* Articles Tab Content */}\n {activeTab === 'articles' && (\n <>\n {/* Show feature group cards when nothing selected */}\n {!selectedGroupId && !selectedFeature && featureGroups.length > 0 && (\n <div>\n <div style={defaultStyles.sectionHeader}>\n <h2 style={defaultStyles.sectionTitle}>Browse by Feature</h2>\n <p style={defaultStyles.sectionDescription}>\n Select a feature group to find relevant documentation\n </p>\n </div>\n <div style={defaultStyles.groupCardsGrid}>\n {featureGroups.map((group) => (\n <FeatureGroupCard key={group.id} group={group} onClick={() => handleGroupClick(group)} />\n ))}\n </div>\n </div>\n )}\n\n {/* Show features when group is selected but no feature */}\n {selectedGroup && !selectedFeature && (\n <div>\n <div style={defaultStyles.sectionHeader}>\n <button onClick={handleBackToGroups} style={defaultStyles.backButton}>\n ← Back to all features\n </button>\n <h2 style={defaultStyles.sectionTitle}>{selectedGroup.name}</h2>\n {selectedGroup.description && (\n <p style={defaultStyles.sectionDescription}>{selectedGroup.description}</p>\n )}\n </div>\n <div style={defaultStyles.groupCardsGrid}>\n {selectedGroup.features.map((feature) => (\n <div\n key={feature.id}\n style={defaultStyles.groupCard}\n onClick={() => handleFeatureClick(feature)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleFeatureClick(feature);\n }}\n >\n <h3 style={defaultStyles.groupCardName}>{feature.name}</h3>\n <p style={defaultStyles.groupCardMeta}>\n {feature.article_count} article{feature.article_count !== 1 ? 's' : ''}\n </p>\n {feature.description && (\n <p style={{ ...defaultStyles.articleDescription, marginTop: '8px' }}>\n {feature.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Show articles when feature is selected */}\n {selectedFeature && (\n <ArticlesContent\n featureId={selectedFeature.id}\n featureName={selectedFeature.name}\n showSearch={showSearch}\n themeStyles={themeStyles}\n onArticleView={onArticleView}\n onBack={handleBackToFeatures}\n />\n )}\n\n {/* Fallback: show all articles if no feature groups */}\n {featureGroups.length === 0 && (\n <ArticlesContent\n showSearch={showSearch}\n themeStyles={themeStyles}\n onArticleView={onArticleView}\n />\n )}\n </>\n )}\n\n {/* Requests Tab Content */}\n {activeTab === 'requests' && <RequestsContent onRequestClick={onRequestClick} />}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type {\n GuideStep,\n GuideStepType,\n TooltipPosition,\n SelectorStrategy,\n GuideStepRichContent,\n GuideStepDisplayConfig,\n GuideStepAdvanceConfig,\n CreateGuideStepOptions,\n AdvanceTrigger,\n} from '../../../types';\n\nexport interface StepEditorProps {\n /**\n * The step being edited\n */\n step: GuideStep;\n\n /**\n * Callback when step is updated\n */\n onUpdate: (stepId: string, options: CreateGuideStepOptions) => Promise<GuideStep>;\n\n /**\n * Callback to open element selector\n */\n onSelectElement: () => void;\n\n /**\n * Whether element selector is currently active\n */\n isSelectingElement?: boolean;\n}\n\nconst stepTypeLabels: Record<GuideStepType, string> = {\n tooltip: 'Tooltip',\n modal: 'Modal',\n slideout: 'Slideout',\n hotspot: 'Hotspot',\n banner: 'Banner',\n};\n\nconst stepTypeDescriptions: Record<GuideStepType, string> = {\n tooltip: 'Points to a specific element with an arrow',\n modal: 'Centered overlay that grabs attention',\n slideout: 'Slides in from the side of the screen',\n hotspot: 'Pulsing beacon that expands on click',\n banner: 'Top or bottom bar announcement',\n};\n\nconst positionOptions: { value: TooltipPosition | 'center'; label: string }[] = [\n { value: 'auto', label: 'Auto' },\n { value: 'top', label: 'Top' },\n { value: 'bottom', label: 'Bottom' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n];\n\nconst advanceTriggerOptions: { value: AdvanceTrigger; label: string }[] = [\n { value: 'button', label: 'Button click' },\n { value: 'click', label: 'Click anywhere' },\n { value: 'delay', label: 'After delay' },\n { value: 'form-submit', label: 'Form submit' },\n];\n\nexport function StepEditor({\n step,\n onUpdate,\n onSelectElement,\n isSelectingElement,\n}: StepEditorProps) {\n const [isSaving, setIsSaving] = useState(false);\n\n // Local state for form fields\n const [stepType, setStepType] = useState<GuideStepType>(step.step_type);\n const [title, setTitle] = useState(step.rich_content?.title || step.title || '');\n const [body, setBody] = useState(step.rich_content?.body || step.content || '');\n const [position, setPosition] = useState<TooltipPosition>(\n step.tooltip_position || (step.display_config?.position as TooltipPosition) || 'auto'\n );\n const [selector, setSelector] = useState(step.selector_strategy?.css || '');\n const [backdrop, setBackdrop] = useState(step.display_config?.backdrop !== false);\n const [advanceTrigger, setAdvanceTrigger] = useState<AdvanceTrigger>(\n step.advance_config?.trigger || 'button'\n );\n const [advanceDelay, setAdvanceDelay] = useState(step.advance_config?.delay || 3000);\n\n // Handle save\n const handleSave = useCallback(async () => {\n setIsSaving(true);\n try {\n const selectorStrategy: SelectorStrategy | undefined = selector\n ? { css: selector }\n : undefined;\n\n const richContent: GuideStepRichContent = {\n title: title || undefined,\n body: body || undefined,\n };\n\n const displayConfig: GuideStepDisplayConfig = {\n position: position !== 'auto' ? position : undefined,\n backdrop,\n };\n\n const advanceConfig: GuideStepAdvanceConfig = {\n trigger: advanceTrigger,\n delay: advanceTrigger === 'delay' ? advanceDelay : undefined,\n };\n\n await onUpdate(step.id, {\n stepType,\n selectorStrategy,\n richContent,\n displayConfig,\n advanceConfig,\n tooltipPosition: position,\n });\n } finally {\n setIsSaving(false);\n }\n }, [\n step.id,\n stepType,\n title,\n body,\n position,\n selector,\n backdrop,\n advanceTrigger,\n advanceDelay,\n onUpdate,\n ]);\n\n // Check if step type needs an element selector\n const needsSelector = stepType === 'tooltip' || stepType === 'hotspot';\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Header */}\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 500 }}>Edit Step</span>\n <button\n onClick={handleSave}\n disabled={isSaving}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving ? 0.7 : 1,\n }}\n >\n {isSaving ? 'Saving...' : 'Save Changes'}\n </button>\n </div>\n\n {/* Form */}\n <div style={{ flex: 1, overflow: 'auto', padding: '16px' }}>\n {/* Step Type */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Step Type\n </label>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '8px' }}>\n {(Object.keys(stepTypeLabels) as GuideStepType[]).map((type) => (\n <button\n key={type}\n onClick={() => setStepType(type)}\n style={{\n padding: '10px',\n border: `2px solid ${stepType === type ? '#2563eb' : '#e5e7eb'}`,\n borderRadius: '6px',\n backgroundColor: stepType === type ? '#eff6ff' : 'white',\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <div style={{ fontWeight: 500, fontSize: '13px' }}>{stepTypeLabels[type]}</div>\n <div style={{ fontSize: '11px', color: '#6b7280', marginTop: '2px' }}>\n {stepTypeDescriptions[type]}\n </div>\n </button>\n ))}\n </div>\n </div>\n\n {/* Element Selector (for tooltip/hotspot) */}\n {needsSelector && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Target Element\n </label>\n <div style={{ display: 'flex', gap: '8px' }}>\n <input\n type=\"text\"\n value={selector}\n onChange={(e) => setSelector(e.target.value)}\n placeholder=\"CSS selector (e.g., #my-button)\"\n style={{\n flex: 1,\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n fontFamily: 'monospace',\n }}\n />\n <button\n onClick={onSelectElement}\n disabled={isSelectingElement}\n style={{\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: isSelectingElement ? '#f3f4f6' : 'white',\n cursor: isSelectingElement ? 'wait' : 'pointer',\n }}\n >\n {isSelectingElement ? 'Selecting...' : 'Select'}\n </button>\n </div>\n <p style={{ fontSize: '11px', color: '#6b7280', marginTop: '4px' }}>\n Click "Select" to pick an element on the page, or enter a CSS selector manually\n </p>\n </div>\n )}\n\n {/* Title */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Title\n </label>\n <input\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Enter step title\"\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n }}\n />\n </div>\n\n {/* Body */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Content\n </label>\n <textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Enter step content (HTML supported)\"\n rows={4}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n resize: 'vertical',\n fontFamily: 'inherit',\n }}\n />\n </div>\n\n {/* Position (for tooltip/hotspot) */}\n {(stepType === 'tooltip' || stepType === 'hotspot') && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Position\n </label>\n <select\n value={position}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n {positionOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Banner Position */}\n {stepType === 'banner' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Banner Position\n </label>\n <select\n value={position === 'bottom' ? 'bottom' : 'top'}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n <option value=\"top\">Top</option>\n <option value=\"bottom\">Bottom</option>\n </select>\n </div>\n )}\n\n {/* Slideout Side */}\n {stepType === 'slideout' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Slideout Side\n </label>\n <select\n value={position === 'left' ? 'left' : 'right'}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n <option value=\"right\">Right</option>\n <option value=\"left\">Left</option>\n </select>\n </div>\n )}\n\n {/* Backdrop (for tooltip/modal) */}\n {(stepType === 'tooltip' || stepType === 'modal') && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={backdrop}\n onChange={(e) => setBackdrop(e.target.checked)}\n style={{ width: '16px', height: '16px' }}\n />\n <span style={{ fontSize: '13px', fontWeight: 500 }}>Show backdrop overlay</span>\n </label>\n <p style={{ fontSize: '11px', color: '#6b7280', marginTop: '4px', marginLeft: '24px' }}>\n Dims the background to focus attention on the step\n </p>\n </div>\n )}\n\n {/* Advancement Trigger */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Advance When\n </label>\n <select\n value={advanceTrigger}\n onChange={(e) => setAdvanceTrigger(e.target.value as AdvanceTrigger)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n {advanceTriggerOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Delay Input (when delay trigger selected) */}\n {advanceTrigger === 'delay' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Delay (seconds)\n </label>\n <input\n type=\"number\"\n value={advanceDelay / 1000}\n onChange={(e) => setAdvanceDelay(Number(e.target.value) * 1000)}\n min={1}\n max={60}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n }}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport type { SelectorStrategy } from '../../../types';\n\nexport interface ElementSelectorProps {\n /**\n * Whether the selector is active\n */\n isActive: boolean;\n\n /**\n * Callback when an element is selected\n */\n onSelect: (selector: SelectorStrategy, element: Element) => void;\n\n /**\n * Callback to cancel selection mode\n */\n onCancel: () => void;\n\n /**\n * Elements to ignore (e.g., the builder UI itself)\n */\n ignoreSelector?: string;\n\n /**\n * Z-index for the selector overlay\n */\n zIndex?: number;\n}\n\n/**\n * Generates a CSS selector for an element\n * Tries to create the most specific and reliable selector possible\n */\nfunction generateSelector(element: Element): SelectorStrategy {\n const result: SelectorStrategy = {};\n\n // Try data-testid first (most reliable)\n const testId = element.getAttribute('data-testid');\n if (testId) {\n result.testId = testId;\n result.css = `[data-testid=\"${testId}\"]`;\n return result;\n }\n\n // Try ID (also very reliable)\n if (element.id) {\n result.css = `#${CSS.escape(element.id)}`;\n return result;\n }\n\n // Build a CSS path\n const parts: string[] = [];\n let current: Element | null = element;\n let depth = 0;\n const maxDepth = 5;\n\n while (current && current !== document.body && depth < maxDepth) {\n let selector = current.tagName.toLowerCase();\n\n // Add classes (up to 2 most specific)\n const classes = Array.from(current.classList)\n .filter((c) => !c.startsWith('hover') && !c.startsWith('focus') && !c.startsWith('active'))\n .slice(0, 2);\n\n if (classes.length > 0) {\n selector += '.' + classes.map((c) => CSS.escape(c)).join('.');\n }\n\n // Add nth-child if needed for uniqueness\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter(\n (child) => child.tagName === current!.tagName\n );\n if (siblings.length > 1) {\n const index = siblings.indexOf(current) + 1;\n selector += `:nth-of-type(${index})`;\n }\n }\n\n parts.unshift(selector);\n\n // Check if this is unique enough\n const testSelector = parts.join(' > ');\n try {\n if (document.querySelectorAll(testSelector).length === 1) {\n result.css = testSelector;\n break;\n }\n } catch {\n // Invalid selector, continue\n }\n\n current = current.parentElement;\n depth++;\n }\n\n if (!result.css && parts.length > 0) {\n result.css = parts.join(' > ');\n }\n\n // Also try to capture text content for text-based selection\n const text = element.textContent?.trim();\n if (text && text.length < 100 && text.length > 2) {\n result.text = text.slice(0, 50);\n }\n\n return result;\n}\n\n/**\n * Tests if a selector uniquely identifies an element\n */\nfunction testSelector(selector: SelectorStrategy): { isUnique: boolean; count: number } {\n let count = 0;\n\n if (selector.css) {\n try {\n count = document.querySelectorAll(selector.css).length;\n } catch {\n // Invalid selector\n }\n }\n\n if (selector.testId) {\n count = document.querySelectorAll(`[data-testid=\"${selector.testId}\"]`).length;\n }\n\n return { isUnique: count === 1, count };\n}\n\nexport function ElementSelector({\n isActive,\n onSelect,\n onCancel,\n ignoreSelector = '[data-census-builder]',\n zIndex = 99999,\n}: ElementSelectorProps) {\n const [hoveredElement, setHoveredElement] = useState<Element | null>(null);\n const [highlightRect, setHighlightRect] = useState<DOMRect | null>(null);\n const [generatedSelector, setGeneratedSelector] = useState<SelectorStrategy | null>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n // Update highlight position\n const updateHighlight = useCallback(() => {\n if (!hoveredElement) {\n setHighlightRect(null);\n return;\n }\n setHighlightRect(hoveredElement.getBoundingClientRect());\n }, [hoveredElement]);\n\n // Handle mouse move\n useEffect(() => {\n if (!isActive) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n // Get element under cursor\n const elements = document.elementsFromPoint(e.clientX, e.clientY);\n\n // Find the first element that's not part of the builder or the overlay\n const target = elements.find((el) => {\n // Skip our overlay\n if (overlayRef.current?.contains(el)) return false;\n // Skip elements matching ignore selector\n if (ignoreSelector && el.closest(ignoreSelector)) return false;\n // Skip body and html\n if (el === document.body || el === document.documentElement) return false;\n return true;\n });\n\n if (target !== hoveredElement) {\n setHoveredElement(target || null);\n if (target) {\n setGeneratedSelector(generateSelector(target));\n } else {\n setGeneratedSelector(null);\n }\n }\n };\n\n const handleScroll = () => {\n updateHighlight();\n };\n\n document.addEventListener('mousemove', handleMouseMove, true);\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleScroll);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove, true);\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleScroll);\n };\n }, [isActive, hoveredElement, ignoreSelector, updateHighlight]);\n\n // Update highlight when element changes\n useEffect(() => {\n updateHighlight();\n }, [hoveredElement, updateHighlight]);\n\n // Handle click to select\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (hoveredElement && generatedSelector) {\n onSelect(generatedSelector, hoveredElement);\n }\n },\n [hoveredElement, generatedSelector, onSelect]\n );\n\n // Handle escape to cancel\n useEffect(() => {\n if (!isActive) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isActive, onCancel]);\n\n if (!isActive) return null;\n\n const selectorTest = generatedSelector ? testSelector(generatedSelector) : null;\n\n return (\n <div\n ref={overlayRef}\n data-census-builder\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n cursor: 'crosshair',\n }}\n onClick={handleClick}\n >\n {/* Element highlight */}\n {highlightRect && (\n <div\n style={{\n position: 'fixed',\n top: highlightRect.top,\n left: highlightRect.left,\n width: highlightRect.width,\n height: highlightRect.height,\n border: '2px solid #2563eb',\n borderRadius: '4px',\n backgroundColor: 'rgba(37, 99, 235, 0.1)',\n pointerEvents: 'none',\n transition: 'all 0.1s ease-out',\n }}\n />\n )}\n\n {/* Selector info tooltip */}\n {highlightRect && generatedSelector && (\n <div\n style={{\n position: 'fixed',\n top: Math.max(8, highlightRect.top - 40),\n left: highlightRect.left,\n padding: '6px 10px',\n backgroundColor: '#1f2937',\n color: 'white',\n fontSize: '12px',\n fontFamily: 'monospace',\n borderRadius: '4px',\n maxWidth: '300px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n }}\n >\n <span style={{ color: '#9ca3af' }}>\n {generatedSelector.testId ? 'data-testid: ' : ''}\n </span>\n {generatedSelector.testId || generatedSelector.css}\n {selectorTest && (\n <span\n style={{\n marginLeft: '8px',\n color: selectorTest.isUnique ? '#4ade80' : '#fbbf24',\n }}\n >\n ({selectorTest.count} match{selectorTest.count !== 1 ? 'es' : ''})\n </span>\n )}\n </div>\n )}\n\n {/* Instructions bar */}\n <div\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '12px 20px',\n backgroundColor: '#1f2937',\n color: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n }}\n >\n <span>\n Click on any element to select it, or press <kbd style={{\n padding: '2px 6px',\n backgroundColor: '#374151',\n borderRadius: '4px',\n marginLeft: '4px',\n marginRight: '4px',\n }}>Esc</kbd> to cancel\n </span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onCancel();\n }}\n style={{\n padding: '6px 12px',\n border: '1px solid #4b5563',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'white',\n cursor: 'pointer',\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, type ReactNode } from 'react';\nimport { useGuideBuilder } from '../../hooks';\nimport type { Guide, GuideStep, CreateGuideStepOptions, GuideStepType, SelectorStrategy } from '../../../types';\nimport { StepEditor } from './StepEditor';\nimport { ElementSelector } from './ElementSelector';\n\n/**\n * Props for the GuideBuilder component\n */\nexport interface GuideBuilderProps {\n /**\n * Whether the builder is open\n */\n isOpen?: boolean;\n\n /**\n * Callback when builder is closed\n */\n onClose?: () => void;\n\n /**\n * Guide ID to edit (optional - if not provided, creates new guide)\n */\n guideId?: string;\n\n /**\n * Callback when guide is saved\n */\n onSave?: (guide: Guide) => void;\n\n /**\n * Callback when guide is published\n */\n onPublish?: (guide: Guide) => void;\n\n /**\n * Custom trigger element\n */\n trigger?: ReactNode;\n\n /**\n * Custom CSS class for the modal\n */\n className?: string;\n}\n\n/**\n * Guide Builder Component\n *\n * A full-screen overlay for creating and editing guides.\n * This is a shell component - the full UI will be implemented in Phase 3.\n *\n * @example\n * ```tsx\n * // Controlled mode\n * <GuideBuilder\n * isOpen={showBuilder}\n * onClose={() => setShowBuilder(false)}\n * onSave={(guide) => console.log('Saved:', guide)}\n * />\n *\n * // With trigger\n * <GuideBuilder\n * trigger={<button>Create Guide</button>}\n * onSave={(guide) => console.log('Saved:', guide)}\n * />\n * ```\n */\nexport function GuideBuilder({\n isOpen: controlledIsOpen,\n onClose,\n guideId,\n onSave,\n onPublish,\n trigger,\n className,\n}: GuideBuilderProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const isOpen = controlledIsOpen ?? internalIsOpen;\n\n const {\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n loadGuide,\n updateGuide,\n publishGuide,\n addStep,\n updateStep,\n deleteStep,\n moveStepUp,\n moveStepDown,\n setSelectedStepId,\n reset,\n } = useGuideBuilder();\n\n // Open the builder\n const handleOpen = useCallback(async () => {\n setInternalIsOpen(true);\n if (guideId) {\n await loadGuide(guideId);\n }\n }, [guideId, loadGuide]);\n\n // Close the builder\n const handleClose = useCallback(() => {\n setInternalIsOpen(false);\n reset();\n onClose?.();\n }, [reset, onClose]);\n\n // Handle save\n const handleSave = useCallback(async () => {\n if (!guide) return;\n try {\n await updateGuide({});\n onSave?.(guide);\n } catch {\n // Error already set in hook\n }\n }, [guide, updateGuide, onSave]);\n\n // Handle publish\n const handlePublish = useCallback(async () => {\n if (!guide) return;\n try {\n const publishedGuide = await publishGuide();\n onPublish?.(publishedGuide);\n } catch {\n // Error already set in hook\n }\n }, [guide, publishGuide, onPublish]);\n\n // Add a new step\n const handleAddStep = useCallback(\n async (stepType: GuideStepType = 'tooltip') => {\n try {\n await addStep({\n stepType,\n richContent: {\n title: 'New Step',\n body: 'Click to edit...',\n },\n });\n } catch {\n // Error already set in hook\n }\n },\n [addStep]\n );\n\n // If trigger is provided and not controlled, render trigger + modal\n if (trigger && controlledIsOpen === undefined) {\n return (\n <>\n <span onClick={handleOpen}>{trigger}</span>\n {isOpen && (\n <GuideBuilderModal\n guide={guide}\n steps={steps}\n selectedStep={selectedStep}\n selectedStepId={selectedStepId}\n isLoading={isLoading}\n isSaving={isSaving}\n error={error}\n onClose={handleClose}\n onSave={handleSave}\n onPublish={handlePublish}\n onAddStep={handleAddStep}\n onSelectStep={setSelectedStepId}\n onUpdateStep={updateStep}\n onDeleteStep={deleteStep}\n onMoveStepUp={moveStepUp}\n onMoveStepDown={moveStepDown}\n className={className}\n />\n )}\n </>\n );\n }\n\n // Controlled mode - just render modal if open\n if (!isOpen) return null;\n\n return (\n <GuideBuilderModal\n guide={guide}\n steps={steps}\n selectedStep={selectedStep}\n selectedStepId={selectedStepId}\n isLoading={isLoading}\n isSaving={isSaving}\n error={error}\n onClose={handleClose}\n onSave={handleSave}\n onPublish={handlePublish}\n onAddStep={handleAddStep}\n onSelectStep={setSelectedStepId}\n onUpdateStep={updateStep}\n onDeleteStep={deleteStep}\n onMoveStepUp={moveStepUp}\n onMoveStepDown={moveStepDown}\n className={className}\n />\n );\n}\n\n/**\n * The modal UI for the guide builder\n * This is a shell - full implementation in Phase 3\n */\ninterface GuideBuilderModalProps {\n guide: Guide | null;\n steps: GuideStep[];\n selectedStep: GuideStep | null;\n selectedStepId: string | null;\n isLoading: boolean;\n isSaving: boolean;\n error: Error | null;\n onClose: () => void;\n onSave: () => void;\n onPublish: () => void;\n onAddStep: (stepType?: GuideStepType) => void;\n onSelectStep: (stepId: string | null) => void;\n onUpdateStep: (stepId: string, options: CreateGuideStepOptions) => Promise<GuideStep>;\n onDeleteStep: (stepId: string) => Promise<void>;\n onMoveStepUp: (stepId: string) => Promise<GuideStep[] | undefined>;\n onMoveStepDown: (stepId: string) => Promise<GuideStep[] | undefined>;\n className?: string;\n}\n\nfunction GuideBuilderModal({\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n onClose,\n onSave,\n onPublish,\n onAddStep,\n onSelectStep,\n onUpdateStep,\n onDeleteStep,\n onMoveStepUp,\n onMoveStepDown,\n className,\n}: GuideBuilderModalProps) {\n const [isSelectingElement, setIsSelectingElement] = useState(false);\n\n const stepTypeLabels: Record<GuideStepType, string> = {\n tooltip: 'Tooltip',\n modal: 'Modal',\n slideout: 'Slideout',\n hotspot: 'Hotspot',\n banner: 'Banner',\n };\n\n // Handle element selection\n const handleElementSelect = useCallback(\n (selector: SelectorStrategy, _element: Element) => {\n if (selectedStep) {\n onUpdateStep(selectedStep.id, {\n selectorStrategy: selector,\n });\n }\n setIsSelectingElement(false);\n },\n [selectedStep, onUpdateStep]\n );\n\n return (\n <>\n {/* Element Selector Overlay */}\n <ElementSelector\n isActive={isSelectingElement}\n onSelect={handleElementSelect}\n onCancel={() => setIsSelectingElement(false)}\n ignoreSelector=\"[data-census-builder]\"\n />\n\n <div\n className={className}\n data-census-builder\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#f8f9fa',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Header */}\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 20px',\n backgroundColor: 'white',\n borderBottom: '1px solid #e5e7eb',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <button\n onClick={onClose}\n style={{\n padding: '8px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n Close\n </button>\n <h1 style={{ margin: 0, fontSize: '18px', fontWeight: 600 }}>\n {guide ? guide.name : 'Guide Builder'}\n </h1>\n {guide?.status && (\n <span\n style={{\n padding: '2px 8px',\n fontSize: '12px',\n borderRadius: '4px',\n backgroundColor: guide.status === 'published' ? '#dcfce7' : '#fef3c7',\n color: guide.status === 'published' ? '#166534' : '#92400e',\n }}\n >\n {guide.status}\n </span>\n )}\n </div>\n\n <div style={{ display: 'flex', gap: '8px' }}>\n {error && (\n <span style={{ color: '#dc2626', fontSize: '14px' }}>{error.message}</span>\n )}\n <button\n onClick={onSave}\n disabled={isSaving || !guide}\n style={{\n padding: '8px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving ? 0.5 : 1,\n }}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </button>\n <button\n onClick={onPublish}\n disabled={isSaving || !guide || guide.status === 'published'}\n style={{\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving || guide?.status === 'published' ? 0.5 : 1,\n }}\n >\n Publish\n </button>\n </div>\n </header>\n\n {/* Main Content */}\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {/* Left Panel - Step List */}\n <aside\n style={{\n width: '280px',\n backgroundColor: 'white',\n borderRight: '1px solid #e5e7eb',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 500 }}>Steps ({steps.length})</span>\n <button\n onClick={() => onAddStep('tooltip')}\n disabled={!guide}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: guide ? 'pointer' : 'not-allowed',\n opacity: guide ? 1 : 0.5,\n }}\n >\n + Add Step\n </button>\n </div>\n\n <div style={{ flex: 1, overflow: 'auto', padding: '8px' }}>\n {isLoading ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#6b7280' }}>\n Loading...\n </div>\n ) : steps.length === 0 ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#6b7280' }}>\n No steps yet. Click "Add Step" to get started.\n </div>\n ) : (\n steps.map((step, index) => (\n <div\n key={step.id}\n onClick={() => onSelectStep(step.id)}\n style={{\n padding: '12px',\n marginBottom: '4px',\n borderRadius: '6px',\n backgroundColor: selectedStepId === step.id ? '#eff6ff' : 'white',\n border: `1px solid ${selectedStepId === step.id ? '#3b82f6' : '#e5e7eb'}`,\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ fontWeight: 500, fontSize: '14px' }}>\n {index + 1}. {stepTypeLabels[step.step_type]}\n </span>\n <div style={{ display: 'flex', gap: '4px' }}>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveStepUp(step.id);\n }}\n disabled={index === 0}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #d1d5db',\n borderRadius: '3px',\n backgroundColor: 'white',\n cursor: index === 0 ? 'not-allowed' : 'pointer',\n opacity: index === 0 ? 0.3 : 1,\n }}\n >\n Up\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveStepDown(step.id);\n }}\n disabled={index === steps.length - 1}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #d1d5db',\n borderRadius: '3px',\n backgroundColor: 'white',\n cursor: index === steps.length - 1 ? 'not-allowed' : 'pointer',\n opacity: index === steps.length - 1 ? 0.3 : 1,\n }}\n >\n Down\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n if (confirm('Delete this step?')) {\n onDeleteStep(step.id);\n }\n }}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #fecaca',\n borderRadius: '3px',\n backgroundColor: '#fef2f2',\n color: '#dc2626',\n cursor: 'pointer',\n }}\n >\n Delete\n </button>\n </div>\n </div>\n <p style={{ margin: '4px 0 0', fontSize: '13px', color: '#6b7280' }}>\n {step.rich_content?.title || step.title || 'Untitled'}\n </p>\n </div>\n ))\n )}\n </div>\n </aside>\n\n {/* Center - Preview */}\n <main style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: '#f3f4f6' }}>\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: 'white',\n }}\n >\n <span style={{ fontWeight: 500 }}>Preview</span>\n </div>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#6b7280',\n }}\n >\n {selectedStep ? (\n <div\n style={{\n padding: '24px',\n backgroundColor: 'white',\n borderRadius: '8px',\n boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1)',\n maxWidth: '400px',\n width: '100%',\n }}\n >\n {/* Step type badge */}\n <div style={{ marginBottom: '12px' }}>\n <span\n style={{\n padding: '4px 8px',\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '4px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n textTransform: 'uppercase',\n }}\n >\n {stepTypeLabels[selectedStep.step_type]}\n </span>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: '16px' }}>\n {selectedStep.rich_content?.title || selectedStep.title || 'Step Preview'}\n </h3>\n <p style={{ margin: 0, color: '#4b5563' }}>\n {selectedStep.rich_content?.body || selectedStep.content || 'No content'}\n </p>\n {/* Show media preview if present */}\n {selectedStep.rich_content?.media && (\n <div style={{ marginTop: '12px' }}>\n {selectedStep.rich_content.media.type === 'image' && (\n <img\n src={selectedStep.rich_content.media.url}\n alt={selectedStep.rich_content.media.alt || ''}\n style={{ maxWidth: '100%', borderRadius: '4px' }}\n />\n )}\n </div>\n )}\n {/* Show buttons preview */}\n {selectedStep.rich_content?.buttons && selectedStep.rich_content.buttons.length > 0 && (\n <div style={{ marginTop: '16px', display: 'flex', gap: '8px' }}>\n {selectedStep.rich_content.buttons.map((btn, i) => (\n <span\n key={i}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n borderRadius: '4px',\n backgroundColor: btn.style === 'primary' ? '#2563eb' : '#f3f4f6',\n color: btn.style === 'primary' ? 'white' : '#374151',\n }}\n >\n {btn.label}\n </span>\n ))}\n </div>\n )}\n {/* Show selector info */}\n {selectedStep.selector_strategy?.css && (\n <div\n style={{\n marginTop: '16px',\n padding: '8px',\n backgroundColor: '#f9fafb',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n color: '#6b7280',\n }}\n >\n Target: {selectedStep.selector_strategy.css}\n </div>\n )}\n </div>\n ) : (\n <p>Select a step to preview</p>\n )}\n </div>\n </main>\n\n {/* Right Panel - Step Editor */}\n <aside\n style={{\n width: '360px',\n backgroundColor: 'white',\n borderLeft: '1px solid #e5e7eb',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {selectedStep ? (\n <StepEditor\n step={selectedStep}\n onUpdate={onUpdateStep}\n onSelectElement={() => setIsSelectingElement(true)}\n isSelectingElement={isSelectingElement}\n />\n ) : (\n <div style={{ padding: '16px' }}>\n <p style={{ color: '#6b7280' }}>Select a step to edit its settings</p>\n </div>\n )}\n </aside>\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport type { TooltipPosition } from '../../../types';\n\n/**\n * Position data for an element\n */\nexport interface ElementRect {\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n}\n\n/**\n * Computed position for a tooltip/popover\n */\nexport interface ComputedPosition {\n top: number;\n left: number;\n placement: TooltipPosition;\n arrowPosition: { top?: number; left?: number; transform?: string };\n}\n\n/**\n * Position configuration\n */\nexport interface PositionConfig {\n preferredPosition: TooltipPosition;\n offset?: { x: number; y: number };\n containerPadding?: number;\n arrowSize?: number;\n}\n\n/**\n * Get the bounding rect of an element with scroll offset\n */\nexport function getElementRect(element: Element): ElementRect {\n const rect = element.getBoundingClientRect();\n return {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX,\n right: rect.right + window.scrollX,\n bottom: rect.bottom + window.scrollY,\n width: rect.width,\n height: rect.height,\n };\n}\n\n/**\n * Get the viewport dimensions\n */\nexport function getViewport(): { width: number; height: number; scrollX: number; scrollY: number } {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n };\n}\n\n/**\n * Check if there's enough space to place tooltip at a given position\n */\nfunction hasSpaceForPosition(\n targetRect: ElementRect,\n tooltipWidth: number,\n tooltipHeight: number,\n position: TooltipPosition,\n padding: number\n): boolean {\n const viewport = getViewport();\n const { scrollX, scrollY, width: viewportWidth, height: viewportHeight } = viewport;\n\n switch (position) {\n case 'top':\n return (\n targetRect.top - scrollY - tooltipHeight - padding > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 - tooltipWidth / 2 > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 + tooltipWidth / 2 < viewportWidth\n );\n case 'bottom':\n return (\n targetRect.bottom - scrollY + tooltipHeight + padding < viewportHeight &&\n targetRect.left - scrollX + targetRect.width / 2 - tooltipWidth / 2 > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 + tooltipWidth / 2 < viewportWidth\n );\n case 'left':\n return (\n targetRect.left - scrollX - tooltipWidth - padding > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 - tooltipHeight / 2 > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 + tooltipHeight / 2 < viewportHeight\n );\n case 'right':\n return (\n targetRect.right - scrollX + tooltipWidth + padding < viewportWidth &&\n targetRect.top - scrollY + targetRect.height / 2 - tooltipHeight / 2 > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 + tooltipHeight / 2 < viewportHeight\n );\n default:\n return true;\n }\n}\n\n/**\n * Find the best position when 'auto' is specified\n */\nfunction findBestPosition(\n targetRect: ElementRect,\n tooltipWidth: number,\n tooltipHeight: number,\n padding: number\n): TooltipPosition {\n // Preference order: bottom, top, right, left\n const positionOrder: TooltipPosition[] = ['bottom', 'top', 'right', 'left'];\n\n for (const position of positionOrder) {\n if (hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, position, padding)) {\n return position;\n }\n }\n\n // Fallback to bottom if nothing fits\n return 'bottom';\n}\n\n/**\n * Calculate the position for a tooltip relative to a target element\n */\nexport function calculatePosition(\n targetElement: Element,\n tooltipWidth: number,\n tooltipHeight: number,\n config: PositionConfig\n): ComputedPosition {\n const { preferredPosition, offset = { x: 0, y: 0 }, containerPadding = 10, arrowSize = 8 } = config;\n\n const targetRect = getElementRect(targetElement);\n const viewport = getViewport();\n\n // Determine final position\n let finalPosition: TooltipPosition = preferredPosition;\n if (preferredPosition === 'auto') {\n finalPosition = findBestPosition(targetRect, tooltipWidth, tooltipHeight, containerPadding);\n } else if (!hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, preferredPosition, containerPadding)) {\n // Flip to opposite side if not enough space\n const opposites: Record<string, TooltipPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n const opposite = opposites[preferredPosition];\n if (opposite && hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, opposite, containerPadding)) {\n finalPosition = opposite;\n }\n }\n\n let top = 0;\n let left = 0;\n let arrowPosition: ComputedPosition['arrowPosition'] = {};\n\n const gap = arrowSize + 4; // Gap between tooltip and target\n\n switch (finalPosition) {\n case 'top':\n top = targetRect.top - tooltipHeight - gap + offset.y;\n left = targetRect.left + targetRect.width / 2 - tooltipWidth / 2 + offset.x;\n arrowPosition = {\n left: tooltipWidth / 2 - arrowSize / 2,\n top: tooltipHeight,\n transform: 'rotate(180deg)',\n };\n break;\n\n case 'bottom':\n top = targetRect.bottom + gap + offset.y;\n left = targetRect.left + targetRect.width / 2 - tooltipWidth / 2 + offset.x;\n arrowPosition = {\n left: tooltipWidth / 2 - arrowSize / 2,\n top: -arrowSize,\n };\n break;\n\n case 'left':\n top = targetRect.top + targetRect.height / 2 - tooltipHeight / 2 + offset.y;\n left = targetRect.left - tooltipWidth - gap + offset.x;\n arrowPosition = {\n top: tooltipHeight / 2 - arrowSize / 2,\n left: tooltipWidth,\n transform: 'rotate(-90deg)',\n };\n break;\n\n case 'right':\n top = targetRect.top + targetRect.height / 2 - tooltipHeight / 2 + offset.y;\n left = targetRect.right + gap + offset.x;\n arrowPosition = {\n top: tooltipHeight / 2 - arrowSize / 2,\n left: -arrowSize,\n transform: 'rotate(90deg)',\n };\n break;\n }\n\n // Clamp to viewport bounds\n const minLeft = viewport.scrollX + containerPadding;\n const maxLeft = viewport.scrollX + viewport.width - tooltipWidth - containerPadding;\n const minTop = viewport.scrollY + containerPadding;\n const maxTop = viewport.scrollY + viewport.height - tooltipHeight - containerPadding;\n\n // Adjust arrow position if tooltip is clamped horizontally\n const originalLeft = left;\n left = Math.max(minLeft, Math.min(maxLeft, left));\n if (finalPosition === 'top' || finalPosition === 'bottom') {\n arrowPosition.left = (arrowPosition.left || 0) + (originalLeft - left);\n }\n\n // Adjust arrow position if tooltip is clamped vertically\n const originalTop = top;\n top = Math.max(minTop, Math.min(maxTop, top));\n if (finalPosition === 'left' || finalPosition === 'right') {\n arrowPosition.top = (arrowPosition.top || 0) + (originalTop - top);\n }\n\n return {\n top,\n left,\n placement: finalPosition,\n arrowPosition,\n };\n}\n\n/**\n * Scroll an element into view with optional padding\n */\nexport function scrollIntoView(element: Element, padding: number = 100): void {\n const rect = element.getBoundingClientRect();\n const viewport = getViewport();\n\n const isAboveViewport = rect.top < padding;\n const isBelowViewport = rect.bottom > viewport.height - padding;\n const isLeftOfViewport = rect.left < padding;\n const isRightOfViewport = rect.right > viewport.width - padding;\n\n if (isAboveViewport || isBelowViewport || isLeftOfViewport || isRightOfViewport) {\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n}\n\n/**\n * Find an element using a selector strategy\n */\nexport function findElement(\n selectorStrategy: { css?: string; xpath?: string; text?: string; testId?: string } | null\n): Element | null {\n if (!selectorStrategy) return null;\n\n // Try CSS selector first\n if (selectorStrategy.css) {\n try {\n const element = document.querySelector(selectorStrategy.css);\n if (element) return element;\n } catch {\n // Invalid selector\n }\n }\n\n // Try data-testid\n if (selectorStrategy.testId) {\n const element = document.querySelector(`[data-testid=\"${selectorStrategy.testId}\"]`);\n if (element) return element;\n }\n\n // Try XPath\n if (selectorStrategy.xpath) {\n try {\n const result = document.evaluate(\n selectorStrategy.xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue) return result.singleNodeValue as Element;\n } catch {\n // Invalid xpath\n }\n }\n\n // Try text content (basic implementation)\n if (selectorStrategy.text) {\n const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (node.textContent?.includes(selectorStrategy.text)) {\n return node.parentElement;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Generate a spotlight/backdrop with a hole for the target element\n */\nexport function getSpotlightClipPath(element: Element, padding: number = 8): string {\n const rect = element.getBoundingClientRect();\n const paddedRect = {\n top: rect.top - padding,\n left: rect.left - padding,\n right: rect.right + padding,\n bottom: rect.bottom + padding,\n width: rect.width + padding * 2,\n height: rect.height + padding * 2,\n };\n\n // Create a polygon that covers everything except the element\n // Using a polygon with a hole (clockwise outer, counter-clockwise inner)\n return `polygon(\n 0 0,\n 100% 0,\n 100% 100%,\n 0 100%,\n 0 0,\n ${paddedRect.left}px ${paddedRect.top}px,\n ${paddedRect.left}px ${paddedRect.bottom}px,\n ${paddedRect.right}px ${paddedRect.bottom}px,\n ${paddedRect.right}px ${paddedRect.top}px,\n ${paddedRect.left}px ${paddedRect.top}px\n )`;\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { getSpotlightClipPath } from './positioning';\n\nexport interface BackdropProps {\n /**\n * Whether the backdrop is visible\n */\n visible: boolean;\n\n /**\n * Element to spotlight (cut out of backdrop)\n */\n spotlightElement?: Element | null;\n\n /**\n * Padding around the spotlighted element\n */\n spotlightPadding?: number;\n\n /**\n * Callback when clicking the backdrop (outside spotlight)\n */\n onClick?: () => void;\n\n /**\n * Whether clicking backdrop dismisses the guide\n */\n dismissOnClick?: boolean;\n\n /**\n * Custom z-index\n */\n zIndex?: number;\n\n /**\n * Backdrop opacity (0-1)\n */\n opacity?: number;\n}\n\nexport function Backdrop({\n visible,\n spotlightElement,\n spotlightPadding = 8,\n onClick,\n dismissOnClick = false,\n zIndex = 9998,\n opacity = 0.5,\n}: BackdropProps) {\n const [clipPath, setClipPath] = useState<string | undefined>();\n\n const updateClipPath = useCallback(() => {\n if (spotlightElement) {\n setClipPath(getSpotlightClipPath(spotlightElement, spotlightPadding));\n } else {\n setClipPath(undefined);\n }\n }, [spotlightElement, spotlightPadding]);\n\n useEffect(() => {\n if (!visible) return;\n\n updateClipPath();\n\n // Update on scroll and resize\n window.addEventListener('scroll', updateClipPath, true);\n window.addEventListener('resize', updateClipPath);\n\n return () => {\n window.removeEventListener('scroll', updateClipPath, true);\n window.removeEventListener('resize', updateClipPath);\n };\n }, [visible, updateClipPath]);\n\n if (!visible) return null;\n\n const handleClick = (e: React.MouseEvent) => {\n // Only fire if clicking the backdrop itself, not the spotlight area\n if (dismissOnClick && onClick) {\n onClick();\n }\n e.stopPropagation();\n };\n\n return (\n <div\n onClick={handleClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n backgroundColor: `rgba(0, 0, 0, ${opacity})`,\n clipPath,\n transition: 'clip-path 0.2s ease-out',\n cursor: dismissOnClick ? 'pointer' : 'default',\n pointerEvents: spotlightElement ? 'auto' : 'auto',\n }}\n aria-hidden=\"true\"\n />\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { GuideStepRichContent } from '../../../types';\n\nexport interface StepButtonsProps {\n /**\n * Button configuration from step\n */\n buttons?: GuideStepRichContent['buttons'];\n\n /**\n * Current step index\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Whether this is the last step\n */\n isLastStep: boolean;\n\n /**\n * Callback for next action\n */\n onNext: () => void;\n\n /**\n * Callback for previous action\n */\n onPrev: () => void;\n\n /**\n * Callback for dismiss action\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Accent color for primary buttons\n */\n accentColor?: string;\n}\n\nexport function StepButtons({\n buttons,\n currentStep,\n isLastStep,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n accentColor = '#2563eb',\n}: StepButtonsProps) {\n // If no custom buttons, use default next/prev/done\n if (!buttons || buttons.length === 0) {\n return (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}>\n <div>\n {currentStep > 0 && (\n <button\n onClick={onPrev}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n color: '#374151',\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n )}\n </div>\n <button\n onClick={isLastStep ? onDismiss : onNext}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n }}\n >\n {isLastStep ? 'Done' : 'Next'}\n </button>\n </div>\n );\n }\n\n // Render custom buttons\n const handleButtonClick = (button: NonNullable<GuideStepRichContent['buttons']>[number]) => {\n switch (button.action) {\n case 'next':\n onNext();\n break;\n case 'prev':\n onPrev();\n break;\n case 'dismiss':\n onDismiss();\n break;\n case 'url':\n if (button.url) {\n window.open(button.url, '_blank', 'noopener,noreferrer');\n }\n break;\n case 'custom':\n if (button.customAction && onCustomAction) {\n onCustomAction(button.customAction);\n }\n break;\n }\n };\n\n const getButtonStyle = (style?: 'primary' | 'secondary' | 'text'): React.CSSProperties => {\n switch (style) {\n case 'primary':\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n };\n case 'text':\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: accentColor,\n cursor: 'pointer',\n };\n case 'secondary':\n default:\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n color: '#374151',\n cursor: 'pointer',\n };\n }\n };\n\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '16px' }}>\n {buttons.map((button, index) => (\n <button\n key={index}\n onClick={() => handleButtonClick(button)}\n style={getButtonStyle(button.style)}\n >\n {button.label}\n </button>\n ))}\n </div>\n );\n}\n","'use client';\nimport type { GuideStep } from '../../../types';\n\nexport interface StepContentProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Text color for content\n */\n textColor?: string;\n\n /**\n * Whether to show the title\n */\n showTitle?: boolean;\n}\n\nexport function StepContent({\n step,\n textColor = '#1f2937',\n showTitle = true,\n}: StepContentProps) {\n const richContent = step.rich_content;\n const title = richContent?.title || step.title;\n const body = richContent?.body || step.content;\n\n return (\n <div>\n {/* Title */}\n {showTitle && title && (\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: 600,\n color: textColor,\n lineHeight: 1.4,\n }}\n >\n {title}\n </h3>\n )}\n\n {/* Body text */}\n {body && (\n <div\n style={{\n fontSize: '14px',\n color: textColor,\n opacity: 0.9,\n lineHeight: 1.5,\n }}\n // If body contains HTML, render it safely\n dangerouslySetInnerHTML={\n body.includes('<') ? { __html: sanitizeHTML(body) } : undefined\n }\n >\n {!body.includes('<') ? body : null}\n </div>\n )}\n\n {/* Media (image or video) */}\n {richContent?.media && (\n <div style={{ marginTop: '12px' }}>\n {richContent.media.type === 'image' && (\n <img\n src={richContent.media.url}\n alt={richContent.media.alt || ''}\n style={{\n maxWidth: '100%',\n height: 'auto',\n borderRadius: '4px',\n }}\n />\n )}\n {richContent.media.type === 'video' && (\n <video\n src={richContent.media.url}\n controls\n style={{\n maxWidth: '100%',\n height: 'auto',\n borderRadius: '4px',\n }}\n >\n Your browser does not support the video tag.\n </video>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Basic HTML sanitization for step content\n * Only allows safe tags and strips potentially dangerous attributes\n */\nfunction sanitizeHTML(html: string): string {\n // Allowed tags\n const allowedTags = [\n 'p', 'br', 'b', 'i', 'strong', 'em', 'u', 's',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li',\n 'a', 'code', 'pre', 'blockquote',\n 'span', 'div',\n ];\n\n // Create a temporary element to parse HTML\n if (typeof document === 'undefined') {\n // SSR fallback - just return text content\n return html.replace(/<[^>]*>/g, '');\n }\n\n const temp = document.createElement('div');\n temp.innerHTML = html;\n\n // Remove script tags and event handlers\n const scripts = temp.querySelectorAll('script');\n scripts.forEach((script) => script.remove());\n\n // Remove event handlers from all elements\n const allElements = temp.querySelectorAll('*');\n allElements.forEach((el) => {\n // Check if tag is allowed\n if (!allowedTags.includes(el.tagName.toLowerCase())) {\n // Replace with its text content\n const text = document.createTextNode(el.textContent || '');\n el.parentNode?.replaceChild(text, el);\n return;\n }\n\n // Remove dangerous attributes\n const attrs = Array.from(el.attributes);\n attrs.forEach((attr) => {\n const name = attr.name.toLowerCase();\n // Remove event handlers (onclick, onerror, etc.)\n if (name.startsWith('on')) {\n el.removeAttribute(attr.name);\n }\n // Remove javascript: URLs\n if (name === 'href' || name === 'src') {\n const value = attr.value.toLowerCase().trim();\n if (value.startsWith('javascript:') || value.startsWith('data:')) {\n el.removeAttribute(attr.name);\n }\n }\n // Only allow certain attributes\n const allowedAttrs = ['href', 'target', 'rel', 'class', 'style'];\n if (!allowedAttrs.includes(name)) {\n el.removeAttribute(attr.name);\n }\n });\n\n // Add rel=\"noopener noreferrer\" to links\n if (el.tagName.toLowerCase() === 'a') {\n el.setAttribute('rel', 'noopener noreferrer');\n el.setAttribute('target', '_blank');\n }\n });\n\n return temp.innerHTML;\n}\n","'use client';\n\nimport { useEffect, useState, useRef, useCallback } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { calculatePosition, findElement, scrollIntoView, type ComputedPosition } from './positioning';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface TooltipStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the tooltip\n */\n zIndex?: number;\n}\n\nexport function TooltipStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: TooltipStepProps) {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [position, setPosition] = useState<ComputedPosition | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 8;\n\n // Find the target element\n useEffect(() => {\n const element = findElement(step.selector_strategy);\n setTargetElement(element);\n\n if (element) {\n scrollIntoView(element, 120);\n }\n }, [step.selector_strategy]);\n\n // Calculate position when target or tooltip size changes\n const updatePosition = useCallback(() => {\n if (!targetElement || !tooltipRef.current) return;\n\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const newPosition = calculatePosition(\n targetElement,\n tooltipRect.width,\n tooltipRect.height,\n {\n preferredPosition: step.tooltip_position || step.display_config?.position as 'auto' | 'top' | 'bottom' | 'left' | 'right' || 'auto',\n offset: step.display_config?.offset,\n arrowSize: 8,\n }\n );\n\n setPosition(newPosition);\n setIsVisible(true);\n }, [targetElement, step.tooltip_position, step.display_config]);\n\n useEffect(() => {\n // Initial position calculation with a small delay to ensure tooltip is rendered\n const timer = setTimeout(updatePosition, 10);\n\n // Update on scroll and resize\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n clearTimeout(timer);\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [updatePosition]);\n\n // If no target element found, render as centered modal fallback\n if (!targetElement) {\n return (\n <>\n <Backdrop visible={true} />\n <div\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex,\n padding: '24px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n maxWidth: '400px',\n width: '90%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <StepContent step={step} textColor={textColor} />\n {showProgress && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n }\n\n return (\n <>\n <Backdrop\n visible={step.display_config?.backdrop !== false}\n spotlightElement={targetElement}\n spotlightPadding={step.display_config?.spotlightPadding || 8}\n dismissOnClick={false}\n />\n <div\n ref={tooltipRef}\n style={{\n position: 'absolute',\n top: position?.top || 0,\n left: position?.left || 0,\n zIndex,\n padding: '16px 20px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n maxWidth: step.display_config?.width || 320,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n opacity: isVisible ? 1 : 0,\n transition: 'opacity 0.15s ease-out',\n }}\n >\n {/* Arrow */}\n {position && (\n <div\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n borderLeft: '8px solid transparent',\n borderRight: '8px solid transparent',\n borderBottom: `8px solid ${backgroundColor}`,\n top: position.arrowPosition.top,\n left: position.arrowPosition.left,\n transform: position.arrowPosition.transform,\n }}\n />\n )}\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface ModalStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the modal\n */\n zIndex?: number;\n}\n\ntype ModalPosition = 'center' | 'top' | 'bottom';\n\nexport function ModalStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: ModalStepProps) {\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 12;\n\n // Get modal-specific display config\n const displayConfig = step.display_config || {};\n const width = displayConfig.width || 480;\n const position = (displayConfig.position as ModalPosition) || 'center';\n const dismissOnBackdropClick = displayConfig.backdrop !== false;\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onDismiss();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [onDismiss]);\n\n // Lock body scroll\n useEffect(() => {\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }, []);\n\n const getPositionStyles = (): React.CSSProperties => {\n switch (position) {\n case 'top':\n return {\n top: '10%',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case 'bottom':\n return {\n bottom: '10%',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case 'center':\n default:\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n }\n };\n\n return (\n <>\n <Backdrop\n visible={true}\n onClick={dismissOnBackdropClick ? onDismiss : undefined}\n dismissOnClick={dismissOnBackdropClick}\n opacity={0.6}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"guide-modal-title\"\n style={{\n position: 'fixed',\n ...getPositionStyles(),\n zIndex,\n width: '90%',\n maxWidth: width,\n maxHeight: '85vh',\n overflow: 'auto',\n padding: '24px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Close button */}\n <button\n onClick={onDismiss}\n aria-label=\"Close\"\n style={{\n position: 'absolute',\n top: '12px',\n right: '12px',\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n color: '#9ca3af',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.15s',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#6b7280')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#9ca3af')}\n >\n ×\n </button>\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && totalSteps > 1 && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n gap: '6px',\n marginTop: '16px',\n }}\n >\n {Array.from({ length: totalSteps }).map((_, i) => (\n <div\n key={i}\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: i === currentStep ? accentColor : '#e5e7eb',\n transition: 'background-color 0.15s',\n }}\n />\n ))}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface SlideoutStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the slideout\n */\n zIndex?: number;\n}\n\ntype SlideoutSide = 'left' | 'right';\n\nexport function SlideoutStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: SlideoutStepProps) {\n const [isAnimating, setIsAnimating] = useState(true);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 0;\n\n // Get slideout-specific display config\n const displayConfig = step.display_config || {};\n const width = displayConfig.width || 400;\n const side: SlideoutSide = (displayConfig.position as SlideoutSide) === 'left' ? 'left' : 'right';\n const showBackdrop = displayConfig.backdrop !== false;\n\n // Animate in\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(false), 50);\n return () => clearTimeout(timer);\n }, []);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onDismiss();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [onDismiss]);\n\n const getSlideStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n bottom: 0,\n width: '90%',\n maxWidth: width,\n zIndex,\n backgroundColor,\n color: textColor,\n boxShadow: side === 'right'\n ? '-10px 0 30px -5px rgba(0, 0, 0, 0.1)'\n : '10px 0 30px -5px rgba(0, 0, 0, 0.1)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'auto',\n transition: 'transform 0.3s ease-out',\n };\n\n if (side === 'right') {\n return {\n ...baseStyles,\n right: 0,\n borderTopLeftRadius: borderRadius,\n borderBottomLeftRadius: borderRadius,\n transform: isAnimating ? 'translateX(100%)' : 'translateX(0)',\n };\n } else {\n return {\n ...baseStyles,\n left: 0,\n borderTopRightRadius: borderRadius,\n borderBottomRightRadius: borderRadius,\n transform: isAnimating ? 'translateX(-100%)' : 'translateX(0)',\n };\n }\n };\n\n return (\n <>\n {showBackdrop && (\n <Backdrop\n visible={true}\n onClick={onDismiss}\n dismissOnClick={true}\n opacity={0.4}\n />\n )}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"guide-slideout-title\"\n style={getSlideStyles()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n position: 'sticky',\n top: 0,\n backgroundColor,\n zIndex: 1,\n }}\n >\n <h2\n id=\"guide-slideout-title\"\n style={{\n margin: 0,\n fontSize: '18px',\n fontWeight: 600,\n color: textColor,\n }}\n >\n {step.rich_content?.title || step.title || 'Guide'}\n </h2>\n <button\n onClick={onDismiss}\n aria-label=\"Close\"\n style={{\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n color: '#9ca3af',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n ×\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: '20px' }}>\n <StepContent step={step} textColor={textColor} showTitle={false} />\n\n {showProgress && totalSteps > 1 && (\n <div\n style={{\n fontSize: '12px',\n color: '#6b7280',\n marginTop: '16px',\n }}\n >\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div\n style={{\n padding: '16px 20px',\n borderTop: '1px solid #e5e7eb',\n position: 'sticky',\n bottom: 0,\n backgroundColor,\n }}\n >\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState, useRef, useCallback } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { calculatePosition, findElement, scrollIntoView, getElementRect, type ComputedPosition } from './positioning';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface HotspotStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the hotspot\n */\n zIndex?: number;\n}\n\ntype BeaconStyle = 'pulse' | 'static' | 'numbered';\n\nexport function HotspotStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: HotspotStepProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const [beaconPosition, setBeaconPosition] = useState({ top: 0, left: 0 });\n const [popoverPosition, setPopoverPosition] = useState<ComputedPosition | null>(null);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 8;\n\n // Get hotspot-specific display config\n const displayConfig = step.display_config || {};\n // Could read beaconStyle from displayConfig in future\n const beaconStyle = 'pulse' as BeaconStyle;\n\n // Find target element\n useEffect(() => {\n const element = findElement(step.selector_strategy);\n setTargetElement(element);\n\n if (element) {\n scrollIntoView(element, 120);\n }\n }, [step.selector_strategy]);\n\n // Update beacon position\n const updateBeaconPosition = useCallback(() => {\n if (!targetElement) return;\n\n const rect = getElementRect(targetElement);\n // Position beacon at top-right corner of element\n setBeaconPosition({\n top: rect.top - 8,\n left: rect.right - 8,\n });\n }, [targetElement]);\n\n // Update popover position when expanded\n const updatePopoverPosition = useCallback(() => {\n if (!targetElement || !popoverRef.current || !isExpanded) return;\n\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const newPosition = calculatePosition(\n targetElement,\n popoverRect.width,\n popoverRect.height,\n {\n preferredPosition: step.tooltip_position || 'auto',\n offset: step.display_config?.offset,\n arrowSize: 8,\n }\n );\n\n setPopoverPosition(newPosition);\n }, [targetElement, isExpanded, step.tooltip_position, step.display_config?.offset]);\n\n useEffect(() => {\n updateBeaconPosition();\n if (isExpanded) {\n setTimeout(updatePopoverPosition, 10);\n }\n\n window.addEventListener('scroll', updateBeaconPosition, true);\n window.addEventListener('resize', updateBeaconPosition);\n\n return () => {\n window.removeEventListener('scroll', updateBeaconPosition, true);\n window.removeEventListener('resize', updateBeaconPosition);\n };\n }, [updateBeaconPosition, updatePopoverPosition, isExpanded]);\n\n // Handle click outside to close\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target as Node)) {\n setIsExpanded(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isExpanded]);\n\n // If no target element, show nothing (hotspots require an anchor)\n if (!targetElement) {\n return null;\n }\n\n // CSS for pulsing animation\n const pulseKeyframes = `\n @keyframes census-hotspot-pulse {\n 0% {\n transform: scale(1);\n box-shadow: 0 0 0 0 ${accentColor}66;\n }\n 70% {\n transform: scale(1.1);\n box-shadow: 0 0 0 10px ${accentColor}00;\n }\n 100% {\n transform: scale(1);\n box-shadow: 0 0 0 0 ${accentColor}00;\n }\n }\n `;\n\n return (\n <>\n {/* Inject animation styles */}\n <style dangerouslySetInnerHTML={{ __html: pulseKeyframes }} />\n\n {/* Beacon */}\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-label=\"Show more information\"\n aria-expanded={isExpanded}\n style={{\n position: 'absolute',\n top: beaconPosition.top,\n left: beaconPosition.left,\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n zIndex,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 600,\n animation: beaconStyle === 'pulse' && !isExpanded ? 'census-hotspot-pulse 2s infinite' : 'none',\n transition: 'transform 0.15s',\n }}\n >\n {beaconStyle === 'numbered' ? currentStep + 1 : '?'}\n </button>\n\n {/* Expanded popover */}\n {isExpanded && (\n <div\n ref={popoverRef}\n style={{\n position: 'absolute',\n top: popoverPosition?.top || beaconPosition.top + 30,\n left: popoverPosition?.left || beaconPosition.left - 140,\n zIndex: zIndex + 1,\n padding: '16px 20px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n maxWidth: displayConfig.width || 300,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Arrow pointing to beacon */}\n {popoverPosition && (\n <div\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n borderLeft: '8px solid transparent',\n borderRight: '8px solid transparent',\n borderBottom: `8px solid ${backgroundColor}`,\n top: popoverPosition.arrowPosition.top,\n left: popoverPosition.arrowPosition.left,\n transform: popoverPosition.arrowPosition.transform,\n }}\n />\n )}\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && totalSteps > 1 && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={() => {\n setIsExpanded(false);\n onNext();\n }}\n onPrev={() => {\n setIsExpanded(false);\n onPrev();\n }}\n onDismiss={() => {\n setIsExpanded(false);\n onDismiss();\n }}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n )}\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { StepButtons } from './StepButtons';\n\nexport interface BannerStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the banner\n */\n zIndex?: number;\n}\n\ntype BannerPosition = 'top' | 'bottom';\ntype BannerVariant = 'info' | 'warning' | 'success' | 'custom';\n\nconst variantStyles: Record<BannerVariant, { bg: string; text: string; icon: string }> = {\n info: { bg: '#eff6ff', text: '#1e40af', icon: 'i' },\n warning: { bg: '#fef3c7', text: '#92400e', icon: '!' },\n success: { bg: '#dcfce7', text: '#166534', icon: '✓' },\n custom: { bg: '#2563eb', text: 'white', icon: '' },\n};\n\nexport function BannerStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: BannerStepProps) {\n const [isAnimating, setIsAnimating] = useState(true);\n const [isVisible, setIsVisible] = useState(true);\n\n const style = { ...globalStyle, ...step.style_config };\n const displayConfig = step.display_config || {};\n\n // Get banner-specific config\n const position: BannerPosition = displayConfig.bannerPosition || 'top';\n const variant: BannerVariant = 'custom'; // Could be from config\n\n // Use style colors or variant defaults\n const backgroundColor = style.backgroundColor || variantStyles[variant].bg;\n const textColor = style.textColor || variantStyles[variant].text;\n const accentColor = style.accentColor || '#2563eb';\n\n // Animate in\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(false), 50);\n return () => clearTimeout(timer);\n }, []);\n\n // Handle dismiss with animation\n const handleDismiss = () => {\n setIsAnimating(true);\n setTimeout(() => {\n setIsVisible(false);\n onDismiss();\n }, 200);\n };\n\n if (!isVisible) return null;\n\n const richContent = step.rich_content;\n const title = richContent?.title || step.title;\n const body = richContent?.body || step.content;\n const hasButtons = richContent?.buttons && richContent.buttons.length > 0;\n\n return (\n <div\n role=\"alert\"\n style={{\n position: 'fixed',\n left: 0,\n right: 0,\n [position]: 0,\n zIndex,\n padding: '12px 20px',\n backgroundColor,\n color: textColor,\n boxShadow: position === 'top'\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n : '0 -4px 6px -1px rgba(0, 0, 0, 0.1)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n transform: isAnimating\n ? position === 'top' ? 'translateY(-100%)' : 'translateY(100%)'\n : 'translateY(0)',\n transition: 'transform 0.2s ease-out',\n }}\n >\n <div\n style={{\n maxWidth: '1200px',\n margin: '0 auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '16px',\n }}\n >\n {/* Content */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: '12px' }}>\n {/* Icon */}\n {variantStyles[variant].icon && (\n <div\n style={{\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : textColor,\n color: variant === 'custom' ? textColor : backgroundColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {variantStyles[variant].icon}\n </div>\n )}\n\n {/* Text content */}\n <div style={{ flex: 1 }}>\n {title && (\n <strong style={{ display: 'block', marginBottom: body ? '2px' : 0 }}>\n {title}\n </strong>\n )}\n {body && (\n <span style={{ opacity: 0.9, fontSize: '14px' }}>\n {body}\n </span>\n )}\n </div>\n\n {/* Progress */}\n {showProgress && totalSteps > 1 && (\n <span style={{ fontSize: '12px', opacity: 0.7, flexShrink: 0 }}>\n {currentStep + 1}/{totalSteps}\n </span>\n )}\n </div>\n\n {/* Actions */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', flexShrink: 0 }}>\n {hasButtons ? (\n <StepButtons\n buttons={richContent.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={handleDismiss}\n onCustomAction={onCustomAction}\n accentColor={variant === 'custom' ? 'white' : accentColor}\n />\n ) : (\n <>\n {currentStep < totalSteps - 1 ? (\n <button\n onClick={onNext}\n style={{\n padding: '6px 12px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : accentColor,\n color: variant === 'custom' ? textColor : 'white',\n cursor: 'pointer',\n }}\n >\n Next\n </button>\n ) : (\n <button\n onClick={handleDismiss}\n style={{\n padding: '6px 12px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : accentColor,\n color: variant === 'custom' ? textColor : 'white',\n cursor: 'pointer',\n }}\n >\n Got it\n </button>\n )}\n </>\n )}\n\n {/* Close button */}\n <button\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n style={{\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: textColor,\n opacity: 0.7,\n fontSize: '18px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n ×\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport type { Guide, GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { TooltipStep } from './TooltipStep';\nimport { ModalStep } from './ModalStep';\nimport { SlideoutStep } from './SlideoutStep';\nimport { HotspotStep } from './HotspotStep';\nimport { BannerStep } from './BannerStep';\n\nexport interface GuideRendererProps {\n /**\n * The guide to render\n */\n guide: Guide;\n\n /**\n * Callback when guide is completed\n */\n onComplete?: (guide: Guide) => void;\n\n /**\n * Callback when guide is dismissed (skipped)\n */\n onDismiss?: (guide: Guide, step: number) => void;\n\n /**\n * Callback when a step changes\n */\n onStepChange?: (step: number, totalSteps: number) => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string, step: GuideStep) => void;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Starting step index\n */\n startStep?: number;\n\n /**\n * Z-index base for guide elements\n */\n zIndex?: number;\n}\n\n/**\n * GuideRenderer - Displays a guide step by step\n *\n * Renders the appropriate step type component based on the step's step_type field.\n *\n * @example\n * ```tsx\n * <GuideRenderer\n * guide={myGuide}\n * onComplete={(guide) => console.log('Completed:', guide.name)}\n * onDismiss={(guide, step) => console.log('Dismissed at step:', step)}\n * />\n * ```\n */\nexport function GuideRenderer({\n guide,\n onComplete,\n onDismiss,\n onStepChange,\n onCustomAction,\n globalStyle,\n startStep = 0,\n zIndex = 9999,\n}: GuideRendererProps) {\n const [currentStepIndex, setCurrentStepIndex] = useState(startStep);\n const [isActive, setIsActive] = useState(true);\n\n const steps = guide.guide_steps || [];\n const totalSteps = steps.length;\n const currentStep = steps[currentStepIndex];\n\n // Notify when step changes\n useEffect(() => {\n onStepChange?.(currentStepIndex, totalSteps);\n }, [currentStepIndex, totalSteps, onStepChange]);\n\n // Handle next step\n const handleNext = useCallback(() => {\n if (currentStepIndex < totalSteps - 1) {\n setCurrentStepIndex((prev) => prev + 1);\n } else {\n // Guide completed\n setIsActive(false);\n onComplete?.(guide);\n }\n }, [currentStepIndex, totalSteps, guide, onComplete]);\n\n // Handle previous step\n const handlePrev = useCallback(() => {\n if (currentStepIndex > 0) {\n setCurrentStepIndex((prev) => prev - 1);\n }\n }, [currentStepIndex]);\n\n // Handle dismiss\n const handleDismiss = useCallback(() => {\n setIsActive(false);\n onDismiss?.(guide, currentStepIndex);\n }, [guide, currentStepIndex, onDismiss]);\n\n // Handle custom action\n const handleCustomAction = useCallback(\n (actionName: string) => {\n if (currentStep) {\n onCustomAction?.(actionName, currentStep);\n }\n },\n [currentStep, onCustomAction]\n );\n\n // If not active or no steps, don't render\n if (!isActive || !currentStep || steps.length === 0) {\n return null;\n }\n\n // Common props for all step types\n const stepProps = {\n step: currentStep,\n currentStep: currentStepIndex,\n totalSteps,\n onNext: handleNext,\n onPrev: handlePrev,\n onDismiss: handleDismiss,\n onCustomAction: handleCustomAction,\n showProgress: guide.show_progress !== false,\n globalStyle: { ...guide.theme, ...globalStyle } as GuideStepStyleConfig,\n zIndex,\n };\n\n // Render the appropriate step type\n switch (currentStep.step_type) {\n case 'tooltip':\n return <TooltipStep {...stepProps} />;\n\n case 'modal':\n return <ModalStep {...stepProps} />;\n\n case 'slideout':\n return <SlideoutStep {...stepProps} />;\n\n case 'hotspot':\n return <HotspotStep {...stepProps} />;\n\n case 'banner':\n return <BannerStep {...stepProps} />;\n\n default:\n // Default to tooltip for unknown types\n return <TooltipStep {...stepProps} />;\n }\n}\n\n// Re-export individual step components for custom use cases\nexport { TooltipStep } from './TooltipStep';\nexport { ModalStep } from './ModalStep';\nexport { SlideoutStep } from './SlideoutStep';\nexport { HotspotStep } from './HotspotStep';\nexport { BannerStep } from './BannerStep';\nexport { Backdrop } from './Backdrop';\nexport { StepButtons } from './StepButtons';\nexport { StepContent } from './StepContent';\nexport * from './positioning';\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","../../src/react/components/GuideBuilder/StepEditor.tsx","../../src/react/components/GuideBuilder/ElementSelector.tsx","../../src/react/components/GuideBuilder/index.tsx","../../src/react/components/GuideRenderer/positioning.ts","../../src/react/components/GuideRenderer/Backdrop.tsx","../../src/react/components/GuideRenderer/StepButtons.tsx","../../src/react/components/GuideRenderer/StepContent.tsx","../../src/react/components/GuideRenderer/TooltipStep.tsx","../../src/react/components/GuideRenderer/ModalStep.tsx","../../src/react/components/GuideRenderer/SlideoutStep.tsx","../../src/react/components/GuideRenderer/HotspotStep.tsx","../../src/react/components/GuideRenderer/BannerStep.tsx","../../src/react/components/GuideRenderer/index.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","eventType","properties","events","event","guideId","body","stepId","stepOrder","path","method","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","err","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","feedbackId","setFeedbackId","submitFeedback","useCallback","result","reset","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","useRequests","fetchRequests","useTrack","track","trackBatch","useGuides","fetchGuides","useGuideBuilder","guide","setGuide","steps","setSteps","isSaving","setIsSaving","selectedStepId","setSelectedStepId","hasUnsavedChanges","useRef","loadGuide","loadedGuide","createGuide","newGuide","updateGuide","updatedGuide","publishGuide","unpublishGuide","deleteGuide","addStep","newStep","prev","updateStep","updatedStep","step","deleteStep","reorderSteps","newOrder","reorderedSteps","moveStepUp","currentIndex","s","index","moveStepDown","selectedStep","useGuideRenderer","activeGuide","setActiveGuide","currentStepIndex","setCurrentStepIndex","isPlaying","setIsPlaying","completedGuideIds","setCompletedGuideIds","dismissedGuideIds","setDismissedGuideIds","startGuide","startStep","nextStep","prevStep","goToStep","stepIndex","dismiss","pause","resume","trackStepView","trackGuideComplete","trackGuideDismiss","currentStep","totalSteps","isLastStep","isFirstStep","isGuideCompleted","isGuideDismissed","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","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","requests","refetch","handleRequestClick","request","typeInfo","statusInfo","isHovered","defaultTabLabels","FeatureGroupCard","group","onClick","ArticlesContent","featureId","featureName","onBack","filteredArticles","a","RequestsContent","HelpCenter","tabs","defaultTab","tabLabels","_showCategories","onTabChange","initialTab","activeTab","setActiveTab","selectedGroupId","setSelectedGroupId","selectedFeature","setSelectedFeature","isLoadingGroups","openRequestsCount","r","mergedLabels","selectedGroup","g","handleTabChange","tab","handleGroupClick","handleFeatureClick","feature","handleBackToGroups","handleBackToFeatures","showTabs","stepTypeLabels","stepTypeDescriptions","positionOptions","advanceTriggerOptions","StepEditor","onUpdate","onSelectElement","isSelectingElement","stepType","setStepType","title","setTitle","setBody","setPosition","selector","setSelector","backdrop","setBackdrop","advanceTrigger","setAdvanceTrigger","advanceDelay","setAdvanceDelay","handleSave","selectorStrategy","richContent","displayConfig","advanceConfig","needsSelector","opt","generateSelector","element","testId","parts","current","depth","maxDepth","classes","c","parent","siblings","child","testSelector","count","ElementSelector","isActive","onSelect","onCancel","ignoreSelector","zIndex","hoveredElement","setHoveredElement","highlightRect","setHighlightRect","generatedSelector","setGeneratedSelector","overlayRef","updateHighlight","handleMouseMove","target","el","handleScroll","handleClick","handleKeyDown","selectorTest","GuideBuilder","controlledIsOpen","onSave","onPublish","trigger","internalIsOpen","setInternalIsOpen","handlePublish","publishedGuide","handleAddStep","GuideBuilderModal","onAddStep","onSelectStep","onUpdateStep","onDeleteStep","onMoveStepUp","onMoveStepDown","setIsSelectingElement","handleElementSelect","_element","btn","i","getElementRect","rect","getViewport","hasSpaceForPosition","targetRect","tooltipWidth","tooltipHeight","padding","viewport","scrollX","scrollY","viewportWidth","viewportHeight","findBestPosition","positionOrder","calculatePosition","targetElement","preferredPosition","offset","containerPadding","arrowSize","finalPosition","opposite","top","left","arrowPosition","gap","minLeft","maxLeft","minTop","maxTop","originalLeft","originalTop","scrollIntoView","isAboveViewport","isBelowViewport","isLeftOfViewport","isRightOfViewport","findElement","walker","node","getSpotlightClipPath","paddedRect","Backdrop","visible","spotlightElement","spotlightPadding","dismissOnClick","opacity","clipPath","setClipPath","updateClipPath","StepButtons","buttons","onNext","onPrev","onDismiss","onCustomAction","accentColor","handleButtonClick","button","getButtonStyle","style","StepContent","textColor","showTitle","sanitizeHTML","html","allowedTags","temp","script","attr","name","TooltipStep","showProgress","globalStyle","tooltipRef","setTargetElement","isVisible","setIsVisible","backgroundColor","borderRadius","updatePosition","tooltipRect","newPosition","timer","ModalStep","width","dismissOnBackdropClick","originalOverflow","_","SlideoutStep","isAnimating","setIsAnimating","side","showBackdrop","baseStyles","HotspotStep","popoverRef","isExpanded","setIsExpanded","beaconPosition","setBeaconPosition","popoverPosition","setPopoverPosition","updateBeaconPosition","updatePopoverPosition","popoverRect","handleClickOutside","pulseKeyframes","variantStyles","BannerStep","variant","handleDismiss","hasButtons","GuideRenderer","onComplete","onStepChange","setIsActive","handleNext","handlePrev","handleCustomAction","actionName","stepProps"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n FeatureGroupsResponse,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuideStep,\n GuidesOptions,\n GuidesResponse,\n GuideAnalyticsEvent,\n CreateGuideOptions,\n UpdateGuideOptions,\n CreateGuideStepOptions,\n UpdateGuideStepOptions,\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.\n * Used by the HelpCenter component for navigation.\n *\n * @returns Feature groups with features and article counts\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 * 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 // Guide Builder Methods\n // ============================================================================\n\n /**\n * Get published guides.\n *\n * @param options - Query options\n * @returns Guides and completion status\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides({\n * url: window.location.href,\n * userId: 'user_123',\n * });\n * ```\n */\n async getGuides(options?: GuidesOptions): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (options?.projectId) params.set('project_id', options.projectId);\n if (options?.url) params.set('url', options.url);\n if (options?.userId) params.set('user_id', options.userId);\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 * Get a single guide by ID.\n *\n * @param guideId - Guide ID\n * @returns Guide with steps or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('guide_123');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(guideId: string): Promise<Guide | null> {\n try {\n const response = await this.request<{ guide: Guide }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'GET'\n );\n this.log('Fetched guide:', guideId);\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 * Create a new guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param options - Guide creation options\n * @returns Created guide\n *\n * @example\n * ```typescript\n * const guide = await census.createGuide({\n * name: 'Welcome Tour',\n * slug: 'welcome-tour',\n * description: 'Introduction to the app',\n * triggerType: 'first_visit',\n * });\n * ```\n */\n async createGuide(options: CreateGuideOptions): Promise<Guide> {\n if (!options.name || !options.slug) {\n throw new Error('Census: name and slug are required for createGuide()');\n }\n\n const response = await this.request<{ guide: Guide }>(\n '/api/sdk/guides',\n 'POST',\n {\n name: options.name,\n slug: options.slug,\n description: options.description,\n project_id: options.projectId,\n trigger_type: options.triggerType || 'manual',\n trigger_config: options.triggerConfig || {},\n theme: options.theme || {},\n allow_skip: options.allowSkip ?? true,\n show_progress: options.showProgress ?? true,\n }\n );\n\n this.log('Guide created:', response.guide.id);\n return response.guide;\n }\n\n /**\n * Update an existing guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID to update\n * @param options - Update options\n * @returns Updated guide\n *\n * @example\n * ```typescript\n * const guide = await census.updateGuide('guide_123', {\n * name: 'Updated Tour Name',\n * status: 'published',\n * });\n * ```\n */\n async updateGuide(guideId: string, options: UpdateGuideOptions): Promise<Guide> {\n if (!guideId) {\n throw new Error('Census: guideId is required for updateGuide()');\n }\n\n const body: Record<string, unknown> = {};\n if (options.name !== undefined) body.name = options.name;\n if (options.slug !== undefined) body.slug = options.slug;\n if (options.description !== undefined) body.description = options.description;\n if (options.triggerType !== undefined) body.trigger_type = options.triggerType;\n if (options.triggerConfig !== undefined) body.trigger_config = options.triggerConfig;\n if (options.theme !== undefined) body.theme = options.theme;\n if (options.allowSkip !== undefined) body.allow_skip = options.allowSkip;\n if (options.showProgress !== undefined) body.show_progress = options.showProgress;\n if (options.status !== undefined) body.status = options.status;\n\n const response = await this.request<{ guide: Guide }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'PUT',\n body\n );\n\n this.log('Guide updated:', guideId);\n return response.guide;\n }\n\n /**\n * Delete a guide.\n * Requires guides:admin scope.\n *\n * @param guideId - Guide ID to delete\n *\n * @example\n * ```typescript\n * await census.deleteGuide('guide_123');\n * ```\n */\n async deleteGuide(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for deleteGuide()');\n }\n\n await this.request(\n `/api/sdk/guides/${encodeURIComponent(guideId)}`,\n 'DELETE'\n );\n\n this.log('Guide deleted:', guideId);\n }\n\n /**\n * Get steps for a guide.\n *\n * @param guideId - Guide ID\n * @returns Array of steps\n *\n * @example\n * ```typescript\n * const steps = await census.getGuideSteps('guide_123');\n * ```\n */\n async getGuideSteps(guideId: string): Promise<GuideStep[]> {\n const response = await this.request<{ steps: GuideStep[] }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'GET'\n );\n this.log('Fetched steps for guide:', guideId);\n return response.steps;\n }\n\n /**\n * Add a step to a guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param options - Step creation options\n * @returns Created step\n *\n * @example\n * ```typescript\n * const step = await census.addGuideStep('guide_123', {\n * stepType: 'tooltip',\n * selectorStrategy: { css: '.welcome-button' },\n * richContent: {\n * title: 'Welcome!',\n * body: 'Click here to get started',\n * },\n * });\n * ```\n */\n async addGuideStep(guideId: string, options: CreateGuideStepOptions): Promise<GuideStep> {\n if (!guideId) {\n throw new Error('Census: guideId is required for addGuideStep()');\n }\n\n const response = await this.request<{ step: GuideStep }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'POST',\n {\n step_type: options.stepType || 'tooltip',\n sort_order: options.sortOrder,\n selector_strategy: options.selectorStrategy || {},\n title: options.title,\n content: options.content,\n tooltip_position: options.tooltipPosition || 'auto',\n rich_content: options.richContent || {},\n display_config: options.displayConfig || {},\n advance_config: options.advanceConfig || { trigger: 'button' },\n style_config: options.styleConfig || {},\n }\n );\n\n this.log('Step added to guide:', guideId);\n return response.step;\n }\n\n /**\n * Update a guide step.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepId - Step ID\n * @param options - Update options\n * @returns Updated step\n *\n * @example\n * ```typescript\n * const step = await census.updateGuideStep('guide_123', 'step_456', {\n * richContent: { title: 'Updated title' },\n * });\n * ```\n */\n async updateGuideStep(\n guideId: string,\n stepId: string,\n options: UpdateGuideStepOptions\n ): Promise<GuideStep> {\n if (!guideId || !stepId) {\n throw new Error('Census: guideId and stepId are required for updateGuideStep()');\n }\n\n const body: Record<string, unknown> = {};\n if (options.stepType !== undefined) body.step_type = options.stepType;\n if (options.sortOrder !== undefined) body.sort_order = options.sortOrder;\n if (options.selectorStrategy !== undefined) body.selector_strategy = options.selectorStrategy;\n if (options.title !== undefined) body.title = options.title;\n if (options.content !== undefined) body.content = options.content;\n if (options.tooltipPosition !== undefined) body.tooltip_position = options.tooltipPosition;\n if (options.richContent !== undefined) body.rich_content = options.richContent;\n if (options.displayConfig !== undefined) body.display_config = options.displayConfig;\n if (options.advanceConfig !== undefined) body.advance_config = options.advanceConfig;\n if (options.styleConfig !== undefined) body.style_config = options.styleConfig;\n\n const response = await this.request<{ step: GuideStep }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps/${encodeURIComponent(stepId)}`,\n 'PUT',\n body\n );\n\n this.log('Step updated:', stepId);\n return response.step;\n }\n\n /**\n * Delete a guide step.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepId - Step ID\n *\n * @example\n * ```typescript\n * await census.deleteGuideStep('guide_123', 'step_456');\n * ```\n */\n async deleteGuideStep(guideId: string, stepId: string): Promise<void> {\n if (!guideId || !stepId) {\n throw new Error('Census: guideId and stepId are required for deleteGuideStep()');\n }\n\n await this.request(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps/${encodeURIComponent(stepId)}`,\n 'DELETE'\n );\n\n this.log('Step deleted:', stepId);\n }\n\n /**\n * Reorder steps in a guide.\n * Requires guides:create or guides:admin scope.\n *\n * @param guideId - Guide ID\n * @param stepOrder - Array of { id, sort_order } to define new order\n * @returns Updated steps\n *\n * @example\n * ```typescript\n * const steps = await census.reorderGuideSteps('guide_123', [\n * { id: 'step_a', sort_order: 0 },\n * { id: 'step_b', sort_order: 1 },\n * { id: 'step_c', sort_order: 2 },\n * ]);\n * ```\n */\n async reorderGuideSteps(\n guideId: string,\n stepOrder: Array<{ id: string; sort_order: number }>\n ): Promise<GuideStep[]> {\n if (!guideId) {\n throw new Error('Census: guideId is required for reorderGuideSteps()');\n }\n\n const response = await this.request<{ steps: GuideStep[] }>(\n `/api/sdk/guides/${encodeURIComponent(guideId)}/steps`,\n 'PUT',\n { steps: stepOrder }\n );\n\n this.log('Steps reordered for guide:', guideId);\n return response.steps;\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 } 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 = 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\n const reset = () => {\n client.reset();\n };\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n FeatureGroupsResponse,\n RequestsOptions,\n RequestsResponse,\n Guide,\n GuideStep,\n GuidesResponse,\n CreateGuideOptions,\n UpdateGuideOptions,\n CreateGuideStepOptions,\n UpdateGuideStepOptions,\n GuidesOptions,\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\n/**\n * Hook for fetching feature groups with their features.\n * Used by the HelpCenter component for navigation.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n *\n * return (\n * <nav>\n * {featureGroups.map(group => (\n * <div key={group.id}>\n * <h3>{group.name}</h3>\n * <ul>\n * {group.features.map(feature => (\n * <li key={feature.id}>{feature.name}</li>\n * ))}\n * </ul>\n * </div>\n * ))}\n * </nav>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroupsResponse['feature_groups']>([]);\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\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 } = 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 && isIdentified) {\n fetchRequests();\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchRequests,\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// Guide Builder Hooks\n// ============================================================================\n\n/**\n * Hook for fetching guides.\n *\n * @param options - Query options (optional)\n * @returns Object with guides data and loading state\n *\n * @example\n * ```tsx\n * function GuidesList() {\n * const { guides, isLoading, completedGuides } = useGuides({\n * url: window.location.href,\n * });\n *\n * if (isLoading) return <p>Loading...</p>;\n *\n * return (\n * <ul>\n * {guides.map(guide => (\n * <li key={guide.id}>\n * {guide.name}\n * {completedGuides.includes(guide.id) && ' (completed)'}\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useGuides(options?: GuidesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<GuidesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchGuides = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getGuides(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch guides'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.projectId, options?.url, options?.userId]);\n\n useEffect(() => {\n if (isReady) {\n fetchGuides();\n }\n }, [isReady, fetchGuides]);\n\n return {\n guides: data?.guides || [],\n completedGuides: data?.completedGuides || [],\n isLoading,\n error,\n refetch: fetchGuides,\n };\n}\n\n/**\n * Hook for the Guide Builder - manages creation and editing of guides.\n *\n * @returns Object with guide builder state and actions\n *\n * @example\n * ```tsx\n * function GuideBuilderUI() {\n * const {\n * guide,\n * steps,\n * isLoading,\n * isSaving,\n * createGuide,\n * updateGuide,\n * addStep,\n * updateStep,\n * deleteStep,\n * reorderSteps,\n * publishGuide,\n * } = useGuideBuilder();\n *\n * const handleCreateGuide = async () => {\n * await createGuide({\n * name: 'My Tour',\n * slug: 'my-tour',\n * });\n * };\n *\n * return (\n * <div>\n * <button onClick={handleCreateGuide} disabled={isSaving}>\n * Create Guide\n * </button>\n * {guide && (\n * <div>\n * <h2>{guide.name}</h2>\n * <p>{steps.length} steps</p>\n * </div>\n * )}\n * </div>\n * );\n * }\n * ```\n */\nexport function useGuideBuilder() {\n const { client, isReady } = useCensusContext();\n const [guide, setGuide] = useState<Guide | null>(null);\n const [steps, setSteps] = useState<GuideStep[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [selectedStepId, setSelectedStepId] = useState<string | null>(null);\n\n // Track unsaved changes\n const hasUnsavedChanges = useRef(false);\n\n // Load a guide by ID\n const loadGuide = useCallback(\n async (guideId: string) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const loadedGuide = await client.getGuide(guideId);\n if (loadedGuide) {\n setGuide(loadedGuide);\n setSteps(loadedGuide.guide_steps || []);\n setSelectedStepId(loadedGuide.guide_steps?.[0]?.id || null);\n }\n return loadedGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load guide'));\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n // Create a new guide\n const createGuide = useCallback(\n async (options: CreateGuideOptions) => {\n setIsSaving(true);\n setError(null);\n\n try {\n const newGuide = await client.createGuide(options);\n setGuide(newGuide);\n setSteps([]);\n setSelectedStepId(null);\n return newGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client]\n );\n\n // Update current guide\n const updateGuide = useCallback(\n async (options: UpdateGuideOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const updatedGuide = await client.updateGuide(guide.id, options);\n setGuide(updatedGuide);\n hasUnsavedChanges.current = false;\n return updatedGuide;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Publish the guide\n const publishGuide = useCallback(async () => {\n return updateGuide({ status: 'published' });\n }, [updateGuide]);\n\n // Unpublish the guide\n const unpublishGuide = useCallback(async () => {\n return updateGuide({ status: 'draft' });\n }, [updateGuide]);\n\n // Delete the guide\n const deleteGuide = useCallback(async () => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n await client.deleteGuide(guide.id);\n setGuide(null);\n setSteps([]);\n setSelectedStepId(null);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete guide'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n }, [client, guide]);\n\n // Add a step\n const addStep = useCallback(\n async (options: CreateGuideStepOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const newStep = await client.addGuideStep(guide.id, options);\n setSteps((prev) => [...prev, newStep]);\n setSelectedStepId(newStep.id);\n hasUnsavedChanges.current = true;\n return newStep;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to add step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Update a step\n const updateStep = useCallback(\n async (stepId: string, options: UpdateGuideStepOptions) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const updatedStep = await client.updateGuideStep(guide.id, stepId, options);\n setSteps((prev) =>\n prev.map((step) => (step.id === stepId ? updatedStep : step))\n );\n hasUnsavedChanges.current = true;\n return updatedStep;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Delete a step\n const deleteStep = useCallback(\n async (stepId: string) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n await client.deleteGuideStep(guide.id, stepId);\n setSteps((prev) => prev.filter((step) => step.id !== stepId));\n if (selectedStepId === stepId) {\n setSelectedStepId(steps[0]?.id || null);\n }\n hasUnsavedChanges.current = true;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete step'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide, selectedStepId, steps]\n );\n\n // Reorder steps\n const reorderSteps = useCallback(\n async (newOrder: Array<{ id: string; sort_order: number }>) => {\n if (!guide) throw new Error('No guide loaded');\n\n setIsSaving(true);\n setError(null);\n\n try {\n const reorderedSteps = await client.reorderGuideSteps(guide.id, newOrder);\n setSteps(reorderedSteps);\n hasUnsavedChanges.current = true;\n return reorderedSteps;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to reorder steps'));\n throw err;\n } finally {\n setIsSaving(false);\n }\n },\n [client, guide]\n );\n\n // Move step up/down helpers\n const moveStepUp = useCallback(\n async (stepId: string) => {\n const currentIndex = steps.findIndex((s) => s.id === stepId);\n if (currentIndex <= 0) return;\n\n const newOrder = steps.map((step, index) => {\n if (index === currentIndex) {\n return { id: step.id, sort_order: currentIndex - 1 };\n }\n if (index === currentIndex - 1) {\n return { id: step.id, sort_order: currentIndex };\n }\n return { id: step.id, sort_order: index };\n });\n\n return reorderSteps(newOrder);\n },\n [steps, reorderSteps]\n );\n\n const moveStepDown = useCallback(\n async (stepId: string) => {\n const currentIndex = steps.findIndex((s) => s.id === stepId);\n if (currentIndex < 0 || currentIndex >= steps.length - 1) return;\n\n const newOrder = steps.map((step, index) => {\n if (index === currentIndex) {\n return { id: step.id, sort_order: currentIndex + 1 };\n }\n if (index === currentIndex + 1) {\n return { id: step.id, sort_order: currentIndex };\n }\n return { id: step.id, sort_order: index };\n });\n\n return reorderSteps(newOrder);\n },\n [steps, reorderSteps]\n );\n\n // Get selected step\n const selectedStep = selectedStepId\n ? steps.find((s) => s.id === selectedStepId) || null\n : null;\n\n // Reset state\n const reset = useCallback(() => {\n setGuide(null);\n setSteps([]);\n setSelectedStepId(null);\n setError(null);\n hasUnsavedChanges.current = false;\n }, []);\n\n return {\n // State\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n isReady,\n hasUnsavedChanges: hasUnsavedChanges.current,\n\n // Actions\n loadGuide,\n createGuide,\n updateGuide,\n publishGuide,\n unpublishGuide,\n deleteGuide,\n addStep,\n updateStep,\n deleteStep,\n reorderSteps,\n moveStepUp,\n moveStepDown,\n setSelectedStepId,\n reset,\n };\n}\n\n/**\n * Hook for rendering guides - manages playback state for the GuideRenderer.\n *\n * @returns Object with guide renderer state and controls\n *\n * @example\n * ```tsx\n * function GuidePlayer() {\n * const {\n * activeGuide,\n * currentStepIndex,\n * isPlaying,\n * startGuide,\n * nextStep,\n * prevStep,\n * dismiss,\n * } = useGuideRenderer();\n *\n * if (!activeGuide || !isPlaying) return null;\n *\n * return (\n * <GuideRenderer\n * guide={activeGuide}\n * onComplete={() => dismiss()}\n * onDismiss={() => dismiss()}\n * />\n * );\n * }\n * ```\n */\nexport function useGuideRenderer() {\n const { client, isReady } = useCensusContext();\n const [activeGuide, setActiveGuide] = useState<Guide | null>(null);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [isPlaying, setIsPlaying] = useState(false);\n const [completedGuideIds, setCompletedGuideIds] = useState<string[]>([]);\n const [dismissedGuideIds, setDismissedGuideIds] = useState<string[]>([]);\n\n // Start a guide\n const startGuide = useCallback((guide: Guide, startStep: number = 0) => {\n setActiveGuide(guide);\n setCurrentStepIndex(startStep);\n setIsPlaying(true);\n }, []);\n\n // Go to next step\n const nextStep = useCallback(() => {\n if (!activeGuide) return;\n\n const steps = activeGuide.guide_steps || [];\n if (currentStepIndex < steps.length - 1) {\n setCurrentStepIndex((prev) => prev + 1);\n } else {\n // Guide completed\n setCompletedGuideIds((prev) => [...prev, activeGuide.id]);\n setIsPlaying(false);\n setActiveGuide(null);\n }\n }, [activeGuide, currentStepIndex]);\n\n // Go to previous step\n const prevStep = useCallback(() => {\n if (currentStepIndex > 0) {\n setCurrentStepIndex((prev) => prev - 1);\n }\n }, [currentStepIndex]);\n\n // Go to a specific step\n const goToStep = useCallback((stepIndex: number) => {\n if (!activeGuide) return;\n\n const steps = activeGuide.guide_steps || [];\n if (stepIndex >= 0 && stepIndex < steps.length) {\n setCurrentStepIndex(stepIndex);\n }\n }, [activeGuide]);\n\n // Dismiss the guide\n const dismiss = useCallback(() => {\n if (activeGuide) {\n setDismissedGuideIds((prev) => [...prev, activeGuide.id]);\n }\n setIsPlaying(false);\n setActiveGuide(null);\n setCurrentStepIndex(0);\n }, [activeGuide]);\n\n // Pause playback\n const pause = useCallback(() => {\n setIsPlaying(false);\n }, []);\n\n // Resume playback\n const resume = useCallback(() => {\n if (activeGuide) {\n setIsPlaying(true);\n }\n }, [activeGuide]);\n\n // Track step view event\n const trackStepView = useCallback(\n async (guide: Guide, stepIndex: number) => {\n const step = guide.guide_steps?.[stepIndex];\n if (!step) return;\n\n try {\n await client.track('guide_step_viewed', {\n guide_id: guide.id,\n guide_name: guide.name,\n step_id: step.id,\n step_index: stepIndex,\n step_type: step.step_type,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Track guide completion event\n const trackGuideComplete = useCallback(\n async (guide: Guide) => {\n try {\n await client.track('guide_completed', {\n guide_id: guide.id,\n guide_name: guide.name,\n total_steps: guide.guide_steps?.length || 0,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Track guide dismiss event\n const trackGuideDismiss = useCallback(\n async (guide: Guide, stepIndex: number) => {\n try {\n await client.track('guide_dismissed', {\n guide_id: guide.id,\n guide_name: guide.name,\n dismissed_at_step: stepIndex,\n total_steps: guide.guide_steps?.length || 0,\n });\n } catch {\n // Silently fail analytics\n }\n },\n [client]\n );\n\n // Get current step\n const currentStep = activeGuide?.guide_steps?.[currentStepIndex] || null;\n const totalSteps = activeGuide?.guide_steps?.length || 0;\n const isLastStep = currentStepIndex === totalSteps - 1;\n const isFirstStep = currentStepIndex === 0;\n\n // Check if a guide has been completed or dismissed\n const isGuideCompleted = useCallback(\n (guideId: string) => completedGuideIds.includes(guideId),\n [completedGuideIds]\n );\n\n const isGuideDismissed = useCallback(\n (guideId: string) => dismissedGuideIds.includes(guideId),\n [dismissedGuideIds]\n );\n\n return {\n // State\n activeGuide,\n currentStep,\n currentStepIndex,\n totalSteps,\n isPlaying,\n isFirstStep,\n isLastStep,\n isReady,\n\n // Controls\n startGuide,\n nextStep,\n prevStep,\n goToStep,\n dismiss,\n pause,\n resume,\n\n // Tracking\n trackStepView,\n trackGuideComplete,\n trackGuideDismiss,\n\n // Status\n completedGuideIds,\n dismissedGuideIds,\n isGuideCompleted,\n isGuideDismissed,\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 } 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};\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\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\n const { requests, isLoading, error, refetch } = useRequests({\n status,\n type,\n limit,\n });\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\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 if (requests.length === 0 && showEmptyState) {\n return (\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 When you submit feedback, bug reports, or feature requests, they'll appear here.\n </p>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.container} className={className}>\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\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 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 </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 {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 </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { useArticles, useArticle, useRequests, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type {\n HelpCenterProps,\n HelpCenterTab,\n Article,\n Request,\n Feature,\n FeatureGroup,\n FeedbackType,\n CensusTheme,\n} from '../../types';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n display: 'flex',\n minHeight: '400px',\n },\n // Left sidebar\n sidebar: {\n width: '240px',\n flexShrink: 0,\n borderRight: '1px solid #e5e7eb',\n paddingRight: '16px',\n marginRight: '24px',\n },\n sidebarSection: {\n marginBottom: '24px',\n },\n sidebarLabel: {\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: '#6b7280',\n marginBottom: '8px',\n paddingLeft: '8px',\n },\n sidebarItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#374151',\n transition: 'background-color 0.15s, color 0.15s',\n border: 'none',\n background: 'none',\n width: '100%',\n textAlign: 'left' as const,\n },\n sidebarItemActive: {\n backgroundColor: '#f3f4f6',\n color: '#111827',\n fontWeight: 500,\n },\n sidebarFeature: {\n padding: '6px 12px 6px 32px',\n fontSize: '13px',\n },\n sidebarBadge: {\n marginLeft: 'auto',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#e5e7eb',\n color: '#374151',\n },\n // Main content\n main: {\n flex: 1,\n minWidth: 0,\n },\n // Tabs\n tabs: {\n display: 'flex',\n gap: '4px',\n marginBottom: '24px',\n borderBottom: '1px solid #e5e7eb',\n },\n tab: {\n padding: '12px 20px',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#6b7280',\n borderBottom: '2px solid transparent',\n marginBottom: '-1px',\n transition: 'color 0.15s, border-color 0.15s',\n },\n tabActive: {\n color: '#111827',\n borderBottomColor: '#111827',\n },\n tabBadge: {\n marginLeft: '6px',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 600,\n backgroundColor: '#e5e7eb',\n color: '#374151',\n },\n // Feature group cards\n groupCardsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))',\n gap: '16px',\n marginBottom: '24px',\n },\n groupCard: {\n padding: '20px',\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n backgroundColor: 'white',\n },\n groupCardHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n marginBottom: '8px',\n },\n groupCardIcon: {\n width: '40px',\n height: '40px',\n borderRadius: '10px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n },\n groupCardName: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n margin: 0,\n },\n groupCardMeta: {\n fontSize: '13px',\n color: '#6b7280',\n marginTop: '4px',\n },\n // Search\n searchInput: {\n width: '100%',\n padding: '10px 14px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n fontSize: '14px',\n marginBottom: '20px',\n boxSizing: 'border-box' as const,\n },\n // Article cards\n articleCard: {\n padding: '16px',\n border: '1px solid #e5e7eb',\n borderRadius: '10px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 6px 0',\n fontSize: '15px',\n fontWeight: 600,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: '#9ca3af',\n },\n // Article detail\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n // Request cards\n requestCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '10px',\n padding: '16px',\n backgroundColor: '#ffffff',\n marginBottom: '12px',\n transition: 'border-color 0.15s',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '3px 10px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '10px',\n fontSize: '12px',\n color: '#9ca3af',\n },\n // Section header\n sectionHeader: {\n marginBottom: '16px',\n },\n sectionTitle: {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 4px 0',\n },\n sectionDescription: {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n },\n // States\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#6b7280',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '10px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '48px 24px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 16px',\n color: '#d1d5db',\n },\n};\n\n// Type and status configs for requests\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: '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 planned: { label: 'Planned', 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\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#111827',\n textColor: theme.textColor || '#111827',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '10px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n// Default tab labels\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Articles',\n requests: 'My Requests',\n};\n\n// ============================================================================\n// Feature Group Card Component\n// ============================================================================\n\nfunction FeatureGroupCard({\n group,\n onClick,\n}: {\n group: FeatureGroup;\n onClick: () => void;\n}) {\n return (\n <div\n style={defaultStyles.groupCard}\n onClick={onClick}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') onClick();\n }}\n >\n <div>\n <h3 style={defaultStyles.groupCardName}>{group.name}</h3>\n <p style={defaultStyles.groupCardMeta}>\n {group.feature_count} feature{group.feature_count !== 1 ? 's' : ''} · {group.article_count} article\n {group.article_count !== 1 ? 's' : ''}\n </p>\n </div>\n {group.description && (\n <p style={{ ...defaultStyles.articleDescription, marginTop: '8px' }}>{group.description}</p>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Articles Content (for a specific feature or all)\n// ============================================================================\n\nfunction ArticlesContent({\n featureId,\n featureName,\n showSearch,\n themeStyles,\n onArticleView,\n onBack,\n}: {\n featureId?: string;\n featureName?: string;\n showSearch: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n onArticleView?: (article: Article) => void;\n onBack?: () => void;\n}) {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Filter articles by feature if specified\n const filteredArticles = useMemo(() => {\n if (!featureId) return articles;\n return articles.filter((a) => a.features?.id === featureId);\n }, [articles, featureId]);\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 <div style={defaultStyles.loading}>Loading article...</div>;\n }\n\n if (articleError) {\n return (\n <div>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div>\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>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 12px 0', fontSize: '24px', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#6b7280', 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>\n {featureName && onBack && (\n <div style={defaultStyles.sectionHeader}>\n <button onClick={onBack} style={defaultStyles.backButton}>\n ← Back to features\n </button>\n <h2 style={defaultStyles.sectionTitle}>{featureName}</h2>\n <p style={defaultStyles.sectionDescription}>Documentation and guides for this feature</p>\n </div>\n )}\n\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 {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {!isLoadingArticles && !articlesError && filteredArticles.length === 0 && (\n <div style={defaultStyles.empty}>\n <svg style={defaultStyles.emptyIcon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n 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 />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>\n {searchQuery ? `No articles found for \"${searchQuery}\"` : 'No articles yet'}\n </p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>Check back soon for helpful content.</p>\n </div>\n )}\n\n {!isLoadingArticles && !articlesError && filteredArticles.length > 0 && (\n <div>\n {filteredArticles.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\n// ============================================================================\n// Requests Tab Content\n// ============================================================================\n\nfunction RequestsContent({ onRequestClick }: { onRequestClick?: (request: Request) => void }) {\n const { isIdentified } = useCensusContext();\n const { requests, isLoading, error, refetch } = useRequests({ limit: 50 });\n\n if (!isIdentified) {\n return (\n <div style={defaultStyles.empty}>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>Sign in required</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (isLoading) {\n return <div style={defaultStyles.loading}>Loading requests...</div>;\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>\n Failed to load requests.{' '}\n <button\n onClick={refetch}\n style={{\n color: 'inherit',\n textDecoration: 'underline',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n Try again\n </button>\n </p>\n </div>\n );\n }\n\n if (requests.length === 0) {\n return (\n <div style={defaultStyles.empty}>\n <svg style={defaultStyles.emptyIcon} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\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 When you submit feedback, bug reports, or feature requests, they'll appear here.\n </p>\n </div>\n );\n }\n\n return (\n <div>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div\n key={request.id}\n style={defaultStyles.requestCard}\n onClick={() => onRequestClick?.(request)}\n role={onRequestClick ? 'button' : undefined}\n tabIndex={onRequestClick ? 0 : undefined}\n onKeyDown={\n onRequestClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onRequestClick(request);\n }\n }\n : undefined\n }\n >\n <div style={defaultStyles.requestHeader}>\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 </div>\n <p style={defaultStyles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={defaultStyles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n {request.page_url && (\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '200px',\n }}\n >\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================================================\n// Main HelpCenter Component\n// ============================================================================\n\n/**\n * Unified help center component with left navigation showing feature groups.\n *\n * @example\n * ```tsx\n * import { HelpCenter } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <HelpCenter\n * tabs={['articles', 'requests']}\n * showSearch\n * />\n * );\n * }\n * ```\n */\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab,\n tabLabels,\n showSearch = true,\n showCategories: _showCategories = true, // Reserved for future use\n theme: themeProp,\n className,\n onArticleView,\n onRequestClick,\n onTabChange,\n}: HelpCenterProps) {\n void _showCategories; // Suppress unused warning\n const { theme: contextTheme } = useCensusContext();\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n // Tab state\n const initialTab = defaultTab && tabs.includes(defaultTab) ? defaultTab : tabs[0];\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(initialTab);\n\n // Navigation state\n const [selectedGroupId, setSelectedGroupId] = useState<string | null>(null);\n const [selectedFeature, setSelectedFeature] = useState<Feature | null>(null);\n\n // Data\n const { featureGroups, isLoading: isLoadingGroups } = useFeatureGroups();\n const { requests } = useRequests({ limit: 100 });\n\n const openRequestsCount = requests.filter((r) =>\n ['new', 'planned', 'in_progress'].includes(r.status)\n ).length;\n\n // Merge tab labels\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Get selected group\n const selectedGroup = useMemo(\n () => featureGroups.find((g) => g.id === selectedGroupId) || null,\n [featureGroups, selectedGroupId]\n );\n\n const handleTabChange = (tab: HelpCenterTab) => {\n setActiveTab(tab);\n setSelectedGroupId(null);\n setSelectedFeature(null);\n onTabChange?.(tab);\n };\n\n const handleGroupClick = (group: FeatureGroup) => {\n setSelectedGroupId(group.id);\n setSelectedFeature(null);\n };\n\n const handleFeatureClick = (feature: Feature) => {\n setSelectedFeature(feature);\n };\n\n const handleBackToGroups = () => {\n setSelectedGroupId(null);\n setSelectedFeature(null);\n };\n\n const handleBackToFeatures = () => {\n setSelectedFeature(null);\n };\n\n // If only one tab, don't show tabs UI\n const showTabs = tabs.length > 1;\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Left Sidebar */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <div style={defaultStyles.sidebar}>\n {/* Resources section - could add general links here */}\n <div style={defaultStyles.sidebarSection}>\n <div style={defaultStyles.sidebarLabel}>Resources</div>\n <button\n style={{\n ...defaultStyles.sidebarItem,\n ...(!selectedGroupId ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={handleBackToGroups}\n >\n <span>🏠</span>\n <span>All Features</span>\n </button>\n </div>\n\n {/* Feature Groups section */}\n <div style={defaultStyles.sidebarSection}>\n <div style={defaultStyles.sidebarLabel}>Features</div>\n {isLoadingGroups ? (\n <div style={{ padding: '8px 12px', fontSize: '13px', color: '#6b7280' }}>Loading...</div>\n ) : (\n featureGroups.map((group) => (\n <div key={group.id}>\n <button\n style={{\n ...defaultStyles.sidebarItem,\n ...(selectedGroupId === group.id ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={() => handleGroupClick(group)}\n >\n <span style={{ flex: 1 }}>{group.name}</span>\n <span style={defaultStyles.sidebarBadge}>{group.feature_count}</span>\n </button>\n {/* Show features when group is selected */}\n {selectedGroupId === group.id && (\n <div>\n {group.features.map((feature) => (\n <button\n key={feature.id}\n style={{\n ...defaultStyles.sidebarItem,\n ...defaultStyles.sidebarFeature,\n ...(selectedFeature?.id === feature.id ? defaultStyles.sidebarItemActive : {}),\n }}\n onClick={() => handleFeatureClick(feature)}\n >\n {feature.name}\n {feature.article_count > 0 && (\n <span style={defaultStyles.sidebarBadge}>{feature.article_count}</span>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n\n {/* Main Content */}\n <div style={defaultStyles.main}>\n {showTabs && (\n <div style={defaultStyles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => handleTabChange(tab)}\n style={{\n ...defaultStyles.tab,\n ...(activeTab === tab ? defaultStyles.tabActive : {}),\n ...(activeTab === tab\n ? { borderBottomColor: themeStyles.primaryColor, color: themeStyles.primaryColor }\n : {}),\n }}\n >\n {mergedLabels[tab]}\n {tab === 'requests' && openRequestsCount > 0 && (\n <span style={defaultStyles.tabBadge}>{openRequestsCount}</span>\n )}\n </button>\n ))}\n </div>\n )}\n\n {/* Articles Tab Content */}\n {activeTab === 'articles' && (\n <>\n {/* Show feature group cards when nothing selected */}\n {!selectedGroupId && !selectedFeature && featureGroups.length > 0 && (\n <div>\n <div style={defaultStyles.sectionHeader}>\n <h2 style={defaultStyles.sectionTitle}>Browse by Feature</h2>\n <p style={defaultStyles.sectionDescription}>\n Select a feature group to find relevant documentation\n </p>\n </div>\n <div style={defaultStyles.groupCardsGrid}>\n {featureGroups.map((group) => (\n <FeatureGroupCard key={group.id} group={group} onClick={() => handleGroupClick(group)} />\n ))}\n </div>\n </div>\n )}\n\n {/* Show features when group is selected but no feature */}\n {selectedGroup && !selectedFeature && (\n <div>\n <div style={defaultStyles.sectionHeader}>\n <button onClick={handleBackToGroups} style={defaultStyles.backButton}>\n ← Back to all features\n </button>\n <h2 style={defaultStyles.sectionTitle}>{selectedGroup.name}</h2>\n {selectedGroup.description && (\n <p style={defaultStyles.sectionDescription}>{selectedGroup.description}</p>\n )}\n </div>\n <div style={defaultStyles.groupCardsGrid}>\n {selectedGroup.features.map((feature) => (\n <div\n key={feature.id}\n style={defaultStyles.groupCard}\n onClick={() => handleFeatureClick(feature)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleFeatureClick(feature);\n }}\n >\n <h3 style={defaultStyles.groupCardName}>{feature.name}</h3>\n <p style={defaultStyles.groupCardMeta}>\n {feature.article_count} article{feature.article_count !== 1 ? 's' : ''}\n </p>\n {feature.description && (\n <p style={{ ...defaultStyles.articleDescription, marginTop: '8px' }}>\n {feature.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Show articles when feature is selected */}\n {selectedFeature && (\n <ArticlesContent\n featureId={selectedFeature.id}\n featureName={selectedFeature.name}\n showSearch={showSearch}\n themeStyles={themeStyles}\n onArticleView={onArticleView}\n onBack={handleBackToFeatures}\n />\n )}\n\n {/* Fallback: show all articles if no feature groups */}\n {featureGroups.length === 0 && (\n <ArticlesContent\n showSearch={showSearch}\n themeStyles={themeStyles}\n onArticleView={onArticleView}\n />\n )}\n </>\n )}\n\n {/* Requests Tab Content */}\n {activeTab === 'requests' && <RequestsContent onRequestClick={onRequestClick} />}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type {\n GuideStep,\n GuideStepType,\n TooltipPosition,\n SelectorStrategy,\n GuideStepRichContent,\n GuideStepDisplayConfig,\n GuideStepAdvanceConfig,\n CreateGuideStepOptions,\n AdvanceTrigger,\n} from '../../../types';\n\nexport interface StepEditorProps {\n /**\n * The step being edited\n */\n step: GuideStep;\n\n /**\n * Callback when step is updated\n */\n onUpdate: (stepId: string, options: CreateGuideStepOptions) => Promise<GuideStep>;\n\n /**\n * Callback to open element selector\n */\n onSelectElement: () => void;\n\n /**\n * Whether element selector is currently active\n */\n isSelectingElement?: boolean;\n}\n\nconst stepTypeLabels: Record<GuideStepType, string> = {\n tooltip: 'Tooltip',\n modal: 'Modal',\n slideout: 'Slideout',\n hotspot: 'Hotspot',\n banner: 'Banner',\n};\n\nconst stepTypeDescriptions: Record<GuideStepType, string> = {\n tooltip: 'Points to a specific element with an arrow',\n modal: 'Centered overlay that grabs attention',\n slideout: 'Slides in from the side of the screen',\n hotspot: 'Pulsing beacon that expands on click',\n banner: 'Top or bottom bar announcement',\n};\n\nconst positionOptions: { value: TooltipPosition | 'center'; label: string }[] = [\n { value: 'auto', label: 'Auto' },\n { value: 'top', label: 'Top' },\n { value: 'bottom', label: 'Bottom' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n];\n\nconst advanceTriggerOptions: { value: AdvanceTrigger; label: string }[] = [\n { value: 'button', label: 'Button click' },\n { value: 'click', label: 'Click anywhere' },\n { value: 'delay', label: 'After delay' },\n { value: 'form-submit', label: 'Form submit' },\n];\n\nexport function StepEditor({\n step,\n onUpdate,\n onSelectElement,\n isSelectingElement,\n}: StepEditorProps) {\n const [isSaving, setIsSaving] = useState(false);\n\n // Local state for form fields\n const [stepType, setStepType] = useState<GuideStepType>(step.step_type);\n const [title, setTitle] = useState(step.rich_content?.title || step.title || '');\n const [body, setBody] = useState(step.rich_content?.body || step.content || '');\n const [position, setPosition] = useState<TooltipPosition>(\n step.tooltip_position || (step.display_config?.position as TooltipPosition) || 'auto'\n );\n const [selector, setSelector] = useState(step.selector_strategy?.css || '');\n const [backdrop, setBackdrop] = useState(step.display_config?.backdrop !== false);\n const [advanceTrigger, setAdvanceTrigger] = useState<AdvanceTrigger>(\n step.advance_config?.trigger || 'button'\n );\n const [advanceDelay, setAdvanceDelay] = useState(step.advance_config?.delay || 3000);\n\n // Handle save\n const handleSave = useCallback(async () => {\n setIsSaving(true);\n try {\n const selectorStrategy: SelectorStrategy | undefined = selector\n ? { css: selector }\n : undefined;\n\n const richContent: GuideStepRichContent = {\n title: title || undefined,\n body: body || undefined,\n };\n\n const displayConfig: GuideStepDisplayConfig = {\n position: position !== 'auto' ? position : undefined,\n backdrop,\n };\n\n const advanceConfig: GuideStepAdvanceConfig = {\n trigger: advanceTrigger,\n delay: advanceTrigger === 'delay' ? advanceDelay : undefined,\n };\n\n await onUpdate(step.id, {\n stepType,\n selectorStrategy,\n richContent,\n displayConfig,\n advanceConfig,\n tooltipPosition: position,\n });\n } finally {\n setIsSaving(false);\n }\n }, [\n step.id,\n stepType,\n title,\n body,\n position,\n selector,\n backdrop,\n advanceTrigger,\n advanceDelay,\n onUpdate,\n ]);\n\n // Check if step type needs an element selector\n const needsSelector = stepType === 'tooltip' || stepType === 'hotspot';\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Header */}\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 500 }}>Edit Step</span>\n <button\n onClick={handleSave}\n disabled={isSaving}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving ? 0.7 : 1,\n }}\n >\n {isSaving ? 'Saving...' : 'Save Changes'}\n </button>\n </div>\n\n {/* Form */}\n <div style={{ flex: 1, overflow: 'auto', padding: '16px' }}>\n {/* Step Type */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Step Type\n </label>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '8px' }}>\n {(Object.keys(stepTypeLabels) as GuideStepType[]).map((type) => (\n <button\n key={type}\n onClick={() => setStepType(type)}\n style={{\n padding: '10px',\n border: `2px solid ${stepType === type ? '#2563eb' : '#e5e7eb'}`,\n borderRadius: '6px',\n backgroundColor: stepType === type ? '#eff6ff' : 'white',\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <div style={{ fontWeight: 500, fontSize: '13px' }}>{stepTypeLabels[type]}</div>\n <div style={{ fontSize: '11px', color: '#6b7280', marginTop: '2px' }}>\n {stepTypeDescriptions[type]}\n </div>\n </button>\n ))}\n </div>\n </div>\n\n {/* Element Selector (for tooltip/hotspot) */}\n {needsSelector && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Target Element\n </label>\n <div style={{ display: 'flex', gap: '8px' }}>\n <input\n type=\"text\"\n value={selector}\n onChange={(e) => setSelector(e.target.value)}\n placeholder=\"CSS selector (e.g., #my-button)\"\n style={{\n flex: 1,\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n fontFamily: 'monospace',\n }}\n />\n <button\n onClick={onSelectElement}\n disabled={isSelectingElement}\n style={{\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: isSelectingElement ? '#f3f4f6' : 'white',\n cursor: isSelectingElement ? 'wait' : 'pointer',\n }}\n >\n {isSelectingElement ? 'Selecting...' : 'Select'}\n </button>\n </div>\n <p style={{ fontSize: '11px', color: '#6b7280', marginTop: '4px' }}>\n Click "Select" to pick an element on the page, or enter a CSS selector manually\n </p>\n </div>\n )}\n\n {/* Title */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Title\n </label>\n <input\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Enter step title\"\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n }}\n />\n </div>\n\n {/* Body */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Content\n </label>\n <textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n placeholder=\"Enter step content (HTML supported)\"\n rows={4}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n resize: 'vertical',\n fontFamily: 'inherit',\n }}\n />\n </div>\n\n {/* Position (for tooltip/hotspot) */}\n {(stepType === 'tooltip' || stepType === 'hotspot') && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Position\n </label>\n <select\n value={position}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n {positionOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Banner Position */}\n {stepType === 'banner' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Banner Position\n </label>\n <select\n value={position === 'bottom' ? 'bottom' : 'top'}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n <option value=\"top\">Top</option>\n <option value=\"bottom\">Bottom</option>\n </select>\n </div>\n )}\n\n {/* Slideout Side */}\n {stepType === 'slideout' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Slideout Side\n </label>\n <select\n value={position === 'left' ? 'left' : 'right'}\n onChange={(e) => setPosition(e.target.value as TooltipPosition)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n <option value=\"right\">Right</option>\n <option value=\"left\">Left</option>\n </select>\n </div>\n )}\n\n {/* Backdrop (for tooltip/modal) */}\n {(stepType === 'tooltip' || stepType === 'modal') && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={backdrop}\n onChange={(e) => setBackdrop(e.target.checked)}\n style={{ width: '16px', height: '16px' }}\n />\n <span style={{ fontSize: '13px', fontWeight: 500 }}>Show backdrop overlay</span>\n </label>\n <p style={{ fontSize: '11px', color: '#6b7280', marginTop: '4px', marginLeft: '24px' }}>\n Dims the background to focus attention on the step\n </p>\n </div>\n )}\n\n {/* Advancement Trigger */}\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Advance When\n </label>\n <select\n value={advanceTrigger}\n onChange={(e) => setAdvanceTrigger(e.target.value as AdvanceTrigger)}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n }}\n >\n {advanceTriggerOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Delay Input (when delay trigger selected) */}\n {advanceTrigger === 'delay' && (\n <div style={{ marginBottom: '20px' }}>\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '13px', fontWeight: 500 }}>\n Delay (seconds)\n </label>\n <input\n type=\"number\"\n value={advanceDelay / 1000}\n onChange={(e) => setAdvanceDelay(Number(e.target.value) * 1000)}\n min={1}\n max={60}\n style={{\n width: '100%',\n padding: '8px 12px',\n fontSize: '13px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n }}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport type { SelectorStrategy } from '../../../types';\n\nexport interface ElementSelectorProps {\n /**\n * Whether the selector is active\n */\n isActive: boolean;\n\n /**\n * Callback when an element is selected\n */\n onSelect: (selector: SelectorStrategy, element: Element) => void;\n\n /**\n * Callback to cancel selection mode\n */\n onCancel: () => void;\n\n /**\n * Elements to ignore (e.g., the builder UI itself)\n */\n ignoreSelector?: string;\n\n /**\n * Z-index for the selector overlay\n */\n zIndex?: number;\n}\n\n/**\n * Generates a CSS selector for an element\n * Tries to create the most specific and reliable selector possible\n */\nfunction generateSelector(element: Element): SelectorStrategy {\n const result: SelectorStrategy = {};\n\n // Try data-testid first (most reliable)\n const testId = element.getAttribute('data-testid');\n if (testId) {\n result.testId = testId;\n result.css = `[data-testid=\"${testId}\"]`;\n return result;\n }\n\n // Try ID (also very reliable)\n if (element.id) {\n result.css = `#${CSS.escape(element.id)}`;\n return result;\n }\n\n // Build a CSS path\n const parts: string[] = [];\n let current: Element | null = element;\n let depth = 0;\n const maxDepth = 5;\n\n while (current && current !== document.body && depth < maxDepth) {\n let selector = current.tagName.toLowerCase();\n\n // Add classes (up to 2 most specific)\n const classes = Array.from(current.classList)\n .filter((c) => !c.startsWith('hover') && !c.startsWith('focus') && !c.startsWith('active'))\n .slice(0, 2);\n\n if (classes.length > 0) {\n selector += '.' + classes.map((c) => CSS.escape(c)).join('.');\n }\n\n // Add nth-child if needed for uniqueness\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter(\n (child) => child.tagName === current!.tagName\n );\n if (siblings.length > 1) {\n const index = siblings.indexOf(current) + 1;\n selector += `:nth-of-type(${index})`;\n }\n }\n\n parts.unshift(selector);\n\n // Check if this is unique enough\n const testSelector = parts.join(' > ');\n try {\n if (document.querySelectorAll(testSelector).length === 1) {\n result.css = testSelector;\n break;\n }\n } catch {\n // Invalid selector, continue\n }\n\n current = current.parentElement;\n depth++;\n }\n\n if (!result.css && parts.length > 0) {\n result.css = parts.join(' > ');\n }\n\n // Also try to capture text content for text-based selection\n const text = element.textContent?.trim();\n if (text && text.length < 100 && text.length > 2) {\n result.text = text.slice(0, 50);\n }\n\n return result;\n}\n\n/**\n * Tests if a selector uniquely identifies an element\n */\nfunction testSelector(selector: SelectorStrategy): { isUnique: boolean; count: number } {\n let count = 0;\n\n if (selector.css) {\n try {\n count = document.querySelectorAll(selector.css).length;\n } catch {\n // Invalid selector\n }\n }\n\n if (selector.testId) {\n count = document.querySelectorAll(`[data-testid=\"${selector.testId}\"]`).length;\n }\n\n return { isUnique: count === 1, count };\n}\n\nexport function ElementSelector({\n isActive,\n onSelect,\n onCancel,\n ignoreSelector = '[data-census-builder]',\n zIndex = 99999,\n}: ElementSelectorProps) {\n const [hoveredElement, setHoveredElement] = useState<Element | null>(null);\n const [highlightRect, setHighlightRect] = useState<DOMRect | null>(null);\n const [generatedSelector, setGeneratedSelector] = useState<SelectorStrategy | null>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n // Update highlight position\n const updateHighlight = useCallback(() => {\n if (!hoveredElement) {\n setHighlightRect(null);\n return;\n }\n setHighlightRect(hoveredElement.getBoundingClientRect());\n }, [hoveredElement]);\n\n // Handle mouse move\n useEffect(() => {\n if (!isActive) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n // Get element under cursor\n const elements = document.elementsFromPoint(e.clientX, e.clientY);\n\n // Find the first element that's not part of the builder or the overlay\n const target = elements.find((el) => {\n // Skip our overlay\n if (overlayRef.current?.contains(el)) return false;\n // Skip elements matching ignore selector\n if (ignoreSelector && el.closest(ignoreSelector)) return false;\n // Skip body and html\n if (el === document.body || el === document.documentElement) return false;\n return true;\n });\n\n if (target !== hoveredElement) {\n setHoveredElement(target || null);\n if (target) {\n setGeneratedSelector(generateSelector(target));\n } else {\n setGeneratedSelector(null);\n }\n }\n };\n\n const handleScroll = () => {\n updateHighlight();\n };\n\n document.addEventListener('mousemove', handleMouseMove, true);\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleScroll);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove, true);\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleScroll);\n };\n }, [isActive, hoveredElement, ignoreSelector, updateHighlight]);\n\n // Update highlight when element changes\n useEffect(() => {\n updateHighlight();\n }, [hoveredElement, updateHighlight]);\n\n // Handle click to select\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (hoveredElement && generatedSelector) {\n onSelect(generatedSelector, hoveredElement);\n }\n },\n [hoveredElement, generatedSelector, onSelect]\n );\n\n // Handle escape to cancel\n useEffect(() => {\n if (!isActive) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isActive, onCancel]);\n\n if (!isActive) return null;\n\n const selectorTest = generatedSelector ? testSelector(generatedSelector) : null;\n\n return (\n <div\n ref={overlayRef}\n data-census-builder\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n cursor: 'crosshair',\n }}\n onClick={handleClick}\n >\n {/* Element highlight */}\n {highlightRect && (\n <div\n style={{\n position: 'fixed',\n top: highlightRect.top,\n left: highlightRect.left,\n width: highlightRect.width,\n height: highlightRect.height,\n border: '2px solid #2563eb',\n borderRadius: '4px',\n backgroundColor: 'rgba(37, 99, 235, 0.1)',\n pointerEvents: 'none',\n transition: 'all 0.1s ease-out',\n }}\n />\n )}\n\n {/* Selector info tooltip */}\n {highlightRect && generatedSelector && (\n <div\n style={{\n position: 'fixed',\n top: Math.max(8, highlightRect.top - 40),\n left: highlightRect.left,\n padding: '6px 10px',\n backgroundColor: '#1f2937',\n color: 'white',\n fontSize: '12px',\n fontFamily: 'monospace',\n borderRadius: '4px',\n maxWidth: '300px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n }}\n >\n <span style={{ color: '#9ca3af' }}>\n {generatedSelector.testId ? 'data-testid: ' : ''}\n </span>\n {generatedSelector.testId || generatedSelector.css}\n {selectorTest && (\n <span\n style={{\n marginLeft: '8px',\n color: selectorTest.isUnique ? '#4ade80' : '#fbbf24',\n }}\n >\n ({selectorTest.count} match{selectorTest.count !== 1 ? 'es' : ''})\n </span>\n )}\n </div>\n )}\n\n {/* Instructions bar */}\n <div\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '12px 20px',\n backgroundColor: '#1f2937',\n color: 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n }}\n >\n <span>\n Click on any element to select it, or press <kbd style={{\n padding: '2px 6px',\n backgroundColor: '#374151',\n borderRadius: '4px',\n marginLeft: '4px',\n marginRight: '4px',\n }}>Esc</kbd> to cancel\n </span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onCancel();\n }}\n style={{\n padding: '6px 12px',\n border: '1px solid #4b5563',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'white',\n cursor: 'pointer',\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, type ReactNode } from 'react';\nimport { useGuideBuilder } from '../../hooks';\nimport type { Guide, GuideStep, CreateGuideStepOptions, GuideStepType, SelectorStrategy } from '../../../types';\nimport { StepEditor } from './StepEditor';\nimport { ElementSelector } from './ElementSelector';\n\n/**\n * Props for the GuideBuilder component\n */\nexport interface GuideBuilderProps {\n /**\n * Whether the builder is open\n */\n isOpen?: boolean;\n\n /**\n * Callback when builder is closed\n */\n onClose?: () => void;\n\n /**\n * Guide ID to edit (optional - if not provided, creates new guide)\n */\n guideId?: string;\n\n /**\n * Callback when guide is saved\n */\n onSave?: (guide: Guide) => void;\n\n /**\n * Callback when guide is published\n */\n onPublish?: (guide: Guide) => void;\n\n /**\n * Custom trigger element\n */\n trigger?: ReactNode;\n\n /**\n * Custom CSS class for the modal\n */\n className?: string;\n}\n\n/**\n * Guide Builder Component\n *\n * A full-screen overlay for creating and editing guides.\n * This is a shell component - the full UI will be implemented in Phase 3.\n *\n * @example\n * ```tsx\n * // Controlled mode\n * <GuideBuilder\n * isOpen={showBuilder}\n * onClose={() => setShowBuilder(false)}\n * onSave={(guide) => console.log('Saved:', guide)}\n * />\n *\n * // With trigger\n * <GuideBuilder\n * trigger={<button>Create Guide</button>}\n * onSave={(guide) => console.log('Saved:', guide)}\n * />\n * ```\n */\nexport function GuideBuilder({\n isOpen: controlledIsOpen,\n onClose,\n guideId,\n onSave,\n onPublish,\n trigger,\n className,\n}: GuideBuilderProps) {\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const isOpen = controlledIsOpen ?? internalIsOpen;\n\n const {\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n loadGuide,\n updateGuide,\n publishGuide,\n addStep,\n updateStep,\n deleteStep,\n moveStepUp,\n moveStepDown,\n setSelectedStepId,\n reset,\n } = useGuideBuilder();\n\n // Open the builder\n const handleOpen = useCallback(async () => {\n setInternalIsOpen(true);\n if (guideId) {\n await loadGuide(guideId);\n }\n }, [guideId, loadGuide]);\n\n // Close the builder\n const handleClose = useCallback(() => {\n setInternalIsOpen(false);\n reset();\n onClose?.();\n }, [reset, onClose]);\n\n // Handle save\n const handleSave = useCallback(async () => {\n if (!guide) return;\n try {\n await updateGuide({});\n onSave?.(guide);\n } catch {\n // Error already set in hook\n }\n }, [guide, updateGuide, onSave]);\n\n // Handle publish\n const handlePublish = useCallback(async () => {\n if (!guide) return;\n try {\n const publishedGuide = await publishGuide();\n onPublish?.(publishedGuide);\n } catch {\n // Error already set in hook\n }\n }, [guide, publishGuide, onPublish]);\n\n // Add a new step\n const handleAddStep = useCallback(\n async (stepType: GuideStepType = 'tooltip') => {\n try {\n await addStep({\n stepType,\n richContent: {\n title: 'New Step',\n body: 'Click to edit...',\n },\n });\n } catch {\n // Error already set in hook\n }\n },\n [addStep]\n );\n\n // If trigger is provided and not controlled, render trigger + modal\n if (trigger && controlledIsOpen === undefined) {\n return (\n <>\n <span onClick={handleOpen}>{trigger}</span>\n {isOpen && (\n <GuideBuilderModal\n guide={guide}\n steps={steps}\n selectedStep={selectedStep}\n selectedStepId={selectedStepId}\n isLoading={isLoading}\n isSaving={isSaving}\n error={error}\n onClose={handleClose}\n onSave={handleSave}\n onPublish={handlePublish}\n onAddStep={handleAddStep}\n onSelectStep={setSelectedStepId}\n onUpdateStep={updateStep}\n onDeleteStep={deleteStep}\n onMoveStepUp={moveStepUp}\n onMoveStepDown={moveStepDown}\n className={className}\n />\n )}\n </>\n );\n }\n\n // Controlled mode - just render modal if open\n if (!isOpen) return null;\n\n return (\n <GuideBuilderModal\n guide={guide}\n steps={steps}\n selectedStep={selectedStep}\n selectedStepId={selectedStepId}\n isLoading={isLoading}\n isSaving={isSaving}\n error={error}\n onClose={handleClose}\n onSave={handleSave}\n onPublish={handlePublish}\n onAddStep={handleAddStep}\n onSelectStep={setSelectedStepId}\n onUpdateStep={updateStep}\n onDeleteStep={deleteStep}\n onMoveStepUp={moveStepUp}\n onMoveStepDown={moveStepDown}\n className={className}\n />\n );\n}\n\n/**\n * The modal UI for the guide builder\n * This is a shell - full implementation in Phase 3\n */\ninterface GuideBuilderModalProps {\n guide: Guide | null;\n steps: GuideStep[];\n selectedStep: GuideStep | null;\n selectedStepId: string | null;\n isLoading: boolean;\n isSaving: boolean;\n error: Error | null;\n onClose: () => void;\n onSave: () => void;\n onPublish: () => void;\n onAddStep: (stepType?: GuideStepType) => void;\n onSelectStep: (stepId: string | null) => void;\n onUpdateStep: (stepId: string, options: CreateGuideStepOptions) => Promise<GuideStep>;\n onDeleteStep: (stepId: string) => Promise<void>;\n onMoveStepUp: (stepId: string) => Promise<GuideStep[] | undefined>;\n onMoveStepDown: (stepId: string) => Promise<GuideStep[] | undefined>;\n className?: string;\n}\n\nfunction GuideBuilderModal({\n guide,\n steps,\n selectedStep,\n selectedStepId,\n isLoading,\n isSaving,\n error,\n onClose,\n onSave,\n onPublish,\n onAddStep,\n onSelectStep,\n onUpdateStep,\n onDeleteStep,\n onMoveStepUp,\n onMoveStepDown,\n className,\n}: GuideBuilderModalProps) {\n const [isSelectingElement, setIsSelectingElement] = useState(false);\n\n const stepTypeLabels: Record<GuideStepType, string> = {\n tooltip: 'Tooltip',\n modal: 'Modal',\n slideout: 'Slideout',\n hotspot: 'Hotspot',\n banner: 'Banner',\n };\n\n // Handle element selection\n const handleElementSelect = useCallback(\n (selector: SelectorStrategy, _element: Element) => {\n if (selectedStep) {\n onUpdateStep(selectedStep.id, {\n selectorStrategy: selector,\n });\n }\n setIsSelectingElement(false);\n },\n [selectedStep, onUpdateStep]\n );\n\n return (\n <>\n {/* Element Selector Overlay */}\n <ElementSelector\n isActive={isSelectingElement}\n onSelect={handleElementSelect}\n onCancel={() => setIsSelectingElement(false)}\n ignoreSelector=\"[data-census-builder]\"\n />\n\n <div\n className={className}\n data-census-builder\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#f8f9fa',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Header */}\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 20px',\n backgroundColor: 'white',\n borderBottom: '1px solid #e5e7eb',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <button\n onClick={onClose}\n style={{\n padding: '8px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n Close\n </button>\n <h1 style={{ margin: 0, fontSize: '18px', fontWeight: 600 }}>\n {guide ? guide.name : 'Guide Builder'}\n </h1>\n {guide?.status && (\n <span\n style={{\n padding: '2px 8px',\n fontSize: '12px',\n borderRadius: '4px',\n backgroundColor: guide.status === 'published' ? '#dcfce7' : '#fef3c7',\n color: guide.status === 'published' ? '#166534' : '#92400e',\n }}\n >\n {guide.status}\n </span>\n )}\n </div>\n\n <div style={{ display: 'flex', gap: '8px' }}>\n {error && (\n <span style={{ color: '#dc2626', fontSize: '14px' }}>{error.message}</span>\n )}\n <button\n onClick={onSave}\n disabled={isSaving || !guide}\n style={{\n padding: '8px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving ? 0.5 : 1,\n }}\n >\n {isSaving ? 'Saving...' : 'Save'}\n </button>\n <button\n onClick={onPublish}\n disabled={isSaving || !guide || guide.status === 'published'}\n style={{\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: isSaving ? 'wait' : 'pointer',\n opacity: isSaving || guide?.status === 'published' ? 0.5 : 1,\n }}\n >\n Publish\n </button>\n </div>\n </header>\n\n {/* Main Content */}\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {/* Left Panel - Step List */}\n <aside\n style={{\n width: '280px',\n backgroundColor: 'white',\n borderRight: '1px solid #e5e7eb',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 500 }}>Steps ({steps.length})</span>\n <button\n onClick={() => onAddStep('tooltip')}\n disabled={!guide}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#2563eb',\n color: 'white',\n cursor: guide ? 'pointer' : 'not-allowed',\n opacity: guide ? 1 : 0.5,\n }}\n >\n + Add Step\n </button>\n </div>\n\n <div style={{ flex: 1, overflow: 'auto', padding: '8px' }}>\n {isLoading ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#6b7280' }}>\n Loading...\n </div>\n ) : steps.length === 0 ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#6b7280' }}>\n No steps yet. Click "Add Step" to get started.\n </div>\n ) : (\n steps.map((step, index) => (\n <div\n key={step.id}\n onClick={() => onSelectStep(step.id)}\n style={{\n padding: '12px',\n marginBottom: '4px',\n borderRadius: '6px',\n backgroundColor: selectedStepId === step.id ? '#eff6ff' : 'white',\n border: `1px solid ${selectedStepId === step.id ? '#3b82f6' : '#e5e7eb'}`,\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ fontWeight: 500, fontSize: '14px' }}>\n {index + 1}. {stepTypeLabels[step.step_type]}\n </span>\n <div style={{ display: 'flex', gap: '4px' }}>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveStepUp(step.id);\n }}\n disabled={index === 0}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #d1d5db',\n borderRadius: '3px',\n backgroundColor: 'white',\n cursor: index === 0 ? 'not-allowed' : 'pointer',\n opacity: index === 0 ? 0.3 : 1,\n }}\n >\n Up\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveStepDown(step.id);\n }}\n disabled={index === steps.length - 1}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #d1d5db',\n borderRadius: '3px',\n backgroundColor: 'white',\n cursor: index === steps.length - 1 ? 'not-allowed' : 'pointer',\n opacity: index === steps.length - 1 ? 0.3 : 1,\n }}\n >\n Down\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n if (confirm('Delete this step?')) {\n onDeleteStep(step.id);\n }\n }}\n style={{\n padding: '2px 6px',\n fontSize: '12px',\n border: '1px solid #fecaca',\n borderRadius: '3px',\n backgroundColor: '#fef2f2',\n color: '#dc2626',\n cursor: 'pointer',\n }}\n >\n Delete\n </button>\n </div>\n </div>\n <p style={{ margin: '4px 0 0', fontSize: '13px', color: '#6b7280' }}>\n {step.rich_content?.title || step.title || 'Untitled'}\n </p>\n </div>\n ))\n )}\n </div>\n </aside>\n\n {/* Center - Preview */}\n <main style={{ flex: 1, display: 'flex', flexDirection: 'column', backgroundColor: '#f3f4f6' }}>\n <div\n style={{\n padding: '16px',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: 'white',\n }}\n >\n <span style={{ fontWeight: 500 }}>Preview</span>\n </div>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#6b7280',\n }}\n >\n {selectedStep ? (\n <div\n style={{\n padding: '24px',\n backgroundColor: 'white',\n borderRadius: '8px',\n boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1)',\n maxWidth: '400px',\n width: '100%',\n }}\n >\n {/* Step type badge */}\n <div style={{ marginBottom: '12px' }}>\n <span\n style={{\n padding: '4px 8px',\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '4px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n textTransform: 'uppercase',\n }}\n >\n {stepTypeLabels[selectedStep.step_type]}\n </span>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: '16px' }}>\n {selectedStep.rich_content?.title || selectedStep.title || 'Step Preview'}\n </h3>\n <p style={{ margin: 0, color: '#4b5563' }}>\n {selectedStep.rich_content?.body || selectedStep.content || 'No content'}\n </p>\n {/* Show media preview if present */}\n {selectedStep.rich_content?.media && (\n <div style={{ marginTop: '12px' }}>\n {selectedStep.rich_content.media.type === 'image' && (\n <img\n src={selectedStep.rich_content.media.url}\n alt={selectedStep.rich_content.media.alt || ''}\n style={{ maxWidth: '100%', borderRadius: '4px' }}\n />\n )}\n </div>\n )}\n {/* Show buttons preview */}\n {selectedStep.rich_content?.buttons && selectedStep.rich_content.buttons.length > 0 && (\n <div style={{ marginTop: '16px', display: 'flex', gap: '8px' }}>\n {selectedStep.rich_content.buttons.map((btn, i) => (\n <span\n key={i}\n style={{\n padding: '6px 12px',\n fontSize: '13px',\n borderRadius: '4px',\n backgroundColor: btn.style === 'primary' ? '#2563eb' : '#f3f4f6',\n color: btn.style === 'primary' ? 'white' : '#374151',\n }}\n >\n {btn.label}\n </span>\n ))}\n </div>\n )}\n {/* Show selector info */}\n {selectedStep.selector_strategy?.css && (\n <div\n style={{\n marginTop: '16px',\n padding: '8px',\n backgroundColor: '#f9fafb',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'monospace',\n color: '#6b7280',\n }}\n >\n Target: {selectedStep.selector_strategy.css}\n </div>\n )}\n </div>\n ) : (\n <p>Select a step to preview</p>\n )}\n </div>\n </main>\n\n {/* Right Panel - Step Editor */}\n <aside\n style={{\n width: '360px',\n backgroundColor: 'white',\n borderLeft: '1px solid #e5e7eb',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {selectedStep ? (\n <StepEditor\n step={selectedStep}\n onUpdate={onUpdateStep}\n onSelectElement={() => setIsSelectingElement(true)}\n isSelectingElement={isSelectingElement}\n />\n ) : (\n <div style={{ padding: '16px' }}>\n <p style={{ color: '#6b7280' }}>Select a step to edit its settings</p>\n </div>\n )}\n </aside>\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport type { TooltipPosition } from '../../../types';\n\n/**\n * Position data for an element\n */\nexport interface ElementRect {\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n}\n\n/**\n * Computed position for a tooltip/popover\n */\nexport interface ComputedPosition {\n top: number;\n left: number;\n placement: TooltipPosition;\n arrowPosition: { top?: number; left?: number; transform?: string };\n}\n\n/**\n * Position configuration\n */\nexport interface PositionConfig {\n preferredPosition: TooltipPosition;\n offset?: { x: number; y: number };\n containerPadding?: number;\n arrowSize?: number;\n}\n\n/**\n * Get the bounding rect of an element with scroll offset\n */\nexport function getElementRect(element: Element): ElementRect {\n const rect = element.getBoundingClientRect();\n return {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX,\n right: rect.right + window.scrollX,\n bottom: rect.bottom + window.scrollY,\n width: rect.width,\n height: rect.height,\n };\n}\n\n/**\n * Get the viewport dimensions\n */\nexport function getViewport(): { width: number; height: number; scrollX: number; scrollY: number } {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n };\n}\n\n/**\n * Check if there's enough space to place tooltip at a given position\n */\nfunction hasSpaceForPosition(\n targetRect: ElementRect,\n tooltipWidth: number,\n tooltipHeight: number,\n position: TooltipPosition,\n padding: number\n): boolean {\n const viewport = getViewport();\n const { scrollX, scrollY, width: viewportWidth, height: viewportHeight } = viewport;\n\n switch (position) {\n case 'top':\n return (\n targetRect.top - scrollY - tooltipHeight - padding > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 - tooltipWidth / 2 > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 + tooltipWidth / 2 < viewportWidth\n );\n case 'bottom':\n return (\n targetRect.bottom - scrollY + tooltipHeight + padding < viewportHeight &&\n targetRect.left - scrollX + targetRect.width / 2 - tooltipWidth / 2 > 0 &&\n targetRect.left - scrollX + targetRect.width / 2 + tooltipWidth / 2 < viewportWidth\n );\n case 'left':\n return (\n targetRect.left - scrollX - tooltipWidth - padding > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 - tooltipHeight / 2 > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 + tooltipHeight / 2 < viewportHeight\n );\n case 'right':\n return (\n targetRect.right - scrollX + tooltipWidth + padding < viewportWidth &&\n targetRect.top - scrollY + targetRect.height / 2 - tooltipHeight / 2 > 0 &&\n targetRect.top - scrollY + targetRect.height / 2 + tooltipHeight / 2 < viewportHeight\n );\n default:\n return true;\n }\n}\n\n/**\n * Find the best position when 'auto' is specified\n */\nfunction findBestPosition(\n targetRect: ElementRect,\n tooltipWidth: number,\n tooltipHeight: number,\n padding: number\n): TooltipPosition {\n // Preference order: bottom, top, right, left\n const positionOrder: TooltipPosition[] = ['bottom', 'top', 'right', 'left'];\n\n for (const position of positionOrder) {\n if (hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, position, padding)) {\n return position;\n }\n }\n\n // Fallback to bottom if nothing fits\n return 'bottom';\n}\n\n/**\n * Calculate the position for a tooltip relative to a target element\n */\nexport function calculatePosition(\n targetElement: Element,\n tooltipWidth: number,\n tooltipHeight: number,\n config: PositionConfig\n): ComputedPosition {\n const { preferredPosition, offset = { x: 0, y: 0 }, containerPadding = 10, arrowSize = 8 } = config;\n\n const targetRect = getElementRect(targetElement);\n const viewport = getViewport();\n\n // Determine final position\n let finalPosition: TooltipPosition = preferredPosition;\n if (preferredPosition === 'auto') {\n finalPosition = findBestPosition(targetRect, tooltipWidth, tooltipHeight, containerPadding);\n } else if (!hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, preferredPosition, containerPadding)) {\n // Flip to opposite side if not enough space\n const opposites: Record<string, TooltipPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n const opposite = opposites[preferredPosition];\n if (opposite && hasSpaceForPosition(targetRect, tooltipWidth, tooltipHeight, opposite, containerPadding)) {\n finalPosition = opposite;\n }\n }\n\n let top = 0;\n let left = 0;\n let arrowPosition: ComputedPosition['arrowPosition'] = {};\n\n const gap = arrowSize + 4; // Gap between tooltip and target\n\n switch (finalPosition) {\n case 'top':\n top = targetRect.top - tooltipHeight - gap + offset.y;\n left = targetRect.left + targetRect.width / 2 - tooltipWidth / 2 + offset.x;\n arrowPosition = {\n left: tooltipWidth / 2 - arrowSize / 2,\n top: tooltipHeight,\n transform: 'rotate(180deg)',\n };\n break;\n\n case 'bottom':\n top = targetRect.bottom + gap + offset.y;\n left = targetRect.left + targetRect.width / 2 - tooltipWidth / 2 + offset.x;\n arrowPosition = {\n left: tooltipWidth / 2 - arrowSize / 2,\n top: -arrowSize,\n };\n break;\n\n case 'left':\n top = targetRect.top + targetRect.height / 2 - tooltipHeight / 2 + offset.y;\n left = targetRect.left - tooltipWidth - gap + offset.x;\n arrowPosition = {\n top: tooltipHeight / 2 - arrowSize / 2,\n left: tooltipWidth,\n transform: 'rotate(-90deg)',\n };\n break;\n\n case 'right':\n top = targetRect.top + targetRect.height / 2 - tooltipHeight / 2 + offset.y;\n left = targetRect.right + gap + offset.x;\n arrowPosition = {\n top: tooltipHeight / 2 - arrowSize / 2,\n left: -arrowSize,\n transform: 'rotate(90deg)',\n };\n break;\n }\n\n // Clamp to viewport bounds\n const minLeft = viewport.scrollX + containerPadding;\n const maxLeft = viewport.scrollX + viewport.width - tooltipWidth - containerPadding;\n const minTop = viewport.scrollY + containerPadding;\n const maxTop = viewport.scrollY + viewport.height - tooltipHeight - containerPadding;\n\n // Adjust arrow position if tooltip is clamped horizontally\n const originalLeft = left;\n left = Math.max(minLeft, Math.min(maxLeft, left));\n if (finalPosition === 'top' || finalPosition === 'bottom') {\n arrowPosition.left = (arrowPosition.left || 0) + (originalLeft - left);\n }\n\n // Adjust arrow position if tooltip is clamped vertically\n const originalTop = top;\n top = Math.max(minTop, Math.min(maxTop, top));\n if (finalPosition === 'left' || finalPosition === 'right') {\n arrowPosition.top = (arrowPosition.top || 0) + (originalTop - top);\n }\n\n return {\n top,\n left,\n placement: finalPosition,\n arrowPosition,\n };\n}\n\n/**\n * Scroll an element into view with optional padding\n */\nexport function scrollIntoView(element: Element, padding: number = 100): void {\n const rect = element.getBoundingClientRect();\n const viewport = getViewport();\n\n const isAboveViewport = rect.top < padding;\n const isBelowViewport = rect.bottom > viewport.height - padding;\n const isLeftOfViewport = rect.left < padding;\n const isRightOfViewport = rect.right > viewport.width - padding;\n\n if (isAboveViewport || isBelowViewport || isLeftOfViewport || isRightOfViewport) {\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n}\n\n/**\n * Find an element using a selector strategy\n */\nexport function findElement(\n selectorStrategy: { css?: string; xpath?: string; text?: string; testId?: string } | null\n): Element | null {\n if (!selectorStrategy) return null;\n\n // Try CSS selector first\n if (selectorStrategy.css) {\n try {\n const element = document.querySelector(selectorStrategy.css);\n if (element) return element;\n } catch {\n // Invalid selector\n }\n }\n\n // Try data-testid\n if (selectorStrategy.testId) {\n const element = document.querySelector(`[data-testid=\"${selectorStrategy.testId}\"]`);\n if (element) return element;\n }\n\n // Try XPath\n if (selectorStrategy.xpath) {\n try {\n const result = document.evaluate(\n selectorStrategy.xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue) return result.singleNodeValue as Element;\n } catch {\n // Invalid xpath\n }\n }\n\n // Try text content (basic implementation)\n if (selectorStrategy.text) {\n const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);\n let node: Node | null;\n while ((node = walker.nextNode())) {\n if (node.textContent?.includes(selectorStrategy.text)) {\n return node.parentElement;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Generate a spotlight/backdrop with a hole for the target element\n */\nexport function getSpotlightClipPath(element: Element, padding: number = 8): string {\n const rect = element.getBoundingClientRect();\n const paddedRect = {\n top: rect.top - padding,\n left: rect.left - padding,\n right: rect.right + padding,\n bottom: rect.bottom + padding,\n width: rect.width + padding * 2,\n height: rect.height + padding * 2,\n };\n\n // Create a polygon that covers everything except the element\n // Using a polygon with a hole (clockwise outer, counter-clockwise inner)\n return `polygon(\n 0 0,\n 100% 0,\n 100% 100%,\n 0 100%,\n 0 0,\n ${paddedRect.left}px ${paddedRect.top}px,\n ${paddedRect.left}px ${paddedRect.bottom}px,\n ${paddedRect.right}px ${paddedRect.bottom}px,\n ${paddedRect.right}px ${paddedRect.top}px,\n ${paddedRect.left}px ${paddedRect.top}px\n )`;\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { getSpotlightClipPath } from './positioning';\n\nexport interface BackdropProps {\n /**\n * Whether the backdrop is visible\n */\n visible: boolean;\n\n /**\n * Element to spotlight (cut out of backdrop)\n */\n spotlightElement?: Element | null;\n\n /**\n * Padding around the spotlighted element\n */\n spotlightPadding?: number;\n\n /**\n * Callback when clicking the backdrop (outside spotlight)\n */\n onClick?: () => void;\n\n /**\n * Whether clicking backdrop dismisses the guide\n */\n dismissOnClick?: boolean;\n\n /**\n * Custom z-index\n */\n zIndex?: number;\n\n /**\n * Backdrop opacity (0-1)\n */\n opacity?: number;\n}\n\nexport function Backdrop({\n visible,\n spotlightElement,\n spotlightPadding = 8,\n onClick,\n dismissOnClick = false,\n zIndex = 9998,\n opacity = 0.5,\n}: BackdropProps) {\n const [clipPath, setClipPath] = useState<string | undefined>();\n\n const updateClipPath = useCallback(() => {\n if (spotlightElement) {\n setClipPath(getSpotlightClipPath(spotlightElement, spotlightPadding));\n } else {\n setClipPath(undefined);\n }\n }, [spotlightElement, spotlightPadding]);\n\n useEffect(() => {\n if (!visible) return;\n\n updateClipPath();\n\n // Update on scroll and resize\n window.addEventListener('scroll', updateClipPath, true);\n window.addEventListener('resize', updateClipPath);\n\n return () => {\n window.removeEventListener('scroll', updateClipPath, true);\n window.removeEventListener('resize', updateClipPath);\n };\n }, [visible, updateClipPath]);\n\n if (!visible) return null;\n\n const handleClick = (e: React.MouseEvent) => {\n // Only fire if clicking the backdrop itself, not the spotlight area\n if (dismissOnClick && onClick) {\n onClick();\n }\n e.stopPropagation();\n };\n\n return (\n <div\n onClick={handleClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex,\n backgroundColor: `rgba(0, 0, 0, ${opacity})`,\n clipPath,\n transition: 'clip-path 0.2s ease-out',\n cursor: dismissOnClick ? 'pointer' : 'default',\n pointerEvents: spotlightElement ? 'auto' : 'auto',\n }}\n aria-hidden=\"true\"\n />\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { GuideStepRichContent } from '../../../types';\n\nexport interface StepButtonsProps {\n /**\n * Button configuration from step\n */\n buttons?: GuideStepRichContent['buttons'];\n\n /**\n * Current step index\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Whether this is the last step\n */\n isLastStep: boolean;\n\n /**\n * Callback for next action\n */\n onNext: () => void;\n\n /**\n * Callback for previous action\n */\n onPrev: () => void;\n\n /**\n * Callback for dismiss action\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Accent color for primary buttons\n */\n accentColor?: string;\n}\n\nexport function StepButtons({\n buttons,\n currentStep,\n isLastStep,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n accentColor = '#2563eb',\n}: StepButtonsProps) {\n // If no custom buttons, use default next/prev/done\n if (!buttons || buttons.length === 0) {\n return (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}>\n <div>\n {currentStep > 0 && (\n <button\n onClick={onPrev}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n color: '#374151',\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n )}\n </div>\n <button\n onClick={isLastStep ? onDismiss : onNext}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n }}\n >\n {isLastStep ? 'Done' : 'Next'}\n </button>\n </div>\n );\n }\n\n // Render custom buttons\n const handleButtonClick = (button: NonNullable<GuideStepRichContent['buttons']>[number]) => {\n switch (button.action) {\n case 'next':\n onNext();\n break;\n case 'prev':\n onPrev();\n break;\n case 'dismiss':\n onDismiss();\n break;\n case 'url':\n if (button.url) {\n window.open(button.url, '_blank', 'noopener,noreferrer');\n }\n break;\n case 'custom':\n if (button.customAction && onCustomAction) {\n onCustomAction(button.customAction);\n }\n break;\n }\n };\n\n const getButtonStyle = (style?: 'primary' | 'secondary' | 'text'): React.CSSProperties => {\n switch (style) {\n case 'primary':\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n };\n case 'text':\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: accentColor,\n cursor: 'pointer',\n };\n case 'secondary':\n default:\n return {\n padding: '8px 16px',\n fontSize: '14px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n backgroundColor: 'white',\n color: '#374151',\n cursor: 'pointer',\n };\n }\n };\n\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '16px' }}>\n {buttons.map((button, index) => (\n <button\n key={index}\n onClick={() => handleButtonClick(button)}\n style={getButtonStyle(button.style)}\n >\n {button.label}\n </button>\n ))}\n </div>\n );\n}\n","'use client';\nimport type { GuideStep } from '../../../types';\n\nexport interface StepContentProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Text color for content\n */\n textColor?: string;\n\n /**\n * Whether to show the title\n */\n showTitle?: boolean;\n}\n\nexport function StepContent({\n step,\n textColor = '#1f2937',\n showTitle = true,\n}: StepContentProps) {\n const richContent = step.rich_content;\n const title = richContent?.title || step.title;\n const body = richContent?.body || step.content;\n\n return (\n <div>\n {/* Title */}\n {showTitle && title && (\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: 600,\n color: textColor,\n lineHeight: 1.4,\n }}\n >\n {title}\n </h3>\n )}\n\n {/* Body text */}\n {body && (\n <div\n style={{\n fontSize: '14px',\n color: textColor,\n opacity: 0.9,\n lineHeight: 1.5,\n }}\n // If body contains HTML, render it safely\n dangerouslySetInnerHTML={\n body.includes('<') ? { __html: sanitizeHTML(body) } : undefined\n }\n >\n {!body.includes('<') ? body : null}\n </div>\n )}\n\n {/* Media (image or video) */}\n {richContent?.media && (\n <div style={{ marginTop: '12px' }}>\n {richContent.media.type === 'image' && (\n <img\n src={richContent.media.url}\n alt={richContent.media.alt || ''}\n style={{\n maxWidth: '100%',\n height: 'auto',\n borderRadius: '4px',\n }}\n />\n )}\n {richContent.media.type === 'video' && (\n <video\n src={richContent.media.url}\n controls\n style={{\n maxWidth: '100%',\n height: 'auto',\n borderRadius: '4px',\n }}\n >\n Your browser does not support the video tag.\n </video>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Basic HTML sanitization for step content\n * Only allows safe tags and strips potentially dangerous attributes\n */\nfunction sanitizeHTML(html: string): string {\n // Allowed tags\n const allowedTags = [\n 'p', 'br', 'b', 'i', 'strong', 'em', 'u', 's',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li',\n 'a', 'code', 'pre', 'blockquote',\n 'span', 'div',\n ];\n\n // Create a temporary element to parse HTML\n if (typeof document === 'undefined') {\n // SSR fallback - just return text content\n return html.replace(/<[^>]*>/g, '');\n }\n\n const temp = document.createElement('div');\n temp.innerHTML = html;\n\n // Remove script tags and event handlers\n const scripts = temp.querySelectorAll('script');\n scripts.forEach((script) => script.remove());\n\n // Remove event handlers from all elements\n const allElements = temp.querySelectorAll('*');\n allElements.forEach((el) => {\n // Check if tag is allowed\n if (!allowedTags.includes(el.tagName.toLowerCase())) {\n // Replace with its text content\n const text = document.createTextNode(el.textContent || '');\n el.parentNode?.replaceChild(text, el);\n return;\n }\n\n // Remove dangerous attributes\n const attrs = Array.from(el.attributes);\n attrs.forEach((attr) => {\n const name = attr.name.toLowerCase();\n // Remove event handlers (onclick, onerror, etc.)\n if (name.startsWith('on')) {\n el.removeAttribute(attr.name);\n }\n // Remove javascript: URLs\n if (name === 'href' || name === 'src') {\n const value = attr.value.toLowerCase().trim();\n if (value.startsWith('javascript:') || value.startsWith('data:')) {\n el.removeAttribute(attr.name);\n }\n }\n // Only allow certain attributes\n const allowedAttrs = ['href', 'target', 'rel', 'class', 'style'];\n if (!allowedAttrs.includes(name)) {\n el.removeAttribute(attr.name);\n }\n });\n\n // Add rel=\"noopener noreferrer\" to links\n if (el.tagName.toLowerCase() === 'a') {\n el.setAttribute('rel', 'noopener noreferrer');\n el.setAttribute('target', '_blank');\n }\n });\n\n return temp.innerHTML;\n}\n","'use client';\n\nimport { useEffect, useState, useRef, useCallback } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { calculatePosition, findElement, scrollIntoView, type ComputedPosition } from './positioning';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface TooltipStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the tooltip\n */\n zIndex?: number;\n}\n\nexport function TooltipStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: TooltipStepProps) {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [position, setPosition] = useState<ComputedPosition | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 8;\n\n // Find the target element\n useEffect(() => {\n const element = findElement(step.selector_strategy);\n setTargetElement(element);\n\n if (element) {\n scrollIntoView(element, 120);\n }\n }, [step.selector_strategy]);\n\n // Calculate position when target or tooltip size changes\n const updatePosition = useCallback(() => {\n if (!targetElement || !tooltipRef.current) return;\n\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const newPosition = calculatePosition(\n targetElement,\n tooltipRect.width,\n tooltipRect.height,\n {\n preferredPosition: step.tooltip_position || step.display_config?.position as 'auto' | 'top' | 'bottom' | 'left' | 'right' || 'auto',\n offset: step.display_config?.offset,\n arrowSize: 8,\n }\n );\n\n setPosition(newPosition);\n setIsVisible(true);\n }, [targetElement, step.tooltip_position, step.display_config]);\n\n useEffect(() => {\n // Initial position calculation with a small delay to ensure tooltip is rendered\n const timer = setTimeout(updatePosition, 10);\n\n // Update on scroll and resize\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n clearTimeout(timer);\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [updatePosition]);\n\n // If no target element found, render as centered modal fallback\n if (!targetElement) {\n return (\n <>\n <Backdrop visible={true} />\n <div\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex,\n padding: '24px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n maxWidth: '400px',\n width: '90%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <StepContent step={step} textColor={textColor} />\n {showProgress && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n }\n\n return (\n <>\n <Backdrop\n visible={step.display_config?.backdrop !== false}\n spotlightElement={targetElement}\n spotlightPadding={step.display_config?.spotlightPadding || 8}\n dismissOnClick={false}\n />\n <div\n ref={tooltipRef}\n style={{\n position: 'absolute',\n top: position?.top || 0,\n left: position?.left || 0,\n zIndex,\n padding: '16px 20px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n maxWidth: step.display_config?.width || 320,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n opacity: isVisible ? 1 : 0,\n transition: 'opacity 0.15s ease-out',\n }}\n >\n {/* Arrow */}\n {position && (\n <div\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n borderLeft: '8px solid transparent',\n borderRight: '8px solid transparent',\n borderBottom: `8px solid ${backgroundColor}`,\n top: position.arrowPosition.top,\n left: position.arrowPosition.left,\n transform: position.arrowPosition.transform,\n }}\n />\n )}\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface ModalStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the modal\n */\n zIndex?: number;\n}\n\ntype ModalPosition = 'center' | 'top' | 'bottom';\n\nexport function ModalStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: ModalStepProps) {\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 12;\n\n // Get modal-specific display config\n const displayConfig = step.display_config || {};\n const width = displayConfig.width || 480;\n const position = (displayConfig.position as ModalPosition) || 'center';\n const dismissOnBackdropClick = displayConfig.backdrop !== false;\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onDismiss();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [onDismiss]);\n\n // Lock body scroll\n useEffect(() => {\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }, []);\n\n const getPositionStyles = (): React.CSSProperties => {\n switch (position) {\n case 'top':\n return {\n top: '10%',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case 'bottom':\n return {\n bottom: '10%',\n left: '50%',\n transform: 'translateX(-50%)',\n };\n case 'center':\n default:\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n }\n };\n\n return (\n <>\n <Backdrop\n visible={true}\n onClick={dismissOnBackdropClick ? onDismiss : undefined}\n dismissOnClick={dismissOnBackdropClick}\n opacity={0.6}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"guide-modal-title\"\n style={{\n position: 'fixed',\n ...getPositionStyles(),\n zIndex,\n width: '90%',\n maxWidth: width,\n maxHeight: '85vh',\n overflow: 'auto',\n padding: '24px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Close button */}\n <button\n onClick={onDismiss}\n aria-label=\"Close\"\n style={{\n position: 'absolute',\n top: '12px',\n right: '12px',\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n color: '#9ca3af',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.15s',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#6b7280')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#9ca3af')}\n >\n ×\n </button>\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && totalSteps > 1 && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n gap: '6px',\n marginTop: '16px',\n }}\n >\n {Array.from({ length: totalSteps }).map((_, i) => (\n <div\n key={i}\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: i === currentStep ? accentColor : '#e5e7eb',\n transition: 'background-color 0.15s',\n }}\n />\n ))}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { Backdrop } from './Backdrop';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface SlideoutStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the slideout\n */\n zIndex?: number;\n}\n\ntype SlideoutSide = 'left' | 'right';\n\nexport function SlideoutStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: SlideoutStepProps) {\n const [isAnimating, setIsAnimating] = useState(true);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 0;\n\n // Get slideout-specific display config\n const displayConfig = step.display_config || {};\n const width = displayConfig.width || 400;\n const side: SlideoutSide = (displayConfig.position as SlideoutSide) === 'left' ? 'left' : 'right';\n const showBackdrop = displayConfig.backdrop !== false;\n\n // Animate in\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(false), 50);\n return () => clearTimeout(timer);\n }, []);\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onDismiss();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [onDismiss]);\n\n const getSlideStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n bottom: 0,\n width: '90%',\n maxWidth: width,\n zIndex,\n backgroundColor,\n color: textColor,\n boxShadow: side === 'right'\n ? '-10px 0 30px -5px rgba(0, 0, 0, 0.1)'\n : '10px 0 30px -5px rgba(0, 0, 0, 0.1)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'auto',\n transition: 'transform 0.3s ease-out',\n };\n\n if (side === 'right') {\n return {\n ...baseStyles,\n right: 0,\n borderTopLeftRadius: borderRadius,\n borderBottomLeftRadius: borderRadius,\n transform: isAnimating ? 'translateX(100%)' : 'translateX(0)',\n };\n } else {\n return {\n ...baseStyles,\n left: 0,\n borderTopRightRadius: borderRadius,\n borderBottomRightRadius: borderRadius,\n transform: isAnimating ? 'translateX(-100%)' : 'translateX(0)',\n };\n }\n };\n\n return (\n <>\n {showBackdrop && (\n <Backdrop\n visible={true}\n onClick={onDismiss}\n dismissOnClick={true}\n opacity={0.4}\n />\n )}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"guide-slideout-title\"\n style={getSlideStyles()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n position: 'sticky',\n top: 0,\n backgroundColor,\n zIndex: 1,\n }}\n >\n <h2\n id=\"guide-slideout-title\"\n style={{\n margin: 0,\n fontSize: '18px',\n fontWeight: 600,\n color: textColor,\n }}\n >\n {step.rich_content?.title || step.title || 'Guide'}\n </h2>\n <button\n onClick={onDismiss}\n aria-label=\"Close\"\n style={{\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n color: '#9ca3af',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n ×\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: '20px' }}>\n <StepContent step={step} textColor={textColor} showTitle={false} />\n\n {showProgress && totalSteps > 1 && (\n <div\n style={{\n fontSize: '12px',\n color: '#6b7280',\n marginTop: '16px',\n }}\n >\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div\n style={{\n padding: '16px 20px',\n borderTop: '1px solid #e5e7eb',\n position: 'sticky',\n bottom: 0,\n backgroundColor,\n }}\n >\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={onDismiss}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState, useRef, useCallback } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { calculatePosition, findElement, scrollIntoView, getElementRect, type ComputedPosition } from './positioning';\nimport { StepButtons } from './StepButtons';\nimport { StepContent } from './StepContent';\n\nexport interface HotspotStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the hotspot\n */\n zIndex?: number;\n}\n\ntype BeaconStyle = 'pulse' | 'static' | 'numbered';\n\nexport function HotspotStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: HotspotStepProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const [beaconPosition, setBeaconPosition] = useState({ top: 0, left: 0 });\n const [popoverPosition, setPopoverPosition] = useState<ComputedPosition | null>(null);\n\n const style = { ...globalStyle, ...step.style_config };\n const backgroundColor = style.backgroundColor || 'white';\n const textColor = style.textColor || '#1f2937';\n const accentColor = style.accentColor || '#2563eb';\n const borderRadius = style.borderRadius || 8;\n\n // Get hotspot-specific display config\n const displayConfig = step.display_config || {};\n // Could read beaconStyle from displayConfig in future\n const beaconStyle = 'pulse' as BeaconStyle;\n\n // Find target element\n useEffect(() => {\n const element = findElement(step.selector_strategy);\n setTargetElement(element);\n\n if (element) {\n scrollIntoView(element, 120);\n }\n }, [step.selector_strategy]);\n\n // Update beacon position\n const updateBeaconPosition = useCallback(() => {\n if (!targetElement) return;\n\n const rect = getElementRect(targetElement);\n // Position beacon at top-right corner of element\n setBeaconPosition({\n top: rect.top - 8,\n left: rect.right - 8,\n });\n }, [targetElement]);\n\n // Update popover position when expanded\n const updatePopoverPosition = useCallback(() => {\n if (!targetElement || !popoverRef.current || !isExpanded) return;\n\n const popoverRect = popoverRef.current.getBoundingClientRect();\n const newPosition = calculatePosition(\n targetElement,\n popoverRect.width,\n popoverRect.height,\n {\n preferredPosition: step.tooltip_position || 'auto',\n offset: step.display_config?.offset,\n arrowSize: 8,\n }\n );\n\n setPopoverPosition(newPosition);\n }, [targetElement, isExpanded, step.tooltip_position, step.display_config?.offset]);\n\n useEffect(() => {\n updateBeaconPosition();\n if (isExpanded) {\n setTimeout(updatePopoverPosition, 10);\n }\n\n window.addEventListener('scroll', updateBeaconPosition, true);\n window.addEventListener('resize', updateBeaconPosition);\n\n return () => {\n window.removeEventListener('scroll', updateBeaconPosition, true);\n window.removeEventListener('resize', updateBeaconPosition);\n };\n }, [updateBeaconPosition, updatePopoverPosition, isExpanded]);\n\n // Handle click outside to close\n useEffect(() => {\n if (!isExpanded) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target as Node)) {\n setIsExpanded(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isExpanded]);\n\n // If no target element, show nothing (hotspots require an anchor)\n if (!targetElement) {\n return null;\n }\n\n // CSS for pulsing animation\n const pulseKeyframes = `\n @keyframes census-hotspot-pulse {\n 0% {\n transform: scale(1);\n box-shadow: 0 0 0 0 ${accentColor}66;\n }\n 70% {\n transform: scale(1.1);\n box-shadow: 0 0 0 10px ${accentColor}00;\n }\n 100% {\n transform: scale(1);\n box-shadow: 0 0 0 0 ${accentColor}00;\n }\n }\n `;\n\n return (\n <>\n {/* Inject animation styles */}\n <style dangerouslySetInnerHTML={{ __html: pulseKeyframes }} />\n\n {/* Beacon */}\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-label=\"Show more information\"\n aria-expanded={isExpanded}\n style={{\n position: 'absolute',\n top: beaconPosition.top,\n left: beaconPosition.left,\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: accentColor,\n color: 'white',\n cursor: 'pointer',\n zIndex,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 600,\n animation: beaconStyle === 'pulse' && !isExpanded ? 'census-hotspot-pulse 2s infinite' : 'none',\n transition: 'transform 0.15s',\n }}\n >\n {beaconStyle === 'numbered' ? currentStep + 1 : '?'}\n </button>\n\n {/* Expanded popover */}\n {isExpanded && (\n <div\n ref={popoverRef}\n style={{\n position: 'absolute',\n top: popoverPosition?.top || beaconPosition.top + 30,\n left: popoverPosition?.left || beaconPosition.left - 140,\n zIndex: zIndex + 1,\n padding: '16px 20px',\n backgroundColor,\n color: textColor,\n borderRadius,\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n maxWidth: displayConfig.width || 300,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* Arrow pointing to beacon */}\n {popoverPosition && (\n <div\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n borderLeft: '8px solid transparent',\n borderRight: '8px solid transparent',\n borderBottom: `8px solid ${backgroundColor}`,\n top: popoverPosition.arrowPosition.top,\n left: popoverPosition.arrowPosition.left,\n transform: popoverPosition.arrowPosition.transform,\n }}\n />\n )}\n\n <StepContent step={step} textColor={textColor} />\n\n {showProgress && totalSteps > 1 && (\n <div style={{ fontSize: '12px', color: '#6b7280', marginTop: '8px' }}>\n Step {currentStep + 1} of {totalSteps}\n </div>\n )}\n\n <StepButtons\n buttons={step.rich_content?.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={() => {\n setIsExpanded(false);\n onNext();\n }}\n onPrev={() => {\n setIsExpanded(false);\n onPrev();\n }}\n onDismiss={() => {\n setIsExpanded(false);\n onDismiss();\n }}\n onCustomAction={onCustomAction}\n accentColor={accentColor}\n />\n </div>\n )}\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { StepButtons } from './StepButtons';\n\nexport interface BannerStepProps {\n /**\n * The step data\n */\n step: GuideStep;\n\n /**\n * Current step index (0-based)\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Callback when advancing to next step\n */\n onNext: () => void;\n\n /**\n * Callback when going to previous step\n */\n onPrev: () => void;\n\n /**\n * Callback when dismissing the guide\n */\n onDismiss: () => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string) => void;\n\n /**\n * Whether to show progress indicator\n */\n showProgress?: boolean;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Z-index for the banner\n */\n zIndex?: number;\n}\n\ntype BannerPosition = 'top' | 'bottom';\ntype BannerVariant = 'info' | 'warning' | 'success' | 'custom';\n\nconst variantStyles: Record<BannerVariant, { bg: string; text: string; icon: string }> = {\n info: { bg: '#eff6ff', text: '#1e40af', icon: 'i' },\n warning: { bg: '#fef3c7', text: '#92400e', icon: '!' },\n success: { bg: '#dcfce7', text: '#166534', icon: '✓' },\n custom: { bg: '#2563eb', text: 'white', icon: '' },\n};\n\nexport function BannerStep({\n step,\n currentStep,\n totalSteps,\n onNext,\n onPrev,\n onDismiss,\n onCustomAction,\n showProgress = true,\n globalStyle,\n zIndex = 9999,\n}: BannerStepProps) {\n const [isAnimating, setIsAnimating] = useState(true);\n const [isVisible, setIsVisible] = useState(true);\n\n const style = { ...globalStyle, ...step.style_config };\n const displayConfig = step.display_config || {};\n\n // Get banner-specific config\n const position: BannerPosition = displayConfig.bannerPosition || 'top';\n const variant: BannerVariant = 'custom'; // Could be from config\n\n // Use style colors or variant defaults\n const backgroundColor = style.backgroundColor || variantStyles[variant].bg;\n const textColor = style.textColor || variantStyles[variant].text;\n const accentColor = style.accentColor || '#2563eb';\n\n // Animate in\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(false), 50);\n return () => clearTimeout(timer);\n }, []);\n\n // Handle dismiss with animation\n const handleDismiss = () => {\n setIsAnimating(true);\n setTimeout(() => {\n setIsVisible(false);\n onDismiss();\n }, 200);\n };\n\n if (!isVisible) return null;\n\n const richContent = step.rich_content;\n const title = richContent?.title || step.title;\n const body = richContent?.body || step.content;\n const hasButtons = richContent?.buttons && richContent.buttons.length > 0;\n\n return (\n <div\n role=\"alert\"\n style={{\n position: 'fixed',\n left: 0,\n right: 0,\n [position]: 0,\n zIndex,\n padding: '12px 20px',\n backgroundColor,\n color: textColor,\n boxShadow: position === 'top'\n ? '0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n : '0 -4px 6px -1px rgba(0, 0, 0, 0.1)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n transform: isAnimating\n ? position === 'top' ? 'translateY(-100%)' : 'translateY(100%)'\n : 'translateY(0)',\n transition: 'transform 0.2s ease-out',\n }}\n >\n <div\n style={{\n maxWidth: '1200px',\n margin: '0 auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '16px',\n }}\n >\n {/* Content */}\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: '12px' }}>\n {/* Icon */}\n {variantStyles[variant].icon && (\n <div\n style={{\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : textColor,\n color: variant === 'custom' ? textColor : backgroundColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {variantStyles[variant].icon}\n </div>\n )}\n\n {/* Text content */}\n <div style={{ flex: 1 }}>\n {title && (\n <strong style={{ display: 'block', marginBottom: body ? '2px' : 0 }}>\n {title}\n </strong>\n )}\n {body && (\n <span style={{ opacity: 0.9, fontSize: '14px' }}>\n {body}\n </span>\n )}\n </div>\n\n {/* Progress */}\n {showProgress && totalSteps > 1 && (\n <span style={{ fontSize: '12px', opacity: 0.7, flexShrink: 0 }}>\n {currentStep + 1}/{totalSteps}\n </span>\n )}\n </div>\n\n {/* Actions */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', flexShrink: 0 }}>\n {hasButtons ? (\n <StepButtons\n buttons={richContent.buttons}\n currentStep={currentStep}\n totalSteps={totalSteps}\n isLastStep={currentStep === totalSteps - 1}\n onNext={onNext}\n onPrev={onPrev}\n onDismiss={handleDismiss}\n onCustomAction={onCustomAction}\n accentColor={variant === 'custom' ? 'white' : accentColor}\n />\n ) : (\n <>\n {currentStep < totalSteps - 1 ? (\n <button\n onClick={onNext}\n style={{\n padding: '6px 12px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : accentColor,\n color: variant === 'custom' ? textColor : 'white',\n cursor: 'pointer',\n }}\n >\n Next\n </button>\n ) : (\n <button\n onClick={handleDismiss}\n style={{\n padding: '6px 12px',\n fontSize: '14px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: variant === 'custom' ? 'rgba(255,255,255,0.2)' : accentColor,\n color: variant === 'custom' ? textColor : 'white',\n cursor: 'pointer',\n }}\n >\n Got it\n </button>\n )}\n </>\n )}\n\n {/* Close button */}\n <button\n onClick={handleDismiss}\n aria-label=\"Dismiss\"\n style={{\n width: '28px',\n height: '28px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: textColor,\n opacity: 0.7,\n fontSize: '18px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n ×\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport type { Guide, GuideStep, GuideStepStyleConfig } from '../../../types';\nimport { TooltipStep } from './TooltipStep';\nimport { ModalStep } from './ModalStep';\nimport { SlideoutStep } from './SlideoutStep';\nimport { HotspotStep } from './HotspotStep';\nimport { BannerStep } from './BannerStep';\n\nexport interface GuideRendererProps {\n /**\n * The guide to render\n */\n guide: Guide;\n\n /**\n * Callback when guide is completed\n */\n onComplete?: (guide: Guide) => void;\n\n /**\n * Callback when guide is dismissed (skipped)\n */\n onDismiss?: (guide: Guide, step: number) => void;\n\n /**\n * Callback when a step changes\n */\n onStepChange?: (step: number, totalSteps: number) => void;\n\n /**\n * Callback for custom button actions\n */\n onCustomAction?: (actionName: string, step: GuideStep) => void;\n\n /**\n * Global style overrides\n */\n globalStyle?: GuideStepStyleConfig;\n\n /**\n * Starting step index\n */\n startStep?: number;\n\n /**\n * Z-index base for guide elements\n */\n zIndex?: number;\n}\n\n/**\n * GuideRenderer - Displays a guide step by step\n *\n * Renders the appropriate step type component based on the step's step_type field.\n *\n * @example\n * ```tsx\n * <GuideRenderer\n * guide={myGuide}\n * onComplete={(guide) => console.log('Completed:', guide.name)}\n * onDismiss={(guide, step) => console.log('Dismissed at step:', step)}\n * />\n * ```\n */\nexport function GuideRenderer({\n guide,\n onComplete,\n onDismiss,\n onStepChange,\n onCustomAction,\n globalStyle,\n startStep = 0,\n zIndex = 9999,\n}: GuideRendererProps) {\n const [currentStepIndex, setCurrentStepIndex] = useState(startStep);\n const [isActive, setIsActive] = useState(true);\n\n const steps = guide.guide_steps || [];\n const totalSteps = steps.length;\n const currentStep = steps[currentStepIndex];\n\n // Notify when step changes\n useEffect(() => {\n onStepChange?.(currentStepIndex, totalSteps);\n }, [currentStepIndex, totalSteps, onStepChange]);\n\n // Handle next step\n const handleNext = useCallback(() => {\n if (currentStepIndex < totalSteps - 1) {\n setCurrentStepIndex((prev) => prev + 1);\n } else {\n // Guide completed\n setIsActive(false);\n onComplete?.(guide);\n }\n }, [currentStepIndex, totalSteps, guide, onComplete]);\n\n // Handle previous step\n const handlePrev = useCallback(() => {\n if (currentStepIndex > 0) {\n setCurrentStepIndex((prev) => prev - 1);\n }\n }, [currentStepIndex]);\n\n // Handle dismiss\n const handleDismiss = useCallback(() => {\n setIsActive(false);\n onDismiss?.(guide, currentStepIndex);\n }, [guide, currentStepIndex, onDismiss]);\n\n // Handle custom action\n const handleCustomAction = useCallback(\n (actionName: string) => {\n if (currentStep) {\n onCustomAction?.(actionName, currentStep);\n }\n },\n [currentStep, onCustomAction]\n );\n\n // If not active or no steps, don't render\n if (!isActive || !currentStep || steps.length === 0) {\n return null;\n }\n\n // Common props for all step types\n const stepProps = {\n step: currentStep,\n currentStep: currentStepIndex,\n totalSteps,\n onNext: handleNext,\n onPrev: handlePrev,\n onDismiss: handleDismiss,\n onCustomAction: handleCustomAction,\n showProgress: guide.show_progress !== false,\n globalStyle: { ...guide.theme, ...globalStyle } as GuideStepStyleConfig,\n zIndex,\n };\n\n // Render the appropriate step type\n switch (currentStep.step_type) {\n case 'tooltip':\n return <TooltipStep {...stepProps} />;\n\n case 'modal':\n return <ModalStep {...stepProps} />;\n\n case 'slideout':\n return <SlideoutStep {...stepProps} />;\n\n case 'hotspot':\n return <HotspotStep {...stepProps} />;\n\n case 'banner':\n return <BannerStep {...stepProps} />;\n\n default:\n // Default to tooltip for unknown types\n return <TooltipStep {...stepProps} />;\n }\n}\n\n// Re-export individual step components for custom use cases\nexport { TooltipStep } from './TooltipStep';\nexport { ModalStep } from './ModalStep';\nexport { SlideoutStep } from './SlideoutStep';\nexport { HotspotStep } from './HotspotStep';\nexport { BannerStep } from './BannerStep';\nexport { Backdrop } from './Backdrop';\nexport { StepButtons } from './StepButtons';\nexport { StepContent } from './StepContent';\nexport * from './positioning';\n"]}
|