@seekora-ai/ui-sdk-react 0.2.0 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/SearchResults.d.ts.map +1 -1
- package/dist/components/SearchResults.js +24 -58
- package/dist/docsearch/components/DocSearch.d.ts +4 -0
- package/dist/docsearch/components/DocSearch.d.ts.map +1 -0
- package/dist/docsearch/components/DocSearch.js +81 -0
- package/dist/docsearch/components/DocSearchButton.d.ts +4 -0
- package/dist/docsearch/components/DocSearchButton.d.ts.map +1 -0
- package/dist/docsearch/components/DocSearchButton.js +12 -0
- package/dist/docsearch/components/Footer.d.ts +8 -0
- package/dist/docsearch/components/Footer.d.ts.map +1 -0
- package/dist/docsearch/components/Footer.js +23 -0
- package/dist/docsearch/components/Highlight.d.ts +9 -0
- package/dist/docsearch/components/Highlight.d.ts.map +1 -0
- package/dist/docsearch/components/Highlight.js +48 -0
- package/dist/docsearch/components/Hit.d.ts +15 -0
- package/dist/docsearch/components/Hit.d.ts.map +1 -0
- package/dist/docsearch/components/Hit.js +96 -0
- package/dist/docsearch/components/Modal.d.ts +9 -0
- package/dist/docsearch/components/Modal.d.ts.map +1 -0
- package/dist/docsearch/components/Modal.js +54 -0
- package/dist/docsearch/components/Results.d.ts +21 -0
- package/dist/docsearch/components/Results.d.ts.map +1 -0
- package/dist/docsearch/components/Results.js +91 -0
- package/dist/docsearch/components/SearchBox.d.ts +12 -0
- package/dist/docsearch/components/SearchBox.d.ts.map +1 -0
- package/dist/docsearch/components/SearchBox.js +18 -0
- package/dist/docsearch/hooks/useDocSearch.d.ts +32 -0
- package/dist/docsearch/hooks/useDocSearch.d.ts.map +1 -0
- package/dist/docsearch/hooks/useDocSearch.js +208 -0
- package/dist/docsearch/hooks/useKeyboard.d.ts +17 -0
- package/dist/docsearch/hooks/useKeyboard.d.ts.map +1 -0
- package/dist/docsearch/hooks/useKeyboard.js +71 -0
- package/dist/docsearch/hooks/useSeekoraSearch.d.ts +27 -0
- package/dist/docsearch/hooks/useSeekoraSearch.d.ts.map +1 -0
- package/dist/docsearch/hooks/useSeekoraSearch.js +187 -0
- package/dist/docsearch/index.d.ts +13 -0
- package/dist/docsearch/index.d.ts.map +1 -0
- package/dist/docsearch/index.js +11 -0
- package/dist/docsearch/types.d.ts +170 -0
- package/dist/docsearch/types.d.ts.map +1 -0
- package/dist/docsearch/types.js +4 -0
- package/dist/docsearch.css +237 -0
- package/dist/hooks/useAnalytics.d.ts +8 -4
- package/dist/hooks/useAnalytics.d.ts.map +1 -1
- package/dist/hooks/useAnalytics.js +14 -9
- package/dist/hooks/useSuggestionsAnalytics.d.ts +3 -1
- package/dist/hooks/useSuggestionsAnalytics.d.ts.map +1 -1
- package/dist/hooks/useSuggestionsAnalytics.js +11 -9
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.umd.js +1 -1
- package/dist/src/index.d.ts +258 -7
- package/dist/src/index.esm.js +1611 -79
- package/dist/src/index.esm.js.map +1 -1
- package/dist/src/index.js +1618 -78
- package/dist/src/index.js.map +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { SeekoraClient } from '@seekora-ai/search-sdk';
|
|
3
|
+
function transformResults(results) {
|
|
4
|
+
return results.map((result) => {
|
|
5
|
+
const url = result.url || result.route || result.link || '';
|
|
6
|
+
const title = result.title || result.name || '';
|
|
7
|
+
const content = result.content || result.description || result.snippet || '';
|
|
8
|
+
const description = result.description || result.content?.substring?.(0, 150) || '';
|
|
9
|
+
const hierarchy = {};
|
|
10
|
+
if (result.hierarchy) {
|
|
11
|
+
hierarchy.lvl0 = result.hierarchy.lvl0;
|
|
12
|
+
hierarchy.lvl1 = result.hierarchy.lvl1;
|
|
13
|
+
hierarchy.lvl2 = result.hierarchy.lvl2;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
if (result.category)
|
|
17
|
+
hierarchy.lvl0 = result.category;
|
|
18
|
+
if (result.parent_title || result.parentTitle)
|
|
19
|
+
hierarchy.lvl1 = result.parent_title || result.parentTitle;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
url,
|
|
23
|
+
title: title?.replace?.(/<\/?mark>/g, '') || title,
|
|
24
|
+
content: content?.replace?.(/<\/?mark>/g, '')?.substring?.(0, 200) || content,
|
|
25
|
+
description: description?.replace?.(/<\/?mark>/g, '') || description,
|
|
26
|
+
category: result.category || hierarchy.lvl0 || '',
|
|
27
|
+
hierarchy,
|
|
28
|
+
route: result.route,
|
|
29
|
+
parentTitle: result.parent_title || result.parentTitle,
|
|
30
|
+
type: result.type || '',
|
|
31
|
+
anchor: result.anchor || '',
|
|
32
|
+
_source: 'seekora',
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function useSeekoraSearch(options) {
|
|
37
|
+
const { storeId, storeSecret, apiEndpoint, maxResults = 20, debounceMs = 200, analyticsTags = ['docsearch'], groupField, groupSize, } = options;
|
|
38
|
+
const [query, setQueryState] = useState('');
|
|
39
|
+
const [suggestions, setSuggestions] = useState([]);
|
|
40
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
41
|
+
const [error, setError] = useState(null);
|
|
42
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
43
|
+
const clientRef = useRef(null);
|
|
44
|
+
const lastSearchContextRef = useRef(null);
|
|
45
|
+
const debounceTimerRef = useRef(null);
|
|
46
|
+
const abortControllerRef = useRef(null);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!storeId)
|
|
49
|
+
return;
|
|
50
|
+
const config = {
|
|
51
|
+
storeId,
|
|
52
|
+
readSecret: storeSecret,
|
|
53
|
+
logLevel: 'warn',
|
|
54
|
+
enableContextCollection: true,
|
|
55
|
+
};
|
|
56
|
+
if (apiEndpoint) {
|
|
57
|
+
if (['local', 'stage', 'production'].includes(apiEndpoint)) {
|
|
58
|
+
config.environment = apiEndpoint;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
config.baseUrl = apiEndpoint;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
clientRef.current = new SeekoraClient(config);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error('Failed to initialize SeekoraClient:', err);
|
|
69
|
+
setError('Failed to initialize search client');
|
|
70
|
+
}
|
|
71
|
+
return () => {
|
|
72
|
+
clientRef.current = null;
|
|
73
|
+
};
|
|
74
|
+
}, [storeId, storeSecret, apiEndpoint]);
|
|
75
|
+
const performSearch = useCallback(async (searchQuery) => {
|
|
76
|
+
if (!clientRef.current) {
|
|
77
|
+
setError('Search client not initialized');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!searchQuery.trim()) {
|
|
81
|
+
setSuggestions([]);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (abortControllerRef.current)
|
|
85
|
+
abortControllerRef.current.abort();
|
|
86
|
+
abortControllerRef.current = new AbortController();
|
|
87
|
+
setIsLoading(true);
|
|
88
|
+
setError(null);
|
|
89
|
+
try {
|
|
90
|
+
const response = await clientRef.current.search(searchQuery, {
|
|
91
|
+
per_page: maxResults,
|
|
92
|
+
analytics_tags: analyticsTags,
|
|
93
|
+
return_fields: [
|
|
94
|
+
'hierarchy.lvl0', 'hierarchy.lvl1', 'hierarchy.lvl2', 'hierarchy.lvl3',
|
|
95
|
+
'hierarchy.lvl4', 'hierarchy.lvl5', 'hierarchy.lvl6',
|
|
96
|
+
'content', 'type', 'url', 'title', 'anchor'
|
|
97
|
+
],
|
|
98
|
+
snippet_fields: [
|
|
99
|
+
'hierarchy.lvl1', 'hierarchy.lvl2', 'hierarchy.lvl3',
|
|
100
|
+
'hierarchy.lvl4', 'hierarchy.lvl5', 'hierarchy.lvl6', 'content'
|
|
101
|
+
],
|
|
102
|
+
snippet_prefix: '<mark>',
|
|
103
|
+
snippet_suffix: '</mark>',
|
|
104
|
+
include_snippets: true,
|
|
105
|
+
group_field: groupField,
|
|
106
|
+
group_size: groupSize,
|
|
107
|
+
});
|
|
108
|
+
if (abortControllerRef.current?.signal.aborted)
|
|
109
|
+
return;
|
|
110
|
+
if (response?.context)
|
|
111
|
+
lastSearchContextRef.current = response.context;
|
|
112
|
+
setSuggestions(transformResults(response.results || []));
|
|
113
|
+
setSelectedIndex(0);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
if (err instanceof Error && err.name === 'AbortError')
|
|
117
|
+
return;
|
|
118
|
+
console.error('Search failed:', err);
|
|
119
|
+
setError(err instanceof Error ? err.message : 'Search failed');
|
|
120
|
+
setSuggestions([]);
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
setIsLoading(false);
|
|
124
|
+
}
|
|
125
|
+
}, [maxResults, analyticsTags, groupField, groupSize]);
|
|
126
|
+
const setQuery = useCallback((newQuery) => {
|
|
127
|
+
setQueryState(newQuery);
|
|
128
|
+
setSelectedIndex(0);
|
|
129
|
+
if (debounceTimerRef.current)
|
|
130
|
+
clearTimeout(debounceTimerRef.current);
|
|
131
|
+
debounceTimerRef.current = setTimeout(() => performSearch(newQuery), debounceMs);
|
|
132
|
+
}, [performSearch, debounceMs]);
|
|
133
|
+
const selectNext = useCallback(() => {
|
|
134
|
+
setSelectedIndex((prev) => (prev >= suggestions.length - 1 ? 0 : prev + 1));
|
|
135
|
+
}, [suggestions.length]);
|
|
136
|
+
const selectPrev = useCallback(() => {
|
|
137
|
+
setSelectedIndex((prev) => (prev <= 0 ? suggestions.length - 1 : prev - 1));
|
|
138
|
+
}, [suggestions.length]);
|
|
139
|
+
const reset = useCallback(() => {
|
|
140
|
+
if (abortControllerRef.current)
|
|
141
|
+
abortControllerRef.current.abort();
|
|
142
|
+
if (debounceTimerRef.current)
|
|
143
|
+
clearTimeout(debounceTimerRef.current);
|
|
144
|
+
setQueryState('');
|
|
145
|
+
setSuggestions([]);
|
|
146
|
+
setIsLoading(false);
|
|
147
|
+
setError(null);
|
|
148
|
+
setSelectedIndex(0);
|
|
149
|
+
}, []);
|
|
150
|
+
const getSelectedItem = useCallback(() => {
|
|
151
|
+
return suggestions[selectedIndex] || null;
|
|
152
|
+
}, [suggestions, selectedIndex]);
|
|
153
|
+
const trackDocClick = useCallback((hit, position) => {
|
|
154
|
+
const client = clientRef.current;
|
|
155
|
+
if (!client?.trackEvent)
|
|
156
|
+
return;
|
|
157
|
+
const context = lastSearchContextRef.current ?? undefined;
|
|
158
|
+
const itemId = hit.url || hit.id || hit.title || String(position);
|
|
159
|
+
client.trackEvent({
|
|
160
|
+
event_name: 'doc_click',
|
|
161
|
+
clicked_item_id: itemId,
|
|
162
|
+
metadata: { position, result: hit, source: 'docsearch' },
|
|
163
|
+
}, context);
|
|
164
|
+
}, []);
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
return () => {
|
|
167
|
+
if (abortControllerRef.current)
|
|
168
|
+
abortControllerRef.current.abort();
|
|
169
|
+
if (debounceTimerRef.current)
|
|
170
|
+
clearTimeout(debounceTimerRef.current);
|
|
171
|
+
};
|
|
172
|
+
}, []);
|
|
173
|
+
return {
|
|
174
|
+
query,
|
|
175
|
+
suggestions,
|
|
176
|
+
isLoading,
|
|
177
|
+
error,
|
|
178
|
+
selectedIndex,
|
|
179
|
+
setQuery,
|
|
180
|
+
selectNext,
|
|
181
|
+
selectPrev,
|
|
182
|
+
setSelectedIndex,
|
|
183
|
+
reset,
|
|
184
|
+
getSelectedItem,
|
|
185
|
+
trackDocClick,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { DocSearch } from './components/DocSearch';
|
|
2
|
+
export { DocSearchButton } from './components/DocSearchButton';
|
|
3
|
+
export { Modal } from './components/Modal';
|
|
4
|
+
export { SearchBox } from './components/SearchBox';
|
|
5
|
+
export { Results } from './components/Results';
|
|
6
|
+
export { Hit } from './components/Hit';
|
|
7
|
+
export { Highlight, truncateAroundMatch } from './components/Highlight';
|
|
8
|
+
export { Footer } from './components/Footer';
|
|
9
|
+
export { useDocSearch } from './hooks/useDocSearch';
|
|
10
|
+
export { useSeekoraSearch, type UseSeekoraSearchOptions, type UseSeekoraSearchResult } from './hooks/useSeekoraSearch';
|
|
11
|
+
export { useKeyboard, getShortcutText } from './hooks/useKeyboard';
|
|
12
|
+
export type { DocSearchProps, DocSearchButtonProps, DocSearchHit, DocSearchSuggestion, DocSearchResponse, DocSearchSuggestionsResponse, DocSearchTranslations, DocSearchState, DocSearchAction, SearchSource, } from './types';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docsearch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEnE,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { DocSearch } from './components/DocSearch';
|
|
2
|
+
export { DocSearchButton } from './components/DocSearchButton';
|
|
3
|
+
export { Modal } from './components/Modal';
|
|
4
|
+
export { SearchBox } from './components/SearchBox';
|
|
5
|
+
export { Results } from './components/Results';
|
|
6
|
+
export { Hit } from './components/Hit';
|
|
7
|
+
export { Highlight, truncateAroundMatch } from './components/Highlight';
|
|
8
|
+
export { Footer } from './components/Footer';
|
|
9
|
+
export { useDocSearch } from './hooks/useDocSearch';
|
|
10
|
+
export { useSeekoraSearch } from './hooks/useSeekoraSearch';
|
|
11
|
+
export { useKeyboard, getShortcutText } from './hooks/useKeyboard';
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seekora DocSearch Types
|
|
3
|
+
*/
|
|
4
|
+
import type React from 'react';
|
|
5
|
+
export interface DocSearchHit {
|
|
6
|
+
objectID: string;
|
|
7
|
+
url: string;
|
|
8
|
+
anchor?: string;
|
|
9
|
+
title: string;
|
|
10
|
+
content: string;
|
|
11
|
+
section_level: number;
|
|
12
|
+
hierarchy: {
|
|
13
|
+
lvl0?: string;
|
|
14
|
+
lvl1?: string;
|
|
15
|
+
lvl2?: string;
|
|
16
|
+
lvl3?: string;
|
|
17
|
+
lvl4?: string;
|
|
18
|
+
lvl5?: string;
|
|
19
|
+
};
|
|
20
|
+
_highlightResult?: {
|
|
21
|
+
title?: {
|
|
22
|
+
value: string;
|
|
23
|
+
matchLevel: string;
|
|
24
|
+
};
|
|
25
|
+
content?: {
|
|
26
|
+
value: string;
|
|
27
|
+
matchLevel: string;
|
|
28
|
+
};
|
|
29
|
+
hierarchy?: {
|
|
30
|
+
lvl0?: {
|
|
31
|
+
value: string;
|
|
32
|
+
matchLevel: string;
|
|
33
|
+
};
|
|
34
|
+
lvl1?: {
|
|
35
|
+
value: string;
|
|
36
|
+
matchLevel: string;
|
|
37
|
+
};
|
|
38
|
+
lvl2?: {
|
|
39
|
+
value: string;
|
|
40
|
+
matchLevel: string;
|
|
41
|
+
};
|
|
42
|
+
lvl3?: {
|
|
43
|
+
value: string;
|
|
44
|
+
matchLevel: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
_source?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface DocSearchSuggestion {
|
|
51
|
+
url: string;
|
|
52
|
+
title: string;
|
|
53
|
+
content?: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
category?: string;
|
|
56
|
+
hierarchy?: {
|
|
57
|
+
lvl0?: string;
|
|
58
|
+
lvl1?: string;
|
|
59
|
+
lvl2?: string;
|
|
60
|
+
lvl3?: string;
|
|
61
|
+
lvl4?: string;
|
|
62
|
+
lvl5?: string;
|
|
63
|
+
};
|
|
64
|
+
highlight?: {
|
|
65
|
+
title?: string;
|
|
66
|
+
content?: string;
|
|
67
|
+
};
|
|
68
|
+
_source?: string;
|
|
69
|
+
route?: string;
|
|
70
|
+
parentTitle?: string;
|
|
71
|
+
type?: string;
|
|
72
|
+
anchor?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface SearchSource {
|
|
75
|
+
id: string;
|
|
76
|
+
name: string;
|
|
77
|
+
endpoint: string;
|
|
78
|
+
apiKey?: string;
|
|
79
|
+
storeId?: string;
|
|
80
|
+
storeSecret?: string;
|
|
81
|
+
maxResults?: number;
|
|
82
|
+
minQueryLength?: number;
|
|
83
|
+
transformResults?: (data: any) => DocSearchSuggestion[];
|
|
84
|
+
openInNewTab?: boolean;
|
|
85
|
+
icon?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface DocSearchResponse {
|
|
88
|
+
hits: DocSearchHit[];
|
|
89
|
+
query: string;
|
|
90
|
+
total?: number;
|
|
91
|
+
page?: number;
|
|
92
|
+
nbPages?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface DocSearchSuggestionsResponse {
|
|
95
|
+
suggestions: DocSearchSuggestion[];
|
|
96
|
+
query: string;
|
|
97
|
+
}
|
|
98
|
+
export interface DocSearchProps {
|
|
99
|
+
storeId?: string;
|
|
100
|
+
storeSecret?: string;
|
|
101
|
+
seekoraApiEndpoint?: string;
|
|
102
|
+
apiEndpoint?: string;
|
|
103
|
+
apiKey?: string;
|
|
104
|
+
sources?: SearchSource[];
|
|
105
|
+
indexName?: string;
|
|
106
|
+
placeholder?: string;
|
|
107
|
+
maxResults?: number;
|
|
108
|
+
debounceMs?: number;
|
|
109
|
+
onSelect?: (hit: DocSearchHit | DocSearchSuggestion) => void;
|
|
110
|
+
onClose?: () => void;
|
|
111
|
+
translations?: DocSearchTranslations;
|
|
112
|
+
renderButton?: boolean;
|
|
113
|
+
buttonComponent?: React.ComponentType<DocSearchButtonProps>;
|
|
114
|
+
initialOpen?: boolean;
|
|
115
|
+
disableShortcut?: boolean;
|
|
116
|
+
shortcutKey?: string;
|
|
117
|
+
}
|
|
118
|
+
export interface DocSearchButtonProps {
|
|
119
|
+
onClick: () => void;
|
|
120
|
+
placeholder?: string;
|
|
121
|
+
}
|
|
122
|
+
export interface DocSearchTranslations {
|
|
123
|
+
buttonText?: string;
|
|
124
|
+
buttonAriaLabel?: string;
|
|
125
|
+
searchPlaceholder?: string;
|
|
126
|
+
noResultsText?: string;
|
|
127
|
+
loadingText?: string;
|
|
128
|
+
errorText?: string;
|
|
129
|
+
footerText?: string;
|
|
130
|
+
closeText?: string;
|
|
131
|
+
searchByText?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface DocSearchState {
|
|
134
|
+
query: string;
|
|
135
|
+
results: DocSearchHit[];
|
|
136
|
+
suggestions: DocSearchSuggestion[];
|
|
137
|
+
isLoading: boolean;
|
|
138
|
+
error: string | null;
|
|
139
|
+
selectedIndex: number;
|
|
140
|
+
mode: 'suggestions' | 'results';
|
|
141
|
+
}
|
|
142
|
+
export type DocSearchAction = {
|
|
143
|
+
type: 'SET_QUERY';
|
|
144
|
+
payload: string;
|
|
145
|
+
} | {
|
|
146
|
+
type: 'SET_RESULTS';
|
|
147
|
+
payload: DocSearchHit[];
|
|
148
|
+
} | {
|
|
149
|
+
type: 'SET_SUGGESTIONS';
|
|
150
|
+
payload: DocSearchSuggestion[];
|
|
151
|
+
} | {
|
|
152
|
+
type: 'SET_LOADING';
|
|
153
|
+
payload: boolean;
|
|
154
|
+
} | {
|
|
155
|
+
type: 'SET_ERROR';
|
|
156
|
+
payload: string | null;
|
|
157
|
+
} | {
|
|
158
|
+
type: 'SET_SELECTED_INDEX';
|
|
159
|
+
payload: number;
|
|
160
|
+
} | {
|
|
161
|
+
type: 'SELECT_NEXT';
|
|
162
|
+
} | {
|
|
163
|
+
type: 'SELECT_PREV';
|
|
164
|
+
} | {
|
|
165
|
+
type: 'SET_MODE';
|
|
166
|
+
payload: 'suggestions' | 'results';
|
|
167
|
+
} | {
|
|
168
|
+
type: 'RESET';
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/docsearch/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seekora DocSearch CSS - bundled with @seekora/ui-sdk-react
|
|
3
|
+
* Override CSS variables to customize. Dark mode: [data-theme="dark"] or prefers-color-scheme.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
:root {
|
|
7
|
+
--seekora-docsearch-primary: #5468ff;
|
|
8
|
+
--seekora-docsearch-primary-hover: #4458e8;
|
|
9
|
+
--seekora-docsearch-text: #1a1a1a;
|
|
10
|
+
--seekora-docsearch-text-muted: #6b7280;
|
|
11
|
+
--seekora-docsearch-text-secondary: #9ca3af;
|
|
12
|
+
--seekora-docsearch-background: #ffffff;
|
|
13
|
+
--seekora-docsearch-background-secondary: #f9fafb;
|
|
14
|
+
--seekora-docsearch-border: #e5e7eb;
|
|
15
|
+
--seekora-docsearch-border-light: #f3f4f6;
|
|
16
|
+
--seekora-docsearch-shadow: rgba(0, 0, 0, 0.1);
|
|
17
|
+
--seekora-docsearch-shadow-strong: rgba(0, 0, 0, 0.2);
|
|
18
|
+
--seekora-docsearch-overlay: rgba(0, 0, 0, 0.4);
|
|
19
|
+
--seekora-docsearch-highlight-bg: rgba(84, 104, 255, 0.1);
|
|
20
|
+
--seekora-docsearch-highlight-text: #5468ff;
|
|
21
|
+
--seekora-docsearch-hit-bg: transparent;
|
|
22
|
+
--seekora-docsearch-hit-bg-hover: #f3f4f6;
|
|
23
|
+
--seekora-docsearch-hit-bg-selected: #eef2ff;
|
|
24
|
+
--seekora-docsearch-icon: #9ca3af;
|
|
25
|
+
--seekora-docsearch-icon-active: #5468ff;
|
|
26
|
+
--seekora-docsearch-key-bg: #f3f4f6;
|
|
27
|
+
--seekora-docsearch-key-border: #d1d5db;
|
|
28
|
+
--seekora-docsearch-key-text: #6b7280;
|
|
29
|
+
--seekora-docsearch-spacing-xs: 4px;
|
|
30
|
+
--seekora-docsearch-spacing-sm: 8px;
|
|
31
|
+
--seekora-docsearch-spacing-md: 12px;
|
|
32
|
+
--seekora-docsearch-spacing-lg: 16px;
|
|
33
|
+
--seekora-docsearch-spacing-xl: 24px;
|
|
34
|
+
--seekora-docsearch-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
35
|
+
--seekora-docsearch-font-size-xs: 11px;
|
|
36
|
+
--seekora-docsearch-font-size-sm: 13px;
|
|
37
|
+
--seekora-docsearch-font-size-md: 14px;
|
|
38
|
+
--seekora-docsearch-font-size-lg: 16px;
|
|
39
|
+
--seekora-docsearch-font-weight-normal: 400;
|
|
40
|
+
--seekora-docsearch-font-weight-medium: 500;
|
|
41
|
+
--seekora-docsearch-font-weight-semibold: 600;
|
|
42
|
+
--seekora-docsearch-line-height: 1.5;
|
|
43
|
+
--seekora-docsearch-radius-sm: 4px;
|
|
44
|
+
--seekora-docsearch-radius-md: 8px;
|
|
45
|
+
--seekora-docsearch-radius-lg: 12px;
|
|
46
|
+
--seekora-docsearch-radius-xl: 16px;
|
|
47
|
+
--seekora-docsearch-transition-fast: 100ms;
|
|
48
|
+
--seekora-docsearch-transition-normal: 150ms;
|
|
49
|
+
--seekora-docsearch-transition-slow: 200ms;
|
|
50
|
+
--seekora-docsearch-modal-width: 560px;
|
|
51
|
+
--seekora-docsearch-modal-max-height: 80vh;
|
|
52
|
+
--seekora-docsearch-modal-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
53
|
+
--seekora-docsearch-z-index: 99999;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
[data-theme="dark"], .dark {
|
|
57
|
+
--seekora-docsearch-primary: #7c8aff;
|
|
58
|
+
--seekora-docsearch-primary-hover: #6e7dff;
|
|
59
|
+
--seekora-docsearch-text: #f9fafb;
|
|
60
|
+
--seekora-docsearch-text-muted: #9ca3af;
|
|
61
|
+
--seekora-docsearch-text-secondary: #6b7280;
|
|
62
|
+
--seekora-docsearch-background: #1f2937;
|
|
63
|
+
--seekora-docsearch-background-secondary: #111827;
|
|
64
|
+
--seekora-docsearch-border: #374151;
|
|
65
|
+
--seekora-docsearch-border-light: #374151;
|
|
66
|
+
--seekora-docsearch-shadow: rgba(0, 0, 0, 0.3);
|
|
67
|
+
--seekora-docsearch-shadow-strong: rgba(0, 0, 0, 0.5);
|
|
68
|
+
--seekora-docsearch-overlay: rgba(0, 0, 0, 0.6);
|
|
69
|
+
--seekora-docsearch-highlight-bg: rgba(124, 138, 255, 0.15);
|
|
70
|
+
--seekora-docsearch-highlight-text: #a5b4fc;
|
|
71
|
+
--seekora-docsearch-hit-bg: transparent;
|
|
72
|
+
--seekora-docsearch-hit-bg-hover: #374151;
|
|
73
|
+
--seekora-docsearch-hit-bg-selected: #312e81;
|
|
74
|
+
--seekora-docsearch-icon: #6b7280;
|
|
75
|
+
--seekora-docsearch-icon-active: #7c8aff;
|
|
76
|
+
--seekora-docsearch-key-bg: #374151;
|
|
77
|
+
--seekora-docsearch-key-border: #4b5563;
|
|
78
|
+
--seekora-docsearch-key-text: #9ca3af;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (prefers-color-scheme: dark) {
|
|
82
|
+
:root:not([data-theme="light"]):not(.light) {
|
|
83
|
+
--seekora-docsearch-primary: #7c8aff;
|
|
84
|
+
--seekora-docsearch-primary-hover: #6e7dff;
|
|
85
|
+
--seekora-docsearch-text: #f9fafb;
|
|
86
|
+
--seekora-docsearch-text-muted: #9ca3af;
|
|
87
|
+
--seekora-docsearch-text-secondary: #6b7280;
|
|
88
|
+
--seekora-docsearch-background: #1f2937;
|
|
89
|
+
--seekora-docsearch-background-secondary: #111827;
|
|
90
|
+
--seekora-docsearch-border: #374151;
|
|
91
|
+
--seekora-docsearch-border-light: #374151;
|
|
92
|
+
--seekora-docsearch-shadow: rgba(0, 0, 0, 0.3);
|
|
93
|
+
--seekora-docsearch-shadow-strong: rgba(0, 0, 0, 0.5);
|
|
94
|
+
--seekora-docsearch-overlay: rgba(0, 0, 0, 0.6);
|
|
95
|
+
--seekora-docsearch-highlight-bg: rgba(124, 138, 255, 0.15);
|
|
96
|
+
--seekora-docsearch-highlight-text: #a5b4fc;
|
|
97
|
+
--seekora-docsearch-hit-bg: transparent;
|
|
98
|
+
--seekora-docsearch-hit-bg-hover: #374151;
|
|
99
|
+
--seekora-docsearch-hit-bg-selected: #312e81;
|
|
100
|
+
--seekora-docsearch-icon: #6b7280;
|
|
101
|
+
--seekora-docsearch-icon-active: #7c8aff;
|
|
102
|
+
--seekora-docsearch-key-bg: #374151;
|
|
103
|
+
--seekora-docsearch-key-border: #4b5563;
|
|
104
|
+
--seekora-docsearch-key-text: #9ca3af;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.seekora-docsearch-button {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
gap: var(--seekora-docsearch-spacing-sm);
|
|
112
|
+
padding: var(--seekora-docsearch-spacing-sm) var(--seekora-docsearch-spacing-md);
|
|
113
|
+
min-width: 200px;
|
|
114
|
+
height: 40px;
|
|
115
|
+
background: var(--seekora-docsearch-background);
|
|
116
|
+
border: 1px solid var(--seekora-docsearch-border);
|
|
117
|
+
border-radius: var(--seekora-docsearch-radius-md);
|
|
118
|
+
color: var(--seekora-docsearch-text-muted);
|
|
119
|
+
font-family: var(--seekora-docsearch-font-family);
|
|
120
|
+
font-size: var(--seekora-docsearch-font-size-md);
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
transition: all var(--seekora-docsearch-transition-normal) ease;
|
|
123
|
+
box-shadow: 0 1px 2px var(--seekora-docsearch-shadow);
|
|
124
|
+
}
|
|
125
|
+
.seekora-docsearch-button:hover { border-color: var(--seekora-docsearch-primary); box-shadow: 0 2px 4px var(--seekora-docsearch-shadow); }
|
|
126
|
+
.seekora-docsearch-button:focus { outline: none; border-color: var(--seekora-docsearch-primary); box-shadow: 0 0 0 3px var(--seekora-docsearch-highlight-bg); }
|
|
127
|
+
.seekora-docsearch-button-icon { display: flex; align-items: center; justify-content: center; color: var(--seekora-docsearch-icon); flex-shrink: 0; }
|
|
128
|
+
.seekora-docsearch-button-placeholder { flex: 1; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
129
|
+
.seekora-docsearch-button-keys { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-xs); flex-shrink: 0; }
|
|
130
|
+
.seekora-docsearch-button-key {
|
|
131
|
+
display: inline-flex; align-items: center; justify-content: center; padding: 2px 6px; min-width: 20px; height: 20px;
|
|
132
|
+
background: var(--seekora-docsearch-key-bg); border: 1px solid var(--seekora-docsearch-key-border);
|
|
133
|
+
border-radius: var(--seekora-docsearch-radius-sm); color: var(--seekora-docsearch-key-text);
|
|
134
|
+
font-family: var(--seekora-docsearch-font-family); font-size: var(--seekora-docsearch-font-size-xs);
|
|
135
|
+
font-weight: var(--seekora-docsearch-font-weight-medium); box-shadow: inset 0 -1px 0 var(--seekora-docsearch-key-border);
|
|
136
|
+
}
|
|
137
|
+
@media (max-width: 640px) {
|
|
138
|
+
.seekora-docsearch-button { min-width: auto; padding: var(--seekora-docsearch-spacing-sm); }
|
|
139
|
+
.seekora-docsearch-button-placeholder { display: none; }
|
|
140
|
+
.seekora-docsearch-button-keys { display: none; }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.seekora-docsearch-overlay {
|
|
144
|
+
position: fixed; inset: 0; z-index: var(--seekora-docsearch-z-index);
|
|
145
|
+
display: flex; align-items: flex-start; justify-content: center;
|
|
146
|
+
padding: 10vh var(--seekora-docsearch-spacing-lg);
|
|
147
|
+
background: var(--seekora-docsearch-overlay); backdrop-filter: blur(4px);
|
|
148
|
+
animation: seekora-docsearch-fade-in var(--seekora-docsearch-transition-normal) ease;
|
|
149
|
+
}
|
|
150
|
+
@keyframes seekora-docsearch-fade-in { from { opacity: 0; } to { opacity: 1; } }
|
|
151
|
+
.seekora-docsearch-container { width: 100%; max-width: var(--seekora-docsearch-modal-width); animation: seekora-docsearch-slide-in var(--seekora-docsearch-transition-slow) ease; }
|
|
152
|
+
@keyframes seekora-docsearch-slide-in { from { opacity: 0; transform: translateY(-20px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
153
|
+
.seekora-docsearch-modal {
|
|
154
|
+
display: flex; flex-direction: column; max-height: var(--seekora-docsearch-modal-max-height);
|
|
155
|
+
background: var(--seekora-docsearch-background); border: 1px solid var(--seekora-docsearch-border);
|
|
156
|
+
border-radius: var(--seekora-docsearch-radius-xl); box-shadow: var(--seekora-docsearch-modal-shadow); overflow: hidden;
|
|
157
|
+
}
|
|
158
|
+
.seekora-docsearch-header { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-sm); padding: var(--seekora-docsearch-spacing-md); border-bottom: 1px solid var(--seekora-docsearch-border-light); }
|
|
159
|
+
.seekora-docsearch-close {
|
|
160
|
+
display: flex; align-items: center; justify-content: center;
|
|
161
|
+
padding: var(--seekora-docsearch-spacing-xs) var(--seekora-docsearch-spacing-sm);
|
|
162
|
+
background: var(--seekora-docsearch-key-bg); border: 1px solid var(--seekora-docsearch-key-border);
|
|
163
|
+
border-radius: var(--seekora-docsearch-radius-sm); color: var(--seekora-docsearch-key-text);
|
|
164
|
+
font-family: var(--seekora-docsearch-font-family); font-size: var(--seekora-docsearch-font-size-xs);
|
|
165
|
+
font-weight: var(--seekora-docsearch-font-weight-medium); cursor: pointer; transition: all var(--seekora-docsearch-transition-fast) ease; flex-shrink: 0;
|
|
166
|
+
}
|
|
167
|
+
.seekora-docsearch-close:hover { background: var(--seekora-docsearch-hit-bg-hover); border-color: var(--seekora-docsearch-border); }
|
|
168
|
+
.seekora-docsearch-close-text { text-transform: uppercase; letter-spacing: 0.05em; }
|
|
169
|
+
.seekora-docsearch-body { flex: 1; overflow-y: auto; min-height: 0; overscroll-behavior: contain; }
|
|
170
|
+
.seekora-docsearch-body::-webkit-scrollbar { width: 8px; }
|
|
171
|
+
.seekora-docsearch-body::-webkit-scrollbar-track { background: transparent; }
|
|
172
|
+
.seekora-docsearch-body::-webkit-scrollbar-thumb { background: var(--seekora-docsearch-border); border-radius: 4px; }
|
|
173
|
+
.seekora-docsearch-body::-webkit-scrollbar-thumb:hover { background: var(--seekora-docsearch-text-muted); }
|
|
174
|
+
@media (max-width: 640px) {
|
|
175
|
+
.seekora-docsearch-overlay { padding: var(--seekora-docsearch-spacing-md); }
|
|
176
|
+
.seekora-docsearch-modal { max-height: calc(100vh - 32px); border-radius: var(--seekora-docsearch-radius-lg); }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.seekora-docsearch-searchbox {
|
|
180
|
+
display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-sm); flex: 1;
|
|
181
|
+
padding: 0 var(--seekora-docsearch-spacing-sm); background: var(--seekora-docsearch-background-secondary);
|
|
182
|
+
border: 1px solid transparent; border-radius: var(--seekora-docsearch-radius-md); transition: all var(--seekora-docsearch-transition-fast) ease;
|
|
183
|
+
}
|
|
184
|
+
.seekora-docsearch-searchbox:focus-within { background: var(--seekora-docsearch-background); border-color: var(--seekora-docsearch-primary); box-shadow: 0 0 0 3px var(--seekora-docsearch-highlight-bg); }
|
|
185
|
+
.seekora-docsearch-searchbox-icon { display: flex; align-items: center; justify-content: center; color: var(--seekora-docsearch-icon); flex-shrink: 0; cursor: default; }
|
|
186
|
+
.seekora-docsearch-searchbox:focus-within .seekora-docsearch-searchbox-icon { color: var(--seekora-docsearch-icon-active); }
|
|
187
|
+
.seekora-docsearch-input {
|
|
188
|
+
flex: 1; padding: var(--seekora-docsearch-spacing-md) var(--seekora-docsearch-spacing-sm);
|
|
189
|
+
background: transparent; border: none; color: var(--seekora-docsearch-text);
|
|
190
|
+
font-family: var(--seekora-docsearch-font-family); font-size: var(--seekora-docsearch-font-size-lg);
|
|
191
|
+
line-height: var(--seekora-docsearch-line-height); outline: none; min-width: 0;
|
|
192
|
+
}
|
|
193
|
+
.seekora-docsearch-input::placeholder { color: var(--seekora-docsearch-text-secondary); }
|
|
194
|
+
.seekora-docsearch-clear { display: flex; align-items: center; justify-content: center; padding: var(--seekora-docsearch-spacing-xs); background: transparent; border: none; border-radius: var(--seekora-docsearch-radius-sm); color: var(--seekora-docsearch-text-muted); cursor: pointer; transition: all var(--seekora-docsearch-transition-fast) ease; flex-shrink: 0; }
|
|
195
|
+
.seekora-docsearch-clear:hover { background: var(--seekora-docsearch-hit-bg-hover); color: var(--seekora-docsearch-text); }
|
|
196
|
+
.seekora-docsearch-spinner { display: flex; align-items: center; justify-content: center; color: var(--seekora-docsearch-primary); animation: seekora-docsearch-spin 0.8s linear infinite; }
|
|
197
|
+
@keyframes seekora-docsearch-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
|
|
198
|
+
|
|
199
|
+
.seekora-docsearch-results { padding: var(--seekora-docsearch-spacing-sm) 0; }
|
|
200
|
+
.seekora-docsearch-results-list { list-style: none; margin: 0; padding: 0; }
|
|
201
|
+
.seekora-docsearch-results-group { margin-bottom: var(--seekora-docsearch-spacing-sm); }
|
|
202
|
+
.seekora-docsearch-results-group:last-child { margin-bottom: 0; }
|
|
203
|
+
.seekora-docsearch-results-group-header { padding: var(--seekora-docsearch-spacing-sm) var(--seekora-docsearch-spacing-lg); color: var(--seekora-docsearch-text-muted); font-size: var(--seekora-docsearch-font-size-sm); font-weight: var(--seekora-docsearch-font-weight-semibold); text-transform: uppercase; letter-spacing: 0.05em; }
|
|
204
|
+
.seekora-docsearch-results-group-items { list-style: none; margin: 0; padding: 0; }
|
|
205
|
+
.seekora-docsearch-hit { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-md); padding: var(--seekora-docsearch-spacing-md) var(--seekora-docsearch-spacing-lg); background: var(--seekora-docsearch-hit-bg); color: var(--seekora-docsearch-text); text-decoration: none; cursor: pointer; transition: background var(--seekora-docsearch-transition-fast) ease; }
|
|
206
|
+
.seekora-docsearch-hit:hover { background: var(--seekora-docsearch-hit-bg-hover); }
|
|
207
|
+
.seekora-docsearch-hit--selected { background: var(--seekora-docsearch-hit-bg-selected); }
|
|
208
|
+
.seekora-docsearch-hit--selected:hover { background: var(--seekora-docsearch-hit-bg-selected); }
|
|
209
|
+
.seekora-docsearch-hit-icon { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: var(--seekora-docsearch-background-secondary); border-radius: var(--seekora-docsearch-radius-md); color: var(--seekora-docsearch-icon); flex-shrink: 0; }
|
|
210
|
+
.seekora-docsearch-hit--selected .seekora-docsearch-hit-icon { background: var(--seekora-docsearch-primary); color: white; }
|
|
211
|
+
.seekora-docsearch-hit-content { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--seekora-docsearch-spacing-xs); }
|
|
212
|
+
.seekora-docsearch-hit-breadcrumb { color: var(--seekora-docsearch-text-secondary); font-size: var(--seekora-docsearch-font-size-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
213
|
+
.seekora-docsearch-hit-title { color: var(--seekora-docsearch-text); font-size: var(--seekora-docsearch-font-size-md); font-weight: var(--seekora-docsearch-font-weight-medium); line-height: var(--seekora-docsearch-line-height); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
214
|
+
.seekora-docsearch-hit-description { color: var(--seekora-docsearch-text-muted); font-size: var(--seekora-docsearch-font-size-sm); line-height: var(--seekora-docsearch-line-height); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
215
|
+
.seekora-docsearch-hit-action { display: flex; align-items: center; justify-content: center; color: var(--seekora-docsearch-text-secondary); flex-shrink: 0; opacity: 0; transition: opacity var(--seekora-docsearch-transition-fast) ease; }
|
|
216
|
+
.seekora-docsearch-hit:hover .seekora-docsearch-hit-action, .seekora-docsearch-hit--selected .seekora-docsearch-hit-action { opacity: 1; }
|
|
217
|
+
.seekora-docsearch-highlight mark { background: var(--seekora-docsearch-highlight-bg); color: var(--seekora-docsearch-highlight-text); font-weight: var(--seekora-docsearch-font-weight-semibold); padding: 0 2px; border-radius: 2px; }
|
|
218
|
+
.seekora-docsearch-empty, .seekora-docsearch-loading, .seekora-docsearch-no-results, .seekora-docsearch-error { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--seekora-docsearch-spacing-xl); text-align: center; }
|
|
219
|
+
.seekora-docsearch-empty-text, .seekora-docsearch-loading-text, .seekora-docsearch-no-results-text, .seekora-docsearch-error-text { color: var(--seekora-docsearch-text-muted); font-size: var(--seekora-docsearch-font-size-md); margin: 0; }
|
|
220
|
+
.seekora-docsearch-loading-spinner { color: var(--seekora-docsearch-primary); margin-bottom: var(--seekora-docsearch-spacing-md); animation: seekora-docsearch-spin 0.8s linear infinite; }
|
|
221
|
+
.seekora-docsearch-error-text { color: #ef4444; }
|
|
222
|
+
.seekora-docsearch-hit--child { padding-left: var(--seekora-docsearch-spacing-md); }
|
|
223
|
+
.seekora-docsearch-hit--child .seekora-docsearch-hit-icon { width: 32px; height: 32px; }
|
|
224
|
+
.seekora-docsearch-hit-tree { display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--seekora-docsearch-border); }
|
|
225
|
+
.seekora-docsearch-hit-tree-icon { width: 16px; height: 20px; color: var(--seekora-docsearch-border); }
|
|
226
|
+
|
|
227
|
+
.seekora-docsearch-footer { display: flex; align-items: center; justify-content: space-between; padding: var(--seekora-docsearch-spacing-md) var(--seekora-docsearch-spacing-lg); background: var(--seekora-docsearch-background-secondary); border-top: 1px solid var(--seekora-docsearch-border-light); }
|
|
228
|
+
.seekora-docsearch-footer-commands { display: flex; align-items: center; }
|
|
229
|
+
.seekora-docsearch-footer-commands-list { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-lg); list-style: none; margin: 0; padding: 0; }
|
|
230
|
+
.seekora-docsearch-footer-command { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-xs); color: var(--seekora-docsearch-text-muted); font-size: var(--seekora-docsearch-font-size-xs); }
|
|
231
|
+
.seekora-docsearch-key { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 4px; background: var(--seekora-docsearch-key-bg); border: 1px solid var(--seekora-docsearch-key-border); border-radius: var(--seekora-docsearch-radius-sm); color: var(--seekora-docsearch-key-text); font-family: var(--seekora-docsearch-font-family); font-size: var(--seekora-docsearch-font-size-xs); font-weight: var(--seekora-docsearch-font-weight-medium); box-shadow: inset 0 -1px 0 var(--seekora-docsearch-key-border); }
|
|
232
|
+
.seekora-docsearch-footer-logo { display: flex; align-items: center; gap: var(--seekora-docsearch-spacing-sm); }
|
|
233
|
+
.seekora-docsearch-footer-logo-text { color: var(--seekora-docsearch-text-secondary); font-size: var(--seekora-docsearch-font-size-xs); }
|
|
234
|
+
.seekora-docsearch-footer-logo-link { display: flex; align-items: center; color: var(--seekora-docsearch-text); text-decoration: none; transition: color var(--seekora-docsearch-transition-fast) ease; }
|
|
235
|
+
.seekora-docsearch-footer-logo-link:hover { color: var(--seekora-docsearch-primary); }
|
|
236
|
+
.seekora-docsearch-logo { height: 16px; width: auto; }
|
|
237
|
+
@media (max-width: 640px) { .seekora-docsearch-footer { justify-content: center; } .seekora-docsearch-footer-commands { display: none; } }
|