@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.
Files changed (23) hide show
  1. package/dist/assets/AskNetlify.css +1 -1
  2. package/dist/assets/SearchHeading.css +1 -1
  3. package/dist/assets/SearchLink.css +1 -1
  4. package/dist/assets/SearchModal.css +1 -1
  5. package/dist/components/preact/AskNetlify/AskNetlify.d.ts +1 -6
  6. package/dist/components/preact/AskNetlify/AskNetlify.js +665 -680
  7. package/dist/components/preact/Icon/index.js +30 -57
  8. package/dist/components/preact/SearchModal/components/SearchModal/SearchModal.js +49 -42
  9. package/dist/components/preact/SearchModal/components/SearchWindow.js +19 -20
  10. package/dist/components/preact/SearchModal/hooks/useSearchToggles.d.ts +1 -3
  11. package/dist/components/preact/SearchModal/hooks/useSearchToggles.js +10 -13
  12. package/package.json +1 -1
  13. package/packages/components/preact/AskNetlify/AskNetlify.css +109 -191
  14. package/packages/components/preact/AskNetlify/AskNetlify.tsx +29 -45
  15. package/packages/components/preact/Icon/index.tsx +0 -21
  16. package/packages/components/preact/SearchModal/components/SearchHeading/SearchHeading.css +1 -1
  17. package/packages/components/preact/SearchModal/components/SearchLink/SearchLink.css +1 -6
  18. package/packages/components/preact/SearchModal/components/SearchModal/SearchModal.css +20 -4
  19. package/packages/components/preact/SearchModal/components/SearchModal/SearchModal.tsx +11 -3
  20. package/packages/components/preact/SearchModal/components/SearchWindow.tsx +2 -4
  21. package/packages/components/preact/SearchModal/hooks/useSearchToggles.ts +3 -11
  22. package/packages/styles/tokens.css +4 -12
  23. 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, setModalState);
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' && <AskNetlify setModalState={setModalState} />}
98
+ {modalState.current === 'ask' && (
99
+ <AskNetlify query={askNetlifyQuery} setModalState={setModalState} />
100
+ )}
97
101
  {modalState.current === 'search' && (
98
102
  <>
99
- <SearchInput setSearchTerm={actions.setSearchTerm} initialValue={state.searchTerm} />
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 isDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches;
79
- const currentTheme = document.documentElement.getAttribute('data-theme');
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-input-bg-color: var(--neutral-100);
164
- --search-loading-color: var(--teal-700);
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-input-bg-color: var(--neutral-100);
409
- --search-loading-color: var(--teal-700);
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
  }
@@ -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);