@netlify/spark-ui 1.5.0-alpha.14 → 1.5.0-alpha.3
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/assets/AskNetlify.css +1 -1
- package/dist/assets/SearchHeading.css +1 -1
- package/dist/assets/SearchLink.css +1 -1
- package/dist/assets/SearchModal.css +1 -1
- package/dist/components/preact/AskNetlify/AskNetlify.d.ts +1 -6
- package/dist/components/preact/AskNetlify/AskNetlify.js +665 -680
- package/dist/components/preact/Icon/index.js +30 -57
- package/dist/components/preact/SearchModal/components/SearchModal/SearchModal.js +49 -42
- package/dist/components/preact/SearchModal/components/SearchWindow.js +19 -20
- package/dist/components/preact/SearchModal/hooks/useSearchToggles.d.ts +1 -3
- package/dist/components/preact/SearchModal/hooks/useSearchToggles.js +10 -13
- package/package.json +1 -1
- package/packages/components/preact/AskNetlify/AskNetlify.css +109 -191
- package/packages/components/preact/AskNetlify/AskNetlify.tsx +29 -45
- package/packages/components/preact/Icon/index.tsx +0 -21
- package/packages/components/preact/SearchModal/components/SearchHeading/SearchHeading.css +1 -1
- package/packages/components/preact/SearchModal/components/SearchLink/SearchLink.css +1 -6
- package/packages/components/preact/SearchModal/components/SearchModal/SearchModal.css +20 -4
- package/packages/components/preact/SearchModal/components/SearchModal/SearchModal.tsx +11 -3
- package/packages/components/preact/SearchModal/components/SearchWindow.tsx +2 -4
- package/packages/components/preact/SearchModal/hooks/useSearchToggles.ts +3 -11
- package/packages/styles/tokens.css +4 -12
- package/packages/utils/theme.ts +0 -4
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
useSearchToggles,
|
|
15
15
|
useSearchLogger,
|
|
16
16
|
} from '../../hooks';
|
|
17
|
+
import { useTimeout } from '@utils/useTimeout';
|
|
17
18
|
|
|
18
19
|
import AskNetlify from '../../../../preact/AskNetlify/AskNetlify';
|
|
19
20
|
|
|
@@ -28,6 +29,7 @@ interface Props {
|
|
|
28
29
|
function SearchModal(props: Props = { className: '', children: null, debug: false }) {
|
|
29
30
|
const [isPagefindLoaded, setIsPagefindLoaded] = useState(false);
|
|
30
31
|
const [modalState, setModalState] = useState({ current: 'search' });
|
|
32
|
+
const [askNetlifyQuery, setAskNetlifyQuery] = useState('');
|
|
31
33
|
|
|
32
34
|
// Poll for the existence of window.pagefind.
|
|
33
35
|
useEffect(() => {
|
|
@@ -59,7 +61,7 @@ function SearchModal(props: Props = { className: '', children: null, debug: fals
|
|
|
59
61
|
const containerRef = useClickOutside<HTMLDivElement>(closeSearch);
|
|
60
62
|
|
|
61
63
|
useSearchLogger(state, debug);
|
|
62
|
-
useSearchToggles(isPagefindLoaded, openSearch
|
|
64
|
+
useSearchToggles(isPagefindLoaded, openSearch);
|
|
63
65
|
useSearchParams(isPagefindLoaded, actions.setSearchTerm, openSearch);
|
|
64
66
|
useSearchHotkeys(isPagefindLoaded, searchOpen, openSearch, closeSearch);
|
|
65
67
|
useKeyboardNav(isPagefindLoaded, modalRef, searchOpen, closeSearch);
|
|
@@ -93,10 +95,16 @@ function SearchModal(props: Props = { className: '', children: null, debug: fals
|
|
|
93
95
|
{...rest}
|
|
94
96
|
>
|
|
95
97
|
<div ref={containerRef} className="n-search-container">
|
|
96
|
-
{modalState.current === 'ask' &&
|
|
98
|
+
{modalState.current === 'ask' && (
|
|
99
|
+
<AskNetlify query={askNetlifyQuery} setModalState={setModalState} />
|
|
100
|
+
)}
|
|
97
101
|
{modalState.current === 'search' && (
|
|
98
102
|
<>
|
|
99
|
-
<SearchInput
|
|
103
|
+
<SearchInput
|
|
104
|
+
setSearchTerm={actions.setSearchTerm}
|
|
105
|
+
setAskNetlifyQuery={setAskNetlifyQuery}
|
|
106
|
+
initialValue={state.searchTerm}
|
|
107
|
+
/>
|
|
100
108
|
|
|
101
109
|
<SearchWindow
|
|
102
110
|
setModalState={setModalState}
|
|
@@ -75,10 +75,8 @@ export default function SearchWindow({
|
|
|
75
75
|
icon="lightbulb"
|
|
76
76
|
label="Toggle theme"
|
|
77
77
|
onClick={() => {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
const theme = isDarkTheme ? 'dark' : currentTheme ? currentTheme : 'light';
|
|
81
|
-
theme && handleThemeChange(ThemeMap[theme as Theme]);
|
|
78
|
+
const theme = document.documentElement.getAttribute('data-theme') as Theme;
|
|
79
|
+
theme && handleThemeChange(ThemeMap[theme]);
|
|
82
80
|
}}
|
|
83
81
|
/>
|
|
84
82
|
</>
|
|
@@ -12,24 +12,16 @@ import { useEffect } from 'preact/hooks';
|
|
|
12
12
|
* @param onOpen - A function to be called when a toggle element is clicked.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
export function useSearchToggles(
|
|
16
|
-
isPagefindLoaded: boolean,
|
|
17
|
-
onOpen: () => void,
|
|
18
|
-
setState: (state: { current: string }) => void
|
|
19
|
-
) {
|
|
15
|
+
export function useSearchToggles(isPagefindLoaded: boolean, onOpen: () => void) {
|
|
20
16
|
useEffect(() => {
|
|
21
|
-
if (!isPagefindLoaded) return
|
|
17
|
+
if (!isPagefindLoaded) return
|
|
22
18
|
const toggles = document.querySelectorAll('[data-ntl-search-toggle]');
|
|
23
19
|
|
|
24
20
|
if (!toggles.length) return;
|
|
25
21
|
|
|
26
22
|
toggles.forEach(t => {
|
|
27
|
-
const current = t.dataset.ntlSearchToggle ? t.dataset.ntlSearchToggle : 'search';
|
|
28
23
|
t.removeAttribute('disabled');
|
|
29
|
-
t.addEventListener('click',
|
|
30
|
-
onOpen();
|
|
31
|
-
setState({ current });
|
|
32
|
-
});
|
|
24
|
+
t.addEventListener('click', onOpen);
|
|
33
25
|
});
|
|
34
26
|
|
|
35
27
|
return () => {
|
|
@@ -160,10 +160,8 @@
|
|
|
160
160
|
--search-back-btn-bg-color: var(--neutral-100);
|
|
161
161
|
--search-bg-color: var(--neutral-000);
|
|
162
162
|
--search-highlight-color: var(--teal-000);
|
|
163
|
-
--search-
|
|
164
|
-
--search-
|
|
165
|
-
--search-submit-btn-bg-color: var(--teal-200);
|
|
166
|
-
--search-user-message-color: var(--teal-000);
|
|
163
|
+
--search-loading-color: var(--blue-700);
|
|
164
|
+
--search-user-message-color: var(--blue-100);
|
|
167
165
|
--shadow-deep: 0 16px 24px 0 color(srgb 0 0 0 / 0.07), 0 6px 30px 0 color(srgb 0 0 0 / 0.06), 0 8px 10px 0 color(srgb 0 0 0 / 0.1);
|
|
168
166
|
--shadow-heavy: -10px 10px 80px 0 color(srgb 0 0 0 / 0.1);
|
|
169
167
|
--shadow-hover: 0 4px 12px 0 color(srgb 0 0 0 / 0.25);
|
|
@@ -258,9 +256,7 @@
|
|
|
258
256
|
--search-back-btn-bg-color: var(--neutral-500);
|
|
259
257
|
--search-bg-color: var(--neutral-700);
|
|
260
258
|
--search-highlight-color: var(--teal-800);
|
|
261
|
-
--search-input-bg-color: var(--neutral-600);
|
|
262
259
|
--search-loading-color: var(--teal-200);
|
|
263
|
-
--search-submit-btn-bg-color: var(--teal-200);
|
|
264
260
|
--search-user-message-color: var(--teal-800);
|
|
265
261
|
--switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.2);
|
|
266
262
|
--title-text-color: color(srgb 0.8352941176470589 1 0.996078431372549 / 0.7490196078431373);
|
|
@@ -332,9 +328,7 @@
|
|
|
332
328
|
--search-back-btn-bg-color: var(--neutral-500);
|
|
333
329
|
--search-bg-color: var(--neutral-700);
|
|
334
330
|
--search-highlight-color: var(--teal-800);
|
|
335
|
-
--search-input-bg-color: var(--neutral-600);
|
|
336
331
|
--search-loading-color: var(--teal-200);
|
|
337
|
-
--search-submit-btn-bg-color: var(--teal-200);
|
|
338
332
|
--search-user-message-color: var(--teal-800);
|
|
339
333
|
--switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.2);
|
|
340
334
|
--title-text-color: color(srgb 0.8352941176470589 1 0.996078431372549 / 0.7490196078431373);
|
|
@@ -405,10 +399,8 @@
|
|
|
405
399
|
--search-back-btn-bg-color: var(--neutral-100);
|
|
406
400
|
--search-bg-color: var(--neutral-000);
|
|
407
401
|
--search-highlight-color: var(--teal-000);
|
|
408
|
-
--search-
|
|
409
|
-
--search-
|
|
410
|
-
--search-submit-btn-bg-color: var(--teal-200);
|
|
411
|
-
--search-user-message-color: var(--teal-000);
|
|
402
|
+
--search-loading-color: var(--blue-700);
|
|
403
|
+
--search-user-message-color: var(--blue-100);
|
|
412
404
|
--switcher-tab-bg-color: color(srgb 1 1 1 / 0.047058823529411764);
|
|
413
405
|
--title-text-color: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451 / 0.7490196078431373);
|
|
414
406
|
}
|
package/packages/utils/theme.ts
CHANGED
|
@@ -6,10 +6,6 @@ export const ThemeMap: Record<Theme, Theme> = {
|
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
export const handleThemeChange = (value: Theme) => {
|
|
9
|
-
const themeSelect = document.getElementById('site-theme-select') as HTMLSelectElement;
|
|
10
|
-
if (themeSelect) {
|
|
11
|
-
themeSelect.value = value;
|
|
12
|
-
}
|
|
13
9
|
const element = document.documentElement;
|
|
14
10
|
element.setAttribute('data-theme', value);
|
|
15
11
|
localStorage.setItem('theme', value);
|