Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@docsearch/core

Package Overview
Dependencies
Maintainers
3
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@docsearch/core - npm Package Compare versions

Comparing version
4.4.0
to
4.5.0-beta.0
+39
-6
dist/esm/index.d.ts

@@ -54,2 +54,23 @@ import React, { JSX } from 'react';

type OnAskAiToggle = (active: boolean, initialMessage?: InitialAskAiMessage) => void;
/**
* Imperative handle exposed by the DocSearch provider for programmatic control.
*/
interface DocSearchRef {
/** Opens the search modal. */
open: () => void;
/** Closes the search modal. */
close: () => void;
/** Opens Ask AI mode (sidepanel if available, otherwise modal). */
openAskAi: (initialMessage?: InitialAskAiMessage) => void;
/** Opens the sidepanel directly (no-op if sidepanel view not registered). */
openSidepanel: (initialMessage?: InitialAskAiMessage) => void;
/** Returns true once the component is mounted and ready. */
readonly isReady: boolean;
/** Returns true if the modal is currently open. */
readonly isOpen: boolean;
/** Returns true if the sidepanel is currently open. */
readonly isSidepanelOpen: boolean;
/** Returns true if sidepanel view is registered (hybrid mode). */
readonly isSidepanelSupported: boolean;
}
interface DocSearchContext {

@@ -70,3 +91,18 @@ docsearchState: DocSearchState;

}
interface DocSearchProps {
/**
* Lifecycle callbacks for DocSearch.
*/
interface DocSearchCallbacks {
/** Called once DocSearch is mounted and ready for interaction. */
onReady?: () => void;
/** Called when the modal opens. */
onOpen?: () => void;
/** Called when the modal closes. */
onClose?: () => void;
/** Called when the sidepanel opens. */
onSidepanelOpen?: () => void;
/** Called when the sidepanel closes. */
onSidepanelClose?: () => void;
}
interface DocSearchProps extends DocSearchCallbacks {
children: Array<JSX.Element | null> | JSX.Element | React.ReactNode | null;

@@ -77,6 +113,3 @@ theme?: DocSearchTheme;

}
declare function DocSearch({ children, theme, ...props }: DocSearchProps): JSX.Element;
declare namespace DocSearch {
var displayName: string;
}
declare const DocSearch: React.ForwardRefExoticComponent<DocSearchProps & React.RefAttributes<DocSearchRef>>;
declare function useDocSearch(): DocSearchContext;

@@ -97,2 +130,2 @@

export { DEFAULT_KEYBOARD_SHORTCUTS, DocSearch, useDocSearch, useDocSearchKeyboardEvents, useKeyboardShortcuts, useTheme };
export type { DocSearchContext, DocSearchModalShortcuts, DocSearchProps, DocSearchState, DocSearchTheme, InitialAskAiMessage, KeyboardShortcuts, OnAskAiToggle, SidepanelShortcuts, UseDocSearchKeyboardEventsProps, UseThemeProps, View };
export type { DocSearchCallbacks, DocSearchContext, DocSearchModalShortcuts, DocSearchProps, DocSearchRef, DocSearchState, DocSearchTheme, InitialAskAiMessage, KeyboardShortcuts, OnAskAiToggle, SidepanelShortcuts, UseDocSearchKeyboardEventsProps, UseThemeProps, View };
+1
-1

@@ -1,1 +0,1 @@

import e,{useEffect as t}from"react";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(r=r.call(e)).next,0===t);else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};function c(e){return i(i({},u),e)}function l(t){var r=t.isOpen,n=t.isAskAiActive,o=t.onAskAiToggle,i=t.onClose,a=t.onOpen,c=t.onInput,l=t.searchButtonRef,s=t.keyboardShortcuts,f=void 0===s?u:s;e.useEffect(function(){function e(e){var t;if(r&&"Escape"===e.code&&n)o(!1);else{var u=f["Ctrl/Cmd+K"]&&"k"===(null===(t=e.key)||void 0===t?void 0:t.toLowerCase())&&(e.metaKey||e.ctrlKey),s=f["/"]&&"/"===e.key;if("Escape"===e.code&&r||u||!function(e){var t=e.composedPath()[0],r=t.tagName;return t.isContentEditable||"INPUT"===r||"SELECT"===r||"TEXTAREA"===r}(e)&&s&&!r)return e.preventDefault(),void(r?i():document.body.classList.contains("DocSearch--active")||a());l&&l.current===document.activeElement&&c&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&c(e)}}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r,n,l,f,a,i,c,o])}var s=function(e){var r=e.theme;t(function(){if(r){var e=document.documentElement.dataset.theme;if(r!==e)return document.documentElement.dataset.theme=r,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[r])},f=["children","theme"],d=e.createContext(void 0);function m(t){var r=t.children,n=t.theme,o=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,f),i=a(e.useState("ready"),2),u=i[0],m=i[1],v=a(e.useState(o.initialQuery||""),2),y=v[0],h=v[1],p=e.useRef(null),b=c(o.keyboardShortcuts),w=a(e.useState(),2),S=w[0],O=w[1],g=a(e.useState(function(){return new Set}),2),k=g[0],A=g[1],E=function(){var t=a(e.useState(!1),2),r=t[0],n=t[1];return e.useEffect(function(){var e=function(){var e=window.matchMedia("(max-width: 768px)");n(e.matches)};return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}},[]),r}(),C=["modal-search","modal-askai"].includes(u),j="modal-askai"===u,P=k.has("sidepanel"),D=e.useCallback(function(){m("modal-search")},[]),x=e.useCallback(function(){var e;m("ready"),h(null!==(e=o.initialQuery)&&void 0!==e?e:"")},[m,o.initialQuery]),T=e.useCallback(function(e,t){if(!E&&e&&P)return O(t),void m("sidepanel");m(e?"modal-askai":"modal-search")},[m,E,P]),I=e.useCallback(function(e){m("modal-search"),h(e.key)},[m,h]),M=e.useCallback(function(e){k.has(e)||A(function(t){var r=new Set(t);return r.add(e),r})},[k]);s({theme:n}),l({isOpen:C,onOpen:D,onClose:x,onAskAiToggle:T,onInput:I,isAskAiActive:j,searchButtonRef:p,keyboardShortcuts:b});var L=e.useMemo(function(){return{docsearchState:u,setDocsearchState:m,searchButtonRef:p,initialQuery:y,keyboardShortcuts:b,openModal:D,closeModal:x,isAskAiActive:j,isModalActive:C,onAskAiToggle:T,initialAskAiMessage:S,registerView:M,isHybridModeSupported:P}},[u,p,y,b,D,x,j,C,T,S,M,P]);return e.createElement(d.Provider,{value:L},r)}function v(){var t=e.useContext(d);if(void 0===t)throw new Error("`useDocSearch` must be used within the `DocSearch` provider");return t}d.displayName="DocSearchContext",m.displayName="DocSearch";export{u as DEFAULT_KEYBOARD_SHORTCUTS,m as DocSearch,v as useDocSearch,l as useDocSearchKeyboardEvents,c as useKeyboardShortcuts,s as useTheme};
import e,{useEffect as t}from"react";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t);else for(;!(c=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};function c(e){return a(a({},u),e)}function l(t){var n=t.isOpen,r=t.isAskAiActive,o=t.onAskAiToggle,a=t.onClose,i=t.onOpen,c=t.onInput,l=t.searchButtonRef,s=t.keyboardShortcuts,d=void 0===s?u:s;e.useEffect(function(){function e(e){var t;if(n&&"Escape"===e.code&&r)o(!1);else{var u=d["Ctrl/Cmd+K"]&&"k"===(null===(t=e.key)||void 0===t?void 0:t.toLowerCase())&&(e.metaKey||e.ctrlKey),s=d["/"]&&"/"===e.key;if("Escape"===e.code&&n||u||!function(e){var t=e.composedPath()[0],n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&s&&!n)return e.preventDefault(),void(n?a():document.body.classList.contains("DocSearch--active")||i());l&&l.current===document.activeElement&&c&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&c(e)}}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[n,r,l,d,i,a,c,o])}var s=function(e){var n=e.theme;t(function(){if(n){var e=document.documentElement.dataset.theme;if(n!==e)return document.documentElement.dataset.theme=n,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[n])},d=["children","theme","onReady","onOpen","onClose","onSidepanelOpen","onSidepanelClose"],f=e.createContext(void 0);f.displayName="DocSearchContext";var m=e.forwardRef(function(t,n){var r=t.children,o=t.theme,a=t.onReady,u=t.onOpen,m=t.onClose,p=t.onSidepanelOpen,v=t.onSidepanelClose,y=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(t,d),h=i(e.useState("ready"),2),b=h[0],S=h[1],O=i(e.useState(y.initialQuery||""),2),w=O[0],g=O[1],k=e.useRef(null),A=c(y.keyboardShortcuts),C=i(e.useState(),2),E=C[0],j=C[1],P=i(e.useState(function(){return new Set}),2),D=P[0],R=P[1],x=function(){var t=i(e.useState(!1),2),n=t[0],r=t[1];return e.useEffect(function(){var e=function(){var e=window.matchMedia("(max-width: 768px)");r(e.matches)};return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}},[]),n}(),I=e.useRef("ready"),T=["modal-search","modal-askai"].includes(b),M="modal-askai"===b,L=D.has("sidepanel"),N="sidepanel"===b;e.useEffect(function(){null==a||a()},[a]),e.useEffect(function(){var e=I.current,t=b;"modal-search"!==t&&"modal-askai"!==t||"modal-search"===e||"modal-askai"===e||null==u||u(),"ready"!==t||"modal-search"!==e&&"modal-askai"!==e||null==m||m(),"sidepanel"===t&&"sidepanel"!==e&&(null==p||p()),"sidepanel"!==t&&"sidepanel"===e&&(null==v||v()),I.current=t},[b,u,m,p,v]);var K=e.useCallback(function(){S("modal-search")},[]),Q=e.useCallback(function(){var e;S("ready"),g(null!==(e=y.initialQuery)&&void 0!==e?e:"")},[S,y.initialQuery]),z=e.useCallback(function(e,t){if(!x&&e&&L)return j(t),void S("sidepanel");S(e?"modal-askai":"modal-search")},[S,x,L]),B=e.useCallback(function(e){D.has("sidepanel")&&(j(e),S("sidepanel"))},[S,D]),H=e.useCallback(function(e){S("modal-search"),g(e.key)},[S,g]),U=e.useCallback(function(e){D.has(e)||R(function(t){var n=new Set(t);return n.add(e),n})},[D]);e.useImperativeHandle(n,function(){return{open:K,close:Q,openAskAi:function(e){return z(!0,e)},openSidepanel:B,get isReady(){return!0},get isOpen(){return T},get isSidepanelOpen(){return N},get isSidepanelSupported(){return L}}},[K,Q,z,B,T,N,L]),s({theme:o}),l({isOpen:T,onOpen:K,onClose:Q,onAskAiToggle:z,onInput:H,isAskAiActive:M,searchButtonRef:k,keyboardShortcuts:A});var V=e.useMemo(function(){return{docsearchState:b,setDocsearchState:S,searchButtonRef:k,initialQuery:w,keyboardShortcuts:A,openModal:K,closeModal:Q,isAskAiActive:M,isModalActive:T,onAskAiToggle:z,initialAskAiMessage:E,registerView:U,isHybridModeSupported:L}},[b,k,w,A,K,Q,M,T,z,E,U,L]);return e.createElement(f.Provider,{value:V},r)});function p(){var t=e.useContext(f);if(void 0===t)throw new Error("`useDocSearch` must be used within the `DocSearch` provider");return t}m.displayName="DocSearch";export{u as DEFAULT_KEYBOARD_SHORTCUTS,m as DocSearch,p as useDocSearch,l as useDocSearchKeyboardEvents,c as useKeyboardShortcuts,s as useTheme};

@@ -1,3 +0,3 @@

/*! @docsearch/core 4.4.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DocSearchCore={},e.React)}(this,function(e,t){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t);else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};function c(e){return i(i({},u),e)}function s(e){var r=e.isOpen,n=e.isAskAiActive,o=e.onAskAiToggle,i=e.onClose,a=e.onOpen,c=e.onInput,s=e.searchButtonRef,l=e.keyboardShortcuts,f=void 0===l?u:l;t.useEffect(function(){function e(e){var t;if(r&&"Escape"===e.code&&n)o(!1);else{var u=f["Ctrl/Cmd+K"]&&"k"===(null===(t=e.key)||void 0===t?void 0:t.toLowerCase())&&(e.metaKey||e.ctrlKey),l=f["/"]&&"/"===e.key;if("Escape"===e.code&&r||u||!function(e){var t=e.composedPath()[0],r=t.tagName;return t.isContentEditable||"INPUT"===r||"SELECT"===r||"TEXTAREA"===r}(e)&&l&&!r)return e.preventDefault(),void(r?i():document.body.classList.contains("DocSearch--active")||a());s&&s.current===document.activeElement&&c&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&c(e)}}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[r,n,s,f,a,i,c,o])}var l=function(e){var r=e.theme;t.useEffect(function(){if(r){var e=document.documentElement.dataset.theme;if(r!==e)return document.documentElement.dataset.theme=r,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[r])},f=["children","theme"],d=t.createContext(void 0);function m(e){var r=e.children,n=e.theme,o=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,f),i=a(t.useState("ready"),2),u=i[0],m=i[1],y=a(t.useState(o.initialQuery||""),2),v=y[0],h=y[1],p=t.useRef(null),b=c(o.keyboardShortcuts),S=a(t.useState(),2),w=S[0],O=S[1],g=a(t.useState(function(){return new Set}),2),A=g[0],E=g[1],k=function(){var e=a(t.useState(!1),2),r=e[0],n=e[1];return t.useEffect(function(){var e=function(){var e=window.matchMedia("(max-width: 768px)");n(e.matches)};return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}},[]),r}(),C=["modal-search","modal-askai"].includes(u),j="modal-askai"===u,D=A.has("sidepanel"),P=t.useCallback(function(){m("modal-search")},[]),T=t.useCallback(function(){var e;m("ready"),h(null!==(e=o.initialQuery)&&void 0!==e?e:"")},[m,o.initialQuery]),x=t.useCallback(function(e,t){if(!k&&e&&D)return O(t),void m("sidepanel");m(e?"modal-askai":"modal-search")},[m,k,D]),I=t.useCallback(function(e){m("modal-search"),h(e.key)},[m,h]),L=t.useCallback(function(e){A.has(e)||E(function(t){var r=new Set(t);return r.add(e),r})},[A]);l({theme:n}),s({isOpen:C,onOpen:P,onClose:T,onAskAiToggle:x,onInput:I,isAskAiActive:j,searchButtonRef:p,keyboardShortcuts:b});var M=t.useMemo(function(){return{docsearchState:u,setDocsearchState:m,searchButtonRef:p,initialQuery:v,keyboardShortcuts:b,openModal:P,closeModal:T,isAskAiActive:j,isModalActive:C,onAskAiToggle:x,initialAskAiMessage:w,registerView:L,isHybridModeSupported:D}},[u,p,v,b,P,T,j,C,x,w,L,D]);return t.createElement(d.Provider,{value:M},r)}d.displayName="DocSearchContext",m.displayName="DocSearch",e.DEFAULT_KEYBOARD_SHORTCUTS=u,e.DocSearch=m,e.useDocSearch=function(){var e=t.useContext(d);if(void 0===e)throw new Error("`useDocSearch` must be used within the `DocSearch` provider");return e},e.useDocSearchKeyboardEvents=s,e.useKeyboardShortcuts=c,e.useTheme=l});
/*! @docsearch/core 4.5.0-beta.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DocSearchCore={},e.React)}(this,function(e,t){"use strict";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,u=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t);else for(;!(c=(r=a.call(n)).done)&&(u.push(r.value),u.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return u}}(e,t)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};function c(e){return a(a({},u),e)}function l(e){var n=e.isOpen,r=e.isAskAiActive,o=e.onAskAiToggle,a=e.onClose,i=e.onOpen,c=e.onInput,l=e.searchButtonRef,s=e.keyboardShortcuts,d=void 0===s?u:s;t.useEffect(function(){function e(e){var t;if(n&&"Escape"===e.code&&r)o(!1);else{var u=d["Ctrl/Cmd+K"]&&"k"===(null===(t=e.key)||void 0===t?void 0:t.toLowerCase())&&(e.metaKey||e.ctrlKey),s=d["/"]&&"/"===e.key;if("Escape"===e.code&&n||u||!function(e){var t=e.composedPath()[0],n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&s&&!n)return e.preventDefault(),void(n?a():document.body.classList.contains("DocSearch--active")||i());l&&l.current===document.activeElement&&c&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&c(e)}}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[n,r,l,d,i,a,c,o])}var s=function(e){var n=e.theme;t.useEffect(function(){if(n){var e=document.documentElement.dataset.theme;if(n!==e)return document.documentElement.dataset.theme=n,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[n])},d=["children","theme","onReady","onOpen","onClose","onSidepanelOpen","onSidepanelClose"],f=t.createContext(void 0);f.displayName="DocSearchContext";var p=t.forwardRef(function(e,n){var r=e.children,o=e.theme,a=e.onReady,u=e.onOpen,p=e.onClose,m=e.onSidepanelOpen,y=e.onSidepanelClose,v=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,d),h=i(t.useState("ready"),2),b=h[0],S=h[1],O=i(t.useState(v.initialQuery||""),2),g=O[0],w=O[1],k=t.useRef(null),A=c(v.keyboardShortcuts),E=i(t.useState(),2),C=E[0],j=E[1],D=i(t.useState(function(){return new Set}),2),P=D[0],T=D[1],R=function(){var e=i(t.useState(!1),2),n=e[0],r=e[1];return t.useEffect(function(){var e=function(){var e=window.matchMedia("(max-width: 768px)");r(e.matches)};return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}},[]),n}(),x=t.useRef("ready"),I=["modal-search","modal-askai"].includes(b),L="modal-askai"===b,M=P.has("sidepanel"),K="sidepanel"===b;t.useEffect(function(){null==a||a()},[a]),t.useEffect(function(){var e=x.current,t=b;"modal-search"!==t&&"modal-askai"!==t||"modal-search"===e||"modal-askai"===e||null==u||u(),"ready"!==t||"modal-search"!==e&&"modal-askai"!==e||null==p||p(),"sidepanel"===t&&"sidepanel"!==e&&(null==m||m()),"sidepanel"!==t&&"sidepanel"===e&&(null==y||y()),x.current=t},[b,u,p,m,y]);var N=t.useCallback(function(){S("modal-search")},[]),B=t.useCallback(function(){var e;S("ready"),w(null!==(e=v.initialQuery)&&void 0!==e?e:"")},[S,v.initialQuery]),Q=t.useCallback(function(e,t){if(!R&&e&&M)return j(t),void S("sidepanel");S(e?"modal-askai":"modal-search")},[S,R,M]),U=t.useCallback(function(e){P.has("sidepanel")&&(j(e),S("sidepanel"))},[S,P]),z=t.useCallback(function(e){S("modal-search"),w(e.key)},[S,w]),H=t.useCallback(function(e){P.has(e)||T(function(t){var n=new Set(t);return n.add(e),n})},[P]);t.useImperativeHandle(n,function(){return{open:N,close:B,openAskAi:function(e){return Q(!0,e)},openSidepanel:U,get isReady(){return!0},get isOpen(){return I},get isSidepanelOpen(){return K},get isSidepanelSupported(){return M}}},[N,B,Q,U,I,K,M]),s({theme:o}),l({isOpen:I,onOpen:N,onClose:B,onAskAiToggle:Q,onInput:z,isAskAiActive:L,searchButtonRef:k,keyboardShortcuts:A});var _=t.useMemo(function(){return{docsearchState:b,setDocsearchState:S,searchButtonRef:k,initialQuery:g,keyboardShortcuts:A,openModal:N,closeModal:B,isAskAiActive:L,isModalActive:I,onAskAiToggle:Q,initialAskAiMessage:C,registerView:H,isHybridModeSupported:M}},[b,k,g,A,N,B,L,I,Q,C,H,M]);return t.createElement(f.Provider,{value:_},r)});p.displayName="DocSearch",e.DEFAULT_KEYBOARD_SHORTCUTS=u,e.DocSearch=p,e.useDocSearch=function(){var e=t.useContext(f);if(void 0===e)throw new Error("`useDocSearch` must be used within the `DocSearch` provider");return e},e.useDocSearchKeyboardEvents=l,e.useKeyboardShortcuts=c,e.useTheme=s});
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../../src/useKeyboardShortcuts.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/useIsMobile.ts","../../src/useTheme.ts","../../src/DocSearch.tsx"],"sourcesContent":["export interface DocSearchModalShortcuts {\n /**\n * Enable/disable the Ctrl/Cmd+K shortcut to toggle the DocSearch modal.\n *\n * @default true\n */\n 'Ctrl/Cmd+K'?: boolean;\n /**\n * Enable/disable the / shortcut to open the DocSearch modal.\n *\n * @default true\n */\n '/'?: boolean;\n}\n\nexport interface SidepanelShortcuts {\n /**\n * Enable/disable the Ctrl/Cmd+I shortcut to toggle the DocSearch sidepanel.\n *\n * @default true\n */\n 'Ctrl/Cmd+I'?: boolean;\n}\n\nexport type KeyboardShortcuts = DocSearchModalShortcuts & SidepanelShortcuts;\n\n/**\n * Default keyboard shortcuts configuration for DocSearch.\n * These values are used when no keyboardShortcuts prop is provided\n * or when specific shortcuts are not configured.\n */\nexport const DEFAULT_KEYBOARD_SHORTCUTS: Required<KeyboardShortcuts> = {\n 'Ctrl/Cmd+K': true,\n '/': true,\n 'Ctrl/Cmd+I': true,\n} as const;\n\n/**\n * Merges user-provided keyboard shortcuts with defaults.\n *\n * @param userShortcuts - Optional user configuration.\n * @returns Complete keyboard shortcuts configuration with defaults applied.\n */\nexport function useKeyboardShortcuts(userShortcuts?: KeyboardShortcuts): Required<KeyboardShortcuts> {\n return {\n ...DEFAULT_KEYBOARD_SHORTCUTS,\n ...userShortcuts,\n };\n}\n","import React from 'react';\n\nimport { DEFAULT_KEYBOARD_SHORTCUTS, type KeyboardShortcuts } from './useKeyboardShortcuts';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n onInput?: (event: KeyboardEvent) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n isAskAiActive: boolean;\n onAskAiToggle: (toggle: boolean) => void;\n keyboardShortcuts?: KeyboardShortcuts;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.composedPath()[0] as HTMLElement;\n const tagName = element.tagName;\n\n return element.isContentEditable || tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA';\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n isAskAiActive,\n onAskAiToggle,\n onClose,\n onOpen,\n onInput,\n searchButtonRef,\n keyboardShortcuts = DEFAULT_KEYBOARD_SHORTCUTS,\n}: UseDocSearchKeyboardEventsProps): void {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent): void {\n if (isOpen && event.code === 'Escape' && isAskAiActive) {\n onAskAiToggle(false);\n return;\n }\n\n const isCmdK =\n keyboardShortcuts['Ctrl/Cmd+K'] && event.key?.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey);\n const isSlash = keyboardShortcuts['/'] && event.key === '/';\n\n if ((event.code === 'Escape' && isOpen) || isCmdK || (!isEditingContent(event) && isSlash && !isOpen)) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n onOpen();\n }\n\n return;\n }\n\n if (searchButtonRef && searchButtonRef.current === document.activeElement && onInput) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return (): void => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, isAskAiActive, searchButtonRef, keyboardShortcuts, onOpen, onClose, onInput, onAskAiToggle]);\n}\n","import React from 'react';\n\nexport const useIsMobile = (): boolean => {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const checkForMobile = (): void => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 768px)');\n\n setIsMobile(isMobileMediaQuery.matches);\n };\n\n checkForMobile();\n\n window.addEventListener('resize', checkForMobile);\n\n return (): void => {\n window.removeEventListener('resize', checkForMobile);\n };\n }, []);\n\n return isMobile;\n};\n","import { useEffect } from 'react';\n\nexport type DocSearchTheme = 'dark' | 'light';\n\nexport interface UseThemeProps {\n theme?: DocSearchTheme;\n}\n\nexport const useTheme = ({ theme }: UseThemeProps): void => {\n useEffect(() => {\n if (!theme) {\n return undefined;\n }\n\n const previousTheme = document.documentElement.dataset.theme;\n\n if (theme === previousTheme) {\n return undefined;\n }\n\n document.documentElement.dataset.theme = theme;\n\n return (): void => {\n if (previousTheme === undefined) {\n delete document.documentElement.dataset.theme;\n } else {\n document.documentElement.dataset.theme = previousTheme;\n }\n };\n }, [theme]);\n};\n","import type { JSX } from 'react';\nimport React from 'react';\n\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\nimport { useIsMobile } from './useIsMobile';\nimport { useKeyboardShortcuts } from './useKeyboardShortcuts';\nimport type { KeyboardShortcuts } from './useKeyboardShortcuts.ts';\nimport type { DocSearchTheme } from './useTheme';\nimport { useTheme } from './useTheme';\n\nexport type DocSearchState = 'modal-askai' | 'modal-search' | 'ready' | 'sidepanel';\n\nexport type View = 'modal' | 'sidepanel' | (Record<string, unknown> & string);\n\nexport type InitialAskAiMessage = {\n query: string;\n messageId?: string;\n suggestedQuestionId?: string;\n};\n\nexport type OnAskAiToggle = (active: boolean, initialMessage?: InitialAskAiMessage) => void;\n\nexport interface DocSearchContext {\n docsearchState: DocSearchState;\n setDocsearchState: (newState: DocSearchState) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n initialQuery: string;\n keyboardShortcuts: Required<KeyboardShortcuts>;\n openModal: () => void;\n closeModal: () => void;\n isAskAiActive: boolean;\n isModalActive: boolean;\n onAskAiToggle: OnAskAiToggle;\n initialAskAiMessage: InitialAskAiMessage | undefined;\n registerView: (view: View) => void;\n isHybridModeSupported: boolean;\n}\n\nexport interface DocSearchProps {\n children: Array<JSX.Element | null> | JSX.Element | React.ReactNode | null;\n theme?: DocSearchTheme;\n initialQuery?: string;\n keyboardShortcuts?: KeyboardShortcuts;\n}\n\nconst Context = React.createContext<DocSearchContext | undefined>(undefined);\nContext.displayName = 'DocSearchContext';\n\nexport function DocSearch({ children, theme, ...props }: DocSearchProps): JSX.Element {\n const [docsearchState, setDocsearchState] = React.useState<DocSearchState>('ready');\n const [initialQuery, setInitialQuery] = React.useState<string>(props.initialQuery || '');\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const keyboardShortcuts = useKeyboardShortcuts(props.keyboardShortcuts);\n const [initialAskAiMessage, setInitialAskAiMessage] = React.useState<InitialAskAiMessage>();\n const [registeredViews, setRegisteredViews] = React.useState(() => new Set<View>());\n const isMobile = useIsMobile();\n\n const isModalActive = ['modal-search', 'modal-askai'].includes(docsearchState);\n const isAskAiActive = docsearchState === 'modal-askai';\n const isHybridModeSupported = registeredViews.has('sidepanel');\n\n const openModal = React.useCallback((): void => {\n setDocsearchState('modal-search');\n }, []);\n\n const closeModal = React.useCallback((): void => {\n setDocsearchState('ready');\n setInitialQuery(props.initialQuery ?? '');\n }, [setDocsearchState, props.initialQuery]);\n\n const onAskAiToggle: OnAskAiToggle = React.useCallback(\n (active, initialMessage) => {\n // Don't use hybrid mode on mobile\n if (!isMobile && active && isHybridModeSupported) {\n setInitialAskAiMessage(initialMessage);\n setDocsearchState('sidepanel');\n return;\n }\n\n setDocsearchState(active ? 'modal-askai' : 'modal-search');\n },\n [setDocsearchState, isMobile, isHybridModeSupported],\n );\n\n const onInput = React.useCallback(\n (event: KeyboardEvent): void => {\n setDocsearchState('modal-search');\n setInitialQuery(event.key);\n },\n [setDocsearchState, setInitialQuery],\n );\n\n const registerView = React.useCallback(\n (view: View): void => {\n if (registeredViews.has(view)) return;\n\n setRegisteredViews((prev) => {\n const newViews = new Set(prev);\n newViews.add(view);\n return newViews;\n });\n },\n [registeredViews],\n );\n\n useTheme({ theme });\n\n useDocSearchKeyboardEvents({\n isOpen: isModalActive,\n onOpen: openModal,\n onClose: closeModal,\n onAskAiToggle,\n onInput,\n isAskAiActive,\n searchButtonRef,\n keyboardShortcuts,\n });\n\n const value: DocSearchContext = React.useMemo(\n () => ({\n docsearchState,\n setDocsearchState,\n searchButtonRef,\n initialQuery,\n keyboardShortcuts,\n openModal,\n closeModal,\n isAskAiActive,\n isModalActive,\n onAskAiToggle,\n initialAskAiMessage,\n registerView,\n isHybridModeSupported,\n }),\n [\n docsearchState,\n searchButtonRef,\n initialQuery,\n keyboardShortcuts,\n openModal,\n closeModal,\n isAskAiActive,\n isModalActive,\n onAskAiToggle,\n initialAskAiMessage,\n registerView,\n isHybridModeSupported,\n ],\n );\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\nDocSearch.displayName = 'DocSearch';\n\nexport function useDocSearch(): DocSearchContext {\n const ctx = React.useContext(Context);\n\n if (ctx === undefined) {\n throw new Error('`useDocSearch` must be used within the `DocSearch` provider');\n }\n\n return ctx;\n}\n"],"names":["DEFAULT_KEYBOARD_SHORTCUTS","useKeyboardShortcuts","userShortcuts","_objectSpread","useDocSearchKeyboardEvents","_ref","isOpen","isAskAiActive","onAskAiToggle","onClose","onOpen","onInput","searchButtonRef","_ref$keyboardShortcut","keyboardShortcuts","React","useEffect","onKeyDown","event","_event$key","code","isCmdK","key","toLowerCase","metaKey","ctrlKey","isSlash","element","composedPath","tagName","isContentEditable","isEditingContent","preventDefault","document","body","classList","contains","current","activeElement","test","String","fromCharCode","keyCode","window","addEventListener","removeEventListener","useTheme","theme","previousTheme","documentElement","dataset","undefined","Context","createContext","DocSearch","children","props","_objectWithoutProperties","_excluded","_React$useState2","_slicedToArray","useState","docsearchState","setDocsearchState","_React$useState4","initialQuery","setInitialQuery","useRef","_React$useState6","initialAskAiMessage","setInitialAskAiMessage","_React$useState8","Set","registeredViews","setRegisteredViews","isMobile","setIsMobile","checkForMobile","isMobileMediaQuery","matchMedia","matches","useIsMobile","isModalActive","includes","isHybridModeSupported","has","openModal","useCallback","closeModal","_props$initialQuery","active","initialMessage","registerView","view","prev","newViews","add","value","useMemo","createElement","Provider","displayName","ctx","useContext","Error"],"mappings":";gvEA+BO,IAAMA,EAA0D,CACrE,cAAc,EACd,KAAK,EACL,cAAc,GAST,SAASC,EAAqBC,GACnC,OAAAC,EAAAA,EACKH,CAAAA,EAAAA,GACAE,EAEP,CC1BO,SAASE,EAA0BC,GASA,IARxCC,EAAMD,EAANC,OACAC,EAAaF,EAAbE,cACAC,EAAaH,EAAbG,cACAC,EAAOJ,EAAPI,QACAC,EAAML,EAANK,OACAC,EAAON,EAAPM,QACAC,EAAeP,EAAfO,gBAAeC,EAAAR,EACfS,kBAAAA,OAAoBd,IAAHa,EAAGb,EAA0Ba,EAE9CE,EAAMC,UAAU,WACd,SAASC,EAAUC,GAA4B,IAAAC,EAC7C,GAAIb,GAAyB,WAAfY,EAAME,MAAqBb,EACvCC,GAAc,OADhB,CAKA,IAAMa,EACJP,EAAkB,eAA8C,OAApBK,QAATA,EAAAD,EAAMI,WAANH,IAASA,OAATA,EAAAA,EAAWI,iBAA0BL,EAAMM,SAAWN,EAAMO,SAC3FC,EAAUZ,EAAkB,MAAsB,MAAdI,EAAMI,IAEhD,GAAoB,WAAfJ,EAAME,MAAqBd,GAAWe,IA5BjD,SAA0BH,GACxB,IAAMS,EAAUT,EAAMU,eAAe,GAC/BC,EAAUF,EAAQE,QAExB,OAAOF,EAAQG,mBAAiC,UAAZD,GAAmC,WAAZA,GAAoC,aAAZA,CACrF,CAuB6DE,CAAiBb,IAAUQ,IAAYpB,EAS5F,OARAY,EAAMc,sBAEF1B,EACFG,IACUwB,SAASC,KAAKC,UAAUC,SAAS,sBAC3C1B,KAMAE,GAAmBA,EAAgByB,UAAYJ,SAASK,eAAiB3B,GACvE,cAAc4B,KAAKC,OAAOC,aAAavB,EAAMwB,WAC/C/B,EAAQO,EApBZ,CAuBF,CAIA,OAFAyB,OAAOC,iBAAiB,UAAW3B,GAE5B,WACL0B,OAAOE,oBAAoB,UAAW5B,EACvC,CACH,EAAG,CAACX,EAAQC,EAAeK,EAAiBE,EAAmBJ,EAAQD,EAASE,EAASH,GAC3F,CClEO,ICMMsC,EAAW,SAAHzC,GAAuC,IAAjC0C,EAAK1C,EAAL0C,MACzB/B,EAAAA,UAAU,WACR,GAAK+B,EAAL,CAIA,IAAMC,EAAgBf,SAASgB,gBAAgBC,QAAQH,MAEvD,GAAIA,IAAUC,EAMd,OAFAf,SAASgB,gBAAgBC,QAAQH,MAAQA,EAElC,gBACiBI,IAAlBH,SACKf,SAASgB,gBAAgBC,QAAQH,MAExCd,SAASgB,gBAAgBC,QAAQH,MAAQC,CAE5C,CAhBD,CAiBF,EAAG,CAACD,GACN,yBCeMK,EAAUrC,EAAMsC,mBAA4CF,GAG3D,SAASG,EAASjD,GAA6D,IAA1DkD,EAAQlD,EAARkD,SAAUR,EAAK1C,EAAL0C,MAAUS,+WAAKC,CAAApD,EAAAqD,GACgCC,EAAAC,EAAvC7C,EAAM8C,SAAyB,SAAQ,GAA5EC,EAAcH,EAAA,GAAEI,EAAiBJ,EAAA,GACgDK,EAAAJ,EAAhD7C,EAAM8C,SAAiBL,EAAMS,cAAgB,IAAG,GAAjFA,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GAC9BpD,EAAkBG,EAAMoD,OAA0B,MAClDrD,EAAoBb,EAAqBuD,EAAM1C,mBACsCsD,EAAAR,EAArC7C,EAAM8C,WAA+B,GAApFQ,EAAmBD,EAAA,GAAEE,EAAsBF,EAAA,GACiCG,EAAAX,EAArC7C,EAAM8C,SAAS,WAAA,OAAM,IAAIW,MAAY,GAA5EC,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GACpCI,EFrDmB,WACzB,IAAqDhB,EAAAC,EAArB7C,EAAM8C,UAAS,GAAM,GAA9Cc,EAAQhB,EAAA,GAAEiB,EAAWjB,EAAA,GAkB5B,OAhBA5C,EAAMC,UAAU,WACd,IAAM6D,EAAiB,WACrB,IAAMC,EAAqBnC,OAAOoC,WAAW,sBAE7CH,EAAYE,EAAmBE,QAChC,EAMD,OAJAH,IAEAlC,OAAOC,iBAAiB,SAAUiC,GAE3B,WACLlC,OAAOE,oBAAoB,SAAUgC,EACtC,CACF,EAAE,IAEIF,CACT,CEiCmBM,GAEXC,EAAgB,CAAC,eAAgB,eAAeC,SAASrB,GACzDvD,EAAmC,gBAAnBuD,EAChBsB,EAAwBX,EAAgBY,IAAI,aAE5CC,EAAYvE,EAAMwE,YAAY,WAClCxB,EAAkB,eACnB,EAAE,IAEGyB,EAAazE,EAAMwE,YAAY,WAAY,IAAAE,EAC/C1B,EAAkB,SAClBG,EAAkCuB,QAAnBA,EAACjC,EAAMS,oBAAYwB,IAAAA,EAAAA,EAAI,GACvC,EAAE,CAAC1B,EAAmBP,EAAMS,eAEvBzD,EAA+BO,EAAMwE,YACzC,SAACG,EAAQC,GAEP,IAAKhB,GAAYe,GAAUN,EAGzB,OAFAd,EAAuBqB,QACvB5B,EAAkB,aAIpBA,EAAkB2B,EAAS,cAAgB,eAC5C,EACD,CAAC3B,EAAmBY,EAAUS,IAG1BzE,EAAUI,EAAMwE,YACpB,SAACrE,GACC6C,EAAkB,gBAClBG,EAAgBhD,EAAMI,IACxB,EACA,CAACyC,EAAmBG,IAGhB0B,EAAe7E,EAAMwE,YACzB,SAACM,GACKpB,EAAgBY,IAAIQ,IAExBnB,EAAmB,SAACoB,GAClB,IAAMC,EAAW,IAAIvB,IAAIsB,GAEzB,OADAC,EAASC,IAAIH,GACNE,CACT,EACF,EACA,CAACtB,IAGH3B,EAAS,CAAEC,MAAAA,IAEX3C,EAA2B,CACzBE,OAAQ4E,EACRxE,OAAQ4E,EACR7E,QAAS+E,EACThF,cAAAA,EACAG,QAAAA,EACAJ,cAAAA,EACAK,gBAAAA,EACAE,kBAAAA,IAGF,IAAMmF,EAA0BlF,EAAMmF,QACpC,WAAA,MAAO,CACLpC,eAAAA,EACAC,kBAAAA,EACAnD,gBAAAA,EACAqD,aAAAA,EACAnD,kBAAAA,EACAwE,UAAAA,EACAE,WAAAA,EACAjF,cAAAA,EACA2E,cAAAA,EACA1E,cAAAA,EACA6D,oBAAAA,EACAuB,aAAAA,EACAR,sBAAAA,EACA,EACF,CACEtB,EACAlD,EACAqD,EACAnD,EACAwE,EACAE,EACAjF,EACA2E,EACA1E,EACA6D,EACAuB,EACAR,IAIJ,OAAOrE,EAAAoF,cAAC/C,EAAQgD,SAAQ,CAACH,MAAOA,GAAQ1C,EAC1C,CAzGAH,EAAQiD,YAAc,mBA0GtB/C,EAAU+C,YAAc,wEAEjB,WACL,IAAMC,EAAMvF,EAAMwF,WAAWnD,GAE7B,QAAYD,IAARmD,EACF,MAAM,IAAIE,MAAM,+DAGlB,OAAOF,CACT"}
{"version":3,"file":"index.js","sources":["../../src/useKeyboardShortcuts.ts","../../src/useDocSearchKeyboardEvents.ts","../../src/useIsMobile.ts","../../src/useTheme.ts","../../src/DocSearch.tsx"],"sourcesContent":["export interface DocSearchModalShortcuts {\n /**\n * Enable/disable the Ctrl/Cmd+K shortcut to toggle the DocSearch modal.\n *\n * @default true\n */\n 'Ctrl/Cmd+K'?: boolean;\n /**\n * Enable/disable the / shortcut to open the DocSearch modal.\n *\n * @default true\n */\n '/'?: boolean;\n}\n\nexport interface SidepanelShortcuts {\n /**\n * Enable/disable the Ctrl/Cmd+I shortcut to toggle the DocSearch sidepanel.\n *\n * @default true\n */\n 'Ctrl/Cmd+I'?: boolean;\n}\n\nexport type KeyboardShortcuts = DocSearchModalShortcuts & SidepanelShortcuts;\n\n/**\n * Default keyboard shortcuts configuration for DocSearch.\n * These values are used when no keyboardShortcuts prop is provided\n * or when specific shortcuts are not configured.\n */\nexport const DEFAULT_KEYBOARD_SHORTCUTS: Required<KeyboardShortcuts> = {\n 'Ctrl/Cmd+K': true,\n '/': true,\n 'Ctrl/Cmd+I': true,\n} as const;\n\n/**\n * Merges user-provided keyboard shortcuts with defaults.\n *\n * @param userShortcuts - Optional user configuration.\n * @returns Complete keyboard shortcuts configuration with defaults applied.\n */\nexport function useKeyboardShortcuts(userShortcuts?: KeyboardShortcuts): Required<KeyboardShortcuts> {\n return {\n ...DEFAULT_KEYBOARD_SHORTCUTS,\n ...userShortcuts,\n };\n}\n","import React from 'react';\n\nimport { DEFAULT_KEYBOARD_SHORTCUTS, type KeyboardShortcuts } from './useKeyboardShortcuts';\n\nexport interface UseDocSearchKeyboardEventsProps {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n onInput?: (event: KeyboardEvent) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n isAskAiActive: boolean;\n onAskAiToggle: (toggle: boolean) => void;\n keyboardShortcuts?: KeyboardShortcuts;\n}\n\nfunction isEditingContent(event: KeyboardEvent): boolean {\n const element = event.composedPath()[0] as HTMLElement;\n const tagName = element.tagName;\n\n return element.isContentEditable || tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA';\n}\n\nexport function useDocSearchKeyboardEvents({\n isOpen,\n isAskAiActive,\n onAskAiToggle,\n onClose,\n onOpen,\n onInput,\n searchButtonRef,\n keyboardShortcuts = DEFAULT_KEYBOARD_SHORTCUTS,\n}: UseDocSearchKeyboardEventsProps): void {\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent): void {\n if (isOpen && event.code === 'Escape' && isAskAiActive) {\n onAskAiToggle(false);\n return;\n }\n\n const isCmdK =\n keyboardShortcuts['Ctrl/Cmd+K'] && event.key?.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey);\n const isSlash = keyboardShortcuts['/'] && event.key === '/';\n\n if ((event.code === 'Escape' && isOpen) || isCmdK || (!isEditingContent(event) && isSlash && !isOpen)) {\n event.preventDefault();\n\n if (isOpen) {\n onClose();\n } else if (!document.body.classList.contains('DocSearch--active')) {\n onOpen();\n }\n\n return;\n }\n\n if (searchButtonRef && searchButtonRef.current === document.activeElement && onInput) {\n if (/[a-zA-Z0-9]/.test(String.fromCharCode(event.keyCode))) {\n onInput(event);\n }\n }\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return (): void => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [isOpen, isAskAiActive, searchButtonRef, keyboardShortcuts, onOpen, onClose, onInput, onAskAiToggle]);\n}\n","import React from 'react';\n\nexport const useIsMobile = (): boolean => {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const checkForMobile = (): void => {\n const isMobileMediaQuery = window.matchMedia('(max-width: 768px)');\n\n setIsMobile(isMobileMediaQuery.matches);\n };\n\n checkForMobile();\n\n window.addEventListener('resize', checkForMobile);\n\n return (): void => {\n window.removeEventListener('resize', checkForMobile);\n };\n }, []);\n\n return isMobile;\n};\n","import { useEffect } from 'react';\n\nexport type DocSearchTheme = 'dark' | 'light';\n\nexport interface UseThemeProps {\n theme?: DocSearchTheme;\n}\n\nexport const useTheme = ({ theme }: UseThemeProps): void => {\n useEffect(() => {\n if (!theme) {\n return undefined;\n }\n\n const previousTheme = document.documentElement.dataset.theme;\n\n if (theme === previousTheme) {\n return undefined;\n }\n\n document.documentElement.dataset.theme = theme;\n\n return (): void => {\n if (previousTheme === undefined) {\n delete document.documentElement.dataset.theme;\n } else {\n document.documentElement.dataset.theme = previousTheme;\n }\n };\n }, [theme]);\n};\n","import type { JSX } from 'react';\nimport React from 'react';\n\nimport { useDocSearchKeyboardEvents } from './useDocSearchKeyboardEvents';\nimport { useIsMobile } from './useIsMobile';\nimport { useKeyboardShortcuts } from './useKeyboardShortcuts';\nimport type { KeyboardShortcuts } from './useKeyboardShortcuts.ts';\nimport type { DocSearchTheme } from './useTheme';\nimport { useTheme } from './useTheme';\n\nexport type DocSearchState = 'modal-askai' | 'modal-search' | 'ready' | 'sidepanel';\n\nexport type View = 'modal' | 'sidepanel' | (Record<string, unknown> & string);\n\nexport type InitialAskAiMessage = {\n query: string;\n messageId?: string;\n suggestedQuestionId?: string;\n};\n\nexport type OnAskAiToggle = (active: boolean, initialMessage?: InitialAskAiMessage) => void;\n\n/**\n * Imperative handle exposed by the DocSearch provider for programmatic control.\n */\nexport interface DocSearchRef {\n /** Opens the search modal. */\n open: () => void;\n /** Closes the search modal. */\n close: () => void;\n /** Opens Ask AI mode (sidepanel if available, otherwise modal). */\n openAskAi: (initialMessage?: InitialAskAiMessage) => void;\n /** Opens the sidepanel directly (no-op if sidepanel view not registered). */\n openSidepanel: (initialMessage?: InitialAskAiMessage) => void;\n /** Returns true once the component is mounted and ready. */\n readonly isReady: boolean;\n /** Returns true if the modal is currently open. */\n readonly isOpen: boolean;\n /** Returns true if the sidepanel is currently open. */\n readonly isSidepanelOpen: boolean;\n /** Returns true if sidepanel view is registered (hybrid mode). */\n readonly isSidepanelSupported: boolean;\n}\n\nexport interface DocSearchContext {\n docsearchState: DocSearchState;\n setDocsearchState: (newState: DocSearchState) => void;\n searchButtonRef: React.RefObject<HTMLButtonElement | null>;\n initialQuery: string;\n keyboardShortcuts: Required<KeyboardShortcuts>;\n openModal: () => void;\n closeModal: () => void;\n isAskAiActive: boolean;\n isModalActive: boolean;\n onAskAiToggle: OnAskAiToggle;\n initialAskAiMessage: InitialAskAiMessage | undefined;\n registerView: (view: View) => void;\n isHybridModeSupported: boolean;\n}\n\n/**\n * Lifecycle callbacks for DocSearch.\n */\nexport interface DocSearchCallbacks {\n /** Called once DocSearch is mounted and ready for interaction. */\n onReady?: () => void;\n /** Called when the modal opens. */\n onOpen?: () => void;\n /** Called when the modal closes. */\n onClose?: () => void;\n /** Called when the sidepanel opens. */\n onSidepanelOpen?: () => void;\n /** Called when the sidepanel closes. */\n onSidepanelClose?: () => void;\n}\n\nexport interface DocSearchProps extends DocSearchCallbacks {\n children: Array<JSX.Element | null> | JSX.Element | React.ReactNode | null;\n theme?: DocSearchTheme;\n initialQuery?: string;\n keyboardShortcuts?: KeyboardShortcuts;\n}\n\nconst Context = React.createContext<DocSearchContext | undefined>(undefined);\nContext.displayName = 'DocSearchContext';\n\nfunction DocSearchInner(\n { children, theme, onReady, onOpen, onClose, onSidepanelOpen, onSidepanelClose, ...props }: DocSearchProps,\n ref: React.ForwardedRef<DocSearchRef>,\n): JSX.Element {\n const [docsearchState, setDocsearchState] = React.useState<DocSearchState>('ready');\n const [initialQuery, setInitialQuery] = React.useState<string>(props.initialQuery || '');\n const searchButtonRef = React.useRef<HTMLButtonElement>(null);\n const keyboardShortcuts = useKeyboardShortcuts(props.keyboardShortcuts);\n const [initialAskAiMessage, setInitialAskAiMessage] = React.useState<InitialAskAiMessage>();\n const [registeredViews, setRegisteredViews] = React.useState(() => new Set<View>());\n const isMobile = useIsMobile();\n const prevStateRef = React.useRef<DocSearchState>('ready');\n\n const isModalActive = ['modal-search', 'modal-askai'].includes(docsearchState);\n const isAskAiActive = docsearchState === 'modal-askai';\n const isHybridModeSupported = registeredViews.has('sidepanel');\n const isSidepanelOpen = docsearchState === 'sidepanel';\n\n // Call onReady on mount\n React.useEffect(() => {\n onReady?.();\n }, [onReady]);\n\n // Track state changes for lifecycle callbacks\n React.useEffect(() => {\n const prevState = prevStateRef.current;\n const currentState = docsearchState;\n\n // Modal opened\n if (\n (currentState === 'modal-search' || currentState === 'modal-askai') &&\n prevState !== 'modal-search' &&\n prevState !== 'modal-askai'\n ) {\n onOpen?.();\n }\n\n // Modal closed\n if (currentState === 'ready' && (prevState === 'modal-search' || prevState === 'modal-askai')) {\n onClose?.();\n }\n\n // Sidepanel opened\n if (currentState === 'sidepanel' && prevState !== 'sidepanel') {\n onSidepanelOpen?.();\n }\n\n // Sidepanel closed\n if (currentState !== 'sidepanel' && prevState === 'sidepanel') {\n onSidepanelClose?.();\n }\n\n prevStateRef.current = currentState;\n }, [docsearchState, onOpen, onClose, onSidepanelOpen, onSidepanelClose]);\n\n const openModal = React.useCallback((): void => {\n setDocsearchState('modal-search');\n }, []);\n\n const closeModal = React.useCallback((): void => {\n setDocsearchState('ready');\n setInitialQuery(props.initialQuery ?? '');\n }, [setDocsearchState, props.initialQuery]);\n\n const onAskAiToggle: OnAskAiToggle = React.useCallback(\n (active, initialMessage) => {\n // Don't use hybrid mode on mobile\n if (!isMobile && active && isHybridModeSupported) {\n setInitialAskAiMessage(initialMessage);\n setDocsearchState('sidepanel');\n return;\n }\n\n setDocsearchState(active ? 'modal-askai' : 'modal-search');\n },\n [setDocsearchState, isMobile, isHybridModeSupported],\n );\n\n const openSidepanel = React.useCallback(\n (initialMessage?: InitialAskAiMessage): void => {\n // Guard: no-op if sidepanel view hasn't been registered\n if (!registeredViews.has('sidepanel')) return;\n\n setInitialAskAiMessage(initialMessage);\n setDocsearchState('sidepanel');\n },\n [setDocsearchState, registeredViews],\n );\n\n const onInput = React.useCallback(\n (event: KeyboardEvent): void => {\n setDocsearchState('modal-search');\n setInitialQuery(event.key);\n },\n [setDocsearchState, setInitialQuery],\n );\n\n const registerView = React.useCallback(\n (view: View): void => {\n if (registeredViews.has(view)) return;\n\n setRegisteredViews((prev) => {\n const newViews = new Set(prev);\n newViews.add(view);\n return newViews;\n });\n },\n [registeredViews],\n );\n\n // Expose imperative handle for programmatic control\n React.useImperativeHandle(\n ref,\n () => ({\n open: openModal,\n close: closeModal,\n openAskAi: (initialMessage?: InitialAskAiMessage): void => onAskAiToggle(true, initialMessage),\n openSidepanel,\n get isReady(): boolean {\n return true;\n },\n get isOpen(): boolean {\n return isModalActive;\n },\n get isSidepanelOpen(): boolean {\n return isSidepanelOpen;\n },\n get isSidepanelSupported(): boolean {\n return isHybridModeSupported;\n },\n }),\n [openModal, closeModal, onAskAiToggle, openSidepanel, isModalActive, isSidepanelOpen, isHybridModeSupported],\n );\n\n useTheme({ theme });\n\n useDocSearchKeyboardEvents({\n isOpen: isModalActive,\n onOpen: openModal,\n onClose: closeModal,\n onAskAiToggle,\n onInput,\n isAskAiActive,\n searchButtonRef,\n keyboardShortcuts,\n });\n\n const value: DocSearchContext = React.useMemo(\n () => ({\n docsearchState,\n setDocsearchState,\n searchButtonRef,\n initialQuery,\n keyboardShortcuts,\n openModal,\n closeModal,\n isAskAiActive,\n isModalActive,\n onAskAiToggle,\n initialAskAiMessage,\n registerView,\n isHybridModeSupported,\n }),\n [\n docsearchState,\n searchButtonRef,\n initialQuery,\n keyboardShortcuts,\n openModal,\n closeModal,\n isAskAiActive,\n isModalActive,\n onAskAiToggle,\n initialAskAiMessage,\n registerView,\n isHybridModeSupported,\n ],\n );\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\nexport const DocSearch = React.forwardRef(DocSearchInner);\nDocSearch.displayName = 'DocSearch';\n\nexport function useDocSearch(): DocSearchContext {\n const ctx = React.useContext(Context);\n\n if (ctx === undefined) {\n throw new Error('`useDocSearch` must be used within the `DocSearch` provider');\n }\n\n return ctx;\n}\n"],"names":["DEFAULT_KEYBOARD_SHORTCUTS","useKeyboardShortcuts","userShortcuts","_objectSpread","useDocSearchKeyboardEvents","_ref","isOpen","isAskAiActive","onAskAiToggle","onClose","onOpen","onInput","searchButtonRef","_ref$keyboardShortcut","keyboardShortcuts","React","useEffect","onKeyDown","event","_event$key","code","isCmdK","key","toLowerCase","metaKey","ctrlKey","isSlash","element","composedPath","tagName","isContentEditable","isEditingContent","preventDefault","document","body","classList","contains","current","activeElement","test","String","fromCharCode","keyCode","window","addEventListener","removeEventListener","useTheme","theme","previousTheme","documentElement","dataset","undefined","Context","createContext","displayName","DocSearch","forwardRef","ref","children","onReady","onSidepanelOpen","onSidepanelClose","props","_objectWithoutProperties","_excluded","_React$useState2","_slicedToArray","useState","docsearchState","setDocsearchState","_React$useState4","initialQuery","setInitialQuery","useRef","_React$useState6","initialAskAiMessage","setInitialAskAiMessage","_React$useState8","Set","registeredViews","setRegisteredViews","isMobile","setIsMobile","checkForMobile","isMobileMediaQuery","matchMedia","matches","useIsMobile","prevStateRef","isModalActive","includes","isHybridModeSupported","has","isSidepanelOpen","prevState","currentState","openModal","useCallback","closeModal","_props$initialQuery","active","initialMessage","openSidepanel","registerView","view","prev","newViews","add","useImperativeHandle","open","close","openAskAi","isReady","isSidepanelSupported","value","useMemo","createElement","Provider","ctx","useContext","Error"],"mappings":"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"}

@@ -1,3 +0,3 @@

/*! @docsearch/core 4.4.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
/*! @docsearch/core 4.5.0-beta.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DocSearchCore={},e.React)}(this,function(e,t){"use strict";var o={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};e.useDocSearchKeyboardEvents=function(e){var n=e.isOpen,r=e.isAskAiActive,i=e.onAskAiToggle,c=e.onClose,a=e.onOpen,d=e.onInput,s=e.searchButtonRef,u=e.keyboardShortcuts,f=void 0===u?o:u;t.useEffect(function(){function e(e){var t;if(n&&"Escape"===e.code&&r)i(!1);else{var o=f["Ctrl/Cmd+K"]&&"k"===(null===(t=e.key)||void 0===t?void 0:t.toLowerCase())&&(e.metaKey||e.ctrlKey),u=f["/"]&&"/"===e.key;if("Escape"===e.code&&n||o||!function(e){var t=e.composedPath()[0],o=t.tagName;return t.isContentEditable||"INPUT"===o||"SELECT"===o||"TEXTAREA"===o}(e)&&u&&!n)return e.preventDefault(),void(n?c():document.body.classList.contains("DocSearch--active")||a());s&&s.current===document.activeElement&&d&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&d(e)}}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[n,r,s,f,a,c,d,i])}});
//# sourceMappingURL=useDocSearchKeyboardEvents.js.map

@@ -1,3 +0,3 @@

/*! @docsearch/core 4.4.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
/*! @docsearch/core 4.5.0-beta.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DocSearchCore={})}(this,function(e){"use strict";function t(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function r(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function n(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach(function(r){t(e,r,o[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}var o={"Ctrl/Cmd+K":!0,"/":!0,"Ctrl/Cmd+I":!0};e.DEFAULT_KEYBOARD_SHORTCUTS=o,e.useKeyboardShortcuts=function(e){return n(n({},o),e)}});
//# sourceMappingURL=useKeyboardShortcuts.js.map

@@ -1,3 +0,3 @@

/*! @docsearch/core 4.4.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
/*! @docsearch/core 4.5.0-beta.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DocSearchCore={},e.React)}(this,function(e,t){"use strict";e.useTheme=function(e){var n=e.theme;t.useEffect(function(){if(n){var e=document.documentElement.dataset.theme;if(n!==e)return document.documentElement.dataset.theme=n,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[n])}});
//# sourceMappingURL=useTheme.js.map
{
"name": "@docsearch/core",
"description": "Core package logic for DocSearch",
"version": "4.4.0",
"version": "4.5.0-beta.0",
"license": "MIT",

@@ -6,0 +6,0 @@ "homepage": "https://docsearch.algolia.com",