@patternfly/patternfly-doc-core 1.0.0 → 1.0.2
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/.astro/data-store.json +1 -0
- package/.astro/settings.json +5 -0
- package/.github/workflows/build.yml +1 -1
- package/.vscode/launch.json +22 -0
- package/dist/_astro/Navigation.BBuu_1_L.js +1 -0
- package/dist/_astro/PageContext.DIMIWrWv.js +9 -0
- package/dist/_astro/{PageToggle.jHn9PsTr.js → PageToggle.jNCPBUqq.js} +1 -1
- package/dist/_astro/Toolbar.jxsDq7xe.js +1 -0
- package/dist/_astro/{divider.DrQDtXS2.js → divider.Db64YCZ6.js} +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/design-foundations/typography/index.html +2 -2
- package/dist/design-foundations/usage-and-behavior/index.html +2 -2
- package/dist/get-started/contribute/index.html +2 -2
- package/dist/index.html +2 -2
- package/eslint.config.mjs +1 -1
- package/package.json +1 -1
- package/src/components/Toolbar.astro +1 -1
- package/src/components/Toolbar.tsx +20 -147
- package/src/components/toolbar/DocumentReleaseDropdown.tsx +72 -0
- package/src/components/toolbar/SearchComponent.tsx +38 -0
- package/src/components/toolbar/ToogleThemeSwitcher.tsx +51 -0
- package/src/layouts/Main.astro +11 -0
- package/src/pages/index.astro +1 -1
- package/src/types.ts +9 -0
- package/src/utils/theme.ts +20 -0
- package/src/versions.json +1404 -0
- package/.history/package_20250227163130.json +0 -97
- package/.history/package_20250227163527.json +0 -97
- package/.history/package_20250227163646.json +0 -97
- package/.history/package_20250227163651.json +0 -97
- package/.history/package_20250227163654.json +0 -97
- package/.history/package_20250227163657.json +0 -97
- package/.history/package_20250227163659.json +0 -97
- package/.history/package_20250227164608.json +0 -97
- package/.history/package_20250227164611.json +0 -97
- package/.history/package_20250227164616.json +0 -98
- package/dist/_astro/Navigation.BoL0fVlO.js +0 -1
- package/dist/_astro/PageContext.CGSBAxAd.js +0 -9
- package/dist/_astro/Toolbar.BI0orElX.js +0 -1
- package/src/components/Breadcrumbs.astro +0 -10
- package/src/components/KebabDropdownItems.astro +0 -14
- package/src/components/KebabDropdownItems.tsx +0 -15
- package/src/components/UserDropdownItems.astro +0 -9
- package/src/components/UserDropdownItems.tsx +0 -10
|
@@ -1,60 +1,18 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
|
-
import { useState } from 'react'
|
|
3
2
|
import {
|
|
4
|
-
Avatar,
|
|
5
3
|
Button,
|
|
6
|
-
ButtonVariant,
|
|
7
|
-
Divider,
|
|
8
|
-
Dropdown,
|
|
9
|
-
DropdownGroup,
|
|
10
|
-
DropdownList,
|
|
11
|
-
MenuToggle,
|
|
12
|
-
type MenuToggleElement,
|
|
13
4
|
Toolbar as PFToolbar,
|
|
14
5
|
ToolbarContent,
|
|
15
6
|
ToolbarGroup,
|
|
16
7
|
ToolbarItem,
|
|
17
8
|
} from '@patternfly/react-core'
|
|
18
|
-
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon'
|
|
19
|
-
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon'
|
|
20
|
-
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon'
|
|
21
|
-
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'
|
|
22
9
|
|
|
23
|
-
import
|
|
10
|
+
import { ToggleThemeSwitcher } from './toolbar/ToogleThemeSwitcher'
|
|
11
|
+
import { SearchComponent } from './toolbar/SearchComponent'
|
|
12
|
+
import { DocumentReleaseDropdown } from './toolbar/DocumentReleaseDropdown';
|
|
13
|
+
import GithubIcon from '@patternfly/react-icons/dist/esm/icons/github-icon';
|
|
24
14
|
|
|
25
|
-
|
|
26
|
-
import { UserDropdownItems } from './UserDropdownItems'
|
|
27
|
-
|
|
28
|
-
export const Toolbar: React.FunctionComponent = () => {
|
|
29
|
-
const [isDropdownOpen, setIsDropdownOpen] = useState(false)
|
|
30
|
-
const [isKebabDropdownOpen, setIsKebabDropdownOpen] = useState(false)
|
|
31
|
-
const [isFullKebabDropdownOpen, setIsFullKebabDropdownOpen] = useState(false)
|
|
32
|
-
|
|
33
|
-
const onDropdownToggle = () => {
|
|
34
|
-
setIsDropdownOpen(!isDropdownOpen)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const onDropdownSelect = () => {
|
|
38
|
-
setIsDropdownOpen(false)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const onKebabDropdownToggle = () => {
|
|
42
|
-
setIsKebabDropdownOpen(!isKebabDropdownOpen)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const onKebabDropdownSelect = () => {
|
|
46
|
-
setIsKebabDropdownOpen(false)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const onFullKebabDropdownToggle = () => {
|
|
50
|
-
setIsFullKebabDropdownOpen(!isFullKebabDropdownOpen)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const onFullKebabDropdownSelect = () => {
|
|
54
|
-
setIsFullKebabDropdownOpen(false)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return (
|
|
15
|
+
export const Toolbar: React.FunctionComponent = () => (
|
|
58
16
|
<PFToolbar id="toolbar" isStatic>
|
|
59
17
|
<ToolbarContent>
|
|
60
18
|
<ToolbarGroup
|
|
@@ -63,111 +21,26 @@ export const Toolbar: React.FunctionComponent = () => {
|
|
|
63
21
|
gap={{ default: 'gapNone', md: 'gapMd' }}
|
|
64
22
|
>
|
|
65
23
|
<ToolbarItem>
|
|
66
|
-
<
|
|
67
|
-
aria-label="Notifications"
|
|
68
|
-
variant={ButtonVariant.plain}
|
|
69
|
-
icon={<BellIcon />}
|
|
70
|
-
/>
|
|
24
|
+
<ToggleThemeSwitcher/>
|
|
71
25
|
</ToolbarItem>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
visibility={{ default: 'hidden', lg: 'visible' }}
|
|
75
|
-
>
|
|
76
|
-
<ToolbarItem>
|
|
77
|
-
<Button
|
|
78
|
-
aria-label="Settings"
|
|
79
|
-
variant={ButtonVariant.plain}
|
|
80
|
-
icon={<CogIcon />}
|
|
81
|
-
/>
|
|
82
|
-
</ToolbarItem>
|
|
83
|
-
<ToolbarItem>
|
|
84
|
-
<Button
|
|
85
|
-
aria-label="Help"
|
|
86
|
-
variant={ButtonVariant.plain}
|
|
87
|
-
icon={<QuestionCircleIcon />}
|
|
88
|
-
/>
|
|
89
|
-
</ToolbarItem>
|
|
90
|
-
</ToolbarGroup>
|
|
91
|
-
<ToolbarItem
|
|
92
|
-
visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}
|
|
93
|
-
>
|
|
94
|
-
<Dropdown
|
|
95
|
-
isOpen={isKebabDropdownOpen}
|
|
96
|
-
onSelect={onKebabDropdownSelect}
|
|
97
|
-
onOpenChange={(isOpen: boolean) => setIsKebabDropdownOpen(isOpen)}
|
|
98
|
-
popperProps={{ position: 'right' }}
|
|
99
|
-
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
|
|
100
|
-
<MenuToggle
|
|
101
|
-
ref={toggleRef}
|
|
102
|
-
onClick={onKebabDropdownToggle}
|
|
103
|
-
isExpanded={isKebabDropdownOpen}
|
|
104
|
-
variant="plain"
|
|
105
|
-
aria-label="Settings and help"
|
|
106
|
-
>
|
|
107
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
108
|
-
</MenuToggle>
|
|
109
|
-
)}
|
|
110
|
-
>
|
|
111
|
-
<DropdownList>
|
|
112
|
-
<KebabDropdownItems />
|
|
113
|
-
</DropdownList>
|
|
114
|
-
</Dropdown>
|
|
26
|
+
<ToolbarItem>
|
|
27
|
+
<SearchComponent/>
|
|
115
28
|
</ToolbarItem>
|
|
116
|
-
<ToolbarItem
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
popperProps={{ position: 'right' }}
|
|
124
|
-
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
|
|
125
|
-
<MenuToggle
|
|
126
|
-
ref={toggleRef}
|
|
127
|
-
onClick={onFullKebabDropdownToggle}
|
|
128
|
-
isExpanded={isFullKebabDropdownOpen}
|
|
129
|
-
variant="plain"
|
|
130
|
-
aria-label="Toolbar menu"
|
|
131
|
-
>
|
|
132
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
133
|
-
</MenuToggle>
|
|
134
|
-
)}
|
|
29
|
+
<ToolbarItem>
|
|
30
|
+
<Button
|
|
31
|
+
component="a"
|
|
32
|
+
variant="plain"
|
|
33
|
+
href="//github.com/patternfly"
|
|
34
|
+
target="top"
|
|
35
|
+
aria-label="PatternFly GitHub page"
|
|
135
36
|
>
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
<Divider />
|
|
142
|
-
<DropdownList>
|
|
143
|
-
<KebabDropdownItems />
|
|
144
|
-
</DropdownList>
|
|
145
|
-
</Dropdown>
|
|
37
|
+
<GithubIcon />
|
|
38
|
+
</Button>
|
|
39
|
+
</ToolbarItem>
|
|
40
|
+
<ToolbarItem>
|
|
41
|
+
<DocumentReleaseDropdown/>
|
|
146
42
|
</ToolbarItem>
|
|
147
43
|
</ToolbarGroup>
|
|
148
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
149
|
-
<Dropdown
|
|
150
|
-
isOpen={isDropdownOpen}
|
|
151
|
-
onSelect={onDropdownSelect}
|
|
152
|
-
onOpenChange={(isOpen: boolean) => setIsDropdownOpen(isOpen)}
|
|
153
|
-
popperProps={{ position: 'right' }}
|
|
154
|
-
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
|
|
155
|
-
<MenuToggle
|
|
156
|
-
ref={toggleRef}
|
|
157
|
-
onClick={onDropdownToggle}
|
|
158
|
-
isExpanded={isDropdownOpen}
|
|
159
|
-
icon={<Avatar src={imgAvatar} alt="" size="sm" />}
|
|
160
|
-
>
|
|
161
|
-
Ned Username
|
|
162
|
-
</MenuToggle>
|
|
163
|
-
)}
|
|
164
|
-
>
|
|
165
|
-
<DropdownList>
|
|
166
|
-
<UserDropdownItems />
|
|
167
|
-
</DropdownList>
|
|
168
|
-
</Dropdown>
|
|
169
|
-
</ToolbarItem>
|
|
170
44
|
</ToolbarContent>
|
|
171
45
|
</PFToolbar>
|
|
172
46
|
)
|
|
173
|
-
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
Dropdown,
|
|
4
|
+
DropdownList,
|
|
5
|
+
MenuToggle,
|
|
6
|
+
DropdownGroup,
|
|
7
|
+
DropdownItem,
|
|
8
|
+
Divider,
|
|
9
|
+
} from '@patternfly/react-core'
|
|
10
|
+
import { Release } from '../../types'
|
|
11
|
+
import versions from '../../versions.json'
|
|
12
|
+
|
|
13
|
+
export const DocumentReleaseDropdown: React.FunctionComponent = () => {
|
|
14
|
+
const latestRelease = versions.Releases.find(
|
|
15
|
+
(release) => release.latest,
|
|
16
|
+
) as Release
|
|
17
|
+
const previousReleases = Object.values(versions.Releases).filter(
|
|
18
|
+
(release) => !release.hidden && !release.latest,
|
|
19
|
+
) as Release []
|
|
20
|
+
|
|
21
|
+
const previousVersions = Object.values(versions.ArchivedReleases) as Release[];
|
|
22
|
+
|
|
23
|
+
const [isDropdownOpen, setDropdownOpen] = React.useState(false)
|
|
24
|
+
|
|
25
|
+
const getDropdownItem = (version: Release, isLatest = false) => (
|
|
26
|
+
<DropdownItem
|
|
27
|
+
itemId={`${version.name}-latest-release`}
|
|
28
|
+
key={`${version.name}-latest`}
|
|
29
|
+
// eslint-disable-next-line no-nested-ternary
|
|
30
|
+
to={isLatest ? '/' : version.href ? version.href : `/${version.name}`}
|
|
31
|
+
isExternalLink = {version.href ? true : false}
|
|
32
|
+
>
|
|
33
|
+
{`Release ${version.name}`}
|
|
34
|
+
</DropdownItem>
|
|
35
|
+
)
|
|
36
|
+
return (
|
|
37
|
+
<Dropdown
|
|
38
|
+
onSelect={() => setDropdownOpen(!isDropdownOpen)}
|
|
39
|
+
onOpenChange={(isOpen) => setDropdownOpen(isOpen)}
|
|
40
|
+
isOpen={isDropdownOpen}
|
|
41
|
+
toggle={(toggleRef) => (
|
|
42
|
+
<MenuToggle
|
|
43
|
+
ref={toggleRef}
|
|
44
|
+
onClick={() => setDropdownOpen(!isDropdownOpen)}
|
|
45
|
+
isExpanded={isDropdownOpen}
|
|
46
|
+
>
|
|
47
|
+
{`Release ${latestRelease.name}`}
|
|
48
|
+
</MenuToggle>
|
|
49
|
+
)}
|
|
50
|
+
popperProps={{ position: 'right' }}
|
|
51
|
+
>
|
|
52
|
+
<DropdownGroup key="Latest" label="Latest">
|
|
53
|
+
<DropdownList>{getDropdownItem(latestRelease, true)}</DropdownList>
|
|
54
|
+
</DropdownGroup>
|
|
55
|
+
{previousReleases.length > 0 && (
|
|
56
|
+
<DropdownGroup key="Previous releases" label="Previous releases">
|
|
57
|
+
<DropdownList>
|
|
58
|
+
{previousReleases
|
|
59
|
+
.slice(0, 3)
|
|
60
|
+
.map((version) => getDropdownItem(version))}
|
|
61
|
+
</DropdownList>
|
|
62
|
+
</DropdownGroup>
|
|
63
|
+
)}
|
|
64
|
+
{previousVersions.length > 0 && (
|
|
65
|
+
<><Divider key="divider1" /><DropdownGroup key="Previous versions" label="Previous versions">
|
|
66
|
+
<DropdownList>
|
|
67
|
+
{previousVersions.map((version) => getDropdownItem(version))}
|
|
68
|
+
</DropdownList>
|
|
69
|
+
</DropdownGroup></>)}
|
|
70
|
+
</Dropdown>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SearchInput } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
interface SearchComponentProps {
|
|
5
|
+
/* Indicates if search compoonent should be visible or not. */
|
|
6
|
+
searchEnabled?: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const SearchComponent : React.FunctionComponent<SearchComponentProps> = ({searchEnabled = true}) => {
|
|
10
|
+
const [searchValue, setSearchValue] = React.useState('');
|
|
11
|
+
const [isSearchExpanded, setIsSearchExpanded] = React.useState(false);
|
|
12
|
+
|
|
13
|
+
//TODO: Add search for algolia or alternative search to this component.
|
|
14
|
+
|
|
15
|
+
const onChange = (_evt: any, value: any) => {
|
|
16
|
+
setSearchValue(value);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const onToggleExpand = (_evt: any, isSearchExpanded: boolean) => {
|
|
20
|
+
setIsSearchExpanded(!isSearchExpanded);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
searchEnabled && <SearchInput
|
|
26
|
+
className="ws-global-search"
|
|
27
|
+
placeholder="Search"
|
|
28
|
+
value={searchValue}
|
|
29
|
+
onChange={onChange}
|
|
30
|
+
onClear={(_evt) => onChange(_evt, '')}
|
|
31
|
+
expandableInput={{
|
|
32
|
+
isExpanded: isSearchExpanded,
|
|
33
|
+
onToggleExpand,
|
|
34
|
+
toggleAriaLabel: 'Expandable search input toggle'
|
|
35
|
+
}}
|
|
36
|
+
/>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Icon, ToggleGroup, ToggleGroupItem } from '@patternfly/react-core'
|
|
3
|
+
import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon'
|
|
4
|
+
import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon'
|
|
5
|
+
import { getThemePreference, updateThemePreference } from '../../utils/theme'
|
|
6
|
+
|
|
7
|
+
export const ToggleThemeSwitcher: React.FunctionComponent = () => {
|
|
8
|
+
const [isDarkTheme, setIsDarkTheme] = React.useState(false);
|
|
9
|
+
|
|
10
|
+
React.useEffect(() => {
|
|
11
|
+
// const darkTheme = window?.localStorage?.getItem('darkMode') === 'true' ? true : false;
|
|
12
|
+
// const html = document.querySelector('html') as HTMLHtmlElement
|
|
13
|
+
// html.classList.toggle('pf-v6-theme-dark', darkTheme)
|
|
14
|
+
const darkTheme = getThemePreference() === 'dark';
|
|
15
|
+
setIsDarkTheme(darkTheme);
|
|
16
|
+
}, []);
|
|
17
|
+
|
|
18
|
+
const toggleDarkTheme = (_evt: unknown, selected: boolean) => {
|
|
19
|
+
const darkThemeToggleClicked = !selected === isDarkTheme
|
|
20
|
+
updateThemePreference(darkThemeToggleClicked ? 'dark' : 'light');
|
|
21
|
+
// const html = document.querySelector('html') as HTMLHtmlElement
|
|
22
|
+
// html.classList.toggle('pf-v6-theme-dark', darkThemeToggleClicked)
|
|
23
|
+
setIsDarkTheme(darkThemeToggleClicked);
|
|
24
|
+
//localStorage.setItem('darkMode', JSON.stringify(darkThemeToggleClicked));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<ToggleGroup aria-label="Dark theme toggle group">
|
|
29
|
+
<ToggleGroupItem
|
|
30
|
+
aria-label="light theme toggle"
|
|
31
|
+
icon={
|
|
32
|
+
<Icon size="md">
|
|
33
|
+
<SunIcon />
|
|
34
|
+
</Icon>
|
|
35
|
+
}
|
|
36
|
+
isSelected={!isDarkTheme}
|
|
37
|
+
onChange={toggleDarkTheme}
|
|
38
|
+
/>
|
|
39
|
+
<ToggleGroupItem
|
|
40
|
+
aria-label="dark theme toggle"
|
|
41
|
+
icon={
|
|
42
|
+
<Icon size="md">
|
|
43
|
+
<MoonIcon />
|
|
44
|
+
</Icon>
|
|
45
|
+
}
|
|
46
|
+
isSelected={isDarkTheme}
|
|
47
|
+
onChange={toggleDarkTheme}
|
|
48
|
+
/>
|
|
49
|
+
</ToggleGroup>
|
|
50
|
+
)
|
|
51
|
+
}
|
package/src/layouts/Main.astro
CHANGED
|
@@ -5,6 +5,7 @@ import { ClientRouter } from 'astro:transitions'
|
|
|
5
5
|
import Page from '../components/Page.astro'
|
|
6
6
|
import Masthead from '../components/Masthead.astro'
|
|
7
7
|
import Navigation from '../components/Navigation.astro'
|
|
8
|
+
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
<html lang="en" transition:animate="none">
|
|
@@ -24,3 +25,13 @@ import Navigation from '../components/Navigation.astro'
|
|
|
24
25
|
</Page>
|
|
25
26
|
</body>
|
|
26
27
|
</html>
|
|
28
|
+
|
|
29
|
+
<script>
|
|
30
|
+
const themePreference = window.localStorage.getItem ('theme-preference');
|
|
31
|
+
document?.querySelector('html')?.classList.toggle('pf-v6-theme-dark', themePreference === 'dark' );
|
|
32
|
+
|
|
33
|
+
document.addEventListener("astro:after-swap", () => {
|
|
34
|
+
const themePreference = window.localStorage.getItem ('theme-preference');
|
|
35
|
+
document?.querySelector('html')?.classList.toggle('pf-v6-theme-dark', themePreference === 'dark' );
|
|
36
|
+
});
|
|
37
|
+
</script>
|
package/src/pages/index.astro
CHANGED
|
@@ -9,7 +9,7 @@ import MainLayout from '../layouts/Main.astro'
|
|
|
9
9
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
10
10
|
<meta name="viewport" content="width=device-width" />
|
|
11
11
|
<meta name="generator" content={Astro.generator} />
|
|
12
|
-
<title>
|
|
12
|
+
<title>PatternFly</title>
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<MainLayout title="PatternFly X Astro"> Page content </MainLayout>
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Theme = 'dark' | 'light' | 'system';
|
|
2
|
+
|
|
3
|
+
export const updateThemePreference = (theme: Theme) => {
|
|
4
|
+
if(typeof window !== undefined) {
|
|
5
|
+
window?.localStorage?.setItem('theme-preference', theme)
|
|
6
|
+
document?.querySelector('html')?.classList.toggle('pf-v6-theme-dark', theme === 'dark' );
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export const getThemePreference = (): Theme => {
|
|
10
|
+
const theme = window?.localStorage?.getItem ('theme-preference');
|
|
11
|
+
return theme !== undefined ? (theme as Theme) : 'system';
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const themeLoader = () => {
|
|
15
|
+
if(typeof window !== 'undefined') {
|
|
16
|
+
window.addEventListener('DOMContentLoaded', ()=> {
|
|
17
|
+
updateThemePreference(getThemePreference());
|
|
18
|
+
})
|
|
19
|
+
};
|
|
20
|
+
}
|