diff --git a/docusaurus.config.js b/docusaurus.config.js
index 462ea55b05..b7614e42b6 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -131,6 +131,14 @@ module.exports = {
require.resolve('./src/client-modules/trackTrialClick.js'),
require.resolve('./src/client-modules/fixAnchorScroll.js'),
],
+ customFields: {
+ askAi: {
+ // Keep Algolia Ask AI feedback targets out of source control.
+ // This Google Form is a shared public collection endpoint for Algolia Ask AI feedback.
+ feedbackFormUrl:
+ 'https://docs.google.com/forms/d/e/1FAIpQLSdJOWBAXsM86C-buZm0N3a9vwBOxxjOfBe7jiEn6PkLqctv5A/viewform?usp=pp_url&entry.778922322=a&entry.898262107=a&entry.1217042173=a&entry.1416546939=a&entry.1571666595=a&entry.554631687=a',
+ },
+ },
storage: {
type: 'localStorage',
namespace: true,
@@ -388,6 +396,13 @@ module.exports = {
contextualSearch: false,
searchPagePath: 'docs-search', // Default value is 'search'; renamed to 'docs-search' so it doesn't conflict with '/Search' redirect
insights: true,
+ askAi: {
+ assistantId: 'T7pp7iENesuU',
+ indexName: 'crawler_sumodocs',
+ apiKey: 'fb2f4e1fb40f962900631121cb365549',
+ appId: '2SJPGMLW1Q',
+ suggestedQuestions: true,
+ },
insightsConfig: {
useCookie: true, // alt to useCookie: true,
},
@@ -549,6 +564,12 @@ module.exports = {
type: 'search',
position: 'left',
},
+ {
+ type: 'html',
+ position: 'left',
+ className: 'navbar-ask-ai-item',
+ value: '
',
+ },
],
},
footer: {
diff --git a/package.json b/package.json
index ce7ccae7d0..52c566792f 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,9 @@
"@babel/runtime-corejs3": "7.26.10",
"@braintree/sanitize-url": "^6.0.1",
"@csstools/selector-resolve-nested": "3.1.0",
- "@docsearch/css": "4",
+ "@docsearch/core": "4.6.2",
+ "@docsearch/css": "4.6.2",
+ "@docsearch/react": "4.6.2",
"@docusaurus/bundler": "^3.10.1",
"@docusaurus/core": "^3.10.1",
"@docusaurus/cssnano-preset": "^3.10.1",
diff --git a/src/components/AskAiButton/index.tsx b/src/components/AskAiButton/index.tsx
new file mode 100644
index 0000000000..eab4142246
--- /dev/null
+++ b/src/components/AskAiButton/index.tsx
@@ -0,0 +1,50 @@
+/**
+ * Ask AI Button Component
+ *
+ * Renders a button in the navbar that opens the Algolia Ask AI sidepanel.
+ * Includes keyboard shortcut support (Cmd/Ctrl + I).
+ *
+ * The sidepanel itself is rendered in Root.tsx, outside the navbar portal,
+ * so it is never unmounted by navbar re-renders on resize.
+ */
+
+import React, { useEffect } from 'react';
+import styles from './styles.module.css';
+
+interface AskAiButtonProps {
+ isOpen: boolean;
+ setIsOpen: (open: boolean) => void;
+}
+
+export default function AskAiButton({ isOpen, setIsOpen }: AskAiButtonProps) {
+ // Keyboard shortcut: Cmd/Ctrl + I
+ useEffect(() => {
+ const handleKeyDown = (event: KeyboardEvent) => {
+ if ((event.metaKey || event.ctrlKey) && event.key === 'i') {
+ event.preventDefault();
+ setIsOpen(!isOpen);
+ }
+ };
+
+ document.addEventListener('keydown', handleKeyDown);
+ return () => document.removeEventListener('keydown', handleKeyDown);
+ }, [isOpen, setIsOpen]);
+
+ return (
+ setIsOpen(true)}
+ aria-label="Ask AI"
+ title="Ask AI (Cmd/Ctrl + I)"
+ >
+
+
+
+
+
+
+
+ Ask AI
+
+ );
+}
diff --git a/src/components/AskAiButton/styles.module.css b/src/components/AskAiButton/styles.module.css
new file mode 100644
index 0000000000..04fb8dc154
--- /dev/null
+++ b/src/components/AskAiButton/styles.module.css
@@ -0,0 +1,94 @@
+/**
+ * Ask AI Button - Premium navbar button styling
+ * Matches Algolia and Stripe documentation design patterns
+ */
+
+.askAiButton {
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+ padding: 0 0.875rem;
+ height: 36px;
+ background: transparent;
+ border: 1px solid var(--ifm-color-border-pale);
+ border-radius: 8px;
+ color: #5f6368;
+ font-size: 0.8125rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
+ margin-left: -1rem;
+ position: relative;
+ overflow: hidden;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
+}
+
+/* Hover effect with subtle background and shadow */
+.askAiButton:hover {
+ background: var(--ifm-color-emphasis-100);
+ border-color: var(--ifm-color-emphasis-300);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+}
+
+/* Active/pressed state - minimal animation */
+.askAiButton:active {
+ transform: scale(0.98);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
+ transition: transform 0.1s ease;
+}
+
+/* Focus state for accessibility */
+.askAiButton:focus-visible {
+ outline: 2px solid var(--ifm-color-primary);
+ outline-offset: 2px;
+}
+
+/* Dark mode styling */
+[data-theme='dark'] .askAiButton {
+ border-color: #6b6f78;
+ color: #bdc1c6;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+}
+
+[data-theme='dark'] .askAiButton:hover {
+ background: var(--ifm-color-emphasis-200);
+ border-color: #6b6f78;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+/* Button text and icon */
+.buttonText {
+ display: inline;
+ letter-spacing: -0.01em;
+}
+
+.buttonIcon {
+ display: inline-flex;
+ align-items: center;
+ flex-shrink: 0;
+ transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
+ color: #5f6368;
+}
+
+/* Dark mode icon color to match DocSearch-Search-Icon */
+[data-theme='dark'] .buttonIcon {
+ color: #bdc1c6;
+}
+
+/* Subtle icon animation on hover */
+.askAiButton:hover .buttonIcon {
+ opacity: 0.8;
+}
+
+/* Responsive: Hide text on mobile, show icon only */
+@media (max-width: 768px) {
+ .buttonText {
+ display: none;
+ }
+
+ .askAiButton {
+ padding: 0 0.625rem;
+ min-width: 36px;
+ justify-content: center;
+ }
+}
diff --git a/src/components/AskAiSidepanel/index.tsx b/src/components/AskAiSidepanel/index.tsx
new file mode 100644
index 0000000000..1fba3c91e5
--- /dev/null
+++ b/src/components/AskAiSidepanel/index.tsx
@@ -0,0 +1,886 @@
+import React, { useEffect, useRef, useState } from 'react';
+import { createPortal } from 'react-dom';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import '@docsearch/css/dist/sidepanel.css';
+import './styles.css';
+
+interface AskAiSidepanelProps {
+ isOpen: boolean;
+ onClose: () => void;
+ initialMessage?: { query: string } | null;
+}
+
+const FEEDBACK_FORM_FIELDS = [
+ 'created_at',
+ 'question',
+ 'answer',
+ 'details',
+ 'page_url',
+ 'client_timestamp',
+] as const;
+
+type FeedbackFormField = (typeof FEEDBACK_FORM_FIELDS)[number];
+
+function parseGoogleFormConfig(formUrl: string): {
+ actionUrl: string;
+ fields: FeedbackFormField[];
+ entryMap: Partial>;
+} | null {
+ try {
+ const url = new URL(formUrl);
+ const entryKeys = Array.from(url.searchParams.keys()).filter((key) =>
+ key.startsWith('entry.')
+ );
+
+ if (
+ !url.hostname.includes('docs.google.com') ||
+ !url.pathname.endsWith('/viewform') ||
+ entryKeys.length < FEEDBACK_FORM_FIELDS.length
+ ) {
+ return null;
+ }
+
+ const entryMap = {} as Partial>;
+ FEEDBACK_FORM_FIELDS.forEach((field, index) => {
+ entryMap[field] = entryKeys[index];
+ });
+
+ return {
+ actionUrl: `${url.origin}${url.pathname.replace(
+ /\/viewform$/,
+ '/formResponse'
+ )}`,
+ fields: [...FEEDBACK_FORM_FIELDS],
+ entryMap,
+ };
+ } catch {
+ return null;
+ }
+}
+
+export default function AskAiSidepanel({
+ isOpen,
+ onClose,
+ initialMessage,
+}: AskAiSidepanelProps) {
+ const { siteConfig } = useDocusaurusContext();
+ const algoliaConfig = (siteConfig.themeConfig as any)?.algolia;
+ const askAiConfig = {
+ ...(algoliaConfig?.askAi || {}),
+ ...(((siteConfig.customFields as any)?.askAi || {}) as Record<
+ string,
+ unknown
+ >),
+ };
+ const feedbackFormUrl = askAiConfig?.feedbackFormUrl || '';
+ const [SidepanelComponent, setSidepanelComponent] = useState(null);
+ const [isExpanded, setIsExpanded] = useState(false);
+ const [isHistoryOpen, setIsHistoryOpen] = useState(false);
+ const [shortcutHint, setShortcutHint] = useState('Ctrl + I');
+ const [headerActionsEl, setHeaderActionsEl] = useState(
+ null
+ );
+ const [feedbackModal, setFeedbackModal] = useState<{
+ question: string;
+ answer: string;
+ } | null>(null);
+ const [feedbackDetails, setFeedbackDetails] = useState('');
+ const [isSubmittingFeedback, setIsSubmittingFeedback] = useState(false);
+ const [feedbackSubmitError, setFeedbackSubmitError] = useState('');
+ const [feedbackSubmittedNotice, setFeedbackSubmittedNotice] = useState('');
+ const isResizingRef = useRef(false);
+ const feedbackTextareaRef = useRef(null);
+
+ // Lazy load the Algolia Sidepanel component
+ useEffect(() => {
+ if (isOpen && !SidepanelComponent) {
+ import('@docsearch/react/sidepanel').then((module) => {
+ setSidepanelComponent(() => module.Sidepanel);
+ });
+ }
+ }, [isOpen, SidepanelComponent]);
+
+ useEffect(() => {
+ if (typeof navigator === 'undefined') return;
+
+ if (/(Mac|iPhone|iPad|iPod)/i.test(navigator.platform)) {
+ setShortcutHint('\u2318 + I');
+ } else {
+ setShortcutHint('Ctrl + I');
+ }
+ }, []);
+
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const tipText = `Tip: Start a new chat with ${shortcutHint}`;
+ const checkInterval = setInterval(() => {
+ const intro = document.querySelector(
+ '.DocSearch-Sidepanel-NewConversationScreen .DocSearch-Sidepanel-Screen--introduction'
+ ) as HTMLElement | null;
+
+ if (intro) {
+ intro.setAttribute('data-shortcut-tip', tipText);
+ clearInterval(checkInterval);
+ }
+ }, 100);
+
+ return () => clearInterval(checkInterval);
+ }, [isOpen, shortcutHint]);
+
+ // Track resize so we can suppress Algolia's resize-triggered onClose
+ useEffect(() => {
+ let timer: ReturnType;
+ const onResize = () => {
+ isResizingRef.current = true;
+ clearTimeout(timer);
+ timer = setTimeout(() => {
+ isResizingRef.current = false;
+ }, 500);
+ };
+ window.addEventListener('resize', onResize);
+ return () => {
+ window.removeEventListener('resize', onResize);
+ clearTimeout(timer);
+ };
+ }, []);
+
+ // Reset expanded state when panel closes
+ useEffect(() => {
+ if (!isOpen) {
+ setIsExpanded(false);
+ setIsHistoryOpen(false);
+ setFeedbackModal(null);
+ setFeedbackDetails('');
+ setIsSubmittingFeedback(false);
+ setFeedbackSubmitError('');
+ setFeedbackSubmittedNotice('');
+ }
+ }, [isOpen]);
+
+ useEffect(() => {
+ if (!feedbackSubmittedNotice) return;
+
+ const timer = window.setTimeout(() => {
+ setFeedbackSubmittedNotice('');
+ }, 3000);
+
+ return () => window.clearTimeout(timer);
+ }, [feedbackSubmittedNotice]);
+
+ useEffect(() => {
+ if (!feedbackModal) return;
+
+ const textarea = feedbackTextareaRef.current;
+ if (textarea) {
+ textarea.focus();
+ const length = textarea.value.length;
+ textarea.setSelectionRange(length, length);
+ }
+
+ const handleEscape = (event: KeyboardEvent) => {
+ if (event.key === 'Escape') {
+ setFeedbackModal(null);
+ setFeedbackDetails('');
+ setFeedbackSubmitError('');
+ }
+ };
+
+ document.addEventListener('keydown', handleEscape);
+ return () => document.removeEventListener('keydown', handleEscape);
+ }, [feedbackModal]);
+
+ // Close on Escape key
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const handleEscape = (event: KeyboardEvent) => {
+ if (event.key === 'Escape') {
+ onClose();
+ }
+ };
+
+ document.addEventListener('keydown', handleEscape);
+ return () => document.removeEventListener('keydown', handleEscape);
+ }, [isOpen, onClose]);
+
+ // Prevent panel from disappearing on window resize
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const handleResize = () => {
+ const container = document.querySelector(
+ '.DocSearch-Sidepanel-Container'
+ );
+ if (container && !container.classList.contains('is-open')) {
+ container.classList.add('is-open');
+ }
+ };
+
+ window.addEventListener('resize', handleResize);
+ return () => window.removeEventListener('resize', handleResize);
+ }, [isOpen]);
+
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const syncHistoryState = () => {
+ const sidepanel = document.querySelector('.DocSearch-Sidepanel');
+ const historyOpen =
+ sidepanel?.classList.contains('conversation-history') ?? false;
+
+ setIsHistoryOpen((prev) => (prev === historyOpen ? prev : historyOpen));
+ };
+
+ syncHistoryState();
+ const syncInterval = setInterval(syncHistoryState, 150);
+
+ return () => {
+ clearInterval(syncInterval);
+ };
+ }, [isOpen]);
+
+ // Hook into existing expand button
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const handleClick = (event: MouseEvent) => {
+ const target = event.target as HTMLElement;
+ const button = target.closest('button');
+
+ if (!button) return;
+
+ const headerButtons = Array.from(
+ document.querySelectorAll('.DocSearch-Sidepanel-Header button')
+ );
+
+ if (!headerButtons.includes(button)) return;
+
+ const ariaLabel = button.getAttribute('aria-label')?.toLowerCase() || '';
+
+ if (ariaLabel.includes('close')) return;
+ if (!button.classList.contains('DocSearch-Sidepanel-Action-expand')) {
+ return;
+ }
+
+ setIsExpanded((prev) => !prev);
+ };
+
+ const checkInterval = setInterval(() => {
+ const header = document.querySelector('.DocSearch-Sidepanel-Header');
+ if (header) {
+ header.addEventListener('click', handleClick);
+ clearInterval(checkInterval);
+ }
+ }, 100);
+
+ return () => {
+ const header = document.querySelector('.DocSearch-Sidepanel-Header');
+ if (header) {
+ header.removeEventListener('click', handleClick);
+ }
+ clearInterval(checkInterval);
+ };
+ }, [isOpen]);
+
+ // Add visible shortcuts for Algolia actions hidden in the overflow menu.
+ useEffect(() => {
+ if (!isOpen) {
+ setHeaderActionsEl(null);
+ return;
+ }
+
+ const checkInterval = setInterval(() => {
+ const headerRight = document.querySelector(
+ '.DocSearch-Sidepanel-Header--right'
+ ) as HTMLElement | null;
+ if (headerRight) {
+ setHeaderActionsEl(headerRight);
+ clearInterval(checkInterval);
+ }
+ }, 100);
+
+ return () => {
+ clearInterval(checkInterval);
+ setHeaderActionsEl(null);
+ };
+ }, [isOpen]);
+
+ const triggerHeaderAction = React.useCallback((title: string) => {
+ const buttons = Array.from(
+ document.querySelectorAll(
+ '.DocSearch-Sidepanel-Header button'
+ )
+ );
+ const button = buttons.find(
+ (item) =>
+ item.getAttribute('title') === title &&
+ !item.classList.contains('ask-ai-shortcut-button')
+ );
+ button?.click();
+ }, []);
+
+ const focusPromptTextarea = React.useCallback(() => {
+ let attempts = 0;
+ const maxAttempts = 12;
+
+ const focus = () => {
+ const textarea = document.querySelector(
+ '.DocSearch-Sidepanel-Prompt--textarea'
+ ) as HTMLTextAreaElement | null;
+
+ if (textarea) {
+ textarea.focus();
+ const length = textarea.value.length;
+ textarea.setSelectionRange(length, length);
+ return;
+ }
+
+ attempts += 1;
+ if (attempts < maxAttempts) {
+ window.setTimeout(focus, 50);
+ }
+ };
+
+ focus();
+ }, []);
+
+ const handleNewConversation = React.useCallback(() => {
+ triggerHeaderAction('Start a new conversation');
+ focusPromptTextarea();
+ }, [focusPromptTextarea, triggerHeaderAction]);
+
+ const handleConversationHistory = React.useCallback(() => {
+ const sidepanel = document.querySelector('.DocSearch-Sidepanel');
+ const isHistoryOpen = sidepanel?.classList.contains('conversation-history');
+
+ if (isHistoryOpen) {
+ const backButton = document.querySelector(
+ '.DocSearch-Sidepanel-Action-back:not(.mobile)'
+ );
+ backButton?.click();
+ return;
+ }
+
+ triggerHeaderAction('Conversation history');
+ }, [triggerHeaderAction]);
+
+ const copyTextWithTextarea = React.useCallback((text: string) => {
+ const textarea = document.createElement('textarea');
+ textarea.value = text;
+ textarea.setAttribute('readonly', '');
+ textarea.style.position = 'fixed';
+ textarea.style.opacity = '0';
+ textarea.style.pointerEvents = 'none';
+ document.body.appendChild(textarea);
+ textarea.select();
+ textarea.setSelectionRange(0, text.length);
+
+ try {
+ return document.execCommand('copy');
+ } finally {
+ document.body.removeChild(textarea);
+ }
+ }, []);
+
+ const copyTextToClipboard = React.useCallback(
+ (text: string) => {
+ const copiedWithTextarea = copyTextWithTextarea(text);
+
+ if (navigator.clipboard?.writeText) {
+ navigator.clipboard.writeText(text).catch(() => {
+ if (!copiedWithTextarea) {
+ copyTextWithTextarea(text);
+ }
+ });
+ }
+ },
+ [copyTextWithTextarea]
+ );
+
+ const showCopiedState = React.useCallback((btn: HTMLButtonElement) => {
+ btn.classList.add('DocSearch-AskAiScreen-CopyButton--copied');
+ btn.disabled = true;
+ setTimeout(() => {
+ btn.classList.remove('DocSearch-AskAiScreen-CopyButton--copied');
+ btn.disabled = false;
+ }, 1500);
+ }, []);
+
+ const getAssistantMessageText = React.useCallback((btn: HTMLElement) => {
+ const response = btn.closest('.DocSearch-AskAiScreen-Response');
+ const assistantMessage =
+ btn.closest('.DocSearch-AskAiScreen-Message--assistant') ||
+ response?.querySelector('.DocSearch-AskAiScreen-Message--assistant');
+ const contentEl = assistantMessage?.querySelector(
+ '.DocSearch-AskAiScreen-MessageContent'
+ ) as HTMLElement | null;
+ if (!contentEl) return '';
+
+ const markdownBlocks = Array.from(
+ contentEl.querySelectorAll('.DocSearch-Markdown-Content')
+ ) as HTMLElement[];
+
+ if (markdownBlocks.length > 0) {
+ return markdownBlocks
+ .map((block) => block.innerText.trim())
+ .filter(Boolean)
+ .join('\n\n');
+ }
+
+ const clone = contentEl.cloneNode(true) as HTMLElement;
+ clone
+ .querySelectorAll(
+ [
+ '.DocSearch-AskAiScreen-Answer-Footer',
+ '.DocSearch-AskAiScreen-MessageContent-Tool',
+ '.DocSearch-AskAiScreen-MessageContent-Tool-Query',
+ '.DocSearch-AskAiScreen-MessageContent-Reasoning',
+ '.DocSearck-AskAiScreen-MessageContent-Stopped',
+ ].join(',')
+ )
+ .forEach((el) => el.remove());
+
+ return clone.innerText.trim();
+ }, []);
+
+ const copyAssistantMessage = React.useCallback(
+ (
+ btn: HTMLButtonElement,
+ event: Pick<
+ MouseEvent | React.MouseEvent,
+ 'preventDefault' | 'stopPropagation'
+ > & { nativeEvent?: MouseEvent }
+ ) => {
+ const text = getAssistantMessageText(btn);
+ if (!text) return false;
+
+ event.preventDefault();
+ event.stopPropagation();
+ event.nativeEvent?.stopImmediatePropagation();
+ if ('stopImmediatePropagation' in event) {
+ event.stopImmediatePropagation();
+ }
+
+ copyTextToClipboard(text);
+ showCopiedState(btn);
+ return true;
+ },
+ [copyTextToClipboard, getAssistantMessageText, showCopiedState]
+ );
+
+ const getFeedbackContext = React.useCallback(
+ (btn: HTMLButtonElement) => {
+ const response = btn.closest('.DocSearch-AskAiScreen-Response');
+ const question =
+ response
+ ?.querySelector('.DocSearch-AskAiScreen-Query')
+ ?.textContent?.trim() ?? '';
+ const answer = getAssistantMessageText(btn);
+
+ return { question, answer };
+ },
+ [getAssistantMessageText]
+ );
+
+ const closeFeedbackModal = React.useCallback(() => {
+ setFeedbackModal(null);
+ setFeedbackDetails('');
+ setFeedbackSubmitError('');
+ }, []);
+
+ const handleFeedbackButtonClick = React.useCallback(
+ (btn: HTMLButtonElement) => {
+ const title = btn.getAttribute('title')?.toLowerCase() ?? '';
+ const isNegativeFeedback = title.includes('dislike');
+ if (!isNegativeFeedback) {
+ return false;
+ }
+
+ const { question, answer } = getFeedbackContext(btn);
+
+ setFeedbackDetails('');
+ setFeedbackSubmitError('');
+ setFeedbackModal({
+ question,
+ answer,
+ });
+ return true;
+ },
+ [getFeedbackContext]
+ );
+
+ // Fix Algolia copy button bug: it can copy the first streamed text chunk
+ // instead of the rendered answer. Native capture catches the click before
+ // Algolia's own React handler writes stale content to the clipboard.
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const handleDocumentCopyClick = (event: MouseEvent) => {
+ const target = event.target as HTMLElement;
+ const btn = target.closest(
+ '.DocSearch-AskAiScreen-CopyButton'
+ ) as HTMLButtonElement | null;
+ if (!btn) return;
+
+ copyAssistantMessage(btn, event);
+ };
+
+ document.addEventListener('click', handleDocumentCopyClick, true);
+ return () => {
+ document.removeEventListener('click', handleDocumentCopyClick, true);
+ };
+ }, [copyAssistantMessage, isOpen]);
+
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const handleDocumentFeedbackClick = (event: MouseEvent) => {
+ const target = event.target as HTMLElement;
+ const btn = target.closest(
+ '.DocSearch-AskAiScreen-Actions button:not(.DocSearch-AskAiScreen-CopyButton)'
+ ) as HTMLButtonElement | null;
+ if (!btn) return;
+
+ handleFeedbackButtonClick(btn);
+ };
+
+ document.addEventListener('click', handleDocumentFeedbackClick, true);
+ return () => {
+ document.removeEventListener('click', handleDocumentFeedbackClick, true);
+ };
+ }, [handleFeedbackButtonClick, isOpen]);
+
+ const handleCopyCapture = React.useCallback(
+ (e: React.MouseEvent) => {
+ const target = e.target as HTMLElement;
+ const btn = target.closest(
+ '.DocSearch-AskAiScreen-CopyButton'
+ ) as HTMLButtonElement | null;
+ if (!btn) return;
+
+ copyAssistantMessage(btn, e);
+ },
+ [copyAssistantMessage]
+ );
+
+ const submitFeedbackModal = React.useCallback(async () => {
+ if (!feedbackModal) return;
+ const trimmedDetails = feedbackDetails.trim();
+
+ if (!trimmedDetails) {
+ closeFeedbackModal();
+ return;
+ }
+
+ const payload = {
+ details: trimmedDetails,
+ question: feedbackModal.question,
+ answer: feedbackModal.answer,
+ timestamp: new Date().toISOString(),
+ url: window.location.href,
+ };
+
+ setIsSubmittingFeedback(true);
+ setFeedbackSubmitError('');
+
+ try {
+ if (feedbackFormUrl) {
+ const formConfig = parseGoogleFormConfig(feedbackFormUrl);
+ if (!formConfig) {
+ throw new Error('Invalid Google Form feedback URL');
+ }
+
+ const formValues: Record = {
+ created_at: new Date().toISOString(),
+ question: payload.question,
+ answer: payload.answer,
+ details: payload.details,
+ page_url: payload.url,
+ client_timestamp: payload.timestamp,
+ };
+
+ const formData = new URLSearchParams();
+ formConfig.fields.forEach((field) => {
+ const entryKey = formConfig.entryMap[field];
+ if (!entryKey) return;
+ formData.append(entryKey, formValues[field]);
+ });
+
+ await fetch(formConfig.actionUrl, {
+ method: 'POST',
+ mode: 'no-cors',
+ body: formData,
+ });
+ }
+
+ window.dispatchEvent(
+ new CustomEvent('ask-ai-feedback-submitted', {
+ detail: payload,
+ })
+ );
+
+ closeFeedbackModal();
+ setFeedbackSubmittedNotice('Additional feedback submitted.');
+ } catch (error) {
+ setFeedbackSubmitError(
+ error instanceof Error
+ ? error.message
+ : 'Failed to submit feedback details'
+ );
+ } finally {
+ setIsSubmittingFeedback(false);
+ }
+ }, [
+ closeFeedbackModal,
+ feedbackDetails,
+ feedbackFormUrl,
+ feedbackModal,
+ ]);
+
+ // Handle submit button state based on textarea content
+ useEffect(() => {
+ if (!isOpen) return;
+
+ const updateButtonState = () => {
+ const textarea = document.querySelector(
+ '.DocSearch-Sidepanel-Prompt--textarea'
+ ) as HTMLTextAreaElement;
+ const submitButton = document.querySelector(
+ '.DocSearch-Sidepanel-Prompt--submit'
+ ) as HTMLButtonElement;
+
+ if (textarea && submitButton) {
+ if (textarea.value.trim().length > 0) {
+ submitButton.classList.add('has-text');
+ } else {
+ submitButton.classList.remove('has-text');
+ }
+ }
+ };
+
+ const autoResize = (el: HTMLTextAreaElement) => {
+ el.style.height = '0';
+ el.style.height = Math.min(el.scrollHeight, 200) + 'px';
+ el.style.overflowY = el.scrollHeight > 200 ? 'auto' : 'hidden';
+ };
+
+ const handleInput = (e: Event) => {
+ updateButtonState();
+ autoResize(e.target as HTMLTextAreaElement);
+ };
+
+ const checkInterval = setInterval(() => {
+ const textarea = document.querySelector(
+ '.DocSearch-Sidepanel-Prompt--textarea'
+ ) as HTMLTextAreaElement;
+ if (textarea) {
+ updateButtonState();
+ autoResize(textarea);
+ textarea.addEventListener('input', handleInput);
+ textarea.focus();
+ clearInterval(checkInterval);
+ }
+ }, 100);
+
+ return () => {
+ clearInterval(checkInterval);
+ const textarea = document.querySelector(
+ '.DocSearch-Sidepanel-Prompt--textarea'
+ );
+ if (textarea) {
+ textarea.removeEventListener('input', handleInput);
+ }
+ };
+ }, [isOpen]);
+
+ if (!SidepanelComponent) {
+ return null;
+ }
+
+ if (!askAiConfig) {
+ console.error('Ask AI configuration not found in docusaurus.config.js');
+ return null;
+ }
+
+ const { assistantId, indexName, appId, apiKey, suggestedQuestions } =
+ askAiConfig;
+
+ const handleAlgoliaClose = () => {
+ if (!isResizingRef.current) onClose();
+ };
+
+ const sidepanel = (
+ <>
+
+ {}}
+ onClose={handleAlgoliaClose}
+ initialMessage={initialMessage || undefined}
+ suggestedQuestions={suggestedQuestions}
+ translations={{
+ title: 'Ask AI about Sumo Logic',
+ placeholder: 'Ask a question about Sumo Logic...',
+ greeting: 'How can I help you with Sumo Logic today?',
+ introduction:
+ 'I can help you find information about Sumo Logic features, integrations, troubleshooting, APIs, and best practices across our documentation.',
+ poweredBy: 'Powered by Algolia',
+ }}
+ insights
+ />
+
+ {headerActionsEl &&
+ createPortal(
+
+
+
+
+
+ New
+
+
+
+
+
+ History
+
+
,
+ headerActionsEl
+ )}
+ {feedbackModal &&
+ createPortal(
+
+
e.stopPropagation()}
+ >
+
+
Thanks for the feedback
+
+
+
+
+
+
+
+ Provide additional feedback (optional)
+
+
,
+
,
+ document.body
+ )}
+ {feedbackSubmittedNotice &&
+ createPortal(
+
+ {feedbackSubmittedNotice}
+
,
+ document.body
+ )}
+ >
+ );
+
+ return createPortal(sidepanel, document.body);
+}
diff --git a/src/components/AskAiSidepanel/styles.css b/src/components/AskAiSidepanel/styles.css
new file mode 100644
index 0000000000..8708bd0374
--- /dev/null
+++ b/src/components/AskAiSidepanel/styles.css
@@ -0,0 +1,987 @@
+/**
+ * Ask AI Sidepanel Styles
+ *
+ * Custom overrides for Algolia Ask AI sidepanel.
+ * Modern design inspired by Algolia and Stripe documentation.
+ */
+
+/* ===================================================================
+ Backdrop - Enhanced with smooth fade-in
+ =================================================================== */
+
+/* ===================================================================
+ Sidepanel Container Wrapper - Default to collapsed (narrow) width
+ =================================================================== */
+.ask-ai-sidepanel {
+ position: fixed !important;
+ top: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ left: auto !important;
+ width: 400px !important;
+ min-width: 400px !important;
+ max-width: 400px !important;
+ z-index: 999 !important;
+ transition: width 0.3s cubic-bezier(0.16, 1, 0.3, 1) !important;
+ --docsearch-primary-color: #1d68e1;
+ --docsearch-highlight-color: #1d68e1;
+ --docsearch-focus-color: #1d68e1;
+ --docsearch-soft-primary-color: rgba(29, 104, 225, 0.12);
+ --docsearch-subtle-color: var(--ifm-color-emphasis-600);
+ --docsearch-text-color: var(--ifm-font-color-base);
+ --docsearch-hit-color: var(--ifm-font-color-base);
+ --docsearch-secondary-text-color: var(--ifm-color-emphasis-700);
+ --docsearch-muted-color: var(--ifm-color-emphasis-700);
+ --docsearch-icon-color: var(--ifm-color-emphasis-700);
+}
+
+/* Expanded state - wider width */
+.ask-ai-sidepanel.is-expanded {
+ width: 540px !important;
+ min-width: 540px !important;
+ max-width: 540px !important;
+}
+
+@media (max-width: 768px) {
+ .ask-ai-sidepanel {
+ max-width: 100% !important;
+ left: 0 !important;
+ }
+}
+
+/* ===================================================================
+ Algolia Component Overrides - Container & Panel
+ =================================================================== */
+
+/* Override the container positioning */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Container {
+ position: relative !important;
+ top: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ width: 100% !important;
+ min-width: 100% !important;
+ height: 100% !important;
+ max-width: none !important;
+ transform: none !important;
+ opacity: 1 !important;
+ border-radius: 0 !important;
+ box-shadow: -1px 0 0 0 rgba(0, 0, 0, 0.05),
+ -8px 0 32px -4px rgba(0, 0, 0, 0.12), -16px 0 64px -8px rgba(0, 0, 0, 0.08) !important;
+ animation: slideIn 0.35s cubic-bezier(0.16, 1, 0.3, 1);
+ display: flex !important;
+ visibility: visible !important;
+ flex-shrink: 0 !important;
+}
+
+/* Ensure panel stays visible during resize and maintains width */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Container.is-open {
+ transform: none !important;
+ opacity: 1 !important;
+ display: flex !important;
+ visibility: visible !important;
+ width: 100% !important;
+ min-width: 100% !important;
+ flex-shrink: 0 !important;
+}
+
+@keyframes slideIn {
+ from {
+ transform: translateX(100%);
+ }
+ to {
+ transform: translateX(0);
+ }
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Container {
+ box-shadow: -1px 0 0 0 rgba(255, 255, 255, 0.08),
+ -8px 0 32px -4px rgba(0, 0, 0, 0.4), -16px 0 64px -8px rgba(0, 0, 0, 0.32) !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel {
+ --docsearch-primary-color: #9cc0ff;
+ --docsearch-highlight-color: #9cc0ff;
+ --docsearch-focus-color: #9cc0ff;
+ --docsearch-soft-primary-color: rgba(156, 192, 255, 0.16);
+ --docsearch-subtle-color: rgba(255, 255, 255, 0.38);
+ --docsearch-text-color: #e3e3e3;
+ --docsearch-hit-color: #e3e3e3;
+ --docsearch-secondary-text-color: rgba(255, 255, 255, 0.76);
+ --docsearch-muted-color: rgba(255, 255, 255, 0.56);
+ --docsearch-icon-color: rgba(255, 255, 255, 0.82);
+}
+
+/* Main sidepanel - integrate with Docusaurus theme */
+.ask-ai-sidepanel .DocSearch-Sidepanel {
+ background-color: var(--ifm-background-color) !important;
+ border-left: 1px solid var(--docsearch-subtle-color) !important;
+ width: 100% !important;
+ min-width: 100% !important;
+ flex-shrink: 0 !important;
+ font-family: 'Lab Grotesque', sans-serif !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel {
+ border-left-color: var(--docsearch-subtle-color) !important;
+ background-color: var(--ifm-navbar-background-color) !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Header {
+ border-bottom-color: rgba(255, 255, 255, 0.12) !important;
+}
+
+/* ===================================================================
+ Header Styling
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Header {
+ background-color: var(--ifm-navbar-background-color) !important;
+ border-bottom: 1px solid var(--ifm-color-emphasis-200) !important;
+ display: flex !important;
+ justify-content: flex-start !important;
+ gap: 0.75rem !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Header--center {
+ display: flex !important;
+ flex-direction: row !important;
+ align-items: center !important;
+ flex: 1 1 auto !important;
+ gap: 0.5rem !important;
+ min-width: 0 !important;
+ position: static !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Header-TitleIcon {
+ display: block !important;
+ flex: 0 0 auto !important;
+ margin: 0 !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Title {
+ color: var(--ifm-font-color-base) !important;
+ overflow: hidden !important;
+ font-weight: 600 !important;
+ margin: 0 !important;
+ min-width: 0 !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Header--right {
+ flex: 0 0 auto !important;
+ gap: 0.35rem !important;
+ margin-left: auto !important;
+ position: static !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Action-menu {
+ display: none !important;
+}
+
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-Header--left
+ button[title='Start a new conversation'],
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-Header--left
+ button[title='Conversation history'] {
+ display: none !important;
+}
+
+.ask-ai-header-shortcuts {
+ display: flex;
+ align-items: center;
+ gap: 0.35rem;
+ margin-right: 0.15rem;
+ order: -1;
+}
+
+.ask-ai-shortcut-button {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 38px;
+ height: 38px;
+ padding: 0;
+ border: 1px solid rgba(15, 23, 42, 0.08);
+ border-radius: 10px;
+ background: transparent;
+ color: var(--ifm-font-color-base);
+ cursor: pointer;
+ font-family: 'Lab Grotesque', sans-serif;
+ font-size: 0.72rem;
+ font-weight: 700;
+ line-height: 1;
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
+}
+
+.ask-ai-shortcut-button svg {
+ width: 19px;
+ height: 19px;
+ flex: 0 0 auto;
+}
+
+.ask-ai-shortcut-button span {
+ display: none;
+}
+
+.ask-ai-shortcut-button:hover,
+.ask-ai-shortcut-button:focus-visible {
+ border-color: var(--ifm-color-primary);
+ background: rgba(4, 102, 255, 0.08);
+ color: var(--ifm-color-primary);
+ outline: none;
+ box-shadow:
+ 0 4px 12px rgba(4, 102, 255, 0.12),
+ inset 0 0 0 1px rgba(4, 102, 255, 0.06);
+}
+
+.ask-ai-shortcut-button.is-active {
+ border-color: #0466ff;
+ background: linear-gradient(180deg, #1f7aff 0%, #0466ff 100%);
+ color: #fff;
+ box-shadow:
+ 0 8px 18px rgba(4, 102, 255, 0.25),
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
+}
+
+[data-theme='dark'] .ask-ai-shortcut-button {
+ border-color: rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.02);
+ box-shadow: none;
+}
+
+[data-theme='dark'] .ask-ai-shortcut-button.is-active {
+ border-color: #4c86ff;
+ background: linear-gradient(180deg, #4c86ff 0%, #2f6cff 100%);
+ color: #fff;
+ box-shadow:
+ 0 10px 20px rgba(12, 87, 255, 0.28),
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
+}
+
+[data-theme='dark'] .ask-ai-shortcut-button:hover,
+[data-theme='dark'] .ask-ai-shortcut-button:focus-visible {
+ border-color: rgba(76, 134, 255, 0.5);
+ background: rgba(76, 134, 255, 0.14);
+ color: #9cc0ff;
+ box-shadow: inset 0 0 0 1px rgba(76, 134, 255, 0.14);
+}
+
+/* ===================================================================
+ Content Area
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content {
+ background-color: var(--ifm-background-color) !important;
+ position: relative !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Content {
+ background-color: var(--ifm-navbar-background-color) !important;
+}
+
+/* Disclaimer banner at top of content */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content::before {
+ content: 'Answers are AI-generated from Sumo Docs and may contain errors. Please review and verify.' !important;
+ display: block !important;
+ padding: 0.75rem 1.5rem !important;
+ color: var(--ifm-color-emphasis-700) !important;
+ font-size: 0.6rem !important;
+ line-height: 1.3 !important;
+ text-align: center !important;
+ font-weight: 600 !important;
+ white-space: pre-line !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Content::before {
+ color: rgba(255, 255, 255, 0.46) !important;
+}
+
+/* Scrollbar styling */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content::-webkit-scrollbar {
+ width: 8px;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content::-webkit-scrollbar-thumb {
+ background: var(--ifm-color-emphasis-500);
+ border-radius: 4px;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Content::-webkit-scrollbar-thumb:hover {
+ background: var(--ifm-color-emphasis-600);
+}
+
+/* ===================================================================
+ Prompt Input Area
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt {
+ background-color: var(--ifm-navbar-background-color) !important;
+ border-top: 1px solid var(--ifm-color-emphasis-200) !important;
+ padding: 1rem 1rem 0.2rem !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--form {
+ border: 1px solid var(--ifm-color-emphasis-300) !important;
+ border-radius: 16px !important;
+ background: #fff !important;
+ box-shadow: none !important;
+ transition:
+ border-color 0.2s cubic-bezier(0.16, 1, 0.3, 1),
+ background 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
+ padding: 14px 16px !important;
+ min-height: 60px !important;
+ display: flex !important;
+ flex-direction: column !important;
+ position: relative !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--form:focus-within {
+ border-color: var(--ifm-color-primary) !important;
+ box-shadow: none !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--form {
+ border-color: rgba(255, 255, 255, 0.18) !important;
+ background: linear-gradient(
+ 180deg,
+ rgba(24, 32, 48, 0.98) 0%,
+ rgba(18, 24, 39, 0.98) 100%
+ ) !important;
+ box-shadow: none !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Prompt {
+ border-top-color: rgba(255, 255, 255, 0.12) !important;
+}
+
+[data-theme='dark']
+ .ask-ai-sidepanel
+ .DocSearch-Sidepanel-Prompt--form:focus-within {
+ border-color: var(--ifm-color-primary) !important;
+ box-shadow: none !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--textarea {
+ color: var(--ifm-font-color-base) !important;
+ font-size: 1rem !important;
+ font-weight: 500 !important;
+ font-family: 'Lab Grotesque', sans-serif !important;
+ padding: 0 48px 0 0 !important;
+ margin: 0 !important;
+ line-height: 1.6rem !important;
+ min-height: 1.6rem !important;
+ max-height: 200px !important;
+ width: 100% !important;
+ resize: none !important;
+ border: none !important;
+ outline: none !important;
+ background: transparent !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--textarea::placeholder {
+ color: var(--docsearch-muted-color) !important;
+}
+
+[data-theme='dark']
+ .ask-ai-sidepanel
+ .DocSearch-Sidepanel-Prompt--textarea::placeholder {
+ color: var(--docsearch-muted-color) !important;
+}
+
+/* Submit button wrapper — absolutely positioned inside the form at bottom-right */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--actions {
+ position: absolute !important;
+ bottom: 14px !important;
+ right: 16px !important;
+ height: 32px !important;
+ width: 32px !important;
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+}
+
+/* Submit button styling - Default to grey */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit {
+ background: var(--ifm-color-emphasis-200) !important;
+ border-radius: 10px !important;
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ margin: 0 !important;
+ width: 32px !important;
+ height: 32px !important;
+ min-width: 32px !important;
+ min-height: 32px !important;
+ max-width: 32px !important;
+ max-height: 32px !important;
+ padding: 0 !important;
+ border: none !important;
+ box-shadow: none !important;
+ line-height: 0 !important;
+ text-align: center !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit {
+ background: rgba(255, 255, 255, 0.12) !important;
+}
+
+/* Size the arrow icon to fit the button */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit svg {
+ width: 16px !important;
+ height: 16px !important;
+ display: block !important;
+ margin: 0 !important;
+ position: static !important;
+ flex: 0 0 auto !important;
+ transform: translate(0, 0) !important;
+ color: var(--ifm-color-emphasis-500) !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit svg {
+ color: rgba(255, 255, 255, 0.58) !important;
+}
+
+/* Enabled state - when user has typed text (blue) */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit.has-text {
+ background: var(--ifm-color-primary) !important;
+ cursor: pointer !important;
+ box-shadow: none !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit.has-text svg {
+ color: white !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--submit.has-text:hover {
+ background: var(--ifm-color-primary-dark) !important;
+ transform: none !important;
+}
+
+/* ===================================================================
+ Footer - Shrink "Powered by Algolia" branding
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer {
+ display: none !important;
+}
+
+/* Ensure all direct children are vertically centered */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer > * {
+ display: flex !important;
+ align-items: center !important;
+ gap: 0.2rem !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+/* Remove any spacing from text and logo containers */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer span,
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer a,
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer div {
+ gap: 0.2rem !important;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+/* Target any nested flex containers */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer * {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+/* Shrink the Algolia logo */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer svg,
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer img {
+ height: 16px !important;
+ width: auto !important;
+ display: inline-block !important;
+ vertical-align: middle !important;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+/* Shrink any branding text */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Footer * {
+ font-size: 0.7rem !important;
+ line-height: 1.2 !important;
+}
+
+/* ===================================================================
+ Message Bubbles & Content
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-AskAiScreen-Response {
+ background-color: transparent !important;
+ border: none !important;
+ border-radius: 0 !important;
+}
+
+/* Text colors */
+.ask-ai-sidepanel .DocSearch-Markdown-Content {
+ color: var(--ifm-font-color-base) !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel a {
+ color: var(--docsearch-highlight-color) !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel a:hover {
+ color: var(--docsearch-primary-color) !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-MessageContent-Tool,
+.ask-ai-sidepanel .DocSearch-AskAiScreen-MessageContent-Tool-Query {
+ display: none !important;
+}
+
+/* ===================================================================
+ Button Overrides
+ =================================================================== */
+.ask-ai-sidepanel button {
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
+}
+
+.ask-ai-sidepanel button[aria-label] {
+ color: var(--ifm-font-color-base) !important;
+ border-radius: 6px !important;
+}
+
+.ask-ai-sidepanel button[aria-label]:hover {
+ background-color: var(--ifm-color-emphasis-100) !important;
+}
+
+/* ===================================================================
+ Feedback Modal
+ =================================================================== */
+.ask-ai-feedback-modal-backdrop {
+ position: fixed;
+ inset: 0;
+ background: rgba(15, 23, 42, 0.38);
+ backdrop-filter: blur(6px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 1.5rem;
+ z-index: 1200;
+}
+
+.ask-ai-feedback-modal {
+ width: min(720px, 100%);
+ background: var(--ifm-background-color);
+ color: var(--ifm-font-color-base);
+ border: 1px solid var(--docsearch-subtle-color);
+ border-radius: 24px;
+ box-shadow:
+ 0 24px 60px rgba(15, 23, 42, 0.18),
+ 0 8px 24px rgba(15, 23, 42, 0.1);
+ padding: 1.6rem 1.75rem 1.25rem;
+}
+
+.ask-ai-feedback-modal-header {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 1rem;
+ margin-bottom: 1rem;
+}
+
+.ask-ai-feedback-modal-header h2 {
+ margin: 0;
+ font-size: 1.45rem;
+ line-height: 1.25;
+ font-weight: 700;
+}
+
+.ask-ai-feedback-close {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ border: 1px solid var(--docsearch-subtle-color);
+ border-radius: 10px;
+ background: transparent;
+ color: var(--ifm-color-emphasis-700);
+ cursor: pointer;
+}
+
+.ask-ai-feedback-close svg {
+ width: 16px;
+ height: 16px;
+}
+
+.ask-ai-feedback-label {
+ margin: 0 0 0.7rem;
+ color: var(--ifm-color-emphasis-700);
+ font-size: 0.98rem;
+}
+
+.ask-ai-feedback-textarea {
+ width: 100%;
+ min-height: 132px;
+ resize: vertical;
+ border: 1px solid var(--docsearch-subtle-color);
+ border-radius: 16px;
+ padding: 1rem 1.05rem;
+ background: var(--ifm-background-surface-color);
+ color: var(--ifm-font-color-base);
+ font: inherit;
+ line-height: 1.5;
+ outline: none;
+}
+
+.ask-ai-feedback-textarea::placeholder {
+ color: var(--docsearch-muted-color);
+}
+
+.ask-ai-feedback-textarea:focus {
+ border-color: var(--ifm-color-primary);
+ box-shadow: 0 0 0 4px rgba(4, 102, 255, 0.14);
+}
+
+.ask-ai-feedback-note {
+ margin: 0.85rem 0 0;
+ color: var(--docsearch-muted-color);
+ font-size: 0.82rem;
+ line-height: 1.45;
+}
+
+.ask-ai-feedback-error {
+ margin: 0.6rem 0 0;
+ color: #c62828;
+ font-size: 0.82rem;
+ line-height: 1.4;
+}
+
+.ask-ai-feedback-toast {
+ position: fixed;
+ right: 1.5rem;
+ bottom: 1.5rem;
+ z-index: 1250;
+ border-radius: 12px;
+ padding: 0.8rem 1rem;
+ background: #111827;
+ color: #fff;
+ font-size: 0.88rem;
+ font-weight: 600;
+ box-shadow:
+ 0 12px 28px rgba(15, 23, 42, 0.2),
+ 0 4px 12px rgba(15, 23, 42, 0.12);
+}
+
+.ask-ai-feedback-note code {
+ font-size: 0.78rem;
+}
+
+.ask-ai-feedback-actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.75rem;
+ margin-top: 1.2rem;
+}
+
+.ask-ai-feedback-button {
+ border-radius: 12px;
+ padding: 0.58rem 0.95rem;
+ font: inherit;
+ font-size: 0.95rem;
+ font-weight: 600;
+ cursor: pointer;
+ border: 1px solid transparent;
+}
+
+.ask-ai-feedback-button:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
+
+.ask-ai-feedback-button-secondary {
+ background: transparent;
+ color: var(--ifm-font-color-base);
+ border-color: var(--docsearch-subtle-color);
+}
+
+.ask-ai-feedback-button-primary {
+ background: #111827;
+ color: #fff;
+}
+
+[data-theme='dark'] .ask-ai-feedback-modal {
+ background: #1b2230;
+ border-color: var(--docsearch-subtle-color);
+ box-shadow:
+ 0 28px 70px rgba(0, 0, 0, 0.48),
+ 0 8px 24px rgba(0, 0, 0, 0.28);
+}
+
+[data-theme='dark'] .ask-ai-feedback-close {
+ border-color: var(--docsearch-subtle-color);
+ color: rgba(255, 255, 255, 0.75);
+ background: rgba(255, 255, 255, 0.02);
+}
+
+[data-theme='dark'] .ask-ai-feedback-label {
+ color: rgba(255, 255, 255, 0.76);
+}
+
+[data-theme='dark'] .ask-ai-feedback-textarea {
+ background: rgba(255, 255, 255, 0.02);
+ border-color: var(--docsearch-subtle-color);
+}
+
+[data-theme='dark'] .ask-ai-feedback-textarea::placeholder {
+ color: var(--docsearch-muted-color);
+}
+
+[data-theme='dark'] .ask-ai-feedback-note {
+ color: var(--docsearch-muted-color);
+}
+
+[data-theme='dark'] .ask-ai-feedback-error {
+ color: #ff8a80;
+}
+
+[data-theme='dark'] .ask-ai-feedback-toast {
+ background: #0f172a;
+ color: rgba(255, 255, 255, 0.95);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+[data-theme='dark'] .ask-ai-feedback-button-secondary {
+ border-color: var(--docsearch-subtle-color);
+ color: rgba(255, 255, 255, 0.92);
+}
+
+@media (max-width: 640px) {
+ .ask-ai-feedback-modal {
+ padding: 1.2rem 1rem 1rem;
+ border-radius: 18px;
+ }
+
+ .ask-ai-feedback-actions {
+ flex-direction: column-reverse;
+ }
+
+ .ask-ai-feedback-button {
+ width: 100%;
+ }
+}
+
+/* ===================================================================
+ Suggested Questions
+ =================================================================== */
+/* Container for suggested questions */
+.ask-ai-sidepanel .DocSearch-Sidepanel-SuggestedQuestions {
+ display: flex !important;
+ flex-direction: column !important;
+ align-items: flex-start !important;
+ text-align: left !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-SuggestedQuestion {
+ background-color: rgba(255, 255, 255, 0.92) !important;
+ border: 1px solid var(--docsearch-subtle-color) !important;
+ color: var(--ifm-color-emphasis-700) !important;
+ border-radius: 999px !important;
+ font-family: 'Lab Grotesque', sans-serif !important;
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
+ text-align: left !important;
+ align-self: flex-start !important;
+ font-size: 0.68rem !important;
+ font-weight: 400 !important;
+ padding-top: 0.42rem !important;
+ padding-bottom: 0.42rem !important;
+ padding-left: 0.75rem !important;
+ padding-right: 0.75rem !important;
+ line-height: 1.25 !important;
+ min-height: auto !important;
+ height: auto !important;
+ box-shadow: none !important;
+}
+
+/* Ensure any nested elements don't override padding */
+.ask-ai-sidepanel .DocSearch-Sidepanel-SuggestedQuestion * {
+ line-height: 1.4 !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-SuggestedQuestion:hover {
+ border-color: rgba(15, 23, 42, 0.16) !important;
+ background-color: rgba(15, 23, 42, 0.03) !important;
+ color: var(--ifm-color-emphasis-800) !important;
+ transform: none !important;
+ box-shadow: none !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-Sidepanel-SuggestedQuestion {
+ background-color: rgba(255, 255, 255, 0.02) !important;
+ border-color: var(--docsearch-subtle-color) !important;
+ color: rgba(255, 255, 255, 0.82) !important;
+ box-shadow: none !important;
+}
+
+[data-theme='dark']
+ .ask-ai-sidepanel
+ .DocSearch-Sidepanel-SuggestedQuestion:hover {
+ border-color: rgba(255, 255, 255, 0.14) !important;
+ background-color: rgba(255, 255, 255, 0.04) !important;
+ color: rgba(255, 255, 255, 0.9) !important;
+ box-shadow: none !important;
+}
+
+/* ===================================================================
+ Intro Screen - Custom Text Override
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Screen--title {
+ color: var(--ifm-font-color-base) !important;
+ font-size: 1.5rem !important;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-NewConversationScreen {
+ padding-top: 1.35rem !important;
+}
+
+/* Hide original title and show custom text */
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--title {
+ font-size: 0 !important;
+ line-height: 0 !important;
+}
+
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--title::before {
+ font-size: 1.18rem !important;
+ line-height: 1.55rem !important;
+ font-weight: 600 !important;
+ content: 'How can I help you today?';
+ display: block;
+}
+
+.ask-ai-sidepanel .DocSearch-Sidepanel-Screen--introduction {
+ color: var(--ifm-color-emphasis-700) !important;
+}
+
+/* Hide original introduction and show custom text */
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--introduction {
+ font-size: 0 !important;
+ line-height: 0 !important;
+}
+
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--introduction::before {
+ font-size: 0.76rem !important;
+ line-height: 1.2rem !important;
+ content: 'I can help you find information about Sumo Logic features, integrations, troubleshooting, APIs, and best practices across our documentation.';
+ display: block;
+ max-width: 44ch;
+ color: var(--ifm-color-emphasis-700) !important;
+ margin-bottom: 0.2rem !important;
+}
+
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--introduction::after {
+ content: attr(data-shortcut-tip);
+ display: block;
+ font-size: 0.72rem !important;
+ line-height: 1.1rem !important;
+ font-weight: 500 !important;
+ color: #6b7280 !important;
+ margin-top: 0.45rem !important;
+}
+
+[data-theme='dark']
+ .ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-Screen--introduction::after {
+ color: var(--docsearch-muted-color) !important;
+}
+
+.ask-ai-sidepanel
+ .DocSearch-Sidepanel-NewConversationScreen
+ .DocSearch-Sidepanel-List {
+ gap: 0.5rem !important;
+ margin-top: 0.1rem !important;
+}
+
+/* ===================================================================
+ Related Sources
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Title {
+ color: var(--docsearch-secondary-text-color) !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link {
+ background: rgba(15, 23, 42, 0.04) !important;
+ border: 1px solid rgba(15, 23, 42, 0.08) !important;
+ border-radius: 8px !important;
+ color: var(--ifm-color-emphasis-700) !important;
+ font-size: 0.68em !important;
+ gap: 5px !important;
+ padding: 9px 8px !important;
+ transition:
+ background-color 0.2s ease,
+ border-color 0.2s ease,
+ color 0.2s ease !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link span {
+ color: inherit !important;
+ font-weight: 425 !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link svg {
+ color: var(--docsearch-muted-color) !important;
+ width: 16px !important;
+ height: 16px !important;
+ opacity: 0.82 !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link:hover {
+ background: rgba(4, 102, 255, 0.05) !important;
+ border-color: rgba(4, 102, 255, 0.16) !important;
+ color: var(--ifm-font-color-base) !important;
+}
+
+.ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link:hover svg {
+ color: var(--docsearch-secondary-text-color) !important;
+ opacity: 1 !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link {
+ background: rgba(255, 255, 255, 0.03) !important;
+ border: 1px solid rgba(255, 255, 255, 0.06) !important;
+ color: rgba(255, 255, 255, 0.82) !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link svg {
+ color: rgba(255, 255, 255, 0.42) !important;
+ opacity: 1 !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link:hover {
+ background: rgba(255, 255, 255, 0.05) !important;
+ border-color: rgba(156, 192, 255, 0.18) !important;
+ color: rgba(255, 255, 255, 0.9) !important;
+}
+
+[data-theme='dark'] .ask-ai-sidepanel .DocSearch-AskAiScreen-RelatedSources-Item-Link:hover svg {
+ color: rgba(255, 255, 255, 0.58) !important;
+}
+
+/* ===================================================================
+ Disclaimer Text Override - Hide bottom disclaimer (now shown at top)
+ =================================================================== */
+.ask-ai-sidepanel .DocSearch-Sidepanel-Prompt--disclaimer {
+ display: none !important;
+}
diff --git a/src/css/sumo.scss b/src/css/sumo.scss
index 66ecf67e3c..ccb940a323 100644
--- a/src/css/sumo.scss
+++ b/src/css/sumo.scss
@@ -253,6 +253,58 @@ html[data-theme='dark'] .DocSearch-Search-Icon {
padding-right: 65px !important;
}
+.ask-ai-search-sidepanel-button {
+ align-items: center;
+ background: var(--docsearch-hit-background);
+ border: 1px solid var(--ifm-color-emphasis-200);
+ border-radius: 6px;
+ color: var(--docsearch-hit-color);
+ cursor: pointer;
+ display: grid;
+ font: inherit;
+ gap: 0.25rem 0.75rem;
+ grid-template-columns: auto minmax(0, max-content) minmax(0, 1fr);
+ line-height: 1.25;
+ margin: 0 0 0.75rem;
+ padding: 0.75rem 1rem;
+ text-align: left;
+ width: 100%;
+}
+
+.ask-ai-search-sidepanel-button:hover,
+.ask-ai-search-sidepanel-button:focus-visible {
+ background: var(--docsearch-hit-highlight-color);
+ border-color: var(--ifm-color-primary);
+ outline: none;
+}
+
+.ask-ai-search-sidepanel-button-icon {
+ color: var(--ifm-color-primary);
+ display: inline-flex;
+ grid-row: 1 / span 2;
+}
+
+.ask-ai-search-sidepanel-button-label {
+ font-size: 0.9rem;
+ font-weight: 700;
+}
+
+.ask-ai-search-sidepanel-button-query {
+ color: var(--ifm-color-emphasis-700);
+ font-size: 0.8rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+html[data-theme='dark'] .ask-ai-search-sidepanel-button {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+.ask-ai-native-modal-option-hidden {
+ display: none !important;
+}
+
//GitHub icon
.header-github-link:hover {
opacity: 0.6;
diff --git a/src/theme/Root.tsx b/src/theme/Root.tsx
new file mode 100644
index 0000000000..dc2b9db8e9
--- /dev/null
+++ b/src/theme/Root.tsx
@@ -0,0 +1,191 @@
+/**
+ * Root component wrapper for Docusaurus
+ *
+ * Renders the Ask AI button into the navbar placeholder via a portal,
+ * and renders AskAiSidepanel directly here — outside the navbar portal —
+ * so the sidepanel is never unmounted by navbar re-renders on resize.
+ */
+
+import React, { useEffect, useState, Suspense } from 'react';
+import { createPortal } from 'react-dom';
+import AskAiButton from '@site/src/components/AskAiButton';
+
+const AskAiSidepanel = React.lazy(
+ () => import('@site/src/components/AskAiSidepanel')
+);
+
+interface RootProps {
+ children: React.ReactNode;
+}
+
+interface AskAiInitialMessage {
+ query: string;
+}
+
+export default function Root({ children }: RootProps) {
+ const [placeholder, setPlaceholder] = useState(null);
+ const [isAskAiOpen, setIsAskAiOpen] = useState(false);
+ const [hasEverOpened, setHasEverOpened] = useState(false);
+ const [initialAskAiMessage, setInitialAskAiMessage] =
+ useState(null);
+
+ useEffect(() => {
+ if (isAskAiOpen) setHasEverOpened(true);
+ }, [isAskAiOpen]);
+
+ useEffect(() => {
+ const findPlaceholder = () => {
+ // Only update if our current placeholder has been removed from the DOM
+ if (placeholder && document.body.contains(placeholder)) {
+ return;
+ }
+ const el = document.getElementById('navbar-ask-ai-button');
+ if (el) {
+ setPlaceholder(el);
+ }
+ };
+
+ findPlaceholder();
+ const interval = setInterval(findPlaceholder, 500);
+
+ return () => clearInterval(interval);
+ }, [placeholder]);
+
+ useEffect(() => {
+ const closeDocSearchModal = () => {
+ const closeButton = document.querySelector(
+ [
+ '.DocSearch-Container button[aria-label="Close"]',
+ '.DocSearch-Container button[title="Close"]',
+ '.DocSearch-Container .DocSearch-Cancel',
+ ].join(',')
+ );
+ closeButton?.click();
+
+ document.dispatchEvent(
+ new KeyboardEvent('keydown', {
+ bubbles: true,
+ cancelable: true,
+ code: 'Escape',
+ key: 'Escape',
+ })
+ );
+
+ requestAnimationFrame(() => {
+ document.querySelectorAll('.DocSearch-Container').forEach((modal) => {
+ modal.remove();
+ });
+ document.body.classList.remove('DocSearch--active');
+ });
+ };
+
+ const openAskAiThread = (query: string) => {
+ const trimmedQuery = query.trim();
+ if (!trimmedQuery) return;
+
+ setInitialAskAiMessage({ query: trimmedQuery });
+ setIsAskAiOpen(true);
+ closeDocSearchModal();
+ };
+
+ const getModalQuery = () => {
+ return (
+ document
+ .querySelector(
+ '.DocSearch-Container .DocSearch-Input'
+ )
+ ?.value.trim() || ''
+ );
+ };
+
+ const isAskAiAssistantOption = (element: HTMLElement) => {
+ const text = element.textContent?.replace(/\s+/g, ' ').trim() || '';
+ return /^Ask AI(?: Assistant)?\b/i.test(text);
+ };
+
+ const routeAskAiOptionClick = (event: MouseEvent) => {
+ const target = event.target as HTMLElement | null;
+ if (!target?.closest('.DocSearch-Container .DocSearch-Dropdown')) return;
+
+ const option = target.closest(
+ [
+ '.DocSearch-Hit',
+ '.DocSearch-Menu-item',
+ 'button',
+ 'a',
+ '[role="button"]',
+ '[role="option"]',
+ ].join(',')
+ );
+ if (!option || !isAskAiAssistantOption(option)) return;
+
+ const query = getModalQuery();
+ if (!query) return;
+
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopImmediatePropagation();
+ openAskAiThread(query);
+ };
+
+ const routeAskAiOptionEnter = (event: KeyboardEvent) => {
+ if (event.key !== 'Enter') return;
+ const input = event.target as HTMLInputElement | null;
+ if (!input?.closest('.DocSearch-Container .DocSearch-Input')) return;
+
+ const activeId = input.getAttribute('aria-activedescendant');
+ const activeOption = activeId
+ ? document.getElementById(activeId)
+ : document.querySelector(
+ [
+ '.DocSearch-Dropdown [aria-selected="true"]',
+ '.DocSearch-Dropdown [aria-current="true"]',
+ '.DocSearch-Dropdown .DocSearch-Hit[aria-selected="true"]',
+ '.DocSearch-Dropdown .DocSearch-Hit[aria-current="true"]',
+ ].join(',')
+ );
+ if (!activeOption || !isAskAiAssistantOption(activeOption)) return;
+
+ const query = getModalQuery();
+ if (!query) return;
+
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopImmediatePropagation();
+ openAskAiThread(query);
+ };
+
+ document.addEventListener('click', routeAskAiOptionClick, true);
+ document.addEventListener('keydown', routeAskAiOptionEnter, true);
+
+ return () => {
+ document.removeEventListener('click', routeAskAiOptionClick, true);
+ document.removeEventListener('keydown', routeAskAiOptionEnter, true);
+ };
+ }, []);
+
+ return (
+ <>
+ {children}
+
+ {/* Button only — portaled into the navbar */}
+ {placeholder &&
+ createPortal(
+ ,
+ placeholder
+ )}
+
+ {/* Sidepanel lives here in Root, never inside the navbar portal.
+ Kept mounted once first opened so conversation state survives resize. */}
+ {hasEverOpened && (
+
+ setIsAskAiOpen(false)}
+ initialMessage={initialAskAiMessage}
+ />
+
+ )}
+ >
+ );
+}
diff --git a/yarn.lock b/yarn.lock
index cdde9ac751..3ffbf74dff 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1959,17 +1959,12 @@
resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.6.2.tgz#0a6fdc13b1eb12153cb19316f911479b67f7bd58"
integrity sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA==
-"@docsearch/css@4":
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.5.3.tgz#359930bc8435976c574655adc9bb0574d8887a70"
- integrity sha512-kUpHaxn0AgI3LQfyzTYkNUuaFY4uEz/Ym9/N/FvyDE+PzSgZsCyDH9jE49B6N6f1eLCm9Yp64J9wENd6vypdxA==
-
"@docsearch/css@4.6.2":
version "4.6.2"
resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.6.2.tgz#986776619dccbf798176c75e858cc22f5e710bb4"
integrity sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==
-"@docsearch/react@^3.9.0 || ^4.3.2":
+"@docsearch/react@4.6.2", "@docsearch/react@^3.9.0 || ^4.3.2":
version "4.6.2"
resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.6.2.tgz#e6c65fb87fb943eefaa936debe6d31bb51b25056"
integrity sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w==