From c19ca8ccf6c6f0547f53046a8a49a351cdbb93bd Mon Sep 17 00:00:00 2001 From: Donald Labaj Date: Thu, 6 Feb 2025 08:12:59 -0500 Subject: [PATCH 1/3] feat: Page template updates. --- .vscode/launch.json | 22 + src/components/Breadcrumbs.astro | 10 - src/components/KebabDropdownItems.astro | 14 - src/components/KebabDropdownItems.tsx | 15 - src/components/Toolbar.tsx | 163 +- src/components/UserDropdownItems.astro | 9 - src/components/UserDropdownItems.tsx | 10 - .../toolbar/DocumentReleaseDropdown.tsx | 71 + src/components/toolbar/SearchComponent.tsx | 38 + .../toolbar/ToogleThemeSwitcher.tsx | 48 + .../DocumentReleaseDropdown.test.tsx | 83 + .../__tests__/SearchComponent.test.tsx | 64 + src/types.ts | 9 + src/versions.json | 1404 +++++++++++++++++ 14 files changed, 1758 insertions(+), 202 deletions(-) delete mode 100644 src/components/Breadcrumbs.astro delete mode 100644 src/components/KebabDropdownItems.astro delete mode 100644 src/components/KebabDropdownItems.tsx delete mode 100644 src/components/UserDropdownItems.astro delete mode 100644 src/components/UserDropdownItems.tsx create mode 100644 src/components/toolbar/DocumentReleaseDropdown.tsx create mode 100644 src/components/toolbar/SearchComponent.tsx create mode 100644 src/components/toolbar/ToogleThemeSwitcher.tsx create mode 100644 src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx create mode 100644 src/components/toolbar/__tests__/SearchComponent.test.tsx create mode 100644 src/types.ts create mode 100644 src/versions.json diff --git a/.vscode/launch.json b/.vscode/launch.json index d642209..482f620 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,6 +6,28 @@ "name": "Development server", "request": "launch", "type": "node-terminal" + }, + { + "type": "node", + "request": "launch", + "name": "Test Spec File", + "program": "${workspaceRoot}/node_modules/jest/bin/jest.js", + "args": [ + "--collectCoverage=false", + "--colors", + "--config", + "${workspaceRoot}/jest.config.ts", + "--runInBand" + ], + "internalConsoleOptions": "neverOpen", + "sourceMaps": true, + "skipFiles": [ + "${workspaceRoot}/../../node_modules/**/*" + ], + "windows": { + "skipFiles": ["C:\\\\**\\\\node_modules\\\\**\\\\*"] + }, + "stopOnEntry": true } ] } diff --git a/src/components/Breadcrumbs.astro b/src/components/Breadcrumbs.astro deleted file mode 100644 index 6255e8a..0000000 --- a/src/components/Breadcrumbs.astro +++ /dev/null @@ -1,10 +0,0 @@ ---- -import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core' ---- - - - Section home - Section title - Section title - Section landing - diff --git a/src/components/KebabDropdownItems.astro b/src/components/KebabDropdownItems.astro deleted file mode 100644 index 3490302..0000000 --- a/src/components/KebabDropdownItems.astro +++ /dev/null @@ -1,14 +0,0 @@ ---- -import { DropdownItem } from '@patternfly/react-core' -import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon' -import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon' ---- - -<> - - Settings - - - Help - - diff --git a/src/components/KebabDropdownItems.tsx b/src/components/KebabDropdownItems.tsx deleted file mode 100644 index 18fd359..0000000 --- a/src/components/KebabDropdownItems.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import { DropdownItem } from '@patternfly/react-core' -import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon' -import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon' - -export const KebabDropdownItems: React.FunctionComponent = () => ( - <> - - Settings - - - Help - - -) diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index df6da83..7fbe146 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -1,59 +1,18 @@ import * as React from 'react' -import { useState } from 'react' import { - Avatar, Button, - ButtonVariant, - Divider, - Dropdown, - DropdownGroup, - DropdownList, - MenuToggle, - type MenuToggleElement, Toolbar as PFToolbar, ToolbarContent, ToolbarGroup, ToolbarItem, } from '@patternfly/react-core' -import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon' -import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon' -import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon' -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon' -import imgAvatar from '/avatarImg.svg?url' - -import { KebabDropdownItems } from './KebabDropdownItems' -import { UserDropdownItems } from './UserDropdownItems' +import { ToggleThemeSwitcher } from './toolbar/ToogleThemeSwitcher' +import { SearchComponent } from './toolbar/SearchComponent' +import { DocumentReleaseDropdown } from './toolbar/DocumentReleaseDropdown'; +import GithubIcon from '@patternfly/react-icons/dist/esm/icons/github-icon'; export const Toolbar: React.FunctionComponent = () => { - const [isDropdownOpen, setIsDropdownOpen] = useState(false) - const [isKebabDropdownOpen, setIsKebabDropdownOpen] = useState(false) - const [isFullKebabDropdownOpen, setIsFullKebabDropdownOpen] = useState(false) - - const onDropdownToggle = () => { - setIsDropdownOpen(!isDropdownOpen) - } - - const onDropdownSelect = () => { - setIsDropdownOpen(false) - } - - const onKebabDropdownToggle = () => { - setIsKebabDropdownOpen(!isKebabDropdownOpen) - } - - const onKebabDropdownSelect = () => { - setIsKebabDropdownOpen(false) - } - - const onFullKebabDropdownToggle = () => { - setIsFullKebabDropdownOpen(!isFullKebabDropdownOpen) - } - - const onFullKebabDropdownSelect = () => { - setIsFullKebabDropdownOpen(false) - } - return ( @@ -63,110 +22,26 @@ export const Toolbar: React.FunctionComponent = () => { gap={{ default: 'gapNone', md: 'gapMd' }} > - + + + - - setIsDropdownOpen(isOpen)} - popperProps={{ position: 'right' }} - toggle={(toggleRef: React.Ref) => ( - } - > - Ned Username - - )} - > - - - - - ) diff --git a/src/components/UserDropdownItems.astro b/src/components/UserDropdownItems.astro deleted file mode 100644 index e474214..0000000 --- a/src/components/UserDropdownItems.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import { DropdownItem } from '@patternfly/react-core' ---- - -<> - My profile - User management - Logout - diff --git a/src/components/UserDropdownItems.tsx b/src/components/UserDropdownItems.tsx deleted file mode 100644 index 1c779a7..0000000 --- a/src/components/UserDropdownItems.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import { DropdownItem } from '@patternfly/react-core' - -export const UserDropdownItems: React.FunctionComponent = () => ( - <> - My profile - User management - Logout - -) diff --git a/src/components/toolbar/DocumentReleaseDropdown.tsx b/src/components/toolbar/DocumentReleaseDropdown.tsx new file mode 100644 index 0000000..8f33b2d --- /dev/null +++ b/src/components/toolbar/DocumentReleaseDropdown.tsx @@ -0,0 +1,71 @@ +import React from 'react' +import { + Dropdown, + DropdownList, + MenuToggle, + DropdownGroup, + DropdownItem, + Divider, +} from '@patternfly/react-core' +import { Release } from '../../types' +import versions from '../../versions.json' + +export const DocumentReleaseDropdown: React.FunctionComponent = () => { + const latestRelease = versions.Releases.find( + (release) => release.latest, + ) as Release + const previousReleases = Object.values(versions.Releases).filter( + (release) => !release.hidden && !release.latest, + ) as Release [] + + const previousVersions = Object.values(versions.ArchivedReleases) as Release[]; + + const [isDropdownOpen, setDropdownOpen] = React.useState(false) + + const getDropdownItem = (version: Release, isLatest = false) => ( + + {`Release ${version.name}`} + + ) + return ( + setDropdownOpen(!isDropdownOpen)} + onOpenChange={(isOpen) => setDropdownOpen(isOpen)} + isOpen={isDropdownOpen} + toggle={(toggleRef) => ( + setDropdownOpen(!isDropdownOpen)} + isExpanded={isDropdownOpen} + > + {`Release ${latestRelease.name}`} + + )} + popperProps={{ position: 'right' }} + > + + {getDropdownItem(latestRelease, true)} + + {previousReleases.length > 0 && ( + + + {previousReleases + .slice(0, 3) + .map((version) => getDropdownItem(version))} + + + )} + {previousVersions.length > 0 && ( + <> + + {previousVersions.map((version) => getDropdownItem(version))} + + )} + + ) +} diff --git a/src/components/toolbar/SearchComponent.tsx b/src/components/toolbar/SearchComponent.tsx new file mode 100644 index 0000000..f61c3e8 --- /dev/null +++ b/src/components/toolbar/SearchComponent.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { SearchInput } from '@patternfly/react-core'; + +interface SearchComponentProps { + /* Indicates if search compoonent should be visible or not. */ + searchEnabled?: boolean +} + +export const SearchComponent : React.FunctionComponent = ({searchEnabled = true}) => { + const [searchValue, setSearchValue] = React.useState(''); + const [isSearchExpanded, setIsSearchExpanded] = React.useState(false); + + //TODO: Add search for algolia or alternative search to this component. + + const onChange = (_evt: any, value: any) => { + setSearchValue(value); + }; + + const onToggleExpand = (_evt: any, isSearchExpanded: boolean) => { + setIsSearchExpanded(!isSearchExpanded); + }; + + + return ( + searchEnabled && onChange(_evt, '')} + expandableInput={{ + isExpanded: isSearchExpanded, + onToggleExpand, + toggleAriaLabel: 'Expandable search input toggle' + }} + /> + ) +} \ No newline at end of file diff --git a/src/components/toolbar/ToogleThemeSwitcher.tsx b/src/components/toolbar/ToogleThemeSwitcher.tsx new file mode 100644 index 0000000..2eed8a4 --- /dev/null +++ b/src/components/toolbar/ToogleThemeSwitcher.tsx @@ -0,0 +1,48 @@ +import React from 'react' +import { Icon, ToggleGroup, ToggleGroupItem } from '@patternfly/react-core' +import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon' +import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon' + +export const ToggleThemeSwitcher: React.FunctionComponent = () => { + const [isDarkTheme, setIsDarkTheme] = React.useState(false); + + React.useEffect(() => { + const darkTheme = window?.localStorage?.getItem('darkMode') === 'true' ? true : false; + const html = document.querySelector('html') as HTMLHtmlElement + html.classList.toggle('pf-v6-theme-dark', darkTheme) + setIsDarkTheme(darkTheme); + }); + + const toggleDarkTheme = (_evt: unknown, selected: boolean) => { + const darkThemeToggleClicked = !selected === isDarkTheme + const html = document.querySelector('html') as HTMLHtmlElement + html.classList.toggle('pf-v6-theme-dark', darkThemeToggleClicked) + setIsDarkTheme(darkThemeToggleClicked); + localStorage.setItem('darkMode', JSON.stringify(darkThemeToggleClicked)); + } + + return ( + + + + + } + isSelected={!isDarkTheme} + onChange={toggleDarkTheme} + /> + + + + } + isSelected={isDarkTheme} + onChange={toggleDarkTheme} + /> + + ) +} diff --git a/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx b/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx new file mode 100644 index 0000000..6a81af0 --- /dev/null +++ b/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx @@ -0,0 +1,83 @@ +// DocumentReleaseDropdown.test.tsx + +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { DocumentReleaseDropdown } from '../DocumentReleaseDropdown'; +import { snapshot } from 'node:test'; +import exp from 'constants'; + +jest.mock('../../../versions.json', () => ({ + Releases: [ + { name: '1.0.0', latest: true, hidden: false, href: '' }, + { name: '1.1.0', latest: false, hidden: false, href: '/1.1.0' }, + { name: '1.2.0', latest: false, hidden: false, href: '/1.2.0' }, + { name: '1.2.0', latest: false, hidden: true, href: '/1.2.1' }, + ], + ArchivedReleases: [ + { name: '0.9.0', latest: false, hidden: false, href: '' }, + { name: '0.8.0', latest: false, hidden: false, href: '' }, + ] +})); + +describe('DocumentReleaseDropdown', () => { + + it('renders the dropdown with the latest release', () => { + render(); + + // Check if the latest release is rendered + expect(screen.getByText('Release 1.0.0')).toBeInTheDocument(); + }); + + it('opens and closes the dropdown when clicked', () => { + render(); + + const toggleButton = screen.getByText('Release 1.0.0'); + + expect(screen.queryByText('Release 1.1.0')).not.toBeInTheDocument(); + + fireEvent.click(toggleButton); + expect(screen.getByText('Release 1.1.0')).toBeInTheDocument(); + + fireEvent.click(toggleButton); + expect(screen.queryByText('Release 1.1.0')).not.toBeInTheDocument(); + }); + + it('displays the previous releases', () => { + render(); + + fireEvent.click(screen.getByText('Release 1.0.0')); + + expect(screen.getByText('Release 1.1.0')).toBeInTheDocument(); + expect(screen.getByText('Release 1.2.0')).toBeInTheDocument(); + }); + + it('displays the archived versions', () => { + render(); + + fireEvent.click(screen.getByText('Release 1.0.0')); + + expect(screen.getByText('Release 0.9.0')).toBeInTheDocument(); + expect(screen.getByText('Release 0.8.0')).toBeInTheDocument(); + }); + + it('has the correct links for each release', () => { + render(); + + fireEvent.click(screen.getByText('Release 1.0.0')); + + const release2Link = screen.getByText('Release 1.1.0').closest('a'); + expect(release2Link).toHaveAttribute('href', '/1.1.0'); + + const archivedLink = screen.getByText('Release 0.9.0').closest('a'); + expect(archivedLink).toHaveAttribute('href', '/0.9.0'); + }); + + it('does not display hidden releases', () => { + + render(); + + fireEvent.click(screen.getByText('Release 1.0.0')); + + expect(screen.queryByText('Release 1.2.1')).not.toBeInTheDocument(); + }); +}); diff --git a/src/components/toolbar/__tests__/SearchComponent.test.tsx b/src/components/toolbar/__tests__/SearchComponent.test.tsx new file mode 100644 index 0000000..c58eb5e --- /dev/null +++ b/src/components/toolbar/__tests__/SearchComponent.test.tsx @@ -0,0 +1,64 @@ +import { render, screen, fireEvent, waitFor } from '@testing-library/react' +import { SearchComponent } from '../SearchComponent' +import '@testing-library/jest-dom' + +describe('SearchComponent', () => { + it('renders when searchEnabled is true', () => { + render() + + waitFor(() => { + const searchInput = screen.getByLabelText('Search input') + expect(searchInput).toBeInTheDocument() + }) + }) + + it('does not render when searchEnabled is false', () => { + render() + + const searchInput = screen.queryByPlaceholderText('Search') + expect(searchInput).not.toBeInTheDocument() + }) + + it('updates the search value when user types', () => { + render() + waitFor(() => { + const searchInput = screen.getByPlaceholderText('Search') + fireEvent.change(searchInput, { target: { value: 'test' } }) + + expect(searchInput).toHaveValue('test') + }) + }) + + it('clears the search value when clear button is clicked', () => { + render() + waitFor(() => { + const searchInput = screen.getByPlaceholderText('Search') + fireEvent.change(searchInput, { target: { value: 'test' } }) + fireEvent.click(screen.getByRole('button', { name: /clear/i })) + + expect(searchInput).toHaveValue('') + }) + }) + + it('toggles search expansion', () => { + render() + + waitFor(() => { + const searchInput = screen.getByPlaceholderText('Search') + const toggleButton = screen.getByLabelText( + 'Expandable search input toggle', + ) + + // Test initial state (collapsed) + expect(searchInput).toHaveClass('pf-m-closed') + + // Simulate toggle to expand + fireEvent.click(toggleButton) + expect(searchInput).toHaveClass('pf-m-expanded') + + // Simulate toggle to collapse + fireEvent.click(toggleButton) + expect(searchInput).toHaveClass('pf-m-closed') + }) + }) +}) diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..e3673e9 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,9 @@ +export type Release = { + name: string; + date?: string; + latest?: string; + hidden?: boolean, + versions?: any, + href?: string +} + diff --git a/src/versions.json b/src/versions.json new file mode 100644 index 0000000..82a4aee --- /dev/null +++ b/src/versions.json @@ -0,0 +1,1404 @@ +{ + "ArchivedReleases": [ + { + "name": "Patternfly 5", + "href": "https://v5-archive.patternfly.org/" + }, + { + "name": "PatternFly 4 ", + "href": "http://v4-archive.patternfly.org/v4/" + }, + { + "name": "PatternFly 3", + "href": "https://pf3.patternfly.org/" + } + ], + "Releases": [ + { + "name": "6.1.0", + "date": "2024-12-17", + "latest": true, + "versions": { + "@patternfly/patternfly": "6.1.0", + "@patternfly/react-catalog-view-extension": "6.0.0", + "@patternfly/react-charts": "8.1.0", + "@patternfly/react-code-editor": "6.1.0", + "@patternfly/react-component-groups": "6.1.0", + "@patternfly/react-core": "6.1.0", + "@patternfly/react-drag-drop": "6.1.0", + "@patternfly/react-icons": "6.1.0", + "@patternfly/react-log-viewer": "6.1.0", + "@patternfly/react-styles": "6.1.0", + "@patternfly/react-table": "6.1.0", + "@patternfly/react-tokens": "6.1.0", + "@patternfly/react-topology": "6.1.0", + "@patternfly/react-user-feedback": "6.0.0", + "@patternfly/react-console": "6.0.0", + "@patternfly/quickstarts": "6.1.0", + "@patternfly/react-virtualized-extension": "6.0.0", + "@patternfly/react-templates": "6.1.0", + "@patternfly/chatbot": "2.1.0", + "@patternfly/data-view": "6.1.0" + } + }, + { + "name": "6.0.0", + "date": "2024-10-30", + "hidden": true, + "versions": { + "@patternfly/patternfly": "6.0.0", + "@patternfly/react-catalog-view-extension": "6.0.0", + "@patternfly/react-charts": "8.0.0", + "@patternfly/react-code-editor": "6.0.0", + "@patternfly/react-component-groups": "6.0.0", + "@patternfly/react-core": "6.0.0", + "@patternfly/react-drag-drop": "6.0.0", + "@patternfly/react-icons": "6.0.0", + "@patternfly/react-log-viewer": "6.0.0", + "@patternfly/react-styles": "6.0.0", + "@patternfly/react-table": "6.0.0", + "@patternfly/react-tokens": "6.0.0", + "@patternfly/react-topology": "6.0.1", + "@patternfly/react-user-feedback": "6.0.0", + "@patternfly/react-console": "6.0.0", + "@patternfly/quickstarts": "6.0.0", + "@patternfly/react-virtualized-extension": "6.0.0", + "@patternfly/react-templates": "6.0.0", + "@patternfly/virtual-assistant": "2.0.2" + } + }, + { + "name": "prerelease", + "date": "2024-10-08", + "hidden": true, + "versions": { + "@patternfly/patternfly": "6.0.0-prerelease.15", + "@patternfly/react-catalog-view-extension": "6.0.0-prerelease.1", + "@patternfly/react-charts": "8.0.0-prerelease.14", + "@patternfly/react-code-editor": "6.0.0-prerelease.21", + "@patternfly/react-component-groups": "6.0.0-prerelease.4", + "@patternfly/react-core": "6.0.0-prerelease.21", + "@patternfly/react-drag-drop": "6.0.0-prerelease.21", + "@patternfly/react-icons": "6.0.0-prerelease.7", + "@patternfly/react-log-viewer": "6.0.0-prerelease.1", + "@patternfly/react-styles": "6.0.0-prerelease.6", + "@patternfly/react-table": "6.0.0-prerelease.22", + "@patternfly/react-tokens": "6.0.0-prerelease.7", + "@patternfly/react-topology": "6.0.0-prerelease.2", + "@patternfly/react-user-feedback": "6.0.0-prerelease.2", + "@patternfly/react-console": "6.0.0-prerelease.2", + "@patternfly/quickstarts": "6.0.0-prerelease.2", + "@patternfly/react-virtualized-extension": "6.0.0-prerelease.4", + "@patternfly/react-templates": "6.0.0-prerelease.21" + } + }, + { + "name": "5.4.1", + "date": "2024-09-30", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.4.1", + "@patternfly/react-charts": "7.4.3", + "@patternfly/react-code-editor": "5.4.3", + "@patternfly/react-core": "5.4.1", + "@patternfly/react-icons": "5.4.0", + "@patternfly/react-styles": "5.4.0", + "@patternfly/react-table": "5.4.1", + "@patternfly/react-drag-drop": "5.4.1", + "@patternfly/react-tokens": "5.4.0", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.1.0", + "@patternfly/react-log-viewer": "5.3.0", + "@patternfly/react-topology": "5.4.0", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.4.0", + "@patternfly/react-templates": "1.1.1" + } + }, + { + "name": "5.4.0", + "date": "2024-08-28", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.4.0", + "@patternfly/react-charts": "7.4.0", + "@patternfly/react-code-editor": "5.4.0", + "@patternfly/react-core": "5.4.0", + "@patternfly/react-icons": "5.4.0", + "@patternfly/react-styles": "5.4.0", + "@patternfly/react-table": "5.4.0", + "@patternfly/react-drag-drop": "5.4.0", + "@patternfly/react-tokens": "5.4.0", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.1.0", + "@patternfly/react-log-viewer": "5.3.0", + "@patternfly/react-topology": "5.4.0", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.4.0", + "@patternfly/react-templates": "1.1.0" + } + }, + { + "name": "5.3.0", + "date": "2024-04-02", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.3.1", + "@patternfly/react-charts": "7.3.1", + "@patternfly/react-code-editor": "5.3.3", + "@patternfly/react-core": "5.3.3", + "@patternfly/react-icons": "5.3.2", + "@patternfly/react-styles": "5.3.1", + "@patternfly/react-table": "5.3.3", + "@patternfly/react-drag-drop": "5.3.3", + "@patternfly/react-tokens": "5.3.1", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.2.0", + "@patternfly/react-topology": "5.3.0", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.3.0", + "@patternfly/react-templates": "1.0.3" + } + }, + { + "name": "5.2.2", + "date": "2024-03-12", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.2.1", + "@patternfly/react-charts": "7.2.2", + "@patternfly/react-code-editor": "5.2.2", + "@patternfly/react-core": "5.2.2", + "@patternfly/react-icons": "5.2.1", + "@patternfly/react-styles": "5.2.1", + "@patternfly/react-table": "5.2.2", + "@patternfly/react-drag-drop": "5.2.2", + "@patternfly/react-tokens": "5.2.1", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.2.0", + "@patternfly/react-topology": "5.2.1", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.0.0", + "@patternfly/react-templates": "^1.0.0-alpha.0" + } + }, + { + "name": "5.2.1", + "date": "2024-03-01", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.2.1", + "@patternfly/react-charts": "7.2.2", + "@patternfly/react-code-editor": "5.2.1", + "@patternfly/react-core": "5.2.1", + "@patternfly/react-icons": "5.2.1", + "@patternfly/react-styles": "5.2.1", + "@patternfly/react-table": "5.2.1", + "@patternfly/react-drag-drop": "5.2.1", + "@patternfly/react-tokens": "5.2.1", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.2.0", + "@patternfly/react-topology": "5.2.1", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.0.0", + "@patternfly/react-templates": "^1.0.0-alpha.0" + } + }, + { + "name": "5.2.0", + "date": "2024-01-17", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.2.0", + "@patternfly/react-charts": "7.2.0", + "@patternfly/react-code-editor": "5.2.0", + "@patternfly/react-core": "5.2.0", + "@patternfly/react-icons": "5.2.0", + "@patternfly/react-styles": "5.2.0", + "@patternfly/react-table": "5.2.0", + "@patternfly/react-drag-drop": "5.2.0", + "@patternfly/react-tokens": "5.2.0", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.1.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.2.0", + "@patternfly/react-topology": "5.2.1", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.0.0" + } + }, + { + "name": "5.1.0", + "date": "2023-10-06", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.1.0", + "@patternfly/react-charts": "7.1.1", + "@patternfly/react-code-editor": "5.1.1", + "@patternfly/react-core": "5.1.1", + "@patternfly/react-icons": "5.1.1", + "@patternfly/react-styles": "5.1.1", + "@patternfly/react-table": "5.1.1", + "@patternfly/react-drag-drop": "5.0.0-alpha.0", + "@patternfly/react-tokens": "5.1.1", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-component-groups": "5.0.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.0.0", + "@patternfly/react-topology": "5.1.0", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.0.0" + } + }, + { + "name": "5.0.0", + "date": "2023-07-27", + "hidden": true, + "versions": { + "@patternfly/patternfly": "5.0.2", + "@patternfly/react-charts": "7.0.0", + "@patternfly/react-code-editor": "5.0.0", + "@patternfly/react-core": "5.0.0", + "@patternfly/react-icons": "5.0.0", + "@patternfly/react-styles": "5.0.0", + "@patternfly/react-table": "5.0.0", + "@patternfly/react-drag-drop": "5.0.0-alpha.0", + "@patternfly/react-tokens": "5.0.0", + "@patternfly/react-catalog-view-extension": "5.0.0", + "@patternfly/react-console": "5.0.0", + "@patternfly/react-log-viewer": "5.0.0", + "@patternfly/react-topology": "5.0.0", + "@patternfly/react-user-feedback": "5.0.0", + "@patternfly/react-virtualized-extension": "5.0.0", + "@patternfly/quickstarts": "5.0.0" + } + }, + { + "name": "2023.02", + "date": "2022-03-27", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.224.4", + "@patternfly/react-catalog-view-extension": "4.96.0", + "@patternfly/react-charts": "6.94.19", + "@patternfly/react-code-editor": "4.82.115", + "@patternfly/react-console": "4.95.5", + "@patternfly/react-core": "4.276.8", + "@patternfly/react-icons": "4.93.6", + "@patternfly/react-inline-edit-extension": "4.86.122", + "@patternfly/react-log-viewer": "4.87.100", + "@patternfly/react-styles": "4.92.6", + "@patternfly/react-table": "4.113.0", + "@patternfly/react-tokens": "4.94.6", + "@patternfly/react-topology": "4.91.40", + "@patternfly/react-virtualized-extension": "4.88.115" + } + }, + { + "name": "2023.01", + "date": "2022-01-31", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.224.2", + "@patternfly/react-catalog-view-extension": "4.95.1", + "@patternfly/react-charts": "6.94.18", + "@patternfly/react-code-editor": "4.82.113", + "@patternfly/react-core": "4.276.6", + "@patternfly/react-icons": "4.93.6", + "@patternfly/react-inline-edit-extension": "4.86.118", + "@patternfly/react-log-viewer": "4.87.100", + "@patternfly/react-styles": "4.92.6", + "@patternfly/react-table": "4.112.39", + "@patternfly/react-tokens": "4.94.6", + "@patternfly/react-topology": "4.91.27", + "@patternfly/react-virtualized-extension": "4.88.113" + } + }, + { + "name": "2022.16", + "date": "2022-12-15", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.222.4", + "@patternfly/react-catalog-view-extension": "4.93.15", + "@patternfly/react-charts": "6.94.15", + "@patternfly/react-code-editor": "4.82.82", + "@patternfly/react-core": "4.267.6", + "@patternfly/react-icons": "4.93.3", + "@patternfly/react-inline-edit-extension": "4.86.85", + "@patternfly/react-log-viewer": "4.87.77", + "@patternfly/react-styles": "4.92.3", + "@patternfly/react-table": "4.112.6", + "@patternfly/react-tokens": "4.94.3", + "@patternfly/react-topology": "4.90.38", + "@patternfly/react-virtualized-extension": "4.88.82" + } + }, + { + "name": "2022.15", + "date": "2022-11-21", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.221.2", + "@patternfly/react-catalog-view-extension": "4.93.0", + "@patternfly/react-charts": "6.94.12", + "@patternfly/react-code-editor": "4.82.67", + "@patternfly/react-core": "4.264.0", + "@patternfly/react-icons": "4.93.0", + "@patternfly/react-inline-edit-extension": "4.86.68", + "@patternfly/react-log-viewer": "4.87.62", + "@patternfly/react-styles": "4.92.0", + "@patternfly/react-table": "4.111.45", + "@patternfly/react-tokens": "4.94.0", + "@patternfly/react-topology": "4.90.23", + "@patternfly/react-virtualized-extension": "4.88.67" + } + }, + { + "name": "2022.14", + "date": "2022-11-01", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.219.2", + "@patternfly/react-catalog-view-extension": "4.92.55", + "@patternfly/react-charts": "6.94.11", + "@patternfly/react-code-editor": "4.82.55", + "@patternfly/react-core": "4.258.3", + "@patternfly/react-icons": "4.92.10", + "@patternfly/react-inline-edit-extension": "4.86.56", + "@patternfly/react-log-viewer": "4.87.50", + "@patternfly/react-styles": "4.91.10", + "@patternfly/react-table": "4.111.33", + "@patternfly/react-tokens": "4.93.10", + "@patternfly/react-topology": "4.90.11", + "@patternfly/react-virtualized-extension": "4.88.55" + } + }, + { + "name": "2022.13", + "date": "2022-10-11", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.217.1", + "@patternfly/react-catalog-view-extension": "4.92.26", + "@patternfly/react-charts": "6.94.7", + "@patternfly/react-code-editor": "4.82.26", + "@patternfly/react-core": "4.250.1", + "@patternfly/react-icons": "4.92.6", + "@patternfly/react-inline-edit-extension": "4.86.27", + "@patternfly/react-log-viewer": "4.87.21", + "@patternfly/react-styles": "4.91.6", + "@patternfly/react-table": "4.111.4", + "@patternfly/react-tokens": "4.93.6", + "@patternfly/react-topology": "4.88.26", + "@patternfly/react-virtualized-extension": "4.88.26" + } + }, + { + "name": "2022.12", + "date": "2022-9-16", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.215.1", + "@patternfly/react-catalog-view-extension": "4.90.0", + "@patternfly/react-charts": "6.92.0", + "@patternfly/react-code-editor": "4.80.0", + "@patternfly/react-core": "4.239.0", + "@patternfly/react-icons": "4.90.0", + "@patternfly/react-inline-edit-extension": "4.84.0", + "@patternfly/react-log-viewer": "4.84.0", + "@patternfly/react-styles": "4.89.0", + "@patternfly/react-table": "4.108.0", + "@patternfly/react-tokens": "4.91.0", + "@patternfly/react-topology": "4.86.0", + "@patternfly/react-virtualized-extension": "4.86.0" + } + }, + { + "name": "2022.11", + "date": "2022-8-31", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.210.2", + "@patternfly/react-catalog-view-extension": "4.86.7", + "@patternfly/react-charts": "6.88.7", + "@patternfly/react-code-editor": "4.76.7", + "@patternfly/react-core": "4.235.7", + "@patternfly/react-icons": "4.86.7", + "@patternfly/react-inline-edit-extension": "4.80.7", + "@patternfly/react-log-viewer": "4.80.7", + "@patternfly/react-styles": "4.85.7", + "@patternfly/react-table": "4.104.7", + "@patternfly/react-tokens": "4.87.7", + "@patternfly/react-topology": "4.82.7", + "@patternfly/react-virtualized-extension": "4.82.7" + } + }, + { + "name": "2022.10", + "date": "2022-8-16", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.206.3", + "@patternfly/react-catalog-view-extension": "4.82.8", + "@patternfly/react-charts": "6.84.8", + "@patternfly/react-code-editor": "4.72.8", + "@patternfly/react-core": "4.231.8", + "@patternfly/react-icons": "4.82.8", + "@patternfly/react-inline-edit-extension": "4.76.8", + "@patternfly/react-log-viewer": "4.76.8", + "@patternfly/react-styles": "4.81.8", + "@patternfly/react-table": "4.100.8", + "@patternfly/react-tokens": "4.83.8", + "@patternfly/react-topology": "4.78.8", + "@patternfly/react-virtualized-extension": "4.78.8" + } + }, + { + "name": "2022.08", + "date": "2022-6-30", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.202.1", + "@patternfly/react-catalog-view-extension": "4.75.1", + "@patternfly/react-charts": "6.77.1", + "@patternfly/react-code-editor": "4.65.1", + "@patternfly/react-core": "4.224.1", + "@patternfly/react-icons": "4.75.1", + "@patternfly/react-inline-edit-extension": "4.69.1", + "@patternfly/react-log-viewer": "4.69.1", + "@patternfly/react-styles": "4.74.1", + "@patternfly/react-table": "4.93.1", + "@patternfly/react-tokens": "4.76.1", + "@patternfly/react-topology": "4.71.1", + "@patternfly/react-virtualized-extension": "4.71.1" + } + }, + { + "name": "2022.07", + "date": "2022-6-3", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.196.7", + "@patternfly/react-catalog-view-extension": "4.72.3", + "@patternfly/react-charts": "6.74.3", + "@patternfly/react-code-editor": "4.62.3", + "@patternfly/react-core": "4.221.3", + "@patternfly/react-icons": "4.72.3", + "@patternfly/react-inline-edit-extension": "4.66.3", + "@patternfly/react-log-viewer": "4.66.3", + "@patternfly/react-styles": "4.71.3", + "@patternfly/react-table": "4.90.3", + "@patternfly/react-tokens": "4.73.3", + "@patternfly/react-topology": "4.68.3", + "@patternfly/react-virtualized-extension": "4.68.3" + } + }, + { + "name": "2022.06", + "date": "2022-5-13", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.194.4", + "@patternfly/react-catalog-view-extension": "4.65.1", + "@patternfly/react-charts": "6.67.1", + "@patternfly/react-code-editor": "4.55.1", + "@patternfly/react-core": "4.214.1", + "@patternfly/react-icons": "4.65.1", + "@patternfly/react-inline-edit-extension": "4.59.1", + "@patternfly/react-log-viewer": "4.59.1", + "@patternfly/react-styles": "4.64.1", + "@patternfly/react-table": "4.83.1", + "@patternfly/react-tokens": "4.66.1", + "@patternfly/react-topology": "4.61.1", + "@patternfly/react-virtualized-extension": "4.61.1" + } + }, + { + "name": "2022.05", + "date": "2022-4-25", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.192.1", + "@patternfly/react-catalog-view-extension": "4.57.1", + "@patternfly/react-charts": "6.59.1", + "@patternfly/react-code-editor": "4.47.1", + "@patternfly/react-core": "4.206.1", + "@patternfly/react-icons": "4.57.1", + "@patternfly/react-inline-edit-extension": "4.51.1", + "@patternfly/react-log-viewer": "4.51.1", + "@patternfly/react-styles": "4.56.1", + "@patternfly/react-table": "4.75.1", + "@patternfly/react-tokens": "4.58.1", + "@patternfly/react-topology": "4.53.1", + "@patternfly/react-virtualized-extension": "4.53.1" + } + }, + { + "name": "2022.04", + "date": "2022-4-7", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.185.1", + "@patternfly/react-catalog-view-extension": "4.53.16", + "@patternfly/react-charts": "6.55.16", + "@patternfly/react-code-editor": "4.43.16", + "@patternfly/react-core": "4.202.16", + "@patternfly/react-icons": "4.53.16", + "@patternfly/react-inline-edit-extension": "4.47.16", + "@patternfly/react-log-viewer": "4.47.16", + "@patternfly/react-styles": "4.52.16", + "@patternfly/react-table": "4.71.16", + "@patternfly/react-tokens": "4.54.16", + "@patternfly/react-topology": "4.49.16", + "@patternfly/react-virtualized-extension": "4.49.16" + } + }, + { + "name": "2022.03", + "date": "2022-3-10", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.183.1", + "@patternfly/react-catalog-view-extension": "4.49.19", + "@patternfly/react-charts": "6.51.19", + "@patternfly/react-code-editor": "4.39.19", + "@patternfly/react-core": "4.198.19", + "@patternfly/react-icons": "4.49.19", + "@patternfly/react-inline-edit-extension": "4.43.19", + "@patternfly/react-log-viewer": "4.43.19", + "@patternfly/react-styles": "4.48.19", + "@patternfly/react-table": "4.67.19", + "@patternfly/react-tokens": "4.50.19", + "@patternfly/react-topology": "4.45.19", + "@patternfly/react-virtualized-extension": "4.45.19" + } + }, + { + "name": "2022.02", + "date": "2022-2-22", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.179.1", + "@patternfly/react-catalog-view-extension": "4.49.5", + "@patternfly/react-charts": "6.51.5", + "@patternfly/react-code-editor": "4.39.5", + "@patternfly/react-core": "4.198.5", + "@patternfly/react-icons": "4.49.5", + "@patternfly/react-inline-edit-extension": "4.43.5", + "@patternfly/react-log-viewer": "4.43.5", + "@patternfly/react-styles": "4.48.5", + "@patternfly/react-table": "4.67.5", + "@patternfly/react-tokens": "4.50.5", + "@patternfly/react-topology": "4.45.5", + "@patternfly/react-virtualized-extension": "4.45.5" + } + }, + { + "name": "2022.01", + "date": "2022-1-28", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.171.1", + "@patternfly/react-catalog-view-extension": "4.43.14", + "@patternfly/react-charts": "6.45.14", + "@patternfly/react-code-editor": "4.33.14", + "@patternfly/react-core": "4.192.14", + "@patternfly/react-icons": "4.43.14", + "@patternfly/react-inline-edit-extension": "4.37.14", + "@patternfly/react-log-viewer": "4.37.14", + "@patternfly/react-styles": "4.42.14", + "@patternfly/react-table": "4.61.14", + "@patternfly/react-tokens": "4.44.14", + "@patternfly/react-topology": "4.39.14", + "@patternfly/react-virtualized-extension": "4.39.14" + } + }, + { + "name": "2021.16", + "date": "2021-12-13", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.164.2", + "@patternfly/react-catalog-view-extension": "4.32.1", + "@patternfly/react-charts": "6.34.1", + "@patternfly/react-code-editor": "4.22.1", + "@patternfly/react-core": "4.181.1", + "@patternfly/react-icons": "4.32.1", + "@patternfly/react-inline-edit-extension": "4.26.1", + "@patternfly/react-log-viewer": "4.26.1", + "@patternfly/react-styles": "4.31.1", + "@patternfly/react-table": "4.50.1", + "@patternfly/react-tokens": "4.33.1", + "@patternfly/react-topology": "4.28.1", + "@patternfly/react-virtualized-extension": "4.28.1" + } + }, + { + "name": "2021.15", + "date": "2021-11-16", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.159.1", + "@patternfly/react-catalog-view-extension": "4.26.4", + "@patternfly/react-charts": "6.28.4", + "@patternfly/react-code-editor": "4.16.4", + "@patternfly/react-core": "4.175.4", + "@patternfly/react-icons": "4.26.4", + "@patternfly/react-inline-edit-extension": "4.20.4", + "@patternfly/react-log-viewer": "4.20.4", + "@patternfly/react-styles": "4.25.4", + "@patternfly/react-table": "4.44.4", + "@patternfly/react-tokens": "4.27.4", + "@patternfly/react-topology": "4.22.4", + "@patternfly/react-virtualized-extension": "4.22.4" + } + }, + { + "name": "2021.14", + "date": "2021-10-28", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.151.4", + "@patternfly/react-catalog-view-extension": "4.19.8", + "@patternfly/react-charts": "6.21.8", + "@patternfly/react-code-editor": "4.9.8", + "@patternfly/react-core": "4.168.8", + "@patternfly/react-icons": "4.19.8", + "@patternfly/react-inline-edit-extension": "4.13.8", + "@patternfly/react-log-viewer": "4.13.8", + "@patternfly/react-styles": "4.18.8", + "@patternfly/react-table": "4.37.8", + "@patternfly/react-tokens": "4.20.8", + "@patternfly/react-topology": "4.15.8", + "@patternfly/react-virtualized-extension": "4.15.8" + } + }, + { + "name": "2021.13", + "date": "2021-10-13", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.144.4", + "@patternfly/react-catalog-view-extension": "4.13.17", + "@patternfly/react-charts": "6.15.31", + "@patternfly/react-code-editor": "4.3.84", + "@patternfly/react-core": "4.162.2", + "@patternfly/react-icons": "4.13.0", + "@patternfly/react-inline-edit-extension": "4.7.108", + "@patternfly/react-log-viewer": "4.7.20", + "@patternfly/react-styles": "4.12.4", + "@patternfly/react-table": "4.31.7", + "@patternfly/react-tokens": "4.14.0", + "@patternfly/react-topology": "4.9.103", + "@patternfly/react-virtualized-extension": "4.9.73" + } + }, + { + "name": "2021.12", + "date": "2021-09-20", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.135.2", + "@patternfly/react-catalog-view-extension": "4.12.74", + "@patternfly/react-charts": "6.15.23", + "@patternfly/react-code-editor": "4.3.61", + "@patternfly/react-core": "4.157.3", + "@patternfly/react-icons": "4.11.17", + "@patternfly/react-inline-edit-extension": "4.7.84", + "@patternfly/react-log-viewer": "4.6.14", + "@patternfly/react-styles": "4.11.16", + "@patternfly/react-table": "4.30.3", + "@patternfly/react-tokens": "4.12.18", + "@patternfly/react-topology": "4.9.80", + "@patternfly/react-virtualized-extension": "4.9.49" + } + }, + { + "name": "2021.11", + "date": "2021-08-26", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.132.2", + "@patternfly/react-catalog-view-extension": "4.12.56", + "@patternfly/react-charts": "6.15.20", + "@patternfly/react-code-editor": "4.3.42", + "@patternfly/react-core": "4.152.4", + "@patternfly/react-icons": "4.11.14", + "@patternfly/react-inline-edit-extension": "4.7.65", + "@patternfly/react-log-viewer": "4.5.4", + "@patternfly/react-styles": "4.11.13", + "@patternfly/react-table": "4.29.58", + "@patternfly/react-tokens": "4.12.15", + "@patternfly/react-topology": "4.9.62", + "@patternfly/react-virtualized-extension": "4.9.31" + } + }, + { + "name": "2021.10", + "date": "2021-08-04", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.125.3", + "@patternfly/react-catalog-view-extension": "4.12.36", + "@patternfly/react-charts": "6.15.14", + "@patternfly/react-code-editor": "4.3.22", + "@patternfly/react-core": "4.147.0", + "@patternfly/react-icons": "4.11.8", + "@patternfly/react-inline-edit-extension": "4.7.44", + "@patternfly/react-log-viewer": "4.4.0", + "@patternfly/react-styles": "4.11.8", + "@patternfly/react-table": "4.29.37", + "@patternfly/react-tokens": "4.12.9", + "@patternfly/react-topology": "4.9.42", + "@patternfly/react-virtualized-extension": "4.9.11" + } + }, + { + "name": "2021.08", + "date": "2021-06-23", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.115.2", + "@patternfly/react-catalog-view-extension": "4.12.0", + "@patternfly/react-charts": "6.15.3", + "@patternfly/react-code-editor": "4.2.92", + "@patternfly/react-core": "4.135.0", + "@patternfly/react-icons": "4.11.0", + "@patternfly/react-inline-edit-extension": "4.7.7", + "@patternfly/react-log-viewer": "4.2.0", + "@patternfly/react-styles": "4.11.0", + "@patternfly/react-table": "4.29.0", + "@patternfly/react-tokens": "4.12.0", + "@patternfly/react-topology": "4.9.6", + "@patternfly/react-virtualized-extension": "4.8.38" + } + }, + { + "name": "2021.07", + "date": "2021-06-07", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.108.2", + "@patternfly/react-catalog-view-extension": "4.11.42", + "@patternfly/react-charts": "6.14.29", + "@patternfly/react-code-editor": "4.2.76", + "@patternfly/react-core": "4.128.2", + "@patternfly/react-icons": "4.10.11", + "@patternfly/react-inline-edit-extension": "4.6.125", + "@patternfly/react-log-viewer": "4.1.19", + "@patternfly/react-styles": "4.10.11", + "@patternfly/react-table": "4.27.24", + "@patternfly/react-tokens": "4.11.12", + "@patternfly/react-topology": "4.8.72", + "@patternfly/react-virtualized-extension": "4.8.23" + } + }, + { + "name": "2021.06", + "date": "2021-05-17", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.103.6", + "@patternfly/react-catalog-view-extension": "4.11.25", + "@patternfly/react-charts": "6.14.22", + "@patternfly/react-code-editor": "4.2.59", + "@patternfly/react-core": "4.121.1", + "@patternfly/react-icons": "4.10.7", + "@patternfly/react-inline-edit-extension": "4.6.108", + "@patternfly/react-log-viewer": "4.1.2", + "@patternfly/react-styles": "4.10.7", + "@patternfly/react-table": "4.27.7", + "@patternfly/react-tokens": "4.11.8", + "@patternfly/react-topology": "4.8.55", + "@patternfly/react-virtualized-extension": "4.8.6" + } + }, + { + "name": "2021.05", + "date": "2021-04-23", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.102.2", + "@patternfly/react-catalog-view-extension": "4.11.7", + "@patternfly/react-charts": "6.14.17", + "@patternfly/react-code-editor": "4.2.41", + "@patternfly/react-core": "4.115.2", + "@patternfly/react-icons": "4.10.2", + "@patternfly/react-inline-edit-extension": "4.6.88", + "@patternfly/react-styles": "4.10.2", + "@patternfly/react-table": "4.26.7", + "@patternfly/react-tokens": "4.11.3", + "@patternfly/react-topology": "4.8.37", + "@patternfly/react-virtualized-extension": "4.7.24" + } + }, + { + "name": "2021.04", + "date": "2021-04-01", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.96.2", + "@patternfly/react-catalog-view-extension": "4.10.29", + "@patternfly/react-charts": "6.14.11", + "@patternfly/react-code-editor": "4.2.18", + "@patternfly/react-core": "4.106.2", + "@patternfly/react-icons": "4.9.9", + "@patternfly/react-inline-edit-extension": "4.6.65", + "@patternfly/react-styles": "4.9.4", + "@patternfly/react-table": "4.24.1", + "@patternfly/react-tokens": "4.10.9", + "@patternfly/react-topology": "4.8.15", + "@patternfly/react-virtualized-extension": "4.7.1" + } + }, + { + "name": "2021.03", + "date": "2021-03-10", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.90.5", + "@patternfly/react-catalog-view-extension": "4.10.13", + "@patternfly/react-charts": "6.14.6", + "@patternfly/react-code-editor": "4.2.2", + "@patternfly/react-core": "4.101.3", + "@patternfly/react-icons": "4.9.5", + "@patternfly/react-inline-edit-extension": "4.6.48", + "@patternfly/react-styles": "4.8.5", + "@patternfly/react-table": "4.23.14", + "@patternfly/react-tokens": "4.10.5", + "@patternfly/react-topology": "4.7.45", + "@patternfly/react-virtualized-extension": "4.6.46" + } + }, + { + "name": "2021.02", + "date": "2021-02-17", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.87.3", + "@patternfly/react-catalog-view-extension": "4.10.2", + "@patternfly/react-charts": "6.14.2", + "@patternfly/react-code-editor": "4.1.25", + "@patternfly/react-core": "4.97.2", + "@patternfly/react-icons": "4.9.2", + "@patternfly/react-inline-edit-extension": "4.6.36", + "@patternfly/react-styles": "4.8.2", + "@patternfly/react-table": "4.23.2", + "@patternfly/react-tokens": "4.10.2", + "@patternfly/react-topology": "4.7.34", + "@patternfly/react-virtualized-extension": "4.6.35" + } + }, + { + "name": "2021.01", + "date": "2021-01-27", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.87.2", + "@patternfly/react-catalog-view-extension": "4.10.1", + "@patternfly/react-charts": "6.14.1", + "@patternfly/react-code-editor": "4.1.24", + "@patternfly/react-core": "4.97.1", + "@patternfly/react-icons": "4.9.1", + "@patternfly/react-inline-edit-extension": "4.6.35", + "@patternfly/react-styles": "4.8.1", + "@patternfly/react-table": "4.23.1", + "@patternfly/react-tokens": "4.10.1", + "@patternfly/react-topology": "4.7.33", + "@patternfly/react-virtualized-extension": "4.6.34" + } + }, + { + "name": "2021.01", + "date": "2021-01-27", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.80.3", + "@patternfly/react-catalog-view-extension": "4.9.15", + "@patternfly/react-charts": "6.13.8", + "@patternfly/react-code-editor": "4.1.4", + "@patternfly/react-core": "4.90.2", + "@patternfly/react-icons": "4.8.4", + "@patternfly/react-inline-edit-extension": "4.6.15", + "@patternfly/react-styles": "4.7.29", + "@patternfly/react-table": "4.20.15", + "@patternfly/react-tokens": "4.9.26", + "@patternfly/react-topology": "4.7.15", + "@patternfly/react-virtualized-extension": "4.6.15" + } + }, + { + "name": "2020.16", + "date": "2020-12-15", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.70.2", + "@patternfly/react-catalog-view-extension": "4.8.126", + "@patternfly/react-charts": "6.12.12", + "@patternfly/react-core": "4.84.4", + "@patternfly/react-icons": "4.7.22", + "@patternfly/react-inline-edit-extension": "4.5.187", + "@patternfly/react-styles": "4.7.22", + "@patternfly/react-table": "4.19.45", + "@patternfly/react-tokens": "4.9.22", + "@patternfly/react-topology": "4.6.91", + "@patternfly/react-virtualized-extension": "4.5.171" + } + }, + { + "name": "2020.15", + "date": "2020-11-18", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.65.6", + "@patternfly/react-catalog-view-extension": "4.8.105", + "@patternfly/react-charts": "6.12.2", + "@patternfly/react-core": "4.79.2", + "@patternfly/react-datetime": "4.2.50", + "@patternfly/react-icons": "4.7.18", + "@patternfly/react-inline-edit-extension": "4.5.166", + "@patternfly/react-styles": "4.7.16", + "@patternfly/react-table": "4.19.24", + "@patternfly/react-tokens": "4.9.18", + "@patternfly/react-topology": "4.6.69", + "@patternfly/react-virtualized-extension": "4.5.150" + } + }, + { + "name": "2020.14", + "date": "2020-10-27", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.59.1", + "@patternfly/react-catalog-view-extension": "4.8.89", + "@patternfly/react-charts": "6.11.7", + "@patternfly/react-core": "4.75.2", + "@patternfly/react-icons": "4.7.16", + "@patternfly/react-inline-edit-extension": "4.5.147", + "@patternfly/react-styles": "4.7.12", + "@patternfly/react-table": "4.19.5", + "@patternfly/react-tokens": "4.9.16", + "@patternfly/react-topology": "4.6.54", + "@patternfly/react-virtualized-extension": "4.5.134" + } + }, + { + "name": "2020.13", + "date": "2020-10-06", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.50.4", + "@patternfly/react-catalog-view-extension": "4.8.60", + "@patternfly/react-charts": "6.10.4", + "@patternfly/react-core": "4.63.3", + "@patternfly/react-icons": "4.7.11", + "@patternfly/react-inline-edit-extension": "4.5.117", + "@patternfly/react-styles": "4.7.8", + "@patternfly/react-table": "4.18.14", + "@patternfly/react-tokens": "4.9.12", + "@patternfly/react-topology": "4.6.25", + "@patternfly/react-virtualized-extension": "4.5.105" + } + }, + { + "name": "2020.12", + "date": "2020-09-18", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.42.2", + "@patternfly/react-catalog-view-extension": "4.8.31", + "@patternfly/react-charts": "6.9.8", + "@patternfly/react-core": "4.50.2", + "@patternfly/react-icons": "4.7.6", + "@patternfly/react-inline-edit-extension": "4.5.87", + "@patternfly/react-styles": "4.7.5", + "@patternfly/react-table": "4.16.20", + "@patternfly/react-tokens": "4.9.8", + "@patternfly/react-topology": "4.5.14", + "@patternfly/react-virtualized-extension": "4.5.76" + } + }, + { + "name": "2020.11", + "date": "2020-08-26", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.35.2", + "@patternfly/react-catalog-view-extension": "4.8.18", + "@patternfly/react-charts": "6.9.6", + "@patternfly/react-core": "4.47.0", + "@patternfly/react-icons": "4.7.4", + "@patternfly/react-inline-edit-extension": "4.5.74", + "@patternfly/react-styles": "4.7.3", + "@patternfly/react-table": "4.16.7", + "@patternfly/react-tokens": "4.9.6", + "@patternfly/react-topology": "4.4.75", + "@patternfly/react-virtualized-extension": "4.5.63" + } + }, + { + "name": "2020.10", + "date": "2020-08-17", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.31.6", + "@patternfly/react-catalog-view-extension": "4.8.5", + "@patternfly/react-charts": "6.9.4", + "@patternfly/react-core": "4.40.4", + "@patternfly/react-icons": "4.7.2", + "@patternfly/react-inline-edit-extension": "4.5.61", + "@patternfly/react-styles": "4.7.2", + "@patternfly/react-table": "4.15.5", + "@patternfly/react-tokens": "4.9.4", + "@patternfly/react-topology": "4.4.63", + "@patternfly/react-virtualized-extension": "4.5.51" + } + }, + { + "name": "2020.09", + "date": "2020-07-17", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.23.3", + "@patternfly/react-catalog-view-extension": "4.5.1", + "@patternfly/react-charts": "6.6.0", + "@patternfly/react-core": "4.32.1", + "@patternfly/react-icons": "4.5.0", + "@patternfly/react-inline-edit-extension": "4.5.28", + "@patternfly/react-styles": "4.5.0", + "@patternfly/react-table": "4.12.1", + "@patternfly/react-tokens": "4.6.0", + "@patternfly/react-topology": "4.4.30", + "@patternfly/react-virtualized-extension": "4.5.20" + } + }, + { + "name": "2020.08", + "date": "2020-06-24", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.16.7", + "@patternfly/react-catalog-view-extension": "4.4.8", + "@patternfly/react-charts": "6.5.4", + "@patternfly/react-core": "4.23.1", + "@patternfly/react-icons": "4.4.2", + "@patternfly/react-inline-edit-extension": "4.5.7", + "@patternfly/react-styles": "4.4.2", + "@patternfly/react-table": "4.8.6", + "@patternfly/react-tokens": "4.5.2", + "@patternfly/react-topology": "4.4.8", + "@patternfly/react-virtualized-extension": "4.4.8" + } + }, + { + "name": "2020.07", + "date": "2020-06-05", + "hidden": true, + "versions": { + "@patternfly/patternfly": "4.10.31", + "@patternfly/react-catalog-view-extension": "4.3.12", + "@patternfly/react-charts": "6.3.9", + "@patternfly/react-core": "4.18.5", + "@patternfly/react-icons": "4.3.5", + "@patternfly/react-inline-edit-extension": "4.4.14", + "@patternfly/react-styles": "4.3.4", + "@patternfly/react-table": "4.5.7", + "@patternfly/react-tokens": "4.4.4", + "@patternfly/react-topology": "4.3.13", + "@patternfly/react-virtualized-extension": "4.3.14" + } + }, + { + "name": "2020.06", + "date": "2020-05-11", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.71.6", + "@patternfly/react-catalog-view-extension": "1.4.66", + "@patternfly/react-charts": "5.3.21", + "@patternfly/react-core": "3.158.1", + "@patternfly/react-icons": "3.15.17", + "@patternfly/react-inline-edit-extension": "2.17.66", + "@patternfly/react-styles": "3.7.14", + "@patternfly/react-table": "2.28.47", + "@patternfly/react-tokens": "2.8.14", + "@patternfly/react-topology": "2.14.66", + "@patternfly/react-virtualized-extension": "1.4.67" + } + }, + { + "name": "2020.05", + "date": "2020-04-21", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.71.5", + "@patternfly/react-catalog-view-extension": "1.4.58", + "@patternfly/react-charts": "5.3.19", + "@patternfly/react-core": "3.153.13", + "@patternfly/react-icons": "3.15.16", + "@patternfly/react-inline-edit-extension": "2.17.58", + "@patternfly/react-styles": "3.7.13", + "@patternfly/react-table": "2.28.39", + "@patternfly/react-tokens": "2.8.13", + "@patternfly/react-topology": "2.14.58", + "@patternfly/react-virtualized-extension": "1.4.59" + } + }, + { + "name": "2020.04", + "date": "2020-03-31", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.71.3", + "@patternfly/react-catalog-view-extension": "1.4.48", + "@patternfly/react-charts": "5.3.18", + "@patternfly/react-core": "3.153.3", + "@patternfly/react-icons": "3.15.15", + "@patternfly/react-inline-edit-extension": "2.17.48", + "@patternfly/react-styles": "3.7.12", + "@patternfly/react-table": "2.28.29", + "@patternfly/react-tokens": "2.8.12", + "@patternfly/react-topology": "2.14.48", + "@patternfly/react-virtualized-extension": "1.4.49" + } + }, + { + "name": "2020.03", + "date": "2020-03-13", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.68.3", + "@patternfly/react-catalog-view-extension": "1.4.27", + "@patternfly/react-charts": "5.3.12", + "@patternfly/react-core": "3.146.0", + "@patternfly/react-icons": "3.15.11", + "@patternfly/react-inline-edit-extension": "2.17.27", + "@patternfly/react-styles": "3.7.8", + "@patternfly/react-table": "2.28.8", + "@patternfly/react-tokens": "2.8.8", + "@patternfly/react-topology": "2.14.27", + "@patternfly/react-virtualized-extension": "1.4.28" + } + }, + { + "name": "2020.02", + "date": "2020-02-19", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.65.2", + "@patternfly/react-catalog-view-extension": "1.4.11", + "@patternfly/react-charts": "5.3.5", + "@patternfly/react-core": "3.140.11", + "@patternfly/react-icons": "3.15.3", + "@patternfly/react-inline-edit-extension": "2.17.11", + "@patternfly/react-styles": "3.7.4", + "@patternfly/react-table": "2.27.11", + "@patternfly/react-tokens": "2.8.4", + "@patternfly/react-topology": "2.14.11", + "@patternfly/react-virtualized-extension": "1.4.12" + } + }, + { + "name": "2020.01", + "date": "2020-01-28", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.56.3", + "@patternfly/react-catalog-view-extension": "1.2.5", + "@patternfly/react-charts": "5.2.21", + "@patternfly/react-core": "3.134.2", + "@patternfly/react-icons": "3.14.39", + "@patternfly/react-inline-edit-extension": "2.15.6", + "@patternfly/react-styles": "3.6.26", + "@patternfly/react-table": "2.25.6", + "@patternfly/react-tokens": "2.7.25", + "@patternfly/react-topology": "2.12.5", + "@patternfly/react-virtualized-extension": "1.3.93" + } + }, + { + "name": "2019.11", + "date": "2019-12-18", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.46.1", + "@patternfly/react-catalog-view-extension": "1.1.58", + "@patternfly/react-charts": "5.2.9", + "@patternfly/react-core": "3.129.1", + "@patternfly/react-icons": "3.14.28", + "@patternfly/react-inline-edit-extension": "2.14.18", + "@patternfly/react-styles": "3.6.15", + "@patternfly/react-table": "2.24.62", + "@patternfly/react-tokens": "2.7.14", + "@patternfly/react-topology": "2.11.46", + "@patternfly/react-virtualized-extension": "1.3.59" + } + }, + { + "name": "2019.10", + "date": "2019-11-25", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.43.1", + "@patternfly/react-catalog-view-extension": "1.1.38", + "@patternfly/react-charts": "5.2.2", + "@patternfly/react-core": "3.124.1", + "@patternfly/react-icons": "3.14.23", + "@patternfly/react-inline-edit-extension": "2.13.9", + "@patternfly/react-styles": "3.6.11", + "@patternfly/react-table": "2.24.41", + "@patternfly/react-tokens": "2.7.10", + "@patternfly/react-topology": "2.11.27", + "@patternfly/react-virtualized-extension": "1.3.40" + } + }, + { + "name": "2019.09", + "date": "2019-11-01", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.40.6", + "@patternfly/react-charts": "5.1.5", + "@patternfly/react-core": "3.120.5", + "@patternfly/react-styles": "3.6.5", + "@patternfly/react-table": "2.24.17", + "@patternfly/react-tokens": "2.7.5", + "@patternfly/react-topology": "2.11.5", + "@patternfly/react-icons": "3.14.18", + "@patternfly/react-virtualized-extension": "1.3.17", + "@patternfly/react-inline-edit-extension": "2.12.17" + } + }, + { + "name": "2019.08", + "date": "2019-10-01", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.33.5", + "@patternfly/react-charts": "5.0.13", + "@patternfly/react-core": "3.112.3", + "@patternfly/react-styles": "3.5.27", + "@patternfly/react-table": "2.22.19", + "@patternfly/react-tokens": "2.6.31", + "@patternfly/react-topology": "2.8.65", + "@patternfly/react-icons": "3.14.7", + "@patternfly/react-virtualized-extension": "1.2.55", + "@patternfly/react-inline-edit-extension": "2.11.70" + } + }, + { + "name": "2019.07", + "date": "2019-09-10", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.31.6", + "@patternfly/react-charts": "4.7.9", + "@patternfly/react-core": "3.104.0", + "@patternfly/react-styles": "3.5.22", + "@patternfly/react-table": "2.20.15", + "@patternfly/react-tokens": "2.6.26", + "@patternfly/react-topology": "2.8.34", + "@patternfly/react-icons": "3.14.2", + "@patternfly/react-virtualized-extension": "1.2.23", + "@patternfly/react-inline-edit-extension": "2.11.35" + } + }, + { + "name": "2019.06", + "date": "2019-08-13", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.26.1", + "@patternfly/react-charts": "4.7.9", + "@patternfly/react-core": "3.87.3", + "@patternfly/react-styles": "3.5.13", + "@patternfly/react-table": "2.17.5", + "@patternfly/react-tokens": "2.6.16", + "@patternfly/react-topology": "2.7.31", + "@patternfly/react-icons": "3.10.14", + "@patternfly/react-virtualized-extension": "1.1.117", + "@patternfly/react-inline-edit-extension": "2.10.5" + } + }, + { + "name": "2019.05", + "date": "2019-07-24", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.23.0", + "@patternfly/react-charts": "4.7.1", + "@patternfly/react-core": "3.75.2", + "@patternfly/react-icons": "3.10.14", + "@patternfly/react-inline-edit-extension": "2.9.49", + "@patternfly/react-styles": "3.5.7", + "@patternfly/react-table": "2.14.23", + "@patternfly/react-tokens": "2.6.13", + "@patternfly/react-topology": "2.6.20", + "@patternfly/react-virtualized-extension": "1.1.82" + } + }, + { + "name": "2019.04", + "date": "2019-07-02", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.17.0", + "@patternfly/react-charts": "4.4.7", + "@patternfly/react-core": "3.58.1", + "@patternfly/react-icons": "3.10.6", + "@patternfly/react-inline-edit-extension": "2.9.12", + "@patternfly/react-styles": "3.4.6", + "@patternfly/react-table": "2.13.43", + "@patternfly/react-tokens": "2.6.5", + "@patternfly/react-topology": "2.4.21", + "@patternfly/react-virtualized-extension": "1.1.45" + } + }, + { + "name": "2019.03", + "date": "2019-06-11", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.17.0", + "@patternfly/react-charts": "4.1.5", + "@patternfly/react-core": "3.58.1", + "@patternfly/react-icons": "3.9.5", + "@patternfly/react-inline-edit-extension": "2.7.7", + "@patternfly/react-styles": "3.3.3", + "@patternfly/react-table": "2.11.1", + "@patternfly/react-tokens": "2.5.5" + } + }, + { + "name": "2019.02", + "date": "2019-06-05", + "hidden": true, + "versions": { + "@patternfly/patternfly": "2.17.0", + "@patternfly/react-charts": "3.6.5", + "@patternfly/react-core": "3.34.2", + "@patternfly/react-icons": "3.9.3", + "@patternfly/react-inline-edit-extension": "2.5.2", + "@patternfly/react-styles": "3.2.3", + "@patternfly/react-table": "2.9.2", + "@patternfly/react-tokens": "2.5.3" + } + } + ] +} From d8085a462a5970f22860d9f50de3a0e4809fa532 Mon Sep 17 00:00:00 2001 From: Donald Labaj Date: Tue, 11 Feb 2025 17:16:39 -0500 Subject: [PATCH 2/3] fix: updated page template. --- src/components/Toolbar.astro | 2 +- .../toolbar/ToogleThemeSwitcher.tsx | 17 +++++++++------- src/layouts/Main.astro | 17 ++++++++++++++++ src/utils/theme.ts | 20 +++++++++++++++++++ 4 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 src/utils/theme.ts diff --git a/src/components/Toolbar.astro b/src/components/Toolbar.astro index 0a90b78..196b27f 100644 --- a/src/components/Toolbar.astro +++ b/src/components/Toolbar.astro @@ -2,4 +2,4 @@ import { Toolbar as ReactToolbar } from './Toolbar.tsx' --- - + \ No newline at end of file diff --git a/src/components/toolbar/ToogleThemeSwitcher.tsx b/src/components/toolbar/ToogleThemeSwitcher.tsx index 2eed8a4..532a31e 100644 --- a/src/components/toolbar/ToogleThemeSwitcher.tsx +++ b/src/components/toolbar/ToogleThemeSwitcher.tsx @@ -2,23 +2,26 @@ import React from 'react' import { Icon, ToggleGroup, ToggleGroupItem } from '@patternfly/react-core' import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon' import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon' +import { getThemePreference, updateThemePreference } from '../../utils/theme' export const ToggleThemeSwitcher: React.FunctionComponent = () => { const [isDarkTheme, setIsDarkTheme] = React.useState(false); React.useEffect(() => { - const darkTheme = window?.localStorage?.getItem('darkMode') === 'true' ? true : false; - const html = document.querySelector('html') as HTMLHtmlElement - html.classList.toggle('pf-v6-theme-dark', darkTheme) + // const darkTheme = window?.localStorage?.getItem('darkMode') === 'true' ? true : false; + // const html = document.querySelector('html') as HTMLHtmlElement + // html.classList.toggle('pf-v6-theme-dark', darkTheme) + const darkTheme = getThemePreference() === 'dark'; setIsDarkTheme(darkTheme); - }); + }, []); const toggleDarkTheme = (_evt: unknown, selected: boolean) => { const darkThemeToggleClicked = !selected === isDarkTheme - const html = document.querySelector('html') as HTMLHtmlElement - html.classList.toggle('pf-v6-theme-dark', darkThemeToggleClicked) + updateThemePreference(darkThemeToggleClicked ? 'dark' : 'light'); + // const html = document.querySelector('html') as HTMLHtmlElement + // html.classList.toggle('pf-v6-theme-dark', darkThemeToggleClicked) setIsDarkTheme(darkThemeToggleClicked); - localStorage.setItem('darkMode', JSON.stringify(darkThemeToggleClicked)); + //localStorage.setItem('darkMode', JSON.stringify(darkThemeToggleClicked)); } return ( diff --git a/src/layouts/Main.astro b/src/layouts/Main.astro index b94d2b4..710d110 100644 --- a/src/layouts/Main.astro +++ b/src/layouts/Main.astro @@ -5,6 +5,7 @@ import { ClientRouter } from 'astro:transitions' import Page from '../components/Page.astro' import Masthead from '../components/Masthead.astro' import Navigation from '../components/Navigation.astro' + --- @@ -17,6 +18,12 @@ import Navigation from '../components/Navigation.astro' + @@ -24,3 +31,13 @@ import Navigation from '../components/Navigation.astro' + + diff --git a/src/utils/theme.ts b/src/utils/theme.ts new file mode 100644 index 0000000..60ac2f5 --- /dev/null +++ b/src/utils/theme.ts @@ -0,0 +1,20 @@ +export type Theme = 'dark' | 'light' | 'system'; + +export const updateThemePreference = (theme: Theme) => { + if(typeof window !== undefined) { + window?.localStorage?.setItem('theme-preference', theme) + document?.querySelector('html')?.classList.toggle('pf-v6-theme-dark', theme === 'dark' ); + }; +}; +export const getThemePreference = (): Theme => { + const theme = window?.localStorage?.getItem ('theme-preference'); + return theme !== undefined ? (theme as Theme) : 'system'; +}; + +export const themeLoader = () => { + if(typeof window !== 'undefined') { + window.addEventListener('DOMContentLoaded', ()=> { + updateThemePreference(getThemePreference()); + }) + }; +} \ No newline at end of file From f8c6320232a7457cff4d9b24272ab10822f3d583 Mon Sep 17 00:00:00 2001 From: Donald Labaj Date: Wed, 12 Feb 2025 03:26:31 -0500 Subject: [PATCH 3/3] fixed eslint errors. --- eslint.config.mjs | 2 +- src/components/Toolbar.tsx | 4 +--- src/components/toolbar/DocumentReleaseDropdown.tsx | 1 + .../toolbar/__tests__/DocumentReleaseDropdown.test.tsx | 2 -- src/layouts/Main.astro | 6 ------ src/pages/index.astro | 2 +- 6 files changed, 4 insertions(+), 13 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 43cf5a7..23c8107 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -48,7 +48,7 @@ export default [ '@typescript-eslint/array-type': 'error', '@typescript-eslint/ban-types': 'off', '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/consistent-type-definitions': 'error', + '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/explicit-member-accessibility': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/indent': 'off', diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 7fbe146..20de500 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -12,8 +12,7 @@ import { SearchComponent } from './toolbar/SearchComponent' import { DocumentReleaseDropdown } from './toolbar/DocumentReleaseDropdown'; import GithubIcon from '@patternfly/react-icons/dist/esm/icons/github-icon'; -export const Toolbar: React.FunctionComponent = () => { - return ( +export const Toolbar: React.FunctionComponent = () => ( { ) -} diff --git a/src/components/toolbar/DocumentReleaseDropdown.tsx b/src/components/toolbar/DocumentReleaseDropdown.tsx index 8f33b2d..55eeaf7 100644 --- a/src/components/toolbar/DocumentReleaseDropdown.tsx +++ b/src/components/toolbar/DocumentReleaseDropdown.tsx @@ -26,6 +26,7 @@ export const DocumentReleaseDropdown: React.FunctionComponent = () => { diff --git a/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx b/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx index 6a81af0..c9e163d 100644 --- a/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx +++ b/src/components/toolbar/__tests__/DocumentReleaseDropdown.test.tsx @@ -3,8 +3,6 @@ import React from 'react'; import { render, screen, fireEvent } from '@testing-library/react'; import { DocumentReleaseDropdown } from '../DocumentReleaseDropdown'; -import { snapshot } from 'node:test'; -import exp from 'constants'; jest.mock('../../../versions.json', () => ({ Releases: [ diff --git a/src/layouts/Main.astro b/src/layouts/Main.astro index 710d110..e7ea14f 100644 --- a/src/layouts/Main.astro +++ b/src/layouts/Main.astro @@ -18,12 +18,6 @@ import Navigation from '../components/Navigation.astro' - diff --git a/src/pages/index.astro b/src/pages/index.astro index ad6ff74..401c06a 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -9,7 +9,7 @@ import MainLayout from '../layouts/Main.astro' - Astro + PatternFly Page content