diff --git a/apps/docs/src/app/components/docsearch/docsearch.directive.spec.ts b/apps/docs/src/app/components/docsearch/docsearch.directive.spec.ts
deleted file mode 100644
index 5b3a7f80a0..0000000000
--- a/apps/docs/src/app/components/docsearch/docsearch.directive.spec.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Component } from '@angular/core';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { DocsDocsearchDirective } from './docsearch.directive';
-
-@Component({
- imports: [DocsDocsearchDirective],
- template: ''
-})
-class TestApp {}
-
-const render = (): ComponentFixture => {
- TestBed.configureTestingModule({ imports: [TestApp] }).compileComponents();
- const fixture = TestBed.createComponent(TestApp);
-
- fixture.autoDetectChanges();
-
- return fixture;
-};
-
-const getDocsearchButton = (): HTMLButtonElement => {
- return document.getElementsByClassName('DocSearch-Button')[0] as HTMLButtonElement;
-};
-
-const getDocsearchModal = (): HTMLDivElement => {
- return document.getElementsByClassName('DocSearch-Modal')[0] as HTMLDivElement;
-};
-
-describe(DocsDocsearchDirective.name, () => {
- it(`should render docsearch button`, async () => {
- render();
- expect(getDocsearchButton()).toBeInstanceOf(HTMLButtonElement);
- });
-
- it(`should open docsearch modal`, async () => {
- render();
- expect(getDocsearchModal()).toBeUndefined();
- getDocsearchButton().click();
- expect(getDocsearchModal()).toBeInstanceOf(HTMLDivElement);
- });
-});
diff --git a/apps/docs/src/app/components/docsearch/docsearch.directive.ts b/apps/docs/src/app/components/docsearch/docsearch.directive.ts
index 77510560f4..3ef3245141 100644
--- a/apps/docs/src/app/components/docsearch/docsearch.directive.ts
+++ b/apps/docs/src/app/components/docsearch/docsearch.directive.ts
@@ -1,26 +1,115 @@
import { afterNextRender, DestroyRef, Directive, inject } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
-import docsearch from '@docsearch/js';
-import { isMac, KBQ_WINDOW } from '@koobiq/components/core';
+import docsearch, { DocSearchInstance, DocSearchProps } from '@docsearch/js';
+import { KBQ_WINDOW, ThemeService } from '@koobiq/components/core';
+import { combineLatest } from 'rxjs';
+import { distinctUntilChanged, map } from 'rxjs/operators';
import { docsIsRuLocale, DocsLocaleState } from '../../services/locale';
-type DocsDocsearchProps = Parameters[0];
-
const SELECTOR = 'docs-docsearch';
-
const HOST = 'koobiq.io';
-
const PROTOCOL = 'https:';
-const CONFIG: DocsDocsearchProps = {
- container: SELECTOR,
- appId: '7N2W9AKEM6',
- apiKey: '0f0df042e7b349df5cb381e72f268b4d',
- indexName: 'koobiq',
- maxResultsPerGroup: 20,
- disableUserPersonalization: false,
- resultsFooterComponent: () => null
-} as const;
+type AnyFunction = (...args: any[]) => any;
+
+/**
+ * Forces every non-function translation leaf to be provided so a newly added key
+ * (e.g. from enabling Ask AI) fails at compile time instead of silently rendering
+ * an empty string in the UI. Function-valued overrides stay optional since they
+ * have no meaningful "required" value.
+ */
+type DeepRequired = T extends AnyFunction
+ ? T
+ : T extends object
+ ? { [K in keyof T as T[K] extends AnyFunction | undefined ? never : K]-?: DeepRequired } & {
+ [K in keyof T as T[K] extends AnyFunction | undefined ? K : never]?: T[K];
+ }
+ : T;
+
+const TRANSLATION_RU: DeepRequired> = {
+ button: {
+ buttonText: 'Поиск',
+ buttonAriaLabel: 'Поиск'
+ },
+ modal: {
+ searchBox: {
+ clearButtonTitle: 'Очистить запрос',
+ clearButtonAriaLabel: 'Очистить запрос',
+ closeButtonText: 'Отмена',
+ closeButtonAriaLabel: 'Отмена',
+ placeholderText: 'Поиск в документации',
+ placeholderTextAskAi: 'Задайте вопрос ИИ-ассистенту',
+ placeholderTextAskAiStreaming: 'Получаем ответ…',
+ enterKeyHint: 'Enter',
+ enterKeyHintAskAi: 'Enter',
+ searchInputLabel: 'Поиск',
+ backToKeywordSearchButtonText: 'Вернуться к поиску',
+ backToKeywordSearchButtonAriaLabel: 'Вернуться к поиску',
+ newConversationPlaceholder: 'Задайте новый вопрос',
+ conversationHistoryTitle: 'История диалогов',
+ startNewConversationText: 'Начать новый диалог',
+ viewConversationHistoryText: 'Показать историю диалогов',
+ threadDepthErrorPlaceholder: 'Достигнута максимальная длина диалога'
+ },
+ newConversation: {
+ newConversationTitle: 'Новый диалог с ИИ',
+ newConversationDescription: 'Задайте вопрос, и ИИ-ассистент найдёт ответ в документации'
+ },
+ startScreen: {
+ recentSearchesTitle: 'Недавние',
+ noRecentSearchesText: 'Нет недавних поисков',
+ saveRecentSearchButtonTitle: 'Сохранить этот поиск',
+ removeRecentSearchButtonTitle: 'Удалить этот поиск из истории',
+ favoriteSearchesTitle: 'Избранное',
+ removeFavoriteSearchButtonTitle: 'Удалить этот поиск из избранного',
+ recentConversationsTitle: 'Недавние диалоги',
+ removeRecentConversationButtonTitle: 'Удалить этот диалог из истории'
+ },
+ errorScreen: {
+ titleText: 'Не удалось получить результаты',
+ helpText: 'Возможно, вам следует проверить соединение с интернетом.'
+ },
+ footer: {
+ selectText: 'Выбрать',
+ submitQuestionText: 'Задать вопрос',
+ selectKeyAriaLabel: 'Клавиша Enter',
+ navigateText: 'Вниз (вверх)',
+ navigateUpKeyAriaLabel: 'Клавиша стрелка вверх',
+ navigateDownKeyAriaLabel: 'Клавиша стрелка вниз',
+ closeText: 'Закрыть',
+ backToSearchText: 'Вернуться к поиску',
+ closeKeyAriaLabel: 'Клавиша Escape',
+ poweredByText: 'Работает на'
+ },
+ noResultsScreen: {
+ noResultsText: 'Нет результатов для',
+ suggestedQueryText: 'Попробуйте поискать',
+ reportMissingResultsText: 'Считаете, что этот запрос должен вернуть результаты?',
+ reportMissingResultsLinkText: 'Сообщите нам.'
+ },
+ resultsScreen: {
+ askAiPlaceholder: 'Спросить ИИ-ассистента:',
+ noResultsAskAiPlaceholder: 'Спросить ИИ-ассистента вместо этого:'
+ },
+ askAiScreen: {
+ disclaimerText: 'Ответы ИИ-ассистента могут быть неточными. Проверяйте важную информацию.',
+ relatedSourcesText: 'Источники',
+ thinkingText: 'Думаю…',
+ copyButtonText: 'Копировать',
+ copyButtonCopiedText: 'Скопировано',
+ copyButtonTitle: 'Копировать ответ',
+ likeButtonTitle: 'Полезный ответ',
+ dislikeButtonTitle: 'Бесполезный ответ',
+ thanksForFeedbackText: 'Спасибо за отзыв!',
+ preToolCallText: 'Ищу',
+ duringToolCallText: 'Ищу',
+ afterToolCallText: 'Найдено по запросу',
+ stoppedStreamingText: 'Генерация ответа остановлена',
+ errorTitleText: 'Не удалось получить ответ',
+ startNewConversationButtonText: 'Начать новый диалог'
+ }
+ }
+};
/** Algolia DocSearch component implementation */
@Directive({
@@ -31,39 +120,58 @@ const CONFIG: DocsDocsearchProps = {
})
export class DocsDocsearchDirective extends DocsLocaleState {
private readonly window = inject(KBQ_WINDOW);
- /** should transform item URL to work docsearch on DEV stand */
- private readonly shouldTransformItemURL =
- this.window.location.host !== HOST || this.window.location.protocol !== PROTOCOL;
-
private readonly destroyRef = inject(DestroyRef);
+ private readonly theme = inject(ThemeService);
+
+ private instance: DocSearchInstance | null = null;
constructor() {
super();
afterNextRender(() => {
- this.initDocsearch();
+ this.init();
+ });
+
+ this.destroyRef.onDestroy(() => {
+ this.instance?.destroy();
+ this.instance = null;
});
}
- private initDocsearch(): void {
- this.docsLocaleService.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((locale) => {
- const _isRuLocale = docsIsRuLocale(locale);
-
- docsearch({
- ...CONFIG,
- searchParameters: {
- hitsPerPage: 40,
- facetFilters: [`lang:${locale}`]
- },
- placeholder: _isRuLocale ? 'Поиск' : 'Search',
- transformItems: this.transformItems,
- translations: this.translations(_isRuLocale)
+ private init(): void {
+ combineLatest([
+ this.theme.current.pipe(map((t) => t?.className.replace('kbq-', ''))).pipe(distinctUntilChanged()),
+ this.docsLocaleService.changes.pipe(distinctUntilChanged())
+ ])
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(([theme, locale]) => {
+ // docsearch() re-renders into the same container on every call (no full teardown),
+ // so calling it again just updates theme/locale in place; destroying first would
+ // unmount the modal (losing scroll/open state) and cause a visible flicker.
+ this.instance = docsearch({
+ container: SELECTOR,
+ appId: '7N2W9AKEM6',
+ apiKey: '0f0df042e7b349df5cb381e72f268b4d',
+ maxResultsPerGroup: 20,
+ theme: !theme || theme === 'light' ? 'light' : 'dark',
+ indices: [
+ { name: 'koobiq', searchParameters: { hitsPerPage: 40, facetFilters: [`lang:${locale}`] } }
+ ],
+ transformItems: this.transformItems,
+ translations: docsIsRuLocale(locale) ? TRANSLATION_RU : {},
+ askAi: {
+ assistantId: 'f6ddad78-2e0d-4f11-8cf0-d7e34c354d0e',
+ agentStudio: true
+ }
+ });
});
- });
}
- private readonly transformItems: DocsDocsearchProps['transformItems'] = (items) => {
- if (this.shouldTransformItemURL) {
+ private readonly transformItems: DocSearchProps['transformItems'] = (items) => {
+ // should transform item URL to work docsearch on DEV stand (firebase preview)
+ const shouldTransformItemURL = this.window.location.host !== HOST || this.window.location.protocol !== PROTOCOL;
+
+ if (shouldTransformItemURL) {
items = items.map((item) => {
item.url = item.url.replace(HOST, this.window.location.host);
item.url = item.url.replace(PROTOCOL, this.window.location.protocol);
@@ -73,7 +181,7 @@ export class DocsDocsearchDirective extends DocsLocaleState {
}
return items.filter((item) => {
- /** should hide hit, whose 'lvl2' header doesn't match with search query */
+ // should hide hit, whose 'lvl2' header doesn't match with search query
if (item.type === 'lvl2') {
const { matchLevel } =
item._highlightResult?.hierarchy.lvl2 || item._snippetResult?.hierarchy.lvl2 || {};
@@ -84,60 +192,4 @@ export class DocsDocsearchDirective extends DocsLocaleState {
return item;
});
};
-
- private readonly translations = (isRuLocale: boolean): DocsDocsearchProps['translations'] => {
- let buttonText = isRuLocale ? 'Поиск' : 'Search';
-
- buttonText += isMac() ? ' ⌘K' : ' Ctrl+K';
-
- return isRuLocale
- ? {
- button: {
- buttonText,
- buttonAriaLabel: 'Поиск'
- },
- modal: {
- searchBox: {
- resetButtonTitle: 'Очистить запрос',
- resetButtonAriaLabel: 'Очистить запрос',
- cancelButtonText: 'Отмена',
- cancelButtonAriaLabel: 'Отмена',
- searchInputLabel: 'Поиск'
- },
- startScreen: {
- recentSearchesTitle: 'Недавние',
- noRecentSearchesText: 'Нет недавних поисков',
- saveRecentSearchButtonTitle: 'Сохранить этот поиск',
- removeRecentSearchButtonTitle: 'Удалить этот поиск из истории',
- favoriteSearchesTitle: 'Избранное',
- removeFavoriteSearchButtonTitle: 'Удалить этот поиск из избранного'
- },
- errorScreen: {
- titleText: 'Не удалось получить результаты',
- helpText: 'Возможно, вам следует проверить соединение с интернетом.'
- },
- footer: {
- selectText: 'Выбрать',
- selectKeyAriaLabel: 'Клавиша Enter',
- navigateText: 'Вниз (вверх)',
- navigateUpKeyAriaLabel: 'Клавиша стрелка вверх',
- navigateDownKeyAriaLabel: 'Клавиша стрелка вниз',
- closeText: 'Закрыть',
- closeKeyAriaLabel: 'Клавиша Escape',
- searchByText: 'Поиск'
- },
- noResultsScreen: {
- noResultsText: 'Нет результатов для',
- suggestedQueryText: 'Попробуйте поискать',
- reportMissingResultsText: 'Считаете, что этот запрос должен вернуть результаты?',
- reportMissingResultsLinkText: 'Сообщите нам.'
- }
- }
- }
- : {
- button: {
- buttonText
- }
- };
- };
}
diff --git a/apps/docs/src/styles/_docsearch.scss b/apps/docs/src/styles/_docsearch.scss
index 8519091379..a21d4ac8b4 100644
--- a/apps/docs/src/styles/_docsearch.scss
+++ b/apps/docs/src/styles/_docsearch.scss
@@ -1,333 +1,6 @@
-/* stylelint-disable scss/at-extend-no-missing-placeholder */
-
@use '@docsearch/css/dist/style';
-@use '@koobiq/icons/fonts/kbq-icons';
-
-.DocSearch-Button {
- padding: 0 var(--kbq-size-m);
- margin: 0;
- border-radius: var(--kbq-size-s);
- border-width: var(--kbq-size-border-width);
- border-style: solid;
- border-color: var(--kbq-line-contrast-fade);
- color: inherit;
- font-size: 15px;
- line-height: var(--kbq-typography-text-normal-medium-line-height);
- font-weight: var(--kbq-typography-text-normal-medium-font-weight);
- font-family: var(--kbq-typography-text-normal-medium-font-family);
-
- &:focus-visible {
- outline: 1px solid var(--kbq-states-line-focus-theme);
- border-color: var(--kbq-states-line-focus-theme);
- }
-
- @media (width <= 768px) {
- border-color: transparent;
- }
-}
-
-.DocSearch-Button:hover {
- background-color: var(--kbq-states-background-transparent-hover);
-}
-
-.DocSearch-Button-Placeholder {
- font-size: inherit;
- padding: 0 var(--kbq-size-xs);
-}
-
-.DocSearch-Button-Container::before {
- @extend .kbq;
- @extend .kbq-magnifying-glass_16;
-
- @media (width <= 768px) {
- font-size: 20px;
- }
-}
-
-.DocSearch-Modal {
- border-radius: var(--kbq-size-s);
-
- @media (max-width: 768px) {
- height: calc(var(--docsearch-vh, 1vh) * 85);
- }
-}
.DocSearch-Container {
- // more than `.cdk-overlay-pane` z-index
+ // higher than kbq-top-bar
z-index: 1001;
-
- @media (max-width: 768px) {
- display: flex;
- align-items: flex-end;
- }
-}
-
-.DocSearch-SearchBar {
- padding: 0;
- border-bottom-width: 1px;
- border-bottom-style: solid;
- border-bottom-color: var(--kbq-line-contrast-fade);
-}
-
-.DocSearch-Form {
- border-radius: var(--kbq-size-s) var(--kbq-size-s) 0 0;
-}
-
-.DocSearch-MagnifierLabel::before {
- @extend .kbq;
- @extend .kbq-magnifying-glass_16;
-
- color: var(--kbq-icon-contrast-fade);
-}
-
-.DocSearch-Input {
- font-size: 15px;
- padding-left: var(--kbq-size-xs);
-
- @media (max-width: 768px) {
- font-size: 16px;
- }
-}
-
-.DocSearch-Input::placeholder {
- color: var(--kbq-foreground-contrast-tertiary);
-}
-
-.DocSearch-Reset::before {
- @extend .kbq;
- @extend .kbq-circle-xmark_16;
-}
-
-.DocSearch-Reset:hover {
- color: var(--kbq-states-icon-contrast-fade-hover);
-}
-
-.DocSearch-Logo a {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.DocSearch-Dropdown {
- min-height: 0;
- scrollbar-color: var(--docsearch-icon-color);
- padding: 0 var(--kbq-size-s) var(--kbq-size-xxl) var(--kbq-size-s);
-
- @media (max-width: 768px) {
- max-height: calc(
- var(--docsearch-vh, 1vh) * 85 - var(--docsearch-searchbox-height) - var(--docsearch-footer-height)
- );
- }
-}
-
-.DocSearch-Dropdown-Container {
- padding-top: var(--kbq-size-s);
-}
-
-.DocSearch-Hit {
- border-radius: var(--kbq-size-s);
- padding-bottom: 0;
-}
-
-.DocSearch-Hit a {
- padding-left: var(--kbq-size-l);
- border-radius: var(--kbq-size-s);
- outline-offset: -1px;
- outline-width: 1px;
-}
-
-.DocSearch-Hit[aria-selected='true'] a {
- background-color: var(--kbq-states-background-transparent-active);
-}
-
-.DocSearch-Hit mark,
-.DocSearch-Hit[aria-selected='true'] mark {
- text-decoration: none;
- color: var(--kbq-foreground-warning) !important;
-}
-
-.DocSearch-Hit-action {
- width: auto;
- height: auto;
-}
-
-.DocSearch-Hit .DocSearch-Hit-title mark {
- background-color: var(--kbq-background-warning-fade);
-}
-
-.DocSearch-Hit-Container {
- padding-right: var(--kbq-size-l);
-}
-
-.DocSearch-Hit-content-wrapper {
- font-size: 16px;
- font-weight: 400;
- line-height: 24px;
- width: auto;
- margin: 0 0 0 var(--kbq-size-l);
-}
-
-.DocSearch-Hit-source {
- font-size: 15px;
- font-weight: 600;
- line-height: 20px;
- letter-spacing: -0.14px;
- margin: 0;
- padding: var(--kbq-size-xs) var(--kbq-size-m);
-
- // safari bug:
- // https://github.com/algolia/docsearch/issues/1477
- position: relative;
-}
-
-.DocSearch-Hit-title {
- font-size: 15px;
- font-weight: 400;
- line-height: 20px;
- overflow: inherit;
- text-overflow: inherit;
-}
-
-.DocSearch-Hit-path {
- font-size: 13px;
- line-height: 16px;
- letter-spacing: 0.005em;
-}
-
-.DocSearch-Footer {
- border-radius: 0 0 var(--kbq-size-s) var(--kbq-size-s);
- border-top-width: 1px;
- border-top-style: solid;
- border-top-color: var(--kbq-line-contrast-fade);
-}
-
-.DocSearch-Commands li {
- margin-right: var(--kbq-size-l);
-}
-
-.DocSearch-Commands-Key {
- border-radius: 6px;
- width: var(--kbq-size-xxl);
- height: var(--kbq-size-xxl);
- padding: var(--kbq-size-3xs) var(--kbq-size-xxs);
- margin-right: var(--kbq-size-xs);
-}
-
-.DocSearch-Label {
- font-size: 12px;
- line-height: 16px;
- letter-spacing: 0.01em;
-}
-
-.DocSearch-StartScreen .DocSearch-Help,
-.DocSearch-NoResults .DocSearch-Title {
- font-size: 15px;
- font-weight: 400;
- line-height: 24px;
-}
-
-.DocSearch-NoResults .DocSearch-Title strong {
- font-weight: inherit;
-}
-
-.DocSearch-Hit-Select-Icon,
-.DocSearch-Button-Keys,
-.DocSearch-Cancel,
-.DocSearch-Button-Container svg,
-.DocSearch-MagnifierLabel svg,
-.DocSearch-Reset svg,
-.DocSearch-Screen-Icon,
-.DocSearch-NoResults-Prefill-List {
- display: none !important;
-}
-
-body.kbq-light {
- --docsearch-primary-color: inherit;
- --docsearch-text-color: var(--kbq-foreground-contrast);
- --docsearch-spacing: var(--kbq-size-xxl);
- --docsearch-highlight-color: inherit;
- --docsearch-muted-color: var(--kbq-foreground-contrast-secondary);
- --docsearch-container-background: var(--kbq-background-overlay);
- --docsearch-icon-color: var(--kbq-icon-contrast-fade);
- --docsearch-modal-width: 640px;
- --docsearch-modal-height: 550px;
- --docsearch-modal-background: var(--kbq-background-bg);
- --docsearch-modal-shadow: none;
- --docsearch-searchbox-height: var(--kbq-size-5xl);
- --docsearch-searchbox-background: var(--kbq-background-card);
- --docsearch-searchbox-focus-background: var(--kbq-background-bg);
- --docsearch-searchbox-shadow: none;
- --docsearch-hit-height: var(--kbq-size-6xl);
- --docsearch-hit-color: var(--kbq-foreground-contrast);
- --docsearch-hit-active-color: var(--kbq-foreground-contrast);
- --docsearch-hit-background: var(--kbq-background-card);
- --docsearch-hit-shadow: none;
- --docsearch-key-gradient: var(--kbq-background-contrast-fade);
- --docsearch-key-shadow: none;
- --docsearch-key-pressed-shadow: none;
- --docsearch-footer-height: var(--kbq-size-5xl);
- --docsearch-footer-background: var(--kbq-background-bg);
- --docsearch-footer-shadow: none;
-}
-
-body.kbq-dark {
- --docsearch-highlight-color: inherit;
- --docsearch-icon-color: var(--kbq-icon-contrast-fade);
- --docsearch-text-color: var(--kbq-foreground-contrast);
- --docsearch-container-background: var(--kbq-background-overlay);
- --docsearch-modal-background: var(--kbq-background-card);
- --docsearch-modal-shadow: none;
- --docsearch-searchbox-background: var(--kbq-background-card);
- --docsearch-searchbox-focus-background: var(--kbq-background-bg);
- --docsearch-hit-color: var(--kbq-foreground-contrast);
- --docsearch-hit-shadow: none;
- --docsearch-hit-background: var(--kbq-background-card);
- --docsearch-key-gradient: var(--kbq-background-contrast-fade);
- --docsearch-key-shadow: none;
- --docsearch-key-pressed-shadow: none;
- --docsearch-footer-background: var(--kbq-background-card);
- --docsearch-footer-shadow: none;
- --docsearch-muted-color: var(--kbq-foreground-contrast-secondary);
- --docsearch-hit-active-color: var(--kbq-foreground-contrast);
-
- .DocSearch-Button {
- border-color: var(--kbq-line-contrast-fade);
- }
-
- .DocSearch-Button:hover {
- background-color: var(--kbq-states-background-transparent-hover);
- }
-
- .DocSearch-SearchBar {
- border-bottom-color: var(--kbq-line-contrast-fade);
- }
-
- .DocSearch-MagnifierLabel {
- color: var(--kbq-icon-contrast-fade);
- }
-
- .DocSearch-Input::placeholder {
- color: var(--kbq-foreground-contrast-tertiary);
- }
-
- .DocSearch-Reset:hover {
- color: var(--kbq-states-icon-contrast-fade-hover);
- }
-
- .DocSearch-Hit[aria-selected='true'] a {
- background-color: var(--kbq-states-background-transparent-active);
- }
-
- .DocSearch-Hit mark,
- .DocSearch-Hit[aria-selected='true'] mark {
- color: var(--kbq-foreground-warning) !important;
- }
-
- .DocSearch-Hit .DocSearch-Hit-title mark {
- background-color: var(--kbq-background-warning-fade);
- }
-
- .DocSearch-Footer {
- border-top-color: var(--kbq-line-contrast-fade);
- }
}
diff --git a/package.json b/package.json
index b7a878862c..ae88fb1d0f 100644
--- a/package.json
+++ b/package.json
@@ -25,8 +25,8 @@
"@angular/core": "20.3.25",
"@angular/forms": "20.3.25",
"@angular/platform-browser": "20.3.25",
- "@docsearch/css": "^3.9.0",
- "@docsearch/js": "^3.9.0",
+ "@docsearch/css": "^4.6.3",
+ "@docsearch/js": "^4.6.3",
"@fontsource/inter": "^5.2.8",
"@fontsource/jetbrains-mono": "^5.2.6",
"@koobiq/ag-grid-angular-theme": "^34.4.0",
diff --git a/yarn.lock b/yarn.lock
index bcb59a7597..401bad390e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -24,61 +24,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/autocomplete-core@npm:1.17.9":
- version: 1.17.9
- resolution: "@algolia/autocomplete-core@npm:1.17.9"
- dependencies:
- "@algolia/autocomplete-plugin-algolia-insights": "npm:1.17.9"
- "@algolia/autocomplete-shared": "npm:1.17.9"
- checksum: 10c0/e1111769a8723b9dd45fc38cd7edc535c86c1f908b84b5fdc5de06ba6b8c7aca14e5f52ebce84fa5f7adf857332e396b93b7e7933b157b2c9aefc0a19d9574ab
- languageName: node
- linkType: hard
-
-"@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9":
- version: 1.17.9
- resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9"
- dependencies:
- "@algolia/autocomplete-shared": "npm:1.17.9"
- peerDependencies:
- search-insights: ">= 1 < 3"
- checksum: 10c0/05c21502631643abdcd6e9f70b5814a60d34bad59bca501e26e030fd72e689be5cecfb6e8939a0a1bdcb2394591e55e26a42a82c7247528eafeff714db0819a4
- languageName: node
- linkType: hard
-
-"@algolia/autocomplete-preset-algolia@npm:1.17.9":
- version: 1.17.9
- resolution: "@algolia/autocomplete-preset-algolia@npm:1.17.9"
- dependencies:
- "@algolia/autocomplete-shared": "npm:1.17.9"
- peerDependencies:
- "@algolia/client-search": ">= 4.9.1 < 6"
- algoliasearch: ">= 4.9.1 < 6"
- checksum: 10c0/99159c7e02a927d0d96717cb4cfd2f8dbc4da73267a8eae4f83af5bf74087089f6e7dbffd316512e713a4cc534e936b6a7ccb5c4a5ff84b4bf73f2d3cc050e79
- languageName: node
- linkType: hard
-
-"@algolia/autocomplete-shared@npm:1.17.9":
- version: 1.17.9
- resolution: "@algolia/autocomplete-shared@npm:1.17.9"
- peerDependencies:
- "@algolia/client-search": ">= 4.9.1 < 6"
- algoliasearch: ">= 4.9.1 < 6"
- checksum: 10c0/b318281aecdaae09171b47ee4f7bc66b613852cad4506e9d6278fff35ba68a12dd9cce2d90b5f4c3ba0e3d7d780583cbe46b22275260e41bbf09fb01e4a18f49
- languageName: node
- linkType: hard
-
-"@algolia/client-abtesting@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-abtesting@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/614044c066e34cbc41b74a2242c3b0a08e952e96f90e0f2afbcd04711cf29fa88dea211f15bcef162bfd15b3f27555641bff229618cdf45bb83fe7c48100a7bf
- languageName: node
- linkType: hard
-
"@algolia/client-abtesting@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-abtesting@npm:5.35.0"
@@ -91,18 +36,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-analytics@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-analytics@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/76068a9558df85c469c77a8facd10927800c347363b1b73e43fbecc3e2de9d1404e0c3769c1e2d7e4670f0b435c819f239f5399d81728a9d735b72f9a1a9df53
- languageName: node
- linkType: hard
-
"@algolia/client-analytics@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-analytics@npm:5.35.0"
@@ -115,13 +48,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-common@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-common@npm:5.25.0"
- checksum: 10c0/e75370c9e5353badcd322db3b573a1f1cad1dbe5e576552e940c3db848778cd0849a028894da3f08dc551e3a53d1613239bc8cb06eef6dd4734e93ce5f49a895
- languageName: node
- linkType: hard
-
"@algolia/client-common@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-common@npm:5.35.0"
@@ -129,18 +55,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-insights@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-insights@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/8bbabcf7a86a649932b56525843d2b431c89077576e939832152859be398e9bf31a54b6c1565086b9e66deef045216d85adac8edcf538ebc9bcefc80f1a9711d
- languageName: node
- linkType: hard
-
"@algolia/client-insights@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-insights@npm:5.35.0"
@@ -153,18 +67,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-personalization@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-personalization@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/0d937519adbf0231e985718e32e7b0e54d15d30a01bd0491c357eb937a4ebb44a6b8024de736cb1da5919ca23e10a6dbb1bdda06ed46848e15d1bb3a9533f0fc
- languageName: node
- linkType: hard
-
"@algolia/client-personalization@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-personalization@npm:5.35.0"
@@ -177,18 +79,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-query-suggestions@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-query-suggestions@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/84f327d0bd98c2da8b37d3c51712baa794d44e78fd7e60f372899b882ac4d02e1836df27ed397dcb3deede820c7a8f20d1c043378166baaf1f855c89551cc5fd
- languageName: node
- linkType: hard
-
"@algolia/client-query-suggestions@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-query-suggestions@npm:5.35.0"
@@ -201,18 +91,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/client-search@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/client-search@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/5a09f4e66aa802ec7a292595f8d08dcd7de12683d0ddde1feb640062011dbd8bd8b521627f7c904e27e0f3e80ad8a451e58e0bc790b0f2e4faf4e55dfe2df297
- languageName: node
- linkType: hard
-
"@algolia/client-search@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/client-search@npm:5.35.0"
@@ -225,18 +103,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/ingestion@npm:1.25.0":
- version: 1.25.0
- resolution: "@algolia/ingestion@npm:1.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/6c2ffddaabfa62a87c45917ddd311d12adca1263de22be4c9023e7d526cc43c2a6fe1a5ea28f46a118762bd8a143bba903aded9ba3c70953e6f6af67e6b9e12f
- languageName: node
- linkType: hard
-
"@algolia/ingestion@npm:1.35.0":
version: 1.35.0
resolution: "@algolia/ingestion@npm:1.35.0"
@@ -249,18 +115,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/monitoring@npm:1.25.0":
- version: 1.25.0
- resolution: "@algolia/monitoring@npm:1.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/d28b0af9ff0e864ad8ada43e735d763052b605410813c26ea595c21b9a3bcc323ebf3b04e810bc23cc8c28840952dbda7d111d583b8884e91e5692a14ad427e8
- languageName: node
- linkType: hard
-
"@algolia/monitoring@npm:1.35.0":
version: 1.35.0
resolution: "@algolia/monitoring@npm:1.35.0"
@@ -273,18 +127,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/recommend@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/recommend@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/cfab69aec97096ac4db3fb7a20af3e6263362ad65100e33f1523ddfdb37a3bd1ca8d4002e83f8b52009ca5650cb9486e9e38410fb0f0b49336cd8c2bed58cd0e
- languageName: node
- linkType: hard
-
"@algolia/recommend@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/recommend@npm:5.35.0"
@@ -297,15 +139,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/requester-browser-xhr@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/requester-browser-xhr@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- checksum: 10c0/c190525b68d7d255568d20e6024094bb8b273f3234f698e4da52edb97697cddb5df99038f5dc780a54da9c89837c8e6d81e2e230ab2f819b6ec689ebbabd049a
- languageName: node
- linkType: hard
-
"@algolia/requester-browser-xhr@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/requester-browser-xhr@npm:5.35.0"
@@ -315,15 +148,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/requester-fetch@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/requester-fetch@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- checksum: 10c0/126ed1c1cd6033a979da071018a5a1ada00df87e7ef5196385b6f241ca8f41f77c40827461a1aa04612a75ba651786c50b8e7a9f7636ba58b723c8bf8fd039a1
- languageName: node
- linkType: hard
-
"@algolia/requester-fetch@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/requester-fetch@npm:5.35.0"
@@ -333,15 +157,6 @@ __metadata:
languageName: node
linkType: hard
-"@algolia/requester-node-http@npm:5.25.0":
- version: 5.25.0
- resolution: "@algolia/requester-node-http@npm:5.25.0"
- dependencies:
- "@algolia/client-common": "npm:5.25.0"
- checksum: 10c0/310ecc88d6769b67d1959dfb11554699759ad358ce88b20edbe82cc007511efda3777451b3194ff26a600dc41bfe49588a74168c3f122302b945fe4e2e8b2063
- languageName: node
- linkType: hard
-
"@algolia/requester-node-http@npm:5.35.0":
version: 5.35.0
resolution: "@algolia/requester-node-http@npm:5.35.0"
@@ -4227,46 +4042,17 @@ __metadata:
languageName: node
linkType: hard
-"@docsearch/css@npm:3.9.0, @docsearch/css@npm:^3.9.0":
- version: 3.9.0
- resolution: "@docsearch/css@npm:3.9.0"
- checksum: 10c0/6300551e1cab7a5487063ec3581ae78ddaee3d93ec799556b451054448559b3ba849751b825fbd8b678367ef944bd82b3f11bc1d9e74e08e3cc48db40487b396
- languageName: node
- linkType: hard
-
-"@docsearch/js@npm:^3.9.0":
- version: 3.9.0
- resolution: "@docsearch/js@npm:3.9.0"
- dependencies:
- "@docsearch/react": "npm:3.9.0"
- preact: "npm:^10.0.0"
- checksum: 10c0/f96b9d452c87ada7ff368138442da96b8daa33f4edd956ed14209d284e267eb546ad20a85fa6f70352fc4bf530293635978329ca12a40aacf4e2d0595e91d61e
+"@docsearch/css@npm:^4.6.3":
+ version: 4.6.3
+ resolution: "@docsearch/css@npm:4.6.3"
+ checksum: 10c0/10c1282f102332915eaced15b16422d6aeb6b845311483e73d0f789fdc9c0913278adfa9f6ab29c856d769eafd1598d3271d6ef7059d74bec9d3f3c53a29f132
languageName: node
linkType: hard
-"@docsearch/react@npm:3.9.0":
- version: 3.9.0
- resolution: "@docsearch/react@npm:3.9.0"
- dependencies:
- "@algolia/autocomplete-core": "npm:1.17.9"
- "@algolia/autocomplete-preset-algolia": "npm:1.17.9"
- "@docsearch/css": "npm:3.9.0"
- algoliasearch: "npm:^5.14.2"
- peerDependencies:
- "@types/react": ">= 16.8.0 < 20.0.0"
- react: ">= 16.8.0 < 20.0.0"
- react-dom: ">= 16.8.0 < 20.0.0"
- search-insights: ">= 1 < 3"
- peerDependenciesMeta:
- "@types/react":
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- search-insights:
- optional: true
- checksum: 10c0/5e737a5d9ef1daae1cd93e89870214c1ab0c36a3a2193e898db044bcc5d9de59f85228b2360ec0e8f10cdac7fd2fe3c6ec8a05d943ee7e17d6c1cef2e6e9ff2d
+"@docsearch/js@npm:^4.6.3":
+ version: 4.6.3
+ resolution: "@docsearch/js@npm:4.6.3"
+ checksum: 10c0/90aecad104a4a14a2a6607f3ab4015dfb40ad0e2dfa85c49b924683f6493e7beae1575fcd3e880f1fa1f448c883a7e573800aee195edfba93d921f3a96f5bc4f
languageName: node
linkType: hard
@@ -10313,27 +10099,6 @@ __metadata:
languageName: node
linkType: hard
-"algoliasearch@npm:^5.14.2":
- version: 5.25.0
- resolution: "algoliasearch@npm:5.25.0"
- dependencies:
- "@algolia/client-abtesting": "npm:5.25.0"
- "@algolia/client-analytics": "npm:5.25.0"
- "@algolia/client-common": "npm:5.25.0"
- "@algolia/client-insights": "npm:5.25.0"
- "@algolia/client-personalization": "npm:5.25.0"
- "@algolia/client-query-suggestions": "npm:5.25.0"
- "@algolia/client-search": "npm:5.25.0"
- "@algolia/ingestion": "npm:1.25.0"
- "@algolia/monitoring": "npm:1.25.0"
- "@algolia/recommend": "npm:5.25.0"
- "@algolia/requester-browser-xhr": "npm:5.25.0"
- "@algolia/requester-fetch": "npm:5.25.0"
- "@algolia/requester-node-http": "npm:5.25.0"
- checksum: 10c0/fdf2b03c48415a7f284697bbe316bba41d4d6b0c5c76e886aa9841e69b8bc79305b0679d29dece71a347eef8ef3715980ed6a736febaca8f869b6551e470decf
- languageName: node
- linkType: hard
-
"angular-eslint@npm:^20.7.0":
version: 20.7.0
resolution: "angular-eslint@npm:20.7.0"
@@ -18297,8 +18062,8 @@ __metadata:
"@commitlint/config-conventional": "npm:^19.8.1"
"@cspell/dict-markdown": "npm:^2.0.17"
"@cspell/dict-ru_ru": "npm:^2.3.2"
- "@docsearch/css": "npm:^3.9.0"
- "@docsearch/js": "npm:^3.9.0"
+ "@docsearch/css": "npm:^4.6.3"
+ "@docsearch/js": "npm:^4.6.3"
"@eslint-community/eslint-plugin-eslint-comments": "npm:^4.5.0"
"@eslint/js": "npm:^9.0.0"
"@fontsource/inter": "npm:^5.2.8"
@@ -21673,13 +21438,6 @@ __metadata:
languageName: node
linkType: hard
-"preact@npm:^10.0.0":
- version: 10.22.0
- resolution: "preact@npm:10.22.0"
- checksum: 10c0/dc5466c5968c56997e917580c00983cec2f6486a89ea9ba29f1bb88dcfd2f9ff67c8d561a69a1b3acdab17f2bb36b311fef0c348b62e89c332d00c674f7871f0
- languageName: node
- linkType: hard
-
"prelude-ls@npm:^1.2.1":
version: 1.2.1
resolution: "prelude-ls@npm:1.2.1"