@docsearch/react 4.6.0 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- /*! @docsearch/react 4.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
2
- !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).DocSearchReact={},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(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},o.apply(null,arguments)}function a(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 c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function i(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,a,c,i=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(i.push(n.value),i.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=r.return&&(c=r.return(),Object(c)!==c))return}finally{if(l)throw o}}return i}}(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};function l(e){var r=e.size,n=void 0===r?20:r,o=e.color,a=void 0===o?"currentColor":o;return t.createElement("svg",{width:n,height:n,className:"DocSearch-Search-Icon",viewBox:"0 0 24 24","aria-hidden":"true"},t.createElement("circle",{cx:"11",cy:"11",r:"8",stroke:a,fill:"none",strokeWidth:"1.4"}),t.createElement("path",{d:"m21 21-4.3-4.3",stroke:a,fill:"none",strokeLinecap:"round",strokeLinejoin:"round"}))}var f="Ctrl";var s=["translations","keyboardShortcuts"],d=t.forwardRef(function(e,r){var n,a,d,y=e.translations,h=void 0===y?{}:y,p=e.keyboardShortcuts,b=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 a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,s),v=h.buttonText,O=void 0===v?"Search":v,g=h.buttonAriaLabel,S=void 0===g?"Search":g,w=(n=p,c(c({},u),n)),E=i(t.useState(null),2),j=E[0],k=E[1];a={theme:b.theme},d=a.theme,t.useEffect(function(){if(d){var e=document.documentElement.dataset.theme;if(d!==e)return document.documentElement.dataset.theme=d,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[d]),t.useEffect(function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?k("⌘"):k(f))},[]);var P=i(j===f?[f,"Control","Ctrl"]:["Meta","Meta","⌘"],3),D=P[0],C=P[1],K=P[2],B=w["Ctrl/Cmd+K"],x="".concat(C,"+k");return t.createElement("button",o({type:"button",className:"DocSearch DocSearch-Button","aria-label":B?"".concat(S," (").concat(x,")"):S,"aria-keyshortcuts":B?x:void 0},b,{ref:r}),t.createElement("span",{className:"DocSearch-Button-Container"},t.createElement(l,null),t.createElement("span",{className:"DocSearch-Button-Placeholder"},O)),t.createElement("span",{className:"DocSearch-Button-Keys"},null!==j&&B&&t.createElement(t.Fragment,null,t.createElement(m,{reactsToKey:D},K),t.createElement(m,{reactsToKey:"k"},"K"))))});function m(e){var r=e.reactsToKey,n=e.children,o=i(t.useState(!1),2),a=o[0],c=o[1];return t.useEffect(function(){if(r)return window.addEventListener("keydown",e),window.addEventListener("keyup",t),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",t)};function e(e){e.key===r&&c(!0)}function t(e){e.key!==r&&"Meta"!==e.key||c(!1)}},[r]),t.createElement("kbd",{className:a?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"+("Ctrl"===r?" DocSearch-Button-Key--ctrl":"")},n)}e.DocSearchButton=d});
1
+ /*! @docsearch/react 4.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */
2
+ !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).DocSearchReact={},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);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(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},o.apply(null,arguments)}function a(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 c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function i(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,a,c,i=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(i.push(n.value),i.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=r.return&&(c=r.return(),Object(c)!==c))return}finally{if(l)throw o}}return i}}(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};function l(e){var r=e.size,n=void 0===r?20:r,o=e.color,a=void 0===o?"currentColor":o;return t.createElement("svg",{width:n,height:n,className:"DocSearch-Search-Icon",viewBox:"0 0 24 24","aria-hidden":"true"},t.createElement("circle",{cx:"11",cy:"11",r:"8",stroke:a,fill:"none",strokeWidth:"1.4"}),t.createElement("path",{d:"m21 21-4.3-4.3",stroke:a,fill:"none",strokeLinecap:"round",strokeLinejoin:"round"}))}var f="Ctrl";var s=["translations","keyboardShortcuts"],d=t.forwardRef(function(e,r){var n,a,d,y=e.translations,h=void 0===y?{}:y,p=e.keyboardShortcuts,b=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 a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,s),v=h.buttonText,O=void 0===v?"Search":v,g=h.buttonAriaLabel,S=void 0===g?"Search":g,w=(n=p,c(c({},u),n)),E=i(t.useState(null),2),j=E[0],k=E[1];a={theme:b.theme},d=a.theme,t.useEffect(function(){if(d){var e=document.documentElement.dataset.theme;if(d!==e)return document.documentElement.dataset.theme=d,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[d]),t.useEffect(function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?k("⌘"):k(f))},[]);var P=i(j===f?[f,"Control","Ctrl"]:["Meta","Meta","⌘"],3),D=P[0],C=P[1],K=P[2],B=w["Ctrl/Cmd+K"],x="".concat(C,"+k");return t.createElement("button",o({type:"button",className:"DocSearch DocSearch-Button","aria-label":B?"".concat(S," (").concat(x,")"):S,"aria-keyshortcuts":B?x:void 0},b,{ref:r}),t.createElement("span",{className:"DocSearch-Button-Container"},t.createElement(l,null),t.createElement("span",{className:"DocSearch-Button-Placeholder"},O)),t.createElement("span",{className:"DocSearch-Button-Keys"},null!==j&&B&&t.createElement(t.Fragment,null,t.createElement(m,{reactsToKey:D},K),t.createElement(m,{reactsToKey:"k"},"K"))))});function m(e){var r=e.reactsToKey,n=e.children,o=i(t.useState(!1),2),a=o[0],c=o[1];return t.useEffect(function(){if(r)return window.addEventListener("keydown",e),window.addEventListener("keyup",t),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",t)};function e(e){e.key===r&&c(!0)}function t(e){e.key!==r&&"Meta"!==e.key||c(!1)}},[r]),t.createElement("kbd",{className:a?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"+("Ctrl"===r?" DocSearch-Button-Key--ctrl":"")},n)}e.DocSearchButton=d});
3
3
  //# sourceMappingURL=DocsearchButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocsearchButton.js","sources":["../../../docsearch-core/dist/esm/useTheme.js","../../src/constants/keyboardShortcuts.ts","../../src/icons/SearchIcon.tsx","../../src/utils/keyboard.ts","../../src/DocSearchButton.tsx"],"sourcesContent":["import{useEffect as e}from\"react\";var t=function(t){var m=t.theme;e(function(){if(m){var e=document.documentElement.dataset.theme;if(m!==e)return document.documentElement.dataset.theme=m,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[m])};export{t as useTheme};\n","import type { KeyboardShortcuts } from '../types';\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} 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 getKeyboardShortcuts(userShortcuts?: KeyboardShortcuts): Required<KeyboardShortcuts> {\n return {\n ...DEFAULT_KEYBOARD_SHORTCUTS,\n ...userShortcuts,\n };\n}\n","import React, { type JSX } from 'react';\n\ninterface SearchIconProps {\n size?: number;\n color?: string;\n}\n\nexport function SearchIcon({ size = 20, color = 'currentColor' }: SearchIconProps): JSX.Element {\n return (\n <svg width={size} height={size} className=\"DocSearch-Search-Icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke={color} fill=\"none\" strokeWidth=\"1.4\" />\n <path d=\"m21 21-4.3-4.3\" stroke={color} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","export const ACTION_KEY_DEFAULT = 'Ctrl';\nexport const ACTION_KEY_APPLE = '⌘';\n\nexport function isAppleDevice(): boolean {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n","import type { DocSearchModalShortcuts } from '@docsearch/core';\nimport { useTheme } from '@docsearch/core/useTheme';\nimport React, { useEffect, useState, type JSX } from 'react';\n\nimport { getKeyboardShortcuts } from './constants/keyboardShortcuts';\nimport { SearchIcon } from './icons/SearchIcon';\nimport type { DocSearchTheme } from './types';\nimport { ACTION_KEY_APPLE, ACTION_KEY_DEFAULT, isAppleDevice } from './utils';\n\nexport type ButtonTranslations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n theme?: DocSearchTheme;\n translations?: ButtonTranslations;\n keyboardShortcuts?: DocSearchModalShortcuts;\n};\n\nexport const DocSearchButton = React.forwardRef<HTMLButtonElement, DocSearchButtonProps>(\n ({ translations = {}, keyboardShortcuts, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n const resolvedShortcuts = getKeyboardShortcuts(keyboardShortcuts);\n\n const [key, setKey] = useState<typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null>(null);\n useTheme({ theme: props.theme });\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n isAppleDevice() ? setKey(ACTION_KEY_APPLE) : setKey(ACTION_KEY_DEFAULT);\n }\n }, []);\n\n const [actionKeyReactsTo, actionKeyAltText, actionKeyLabel] =\n key === ACTION_KEY_DEFAULT\n ? ([ACTION_KEY_DEFAULT, 'Control', 'Ctrl'] as const)\n : (['Meta', 'Meta', '⌘'] as const);\n\n const isCtrlCmdKEnabled = resolvedShortcuts['Ctrl/Cmd+K'];\n const shortcut = `${actionKeyAltText}+k`;\n\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={isCtrlCmdKEnabled ? `${buttonAriaLabel} (${shortcut})` : buttonAriaLabel}\n aria-keyshortcuts={isCtrlCmdKEnabled ? shortcut : undefined}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n <span className=\"DocSearch-Button-Keys\">\n {key !== null && isCtrlCmdKEnabled && (\n <>\n <DocSearchButtonKey reactsToKey={actionKeyReactsTo}>{actionKeyLabel}</DocSearchButtonKey>\n <DocSearchButtonKey reactsToKey=\"k\">K</DocSearchButtonKey>\n </>\n )}\n </span>\n </button>\n );\n },\n);\n\ntype DocSearchButtonKeyProps = {\n reactsToKey?: string;\n};\n\nfunction DocSearchButtonKey({ reactsToKey, children }: React.PropsWithChildren<DocSearchButtonKeyProps>): JSX.Element {\n const [isKeyDown, setIsKeyDown] = useState(false);\n\n useEffect(() => {\n if (!reactsToKey) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === reactsToKey) {\n setIsKeyDown(true);\n }\n }\n\n function handleKeyUp(e: KeyboardEvent): void {\n if (\n e.key === reactsToKey ||\n // keyup doesn't fire when Command is held down,\n // workaround is to mark key as also released when Command is released\n // See https://stackoverflow.com/a/73419500\n e.key === 'Meta'\n ) {\n setIsKeyDown(false);\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return (): void => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [reactsToKey]);\n\n return (\n <kbd\n className={\n isKeyDown\n ? 'DocSearch-Button-Key DocSearch-Button-Key--pressed'\n : 'DocSearch-Button-Key' + (reactsToKey === 'Ctrl' ? ' DocSearch-Button-Key--ctrl' : '')\n }\n >\n {children}\n </kbd>\n );\n}\n"],"names":["DEFAULT_KEYBOARD_SHORTCUTS","SearchIcon","_ref","_ref$size","size","undefined","_ref$color","color","React","createElement","width","height","className","viewBox","cx","cy","r","stroke","fill","strokeWidth","d","strokeLinecap","strokeLinejoin","ACTION_KEY_DEFAULT","DocSearchButton","forwardRef","ref","userShortcuts","t","m","_ref$translations","translations","keyboardShortcuts","props","_objectWithoutProperties","_excluded","_translations$buttonT","buttonText","_translations$buttonA","buttonAriaLabel","resolvedShortcuts","_objectSpread","_useState2","_slicedToArray","useState","key","setKey","theme","e","document","documentElement","dataset","useEffect","navigator","test","platform","_ref3","actionKeyReactsTo","actionKeyAltText","actionKeyLabel","isCtrlCmdKEnabled","shortcut","concat","_extends","type","Fragment","DocSearchButtonKey","reactsToKey","_ref4","children","_useState4","isKeyDown","setIsKeyDown","window","addEventListener","handleKeyDown","handleKeyUp","removeEventListener"],"mappings":"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"}
