File size: 3,221 Bytes
9b19fd8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import { useEffect, useState } from 'react';
import StorageUtils from '../utils/storage';
import { useAppContext } from '../utils/app.context';
import { classNames } from '../utils/misc';
import daisyuiThemes from 'daisyui/theme/object';
import { THEMES } from '../Config';
import {
  Cog8ToothIcon,
  MoonIcon,
  Bars3Icon,
} from '@heroicons/react/24/outline';

export default function Header() {
  const [selectedTheme, setSelectedTheme] = useState(StorageUtils.getTheme());
  const { setShowSettings } = useAppContext();

  const setTheme = (theme: string) => {
    StorageUtils.setTheme(theme);
    setSelectedTheme(theme);
  };

  useEffect(() => {
    document.body.setAttribute('data-theme', selectedTheme);
    document.body.setAttribute(
      'data-color-scheme',
      daisyuiThemes[selectedTheme]?.['color-scheme'] ?? 'auto'
    );
  }, [selectedTheme]);

  return (
    <div className="flex flex-row items-center pt-6 pb-6 sticky top-0 z-10 bg-base-100">

      {/* open sidebar button */}

      <label htmlFor="toggle-drawer" className="btn btn-ghost lg:hidden">

        <Bars3Icon className="h-5 w-5" />

      </label>



      <div className="grow text-2xl font-bold ml-2">llama.cpp</div>



      {/* action buttons (top right) */}

      <div className="flex items-center">

        <div

          className="tooltip tooltip-bottom"

          data-tip="Settings"

          onClick={() => setShowSettings(true)}

        >

          <button className="btn" aria-hidden={true}>

            {/* settings button */}

            <Cog8ToothIcon className="w-5 h-5" />

          </button>

        </div>



        {/* theme controller is copied from https://daisyui.com/components/theme-controller/ */}

        <div className="tooltip tooltip-bottom" data-tip="Themes">

          <div className="dropdown dropdown-end dropdown-bottom">

            <div tabIndex={0} role="button" className="btn m-1">

              <MoonIcon className="w-5 h-5" />

            </div>

            <ul

              tabIndex={0}

              className="dropdown-content bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl h-80 overflow-y-auto"

            >

              <li>

                <button

                  className={classNames({

                    'btn btn-sm btn-block btn-ghost justify-start': true,

                    'btn-active': selectedTheme === 'auto',

                  })}

                  onClick={() => setTheme('auto')}

                >

                  auto

                </button>

              </li>

              {THEMES.map((theme) => (

                <li key={theme}>

                  <input

                    type="radio"

                    name="theme-dropdown"

                    className="theme-controller btn btn-sm btn-block btn-ghost justify-start"

                    aria-label={theme}

                    value={theme}

                    checked={selectedTheme === theme}

                    onChange={(e) => e.target.checked && setTheme(theme)}

                  />

                </li>

              ))}

            </ul>

          </div>

        </div>

      </div>

    </div>
  );
}