1
+ {"version":3,"file":"DocsearchButton.js","sources":["../../../docsearch-core/dist/esm/useTheme.js","../../src/constants/keyboardShortcuts.ts","../../src/icons/SearchIcon.tsx","../../src/utils/keyboard.ts","../../src/DocSearchButton.tsx"],"sourcesContent":["import{useEffect as e}from\"react\";var t=function(t){var m=t.theme;e(function(){if(m){var e=document.documentElement.dataset.theme;if(m!==e)return document.documentElement.dataset.theme=m,function(){void 0===e?delete document.documentElement.dataset.theme:document.documentElement.dataset.theme=e}}},[m])};export{t as useTheme};\n","import type { KeyboardShortcuts } from '../types';\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} 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 getKeyboardShortcuts(userShortcuts?: KeyboardShortcuts): Required<KeyboardShortcuts> {\n return {\n ...DEFAULT_KEYBOARD_SHORTCUTS,\n ...userShortcuts,\n };\n}\n","import React, { type JSX } from 'react';\n\ninterface SearchIconProps {\n size?: number;\n color?: string;\n}\n\nexport function SearchIcon({ size = 20, color = 'currentColor' }: SearchIconProps): JSX.Element {\n return (\n <svg width={size} height={size} className=\"DocSearch-Search-Icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke={color} fill=\"none\" strokeWidth=\"1.4\" />\n <path d=\"m21 21-4.3-4.3\" stroke={color} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","export const ACTION_KEY_DEFAULT = 'Ctrl';\nexport const ACTION_KEY_APPLE = '⌘';\n\nexport function isAppleDevice(): boolean {\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n}\n","import type { DocSearchModalShortcuts } from '@docsearch/core';\nimport { useTheme } from '@docsearch/core/useTheme';\nimport React, { useEffect, useState, type JSX } from 'react';\n\nimport { getKeyboardShortcuts } from './constants/keyboardShortcuts';\nimport { SearchIcon } from './icons/SearchIcon';\nimport type { DocSearchTheme } from './types';\nimport { ACTION_KEY_APPLE, ACTION_KEY_DEFAULT, isAppleDevice } from './utils';\n\nexport type ButtonTranslations = Partial<{\n buttonText: string;\n buttonAriaLabel: string;\n}>;\n\nexport type DocSearchButtonProps = React.ComponentProps<'button'> & {\n theme?: DocSearchTheme;\n translations?: ButtonTranslations;\n keyboardShortcuts?: DocSearchModalShortcuts;\n};\n\nexport const DocSearchButton = React.forwardRef<HTMLButtonElement, DocSearchButtonProps>(\n ({ translations = {}, keyboardShortcuts, ...props }, ref) => {\n const { buttonText = 'Search', buttonAriaLabel = 'Search' } = translations;\n const resolvedShortcuts = getKeyboardShortcuts(keyboardShortcuts);\n\n const [key, setKey] = useState<typeof ACTION_KEY_APPLE | typeof ACTION_KEY_DEFAULT | null>(null);\n useTheme({ theme: props.theme });\n useEffect(() => {\n if (typeof navigator !== 'undefined') {\n isAppleDevice() ? setKey(ACTION_KEY_APPLE) : setKey(ACTION_KEY_DEFAULT);\n }\n }, []);\n\n const [actionKeyReactsTo, actionKeyAltText, actionKeyLabel] =\n key === ACTION_KEY_DEFAULT\n ? ([ACTION_KEY_DEFAULT, 'Control', 'Ctrl'] as const)\n : (['Meta', 'Meta', '⌘'] as const);\n\n const isCtrlCmdKEnabled = resolvedShortcuts['Ctrl/Cmd+K'];\n const shortcut = `${actionKeyAltText}+k`;\n\n return (\n <button\n type=\"button\"\n className=\"DocSearch DocSearch-Button\"\n aria-label={isCtrlCmdKEnabled ? `${buttonAriaLabel} (${shortcut})` : buttonAriaLabel}\n aria-keyshortcuts={isCtrlCmdKEnabled ? shortcut : undefined}\n {...props}\n ref={ref}\n >\n <span className=\"DocSearch-Button-Container\">\n <SearchIcon />\n <span className=\"DocSearch-Button-Placeholder\">{buttonText}</span>\n </span>\n\n <span className=\"DocSearch-Button-Keys\">\n {key !== null && isCtrlCmdKEnabled && (\n <>\n <DocSearchButtonKey reactsToKey={actionKeyReactsTo}>{actionKeyLabel}</DocSearchButtonKey>\n <DocSearchButtonKey reactsToKey=\"k\">K</DocSearchButtonKey>\n </>\n )}\n </span>\n </button>\n );\n },\n);\n\ntype DocSearchButtonKeyProps = {\n reactsToKey?: string;\n};\n\nfunction DocSearchButtonKey({ reactsToKey, children }: React.PropsWithChildren<DocSearchButtonKeyProps>): JSX.Element {\n const [isKeyDown, setIsKeyDown] = useState(false);\n\n useEffect(() => {\n if (!reactsToKey) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent): void {\n if (e.key === reactsToKey) {\n setIsKeyDown(true);\n }\n }\n\n function handleKeyUp(e: KeyboardEvent): void {\n if (\n e.key === reactsToKey ||\n // keyup doesn't fire when Command is held down,\n // workaround is to mark key as also released when Command is released\n // See https://stackoverflow.com/a/73419500\n e.key === 'Meta'\n ) {\n setIsKeyDown(false);\n }\n }\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return (): void => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [reactsToKey]);\n\n return (\n <kbd\n className={\n isKeyDown\n ? 'DocSearch-Button-Key DocSearch-Button-Key--pressed'\n : 'DocSearch-Button-Key' + (reactsToKey === 'Ctrl' ? ' DocSearch-Button-Key--ctrl' : '')\n }\n >\n {children}\n </kbd>\n );\n}\n"],"names":["DEFAULT_KEYBOARD_SHORTCUTS","SearchIcon","_ref","_ref$size","size","_ref$color","color","React","createElement","width","height","className","viewBox","cx","cy","r","stroke","fill","strokeWidth","d","strokeLinecap","strokeLinejoin","ACTION_KEY_DEFAULT","DocSearchButton","forwardRef","ref","userShortcuts","t","m","_ref$translations","translations","keyboardShortcuts","props","_objectWithoutProperties","_excluded","_translations$buttonT","buttonText","_translations$buttonA","buttonAriaLabel","resolvedShortcuts","_objectSpread","_useState2","_slicedToArray","useState","key","setKey","theme","e","document","documentElement","dataset","useEffect","navigator","test","platform","_ref3","actionKeyReactsTo","actionKeyAltText","actionKeyLabel","isCtrlCmdKEnabled","shortcut","concat","_extends","type","undefined","Fragment","DocSearchButtonKey","reactsToKey","_ref4","children","_useState4","isKeyDown","setIsKeyDown","window","addEventListener","handleKeyDown","handleKeyUp","removeEventListener"],"mappings":"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"}