@veecode-platform/plugin-veecode-homepage-dynamic 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-scalprum/plugin-manifest.json +3 -3
- package/dist-scalprum/static/{4327.5c6f5040.chunk.js → 4327.0535c895.chunk.js} +2 -2
- package/dist-scalprum/static/{4327.5c6f5040.chunk.js.map → 4327.0535c895.chunk.js.map} +1 -1
- package/dist-scalprum/static/{5689.ba470bd3.chunk.js → 5689.44adcfd6.chunk.js} +1 -1
- package/dist-scalprum/static/{5689.ba470bd3.chunk.js.map → 5689.44adcfd6.chunk.js.map} +1 -1
- package/dist-scalprum/static/{8505.bd5ab33a.chunk.js → 8505.9dd864c9.chunk.js} +1 -1
- package/dist-scalprum/static/{8505.bd5ab33a.chunk.js.map → 8505.9dd864c9.chunk.js.map} +1 -1
- package/dist-scalprum/static/{9286.0bf88601.chunk.js → 9286.e13da971.chunk.js} +2 -2
- package/dist-scalprum/static/{9286.0bf88601.chunk.js.map → 9286.e13da971.chunk.js.map} +1 -1
- package/dist-scalprum/static/avatar.70448f05..svg +1 -0
- package/dist-scalprum/{veecode-platform.plugin-veecode-homepage.c98eadba97079a4d7d5e.js → veecode-platform.plugin-veecode-homepage.ba7df9d387f79c300ff6.js} +2 -2
- package/dist-scalprum/{veecode-platform.plugin-veecode-homepage.c98eadba97079a4d7d5e.js.map → veecode-platform.plugin-veecode-homepage.ba7df9d387f79c300ff6.js.map} +1 -1
- package/package.json +1 -1
- package/dist-scalprum/static/avatar.82d1e940..svg +0 -1
- /package/dist-scalprum/static/{9286.0bf88601.chunk.js.LICENSE.txt → 9286.e13da971.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"static/4327.5c6f5040.chunk.js","mappings":"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","sources":["webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/iconButtonComponent/IconButtonComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/toggleTheme/ToggleTheme.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/utils/stringUtils.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchInput.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchResultItem.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchOption.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchBar.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useDebouncedCallback.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/userAvatar/UserAvatar.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/logout/Logout.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/menuItems/MenuItems.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/notifications/Notifications.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/profile/Profle.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/HeaderComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeGretting/HomeGretting.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Community.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Docs.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Website.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Support.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/utils/generateColor.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/VisitedCharts.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useVisited.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/StatCards.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/HighLightedCard.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/Summary.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useCatalog.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/HomeContent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/VeeCodeHomePage.tsx"],"sourcesContent":["import IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Link } from 'react-router-dom';\nimport { ReactElement, MouseEvent } from 'react';\n\ninterface IconButtonProps {\n title: string;\n label: string;\n color: 'warning' | 'error' | 'inherit';\n handleClick?: (e: MouseEvent<HTMLButtonElement>) => void;\n link?: string;\n children: ReactElement;\n}\n\nexport const IconButtonComponent: React.FC<IconButtonProps> = ({\n title,\n label,\n color,\n handleClick,\n link,\n children,\n}) => {\n const button = (\n <IconButton\n size=\"small\"\n aria-label={label}\n color={color}\n aria-controls={`${label}-menu`}\n aria-haspopup=\"true\"\n sx={{\n width: '42px',\n height: '42px',\n borderRadius: '50%',\n }}\n onClick={handleClick}\n >\n {children}\n </IconButton>\n );\n\n return (\n <Tooltip title={title}>\n {link ? <Link to={link}>{button}</Link> : button}\n </Tooltip>\n );\n};\n","import { useTheme } from '@mui/material/styles';\nimport LightModeOutlinedIcon from '@mui/icons-material/LightModeOutlined';\nimport DarkModeOutlinedIcon from '@mui/icons-material/DarkModeOutlined';\nimport { appThemeApiRef, useApi } from '@backstage/core-plugin-api';\nimport { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\n\nexport const ToogleTheme = () => {\n const appThemeApi = useApi(appThemeApiRef);\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const tooltipTitle = isDarkMode\n ? 'Select theme Light Theme'\n : 'Select theme Dark Theme';\n const themeIds = appThemeApi.getInstalledThemes();\n\n const handleSetTheme = (\n e: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ) => {\n const newThemeId = isDarkMode ? 'light' : 'dark';\n e.preventDefault();\n e.stopPropagation();\n if (themeIds.some(it => it.id === newThemeId)) {\n appThemeApi.setActiveThemeId(newThemeId);\n } else {\n appThemeApi.setActiveThemeId(undefined);\n }\n };\n\n return (\n <IconButtonComponent\n title={tooltipTitle}\n handleClick={handleSetTheme}\n color=\"inherit\"\n label=\"Toggle-theme\"\n >\n {isDarkMode ? <LightModeOutlinedIcon /> : <DarkModeOutlinedIcon />}\n </IconButtonComponent>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Typography from '@mui/material/Typography';\n\n/**\n * Highlights the substring that matches the query term.\n * @param text The full text to render.\n * @param query The query term to highlight.\n * @returns JSX.Element with highlighted matching substring.\n */\nexport const highlightMatch = (text: string, query: string) => {\n if (!query) return <>{text}</>;\n\n const escapeRegex = (input: string) =>\n input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const escapedQuery = escapeRegex(query);\n\n const regex = new RegExp(`(${escapedQuery})`, 'i');\n const parts = text.split(regex);\n\n return (\n <>\n {parts.map((part, index) =>\n regex.test(part) ? (\n <Typography\n key={`${part}-${index}`}\n component=\"span\"\n sx={{ fontWeight: 'normal' }}\n >\n {part}\n </Typography>\n ) : (\n <Typography\n key={`${part}-${index}`}\n component=\"span\"\n sx={{ fontWeight: 'bold' }}\n >\n {part}\n </Typography>\n ),\n )}\n </>\n );\n};\n\nexport const createSearchLink = (searchTerm: string) => {\n return `/search?query=${encodeURIComponent(searchTerm)}`;\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\n\ninterface SearchInputProps {\n params: any;\n error: boolean;\n helperText: string;\n}\n\nexport const SearchInput = ({\n params,\n error,\n helperText,\n}: SearchInputProps) => (\n <TextField\n {...params}\n placeholder=\"Search...\"\n variant=\"standard\"\n error={error}\n helperText={helperText}\n InputProps={{\n ...params.InputProps,\n disableUnderline: true,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon style={{ color: '#ffffff' }} />\n </InputAdornment>\n ),\n }}\n sx={{\n input: { color: '#CDCDCD' },\n button: { color: 'inherit' },\n '& fieldset': { border: 'none' },\n }}\n />\n);\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Link } from '@backstage/core-components';\nimport ListItem from '@mui/material/ListItem';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { highlightMatch } from '../../../utils/stringUtils';\nimport { SearchResultProps } from '@backstage/plugin-search-react';\nimport { Result, SearchDocument } from '@backstage/plugin-search-common';\nimport { useAnalytics } from '@backstage/core-plugin-api';\n\ninterface SearchResultItemProps {\n option: string;\n query: SearchResultProps['query'];\n result: Result<SearchDocument> | undefined;\n renderProps: any;\n}\n\nexport const SearchResultItem = ({\n option,\n query,\n result,\n renderProps,\n}: SearchResultItemProps) => {\n const isNoResultsFound = option === 'No results found';\n const analytics = useAnalytics();\n\n return (\n <Box\n component={isNoResultsFound ? 'div' : Link}\n to={result?.document.location}\n underline=\"none\"\n sx={{ width: '100%', ...(isNoResultsFound ? {} : { cursor: 'pointer' }) }}\n >\n <ListItem\n {...renderProps}\n sx={{ py: 1 }}\n onClick={(e: any) => {\n analytics.captureEvent('discover', result?.document.title ?? '', {\n attributes: { to: result?.document.location ?? '#' },\n value: result?.rank,\n });\n renderProps?.onClick?.(e);\n }}\n >\n <Typography sx={{ color: 'text.primary', flexGrow: 1 }}>\n {isNoResultsFound\n ? option\n : highlightMatch(option, query?.term ?? '')}\n </Typography>\n </ListItem>\n </Box>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport { Link } from '@backstage/core-components';\nimport ListItem from '@mui/material/ListItem';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport { SearchResultItem } from './SearchResultItem';\nimport { Result, SearchDocument } from '@backstage/plugin-search-common';\nimport { SearchResultProps } from '@backstage/plugin-search-react';\n\ninterface SearchOptionProps {\n option: string;\n index: number;\n options: string[];\n query: SearchResultProps['query'];\n results: Result<SearchDocument>[];\n renderProps: any;\n searchLink: string;\n}\n\nexport const SearchOption = ({\n option,\n index,\n options,\n query,\n results,\n renderProps,\n searchLink,\n}: SearchOptionProps) => {\n if (option === query?.term && index === options.length - 1) {\n return (\n <Box key=\"all-results\" id=\"all-results\">\n <Divider sx={{ my: 0.5 }} />\n <Link to={searchLink} underline=\"none\">\n <ListItem\n {...renderProps}\n sx={{ my: 0 }}\n className=\"allResultsOption\"\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography sx={{ flexGrow: 1 }}>All results</Typography>\n <ArrowForwardIcon fontSize=\"small\" />\n </Box>\n </ListItem>\n </Link>\n </Box>\n );\n }\n\n const result = results.find(r => r.document.title === option);\n return (\n <SearchResultItem\n key={index}\n option={option}\n query={query}\n result={result}\n renderProps={renderProps}\n />\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport {\n SearchResultState,\n SearchResultProps,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport { createSearchLink } from '../../../utils/stringUtils';\nimport { useNavigate } from 'react-router-dom';\nimport { SearchInput } from './SearchInput';\nimport { SearchOption } from './SearchOption';\nimport { useDebouncedCallback } from '../../../hooks/useDebouncedCallback';\nimport { useTheme } from '@mui/material/styles';\n\ninterface SearchBarProps {\n query: SearchResultProps['query'];\n setSearchTerm: (term: string) => void;\n}\nexport const SearchBar = (props: SearchBarProps) => {\n const { query, setSearchTerm } = props;\n const navigate = useNavigate();\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const highlightedIndexRef = useRef(highlightedIndex);\n const { setTerm } = useSearch();\n const theme = useTheme();\n\n const onInputChange = useDebouncedCallback((_, inputValue) => {\n setSearchTerm(inputValue);\n setTerm(inputValue);\n }, 300);\n\n useEffect(() => {\n highlightedIndexRef.current = highlightedIndex;\n }, [highlightedIndex]);\n\n return (\n <SearchResultState {...props}>\n {({ loading, error, value }) => {\n const results = query?.term ? value?.results ?? [] : [];\n let options: string[] = [];\n if (query?.term && results.length === 0) {\n options = ['No results found'];\n }\n if (results.length > 0) {\n options = [\n ...results.map(result => result.document.title),\n `${query?.term}`,\n ];\n }\n const searchLink = createSearchLink(query?.term ?? '');\n\n return (\n <Autocomplete\n freeSolo\n options={options}\n loading={loading}\n value={query?.term ?? ''}\n getOptionLabel={option => option ?? ''}\n onInputChange={onInputChange}\n onHighlightChange={(_, option) =>\n setHighlightedIndex(options.indexOf(option ?? ''))\n }\n componentsProps={{\n paper: {\n sx: {\n borderRadius: '4px',\n outline: 'unset',\n },\n },\n }}\n sx={{\n width: '100%',\n background:\n theme.palette.mode === 'dark' ? '#FFFFFF10' : '#CDCDCD10',\n '& [class*=\"MuiAutocomplete-clearIndicator\"]': {\n visibility: query?.term ? 'visible' : 'hidden',\n },\n padding: '.2rem',\n borderRadius: '8px',\n '&:hover': {\n background:\n theme.palette.mode === 'dark' ? '#FFFFFF25' : '#CDCDCD25',\n },\n }}\n filterOptions={x => x}\n onKeyDown={event => {\n const currentHighlight = highlightedIndexRef.current;\n if (event.key === 'Enter') {\n event.preventDefault();\n if (currentHighlight === -1 && query?.term) {\n navigate(searchLink);\n } else if (currentHighlight !== -1) {\n navigate(\n results[highlightedIndex]?.document?.location ?? searchLink,\n );\n }\n setHighlightedIndex(-1);\n }\n }}\n renderInput={params => (\n <SearchInput\n params={params}\n error={!!error}\n helperText={error ? 'Error fetching results' : ''}\n />\n )}\n renderOption={(renderProps, option, { index }) => (\n <SearchOption\n option={option}\n index={index}\n options={options}\n query={query}\n results={results}\n renderProps={renderProps}\n searchLink={searchLink}\n />\n )}\n ListboxProps={{\n sx: { maxHeight: '60vh' },\n }}\n />\n );\n }}\n </SearchResultState>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useRef, useEffect, useCallback } from 'react';\n\nexport const useDebouncedCallback = <T extends (...args: any[]) => void>(\n callback: T,\n delay: number,\n) => {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n },\n [callback, delay],\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { useState } from 'react';\nimport { SearchBar } from './SearchBar';\nimport { Box } from '@material-ui/core';\n\nexport const SearchComponent = () => {\n const [searchTerm, setSearchTerm] = useState<string>('');\n\n return (\n <SearchContextProvider>\n <Box component=\"div\" sx={{ width: '100%', maxWidth: '50vw' }}>\n <SearchBar query={{ term: searchTerm }} setSearchTerm={setSearchTerm} />\n </Box>\n </SearchContextProvider>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Avatar from '@mui/material/Avatar';\nimport Skeleton from '@mui/material/Skeleton';\nimport AvatarImg from '../../assets/avatar.svg';\n\ninterface UserAvatarProps {\n width?: string;\n height?: string;\n}\n\nexport const UserAvatar: React.FC<UserAvatarProps> = ({ width, height }) => {\n const { profile, loading: profileLoading } = useUserProfile();\n\n return (\n <>\n {profileLoading ? (\n <Skeleton variant=\"circular\" sx={{ width, height }} />\n ) : (\n <Avatar\n src={profile.picture ?? AvatarImg}\n sx={{ width, height, objectFit: 'cover' }}\n alt=\"Profile picture\"\n />\n )}\n </>\n );\n};\n","import { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport LogoutIcon from '@mui/icons-material/Logout';\nimport Box from '@mui/material/Box';\n\nexport const Logout = () => {\n const identityApi = useApi(identityApiRef);\n\n return (\n <Box\n component=\"div\"\n onClick={async () => {\n await identityApi.signOut();\n }}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n }}\n >\n <ListItemIcon>\n <LogoutIcon fontSize=\"small\" />\n </ListItemIcon>\n Log out\n </Box>\n );\n};\n","import { ReactElement, useEffect } from 'react';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport Menu from '@mui/material/Menu';\nimport Box from '@mui/material/Box';\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Typography from '@mui/material/Typography';\nimport { Divider, ListItemIcon, MenuItem } from '@material-ui/core';\nimport { UserAvatar } from '../../userAvatar/UserAvatar';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { configApiRef } from '@backstage/core-plugin-api';\nimport { UserEntity } from '@backstage/catalog-model';\nimport { Link } from 'react-router-dom';\nimport { Logout } from '../logout/Logout';\nimport Chip from '@mui/material/Chip';\nimport { useTheme } from '@mui/material/styles';\n\ninterface MenuItemsProps {\n anchorEl: HTMLElement | null;\n menuId: string;\n isOpen: boolean;\n handleClose: () => void;\n}\n\ninterface MenuItemProps {\n handleClose: () => void;\n link: string;\n children: ReactElement;\n}\n\nconst MenuItemComponent: React.FC<MenuItemProps> = ({\n handleClose,\n link,\n children,\n}) => {\n return (\n <MenuItem onClick={handleClose}>\n <Link to={link}>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '.1rem 0',\n }}\n >\n {children}\n </Box>\n </Link>\n </MenuItem>\n );\n};\n\nexport const MenuItems: React.FC<MenuItemsProps> = ({\n anchorEl,\n menuId,\n isOpen,\n handleClose,\n}) => {\n const theme = useTheme();\n const { displayName, backstageIdentity } = useUserProfile();\n const catalogApi = useApi(catalogApiRef);\n const config = useApi(configApiRef);\n const supportUrl =\n config.app?.support?.url ??\n // config.getOptionalString('app.support.url') ??\n 'https://github.com/orgs/veecode-platform/discussions';\n\n useEffect(() => {\n const fetchUserEntity = async () => {\n let userProfile;\n try {\n if (backstageIdentity?.userEntityRef) {\n userProfile = (await catalogApi.getEntityByRef(\n backstageIdentity.userEntityRef,\n )) as unknown as UserEntity;\n }\n return userProfile;\n } catch (_err) {\n return null;\n }\n };\n\n fetchUserEntity();\n }, [backstageIdentity, catalogApi]);\n\n const profileDisplayName = () => {\n const name = displayName;\n const regex = /^[^:/]+:[^/]+\\/[^/]+$/;\n if (regex.test(name)) {\n return name\n .charAt(name.indexOf('/') + 1)\n .toLocaleUpperCase('en-US')\n .concat(name.substring(name.indexOf('/') + 2));\n }\n return name;\n };\n\n return (\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={menuId}\n keepMounted\n open={isOpen}\n onClose={handleClose}\n slotProps={{\n paper: {\n sx: {\n width: 250,\n borderRadius: 2,\n mt: 0.8,\n mr: -0.5,\n boxShadow: 3,\n background: `${theme.palette.background.default} !important`,\n border: `1px solid ${theme.palette.grey[600]}`,\n },\n },\n }}\n >\n {/* Profile */}\n <Box\n sx={{ px: 2, py: 1.5, display: 'flex', alignItems: 'center', gap: 1.5 }}\n >\n <UserAvatar />\n <Box>\n <Typography variant=\"subtitle1\">{profileDisplayName()}</Typography>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={backstageIdentity?.ownershipEntityRefs[0].split('/')[1]}\n />\n </Box>\n </Box>\n\n <Divider />\n\n {/* Support */}\n <MenuItemComponent handleClose={handleClose} link={supportUrl}>\n <>\n <ListItemIcon>\n <HelpOutlineIcon fontSize=\"small\" />\n </ListItemIcon>\n Help\n </>\n </MenuItemComponent>\n {/* Settings */}\n <MenuItemComponent handleClose={handleClose} link=\"/settings\">\n <>\n <ListItemIcon>\n <SettingsIcon fontSize=\"small\" />\n </ListItemIcon>\n Settings\n </>\n </MenuItemComponent>\n <Divider />\n\n {/* Logout */}\n <MenuItem>\n <Logout />\n </MenuItem>\n </Menu>\n );\n};\n","/* eslint-disable no-restricted-syntax */\nimport { useState, useEffect, useMemo } from 'react';\nimport Badge from '@mui/material/Badge';\nimport NotificationsIcon from '@mui/icons-material/Notifications';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {\n GetNotificationsOptions,\n GetNotificationsResponse,\n GetTopicsResponse,\n useNotificationsApi,\n} from '@backstage/plugin-notifications';\nimport {\n NotificationSeverity,\n NotificationStatus,\n} from '@backstage/plugin-notifications-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport throttle from 'lodash/throttle';\nimport { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\n\nconst ThrottleDelayMs = 2000;\n\nexport const Notifications = () => {\n const [unreadOnly] = useState<boolean | undefined>(true);\n const [saved] = useState<boolean | undefined>(undefined);\n const [severity] = useState<NotificationSeverity>('low');\n const [topic] = useState<string>();\n\n const { lastSignal } = useSignal('notifications');\n\n const { error, value, retry, loading } = useNotificationsApi<\n [GetNotificationsResponse, NotificationStatus, GetTopicsResponse]\n >(\n api => {\n const options: GetNotificationsOptions = {\n minimumSeverity: severity,\n };\n\n if (unreadOnly !== undefined) {\n options.read = !unreadOnly;\n }\n if (saved !== undefined) {\n options.saved = saved;\n }\n if (topic !== undefined) {\n options.topic = topic;\n }\n\n return Promise.all([\n api.getNotifications(options),\n api.getStatus(),\n api.getTopics(options),\n ]);\n },\n [unreadOnly, severity, saved, topic],\n );\n\n const throttledRetry = useMemo(\n () => throttle(() => retry(), ThrottleDelayMs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const totalCount = value?.[1]?.unread ?? 0;\n\n useEffect(() => {\n if (lastSignal?.action) {\n throttledRetry();\n }\n }, [lastSignal, throttledRetry]);\n\n return (\n <IconButtonComponent\n title=\"Notifications\"\n label={`Mostrar ${totalCount} notificações não lidas`}\n color=\"inherit\"\n link=\"/notifications\"\n >\n <Badge\n badgeContent={totalCount}\n color=\"error\"\n invisible={loading || !!error || totalCount === 0}\n >\n {loading ? (\n <CircularProgress size={20} color=\"inherit\" />\n ) : (\n <NotificationsIcon />\n )}\n </Badge>\n </IconButtonComponent>\n );\n};\n","import { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\nimport { UserAvatar } from '../../userAvatar/UserAvatar';\n\ninterface ProfileProps {\n handleOpenMenu: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\nexport const Profile: React.FC<ProfileProps> = ({ handleOpenMenu }) => {\n return (\n <IconButtonComponent\n title=\"\"\n label=\"profile-menu\"\n handleClick={handleOpenMenu}\n color=\"inherit\"\n >\n <UserAvatar width=\"42px\" height=\"42px\" />\n </IconButtonComponent>\n );\n};\n","// eslint-disable-next-line no-restricted-syntax\nimport * as React from 'react';\nimport AppBar from '@mui/material/AppBar';\nimport Box from '@mui/material/Box';\nimport Toolbar from '@mui/material/Toolbar';\nimport { ToogleTheme } from './toggleTheme/ToggleTheme';\nimport { SearchComponent } from './searchComponent/SearchComponent';\nimport { MenuItems } from './menuItems/MenuItems';\nimport { Notifications } from './notifications/Notifications';\nimport { Profile } from './profile/Profle';\nimport { useTheme } from '@mui/material/styles';\n\nexport const HeaderComponent = () => {\n const theme = useTheme();\n const [profileAnchorEl, setProfileAnchorEl] =\n React.useState<null | HTMLElement>(null);\n\n const isProfileMenuOpen = Boolean(profileAnchorEl);\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setProfileAnchorEl(event.currentTarget);\n };\n\n const handleProfileMenuClose = () => {\n setProfileAnchorEl(null);\n };\n\n return (\n <Box sx={{ flexGrow: 1, position: 'relative' }}>\n <AppBar\n position=\"sticky\"\n component=\"nav\"\n style={{ zIndex: theme.zIndex.appBar - 1 }}\n >\n <Toolbar>\n <SearchComponent />\n <Box sx={{ flexGrow: 1 }} />\n <Box\n sx={{\n display: {\n xs: 'none',\n md: 'flex',\n alignItems: 'center',\n gap: '.5rem',\n },\n }}\n >\n <Notifications />\n <ToogleTheme />\n <Profile handleOpenMenu={handleProfileMenuOpen} />\n </Box>\n </Toolbar>\n </AppBar>\n\n {/* Profile options */}\n <MenuItems\n anchorEl={profileAnchorEl}\n menuId=\"profile-menu\"\n isOpen={isProfileMenuOpen}\n handleClose={handleProfileMenuClose}\n />\n </Box>\n );\n};\n","import Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport { UserAvatar } from '../userAvatar/UserAvatar';\nimport Typography from '@mui/material/Typography';\nimport { useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Skeleton from '@mui/material/Skeleton';\nimport { useEffect, useState } from 'react';\nimport WavesImg from '../../assets/waves.svg';\n\nexport const HomeGreeting = () => {\n const [loading, setLoading] = useState<boolean>(false);\n const { displayName } = useUserProfile();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n const color1 =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const color2 =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor2\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo2')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo2')) ??\n configApi.app?.branding?.theme?.light?.headerColor2) ?? '#86F4CE';\n\n const profileDisplayName = () => {\n const name = displayName;\n const regex = /^[^:/]+:[^/]+\\/[^/]+$/;\n if (regex.test(name)) {\n return name\n .charAt(name.indexOf('/') + 1)\n .toLocaleUpperCase('en-US')\n .concat(name.substring(name.indexOf('/') + 2));\n }\n return name;\n };\n\n useEffect(() => {\n setLoading(true);\n setTimeout(() => setLoading(false), 1000);\n }, []);\n\n return (\n <Box\n sx={{\n background: `linear-gradient(90deg, ${color1} 0%, ${color2} 100%)`,\n width: '100%',\n minHeight: '210px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n overflow: 'hidden',\n [theme.breakpoints.only('xs')]: {\n height: '380px',\n padding: '1rem 0',\n },\n }}\n >\n <Box\n sx={{\n width: '90%',\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: '2rem',\n [theme.breakpoints.only('xs')]: {\n flexDirection: 'column',\n padding: '1rem 0',\n },\n }}\n >\n <Box>\n <UserAvatar width=\"120px\" height=\"120px\" />\n </Box>\n <Box\n sx={{\n [theme.breakpoints.only('xs')]: {\n textAlign: 'center',\n color: theme.palette.grey[100],\n maxWidth: '70vw',\n },\n }}\n >\n <Typography variant=\"h3\" color=\"#FAFAFA\">\n Welcome back\n {loading ? (\n <Skeleton\n variant=\"rectangular\"\n width={150}\n height={80}\n style={{ display: 'inline' }}\n />\n ) : (\n <>, {profileDisplayName()} 👋</>\n )}{' '}\n </Typography>\n <Typography variant=\"h6\" color=\"#FAFAFA\">\n Let's get started.\n </Typography>\n </Box>\n </Box>\n <img\n src={WavesImg}\n alt=\"\"\n style={{\n width: '100%',\n height: '250px',\n objectFit: 'cover',\n position: 'absolute',\n top: '-20%',\n left: '0',\n opacity: '0.7',\n }}\n />\n </Box>\n );\n};\n","import { useTheme } from '@mui/material/styles';\n\nconst Communitylogo = () => {\n const theme = useTheme();\n return (\n <svg\n height=\"45px\"\n width=\"45px\"\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 502.648 502.648\"\n xmlSpace=\"preserve\"\n style={{ cursor: 'pointer ' }}\n >\n <g>\n <g>\n <g>\n <circle\n style={{ fill: theme.palette.grey[600] }}\n cx=\"250.399\"\n cy=\"91.549\"\n r=\"58.694\"\n />\n <path\n style={{ fill: theme.palette.grey[600] }}\n d=\"M455.861,253.028l-54.703-11.411c-18.637-3.904-37.037,4.638-46.765,19.824\n\t\t\t\tc-9.448-4.853-19.608-9.038-30.415-12.511v-32.529c0.022-24.612-20.126-44.738-44.651-44.738h-55.933\n\t\t\t\tc-24.655,0-44.716,20.126-44.716,44.738v32.701c-10.699,3.408-20.751,7.593-30.264,12.468\n\t\t\t\tc-9.728-15.251-28.15-23.857-46.809-19.953l-54.747,11.411c-24.03,5.026-39.626,28.862-34.6,52.978l13.741,65.64\n\t\t\t\tc4.983,24.051,28.84,39.647,52.892,34.621l17.321-3.624c8.671,12.813,20.665,24.569,36.023,34.621\n\t\t\t\tc31.989,20.967,74.247,32.529,119.092,32.529c68.617,0,127.721-27.589,154.943-67.215l17.602,3.689\n\t\t\t\tc24.03,5.004,47.887-10.57,52.87-34.621l13.762-65.64C495.508,281.89,479.912,258.054,455.861,253.028z M251.305,447.381\n\t\t\t\tc-40.51,0-78.475-10.203-106.797-28.862c-9.707-6.342-17.753-13.395-24.202-20.945l13.266-2.783\n\t\t\t\tc24.073-5.004,39.669-28.84,34.643-52.913l-12.317-59.018c7.183-3.861,14.733-7.248,22.757-10.138v10.764\n\t\t\t\tc0,24.569,20.104,44.695,44.716,44.695h55.933c24.548,0,44.652-20.147,44.652-44.695v-11.325\n\t\t\t\tc8.175,2.912,15.854,6.256,22.973,10.052L334.439,341.9c-4.983,24.073,10.591,47.909,34.664,52.913l13.395,2.804\n\t\t\t\tC357.52,427.191,308.101,447.381,251.305,447.381z\"\n />\n <circle\n style={{ fill: theme.palette.grey[600] }}\n cx=\"443.954\"\n cy=\"168.708\"\n r=\"58.694\"\n />\n <path\n style={{ fill: theme.palette.grey[600] }}\n d=\"M70.736,226.172c31.752-6.644,52.029-37.77,45.471-69.501\n\t\t\t\tc-6.687-31.709-37.749-52.072-69.523-45.428c-31.709,6.622-52.072,37.727-45.428,69.458\n\t\t\t\tC7.879,212.453,38.984,232.795,70.736,226.172z\"\n />\n </g>\n </g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n </g>\n </svg>\n );\n};\n\nexport default Communitylogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst DocsLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n style={{ cursor: 'pointer ' }}\n >\n <path\n fill={theme.palette.grey[600]}\n fill-rule=\"evenodd\"\n d=\"M4.25 1A2.25 2.25 0 002 3.25v9.5A2.25 2.25 0 004.25 15h8.5c.69 0 1.25-.56 1.25-1.25V2.25C14 1.56 13.44 1 12.75 1h-8.5zM3.5 12.75c0 .414.336.75.75.75h8.25v-2H4.25a.75.75 0 00-.75.75v.5zm0-2.622c.235-.083.487-.128.75-.128h8.25V2.5H4.25a.75.75 0 00-.75.75v6.878z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n};\n\nexport default DocsLogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst WebsiteLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ cursor: 'pointer ' }}\n >\n <rect x=\"0\" fill=\"none\" width=\"20\" height=\"20\" />\n\n <g fill={theme.palette.grey[600]}>\n <path d=\"M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm7.5 6.48c-.274.896-.908 1.64-1.75 2.05-.45-1.69-1.658-3.074-3.27-3.75.13-.444.41-.83.79-1.09-.43-.28-1-.42-1.34.07-.53.69 0 1.61.21 2v.14c-.555-.337-.99-.84-1.24-1.44-.966-.03-1.922.208-2.76.69-.087-.565-.032-1.142.16-1.68.733.07 1.453-.23 1.92-.8.46-.52-.13-1.18-.59-1.58h.36c1.36-.01 2.702.335 3.89 1 1.36 1.005 2.194 2.57 2.27 4.26.24 0 .7-.55.91-.92.172.34.32.69.44 1.05zM9 16.84c-2.05-2.08.25-3.75-1-5.24-.92-.85-2.29-.26-3.11-1.23-.282-1.473.267-2.982 1.43-3.93.52-.44 4-1 5.42.22.83.715 1.415 1.674 1.67 2.74.46.035.918-.066 1.32-.29.41 2.98-3.15 6.74-5.73 7.73zM5.15 2.09c.786-.3 1.676-.028 2.16.66-.42.38-.94.63-1.5.72.02-.294.085-.584.19-.86l-.85-.52z\" />\n </g>\n </svg>\n );\n};\n\nexport default WebsiteLogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst SupportLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ cursor: 'pointer ' }}\n >\n <title>support</title>\n <rect width=\"24\" height=\"24\" fill=\"none\" />\n <path\n fill={theme.palette.grey[600]}\n d=\"M12,2a8,8,0,0,0-8,8v1.9A2.92,2.92,0,0,0,3,14a2.88,2.88,0,0,0,1.94,2.61C6.24,19.72,8.85,22,12,22h3V20H12c-2.26,0-4.31-1.7-5.34-4.39l-.21-.55L5.86,15A1,1,0,0,1,5,14a1,1,0,0,1,.5-.86l.5-.29V11a1,1,0,0,1,1-1H17a1,1,0,0,1,1,1v5H13.91a1.5,1.5,0,1,0-1.52,2H20a2,2,0,0,0,2-2V14a2,2,0,0,0-2-2V10A8,8,0,0,0,12,2Z\"\n />\n </svg>\n );\n};\n\nexport default SupportLogo;\n","function rgbToHsl(\n rInput: number,\n gInput: number,\n bInput: number,\n): { h: number; s: number; l: number } {\n const r = rInput / 255;\n const g = gInput / 255;\n const b = bInput / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n if (max === r) {\n h = (g - b) / d + (g < b ? 6 : 0);\n } else if (max === g) {\n h = (b - r) / d + 2;\n } else {\n h = (r - g) / d + 4;\n }\n\n h *= 60;\n }\n\n return {\n h: Math.round(h),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function parseToHSL(color: string): { h: number; s: number; l: number } {\n const ctx = document.createElement('canvas').getContext('2d');\n if (!ctx) throw new Error('Canvas not supported');\n\n // forces the browser to resolve the color\n ctx.fillStyle = color;\n const resolved = ctx.fillStyle; // will be a hex color like \"#rrggbb\"\n\n const hex = resolved.replace(/^#/, '');\n const normalizedHex =\n hex.length === 3\n ? hex\n .split('')\n .map(c => c + c)\n .join('')\n : hex;\n\n const bigint = parseInt(normalizedHex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n\n return rgbToHsl(r, g, b);\n}\n\nexport function generateColorVariants(\n inputColor: string = 'royalblue',\n count: number,\n startLightness = 70,\n endLightness = 30,\n): string[] {\n const { h, s } = parseToHSL(inputColor);\n const step = (startLightness - endLightness) / Math.max(count - 1, 1);\n\n return Array.from({ length: count }, (_, i) => {\n const l = startLightness - i * step;\n return `hsl(${h}, ${s}%, ${l}%)`;\n });\n}\n","// eslint-disable-next-line no-restricted-syntax\nimport * as React from 'react';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { styled, useTheme } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { CardHeader, Divider } from '@material-ui/core';\nimport { useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { useVisited } from '../../hooks/useVisited';\nimport { generateColorVariants } from '../../utils/generateColor';\nimport TurnedInNotIcon from '@mui/icons-material/TurnedInNot';\n\ninterface StyledTextProps {\n variant: 'primary' | 'secondary';\n}\n\nconst StyledText = styled('text', {\n shouldForwardProp: prop => prop !== 'variant',\n})<StyledTextProps>(({ theme }) => ({\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fill: theme.palette.text.secondary,\n variants: [\n {\n props: {\n variant: 'primary',\n },\n style: {\n fontSize: theme.typography.h5.fontSize,\n },\n },\n {\n props: ({ variant }) => variant !== 'primary',\n style: {\n fontSize: theme.typography.body2.fontSize,\n },\n },\n {\n props: {\n variant: 'primary',\n },\n style: {\n fontWeight: theme.typography.h5.fontWeight,\n },\n },\n {\n props: ({ variant }) => variant !== 'primary',\n style: {\n fontWeight: theme.typography.body2.fontWeight,\n },\n },\n ],\n}));\n\ninterface PieCenterLabelProps {\n primaryText: string;\n secondaryText: string;\n}\n\nfunction PieCenterLabel({ primaryText, secondaryText }: PieCenterLabelProps) {\n const { width, height, left, top } = useDrawingArea();\n const primaryY = top + height / 2 - 10;\n const secondaryY = primaryY + 24;\n\n return (\n <React.Fragment>\n <StyledText variant=\"primary\" x={left + width / 2} y={primaryY}>\n {primaryText}\n </StyledText>\n <StyledText variant=\"secondary\" x={left + width / 2} y={secondaryY}>\n {secondaryText}\n </StyledText>\n </React.Fragment>\n );\n}\n\nexport default function VisitedCharts() {\n const { total, items, visits } = useVisited();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n const color =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const colors = generateColorVariants(color, items.length);\n const calculatePercent = (value: number) => {\n const percent = value / (total / 100);\n return Number(percent.toFixed(2));\n };\n\n return (\n <Card\n variant=\"outlined\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n flexGrow: 1,\n maxHeight: '900px',\n overfloyY: 'auto',\n }}\n >\n <CardHeader title=\"Top Visited\" />\n <Divider />\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <PieChart\n colors={colors}\n margin={{\n left: 80,\n right: 80,\n top: 80,\n bottom: 80,\n }}\n series={[\n {\n data: items,\n innerRadius: 75,\n outerRadius: 100,\n paddingAngle: 0,\n highlightScope: { fade: 'global', highlight: 'item' },\n },\n ]}\n height={260}\n width={260}\n hideLegend\n >\n <PieCenterLabel primaryText={`${total}`} secondaryText=\"Total\" />\n </PieChart>\n </Box>\n </CardContent>\n <Box\n sx={{ padding: '2rem', background: theme.palette.background.default }}\n >\n {visits.map(visit => (\n <Stack\n key={visit.id}\n direction=\"row\"\n sx={{ alignItems: 'center', gap: 2, pb: 2 }}\n >\n <TurnedInNotIcon />\n <Stack sx={{ gap: 1, flexGrow: 1 }}>\n <Stack\n direction=\"row\"\n sx={{\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 2,\n }}\n >\n <Typography variant=\"body2\" sx={{ fontWeight: '500' }}>\n {visit.name}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {calculatePercent(visit.hits)}%\n </Typography>\n </Stack>\n <LinearProgress\n variant=\"determinate\"\n aria-label=\"Number of users by country\"\n value={calculatePercent(visit.hits)}\n />\n </Stack>\n </Stack>\n ))}\n </Box>\n </Card>\n );\n}\n","import { useApi } from '@backstage/core-plugin-api';\nimport { Visit, visitsApiRef } from '@backstage/plugin-home';\nimport useAsync from 'react-use/esm/useAsync';\n\ntype VisitItem = {\n label: string;\n value: number;\n};\n\ntype VisitData = {\n id: string;\n name: string;\n path: string;\n hits: number;\n};\n\ninterface VisitType {\n total: number;\n items: VisitItem[];\n visits: VisitData[];\n}\n\nexport const useVisited = () => {\n const useVisitedApi = useApi(visitsApiRef);\n\n const { value, loading, error } = useAsync(async (): Promise<VisitType> => {\n const data = (await useVisitedApi.list()) as Visit[];\n const total = data.reduce((acc, item) => acc + item.hits, 0);\n const items = data.map(visit => ({\n label: visit.name,\n value: visit.hits,\n }));\n const visits = data.map(visit => ({\n id: visit.id,\n name: visit.name,\n path: visit.pathname,\n hits: visit.hits,\n }));\n return {\n total,\n items,\n visits,\n };\n }, []);\n\n return {\n loading,\n error,\n total: value?.total ?? 0,\n items: value?.items ?? [],\n visits: value?.visits ?? [],\n };\n};\n","import Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { alpha } from '@mui/material/styles';\n\nexport type StatCardProps = {\n icon: React.ElementType;\n title: string;\n value: string;\n color: string;\n};\n\nexport default function StatCard({\n icon: Icon,\n title,\n value,\n color,\n}: StatCardProps) {\n return (\n <Card\n variant=\"outlined\"\n sx={{\n width: '100%',\n height: '100%',\n flexGrow: 1,\n background: alpha(color, 0.15),\n }}\n >\n <CardContent>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n gap: '.5rem',\n padding: '.5rem 0',\n }}\n >\n <Icon color=\"secondary\" style={{ fontSize: '18px' }} />\n <Typography component=\"h2\" variant=\"subtitle1\" gutterBottom>\n {title}\n </Typography>\n </Box>\n\n <Stack\n direction=\"row\"\n sx={{\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <Typography\n variant=\"h4\"\n component=\"div\"\n sx={{\n width: '100%',\n textAlign: 'right',\n padding: '0 .5rem',\n }}\n >\n {value}\n </Typography>\n </Stack>\n </CardContent>\n </Card>\n );\n}\n","import Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport AddIcon from '@mui/icons-material/Add';\nimport InsightsRoundedIcon from '@mui/icons-material/InsightsRounded';\nimport Box from '@mui/material/Box';\nimport { LinkButton } from '@backstage/core-components';\nimport { useTheme } from '@mui/material/styles';\n\nexport default function HighlightedCard() {\n const theme = useTheme();\n return (\n <Card\n variant=\"outlined\"\n sx={{\n width: '100%',\n height: '100%',\n flexGrow: 1,\n border: '1px solid transparent',\n [theme.breakpoints.down('lg')]: {\n justifyContent: 'center',\n background: theme.palette.background.default,\n },\n }}\n >\n <CardContent>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n gap: '.5rem',\n padding: '.5rem 0',\n [theme.breakpoints.down('lg')]: {\n justifyContent: 'center',\n },\n }}\n >\n <InsightsRoundedIcon color=\"primary\" />\n <Typography\n component=\"h2\"\n variant=\"subtitle2\"\n gutterBottom\n sx={{ fontWeight: '600' }}\n >\n Add new features\n </Typography>\n </Box>\n <Box\n sx={{\n [theme.breakpoints.down('lg')]: {\n textAlign: 'center',\n },\n }}\n >\n <LinkButton variant=\"contained\" to=\"/create\">\n {' '}\n <AddIcon /> Create\n </LinkButton>\n </Box>\n </CardContent>\n </Card>\n );\n}\n","// eslint-disable-next-line no-restricted-syntax\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport { CardHeader, Divider } from '@material-ui/core';\nimport StatCard from './StatCards';\nimport HighlightedCard from './HighLightedCard';\nimport { useCatalog } from '../../hooks/useCatalog';\nimport AutoAwesomeMotionIcon from '@mui/icons-material/AutoAwesomeMotion';\nimport FolderCopyIcon from '@mui/icons-material/FolderCopy';\nimport ExtensionIcon from '@mui/icons-material/Extension';\nimport { useTheme } from '@mui/material/styles';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { generateColorVariants } from '../../utils/generateColor';\n\nexport default function Summary() {\n const { resources, apis, components } = useCatalog();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n\n const data = [\n {\n icon: AutoAwesomeMotionIcon,\n title: 'Resources',\n value: resources.length.toString(),\n },\n {\n icon: FolderCopyIcon,\n title: 'Components',\n value: components.length.toString(),\n },\n {\n icon: ExtensionIcon,\n title: 'APIs',\n value: apis.length.toString(),\n },\n ];\n\n const color =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const colors = generateColorVariants(color, data.length);\n\n return (\n <Card\n variant=\"outlined\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n flexGrow: 1,\n overfloyY: 'auto',\n }}\n >\n <CardHeader title=\"Summary\" />\n <Divider />\n <CardContent>\n <Box\n sx={{\n display: 'grid',\n alignItems: 'center',\n gap: '1rem',\n gridTemplateColumns: 'repeat(4,1fr)',\n [theme.breakpoints.down('lg')]: {\n gridTemplateColumns: '1fr',\n },\n }}\n >\n {data.map((card, index) => (\n <StatCard key={index} {...card} color={colors[index]} />\n ))}\n <HighlightedCard />\n </Box>\n </CardContent>\n </Card>\n );\n}\n","import { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\n\n// type VisitItem = {\n// label: string;\n// value: number;\n// };\n\n// type VisitData = {\n// id: string;\n// name: string;\n// path: string;\n// hits: number;\n// };\ninterface GetEntitiesResponse {\n items: Entity[];\n}\ninterface UseCatalogType {\n resources: Entity[];\n apis: Entity[];\n components: Entity[];\n}\n\nexport const useCatalog = () => {\n const useCatalogApi = useApi(catalogApiRef);\n\n const { value, loading, error } =\n useAsync(async (): Promise<UseCatalogType> => {\n const response =\n (await useCatalogApi.getEntities()) as GetEntitiesResponse;\n\n const resources = response.items.filter(\n item =>\n item.kind.toLocaleLowerCase() !== 'api' &&\n item.kind.toLocaleLowerCase() !== 'Component' &&\n item.kind.toLocaleLowerCase() !== 'group' &&\n item.kind.toLocaleLowerCase() !== 'user' &&\n item.kind.toLocaleLowerCase() !== 'location',\n );\n const apis = response.items.filter(\n item => item.kind.toLocaleLowerCase() === 'api',\n );\n const components = response.items.filter(\n item => item.kind.toLocaleLowerCase() === 'component',\n );\n\n return {\n resources,\n apis,\n components,\n };\n }, []);\n\n return {\n loading,\n error,\n resources: value?.resources ?? [],\n apis: value?.apis ?? [],\n components: value?.components ?? [],\n };\n};\n","/* eslint-disable no-restricted-syntax */\nimport {\n HomePageStarredEntities,\n HomePageToolkit,\n HomePageRecentlyVisited,\n} from '@backstage/plugin-home';\nimport Grid from '@mui/material/Grid';\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { Content } from '@backstage/core-components';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Communitylogo from '../../assets/Community';\nimport DocsLogo from '../../assets/Docs';\nimport WebsiteLogo from '../../assets/Website';\nimport SupportLogo from '../../assets/Support';\nimport BackstageLogo from '../../assets/backstage.png';\nimport PieAnimation from './VisitedCharts';\nimport Summary from './Summary';\n\nexport const HomeContent = () => {\n const tools = [\n {\n url: 'https://docs.platform.vee.codes/',\n label: 'Docs',\n icon: <DocsLogo />,\n },\n {\n url: 'https://github.com/orgs/veecode-platform/discussions',\n label: 'Community',\n icon: <Communitylogo />,\n },\n {\n url: 'https://platform.vee.codes/',\n label: 'Website',\n icon: <WebsiteLogo />,\n },\n {\n url: 'https://veecode-suporte.freshdesk.com/support/login',\n label: 'Support',\n icon: <SupportLogo />,\n },\n ];\n\n return (\n <SearchContextProvider>\n <Content stretch>\n <Grid container spacing={2} justifyContent=\"center\">\n {/* Top & Recently Visited */}\n <Grid item xs={12}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={6} lg={8}>\n <Grid container spacing={2} justifyContent=\"center\">\n <Grid item xs={12} md={12} lg={12}>\n <Summary />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageRecentlyVisited />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageStarredEntities />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <Grid container spacing={2} justifyContent=\"center\">\n <Grid item xs={12} md={12} lg={12}>\n <PieAnimation />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageToolkit tools={tools} />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n {/* Footer */}\n <Grid item xs={12} sx={{ marginTop: '7rem' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '1.3em',\n gap: '10px',\n }}\n >\n <Typography\n sx={{\n fontSize: '1.2em',\n fontWeight: 'bold',\n }}\n >\n Powered by\n </Typography>\n <img\n src={BackstageLogo}\n alt=\"backstage logo\"\n style={{ width: '7.5em', height: '1.5em' }}\n />\n </Box>\n </Grid>\n </Grid>\n </Content>\n </SearchContextProvider>\n );\n};\n","import { makeStyles } from '@material-ui/core';\nimport { HeaderComponent } from './headerComponent/HeaderComponent';\nimport { HomeGreeting } from './homeGretting/HomeGretting';\nimport { HomeContent } from './homeContent/HomeContent';\nimport { Page } from '@backstage/core-components';\n\nconst useVeeCodeHomePageStyles = makeStyles(theme => ({\n pageRoot: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default,\n },\n}));\n\nexport const VeeCodeHomePage = () => {\n const { pageRoot } = useVeeCodeHomePageStyles();\n return (\n <Page themeId=\"home\" className={pageRoot}>\n <HeaderComponent />\n <HomeGreeting />\n <HomeContent />\n </Page>\n );\n};\n"],"names":["IconButtonComponent","title","label","color","handleClick","link","children","button","IconButton","size","aria-label","aria-controls","aria-haspopup","sx","width","height","borderRadius","onClick","Tooltip","Link","to","ToogleTheme","appThemeApi","useApi","appThemeApiRef","isDarkMode","useTheme","palette","mode","tooltipTitle","themeIds","getInstalledThemes","e","newThemeId","preventDefault","stopPropagation","some","it","id","setActiveThemeId","undefined","LightModeOutlinedIcon","DarkModeOutlinedIcon","highlightMatch","text","query","escapedQuery","replace","regex","RegExp","parts","split","map","part","index","test","Typography","component","fontWeight","SearchInput","params","error","helperText","TextField","placeholder","variant","InputProps","disableUnderline","startAdornment","InputAdornment","position","SearchIcon","style","input","border","SearchResultItem","option","result","renderProps","isNoResultsFound","analytics","useAnalytics","Box","document","location","underline","cursor","ListItem","py","captureEvent","attributes","value","rank","flexGrow","term","SearchOption","options","results","searchLink","length","Divider","my","className","display","alignItems","ArrowForwardIcon","fontSize","find","r","SearchBar","props","setSearchTerm","navigate","useNavigate","highlightedIndex","setHighlightedIndex","useState","highlightedIndexRef","useRef","setTerm","useSearch","theme","onInputChange","callback","timeoutRef","useEffect","current","clearTimeout","useCallback","args","setTimeout","useDebouncedCallback","_","inputValue","SearchResultState","loading","searchTerm","encodeURIComponent","Autocomplete","freeSolo","getOptionLabel","onHighlightChange","indexOf","componentsProps","paper","outline","background","visibility","padding","filterOptions","x","onKeyDown","event","currentHighlight","key","renderInput","renderOption","ListboxProps","maxHeight","SearchComponent","SearchContextProvider","maxWidth","UserAvatar","profile","profileLoading","useUserProfile","Skeleton","Avatar","src","picture","AvatarImg","objectFit","alt","Logout","identityApi","identityApiRef","async","signOut","justifyContent","ListItemIcon","LogoutIcon","MenuItemComponent","handleClose","MenuItem","MenuItems","anchorEl","menuId","isOpen","config","displayName","backstageIdentity","catalogApi","catalogApiRef","supportUrl","configApiRef","app","support","url","userProfile","userEntityRef","getEntityByRef","_err","fetchUserEntity","Menu","anchorOrigin","vertical","horizontal","transformOrigin","keepMounted","open","onClose","slotProps","mt","mr","boxShadow","default","grey","px","gap","name","charAt","toLocaleUpperCase","concat","substring","profileDisplayName","Chip","ownershipEntityRefs","HelpOutlineIcon","SettingsIcon","Notifications","unreadOnly","saved","severity","topic","lastSignal","useSignal","retry","useNotificationsApi","api","minimumSeverity","read","Promise","all","getNotifications","getStatus","getTopics","throttledRetry","useMemo","throttle","totalCount","unread","action","Badge","badgeContent","invisible","CircularProgress","NotificationsIcon","Profile","handleOpenMenu","HeaderComponent","profileAnchorEl","setProfileAnchorEl","React","isProfileMenuOpen","Boolean","AppBar","zIndex","appBar","Toolbar","xs","md","currentTarget","HomeGreeting","configApi","setLoading","color1","branding","dark","headerColor1","light","color2","headerColor2","minHeight","overflow","breakpoints","only","margin","flexDirection","textAlign","img","WavesImg","top","left","opacity","svg","version","xmlns","xmlnsXlink","viewBox","xmlSpace","g","circle","fill","cx","cy","path","d","fill-rule","clip-rule","rect","generateColorVariants","inputColor","count","startLightness","endLightness","h","s","ctx","createElement","getContext","Error","fillStyle","hex","normalizedHex","c","join","bigint","parseInt","rInput","gInput","bInput","b","max","Math","min","l","round","rgbToHsl","parseToHSL","step","Array","from","i","StyledText","styled","shouldForwardProp","prop","textAnchor","dominantBaseline","secondary","variants","typography","h5","body2","PieCenterLabel","primaryText","secondaryText","useDrawingArea","primaryY","secondaryY","y","VisitedCharts","total","items","visits","useVisitedApi","visitsApiRef","useAsync","data","list","reduce","acc","item","hits","visit","pathname","useVisited","colors","calculatePercent","Number","toFixed","Card","overfloyY","CardHeader","CardContent","PieChart","right","bottom","series","innerRadius","outerRadius","paddingAngle","highlightScope","fade","highlight","hideLegend","Stack","direction","pb","TurnedInNotIcon","LinearProgress","StatCard","icon","Icon","alpha","gutterBottom","HighlightedCard","down","InsightsRoundedIcon","LinkButton","AddIcon","Summary","resources","apis","components","useCatalogApi","response","getEntities","filter","kind","toLocaleLowerCase","useCatalog","AutoAwesomeMotionIcon","toString","FolderCopyIcon","ExtensionIcon","gridTemplateColumns","card","HomeContent","tools","DocsLogo","Communitylogo","WebsiteLogo","SupportLogo","Content","stretch","Grid","container","spacing","lg","HomePageRecentlyVisited","HomePageStarredEntities","PieAnimation","HomePageToolkit","marginTop","BackstageLogo","useVeeCodeHomePageStyles","makeStyles","pageRoot","backgroundColor","VeeCodeHomePage","Page","themeId"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"static/4327.0535c895.chunk.js","mappings":"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","sources":["webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/iconButtonComponent/IconButtonComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/toggleTheme/ToggleTheme.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/utils/stringUtils.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchInput.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchResultItem.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchOption.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchBar.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useDebouncedCallback.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/searchComponent/SearchComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/userAvatar/UserAvatar.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/logout/Logout.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/menuItems/MenuItems.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/notifications/Notifications.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/profile/Profle.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/headerComponent/HeaderComponent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeGretting/HomeGretting.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Community.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Docs.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Website.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/assets/Support.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/utils/generateColor.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/VisitedCharts.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useVisited.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/StatCards.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/HighLightedCard.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/Summary.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/hooks/useCatalog.ts","webpack://veecode-platform.plugin-veecode-homepage/./src/components/homeContent/HomeContent.tsx","webpack://veecode-platform.plugin-veecode-homepage/./src/components/VeeCodeHomePage.tsx"],"sourcesContent":["import IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Link } from 'react-router-dom';\nimport { ReactElement, MouseEvent } from 'react';\n\ninterface IconButtonProps {\n title: string;\n label: string;\n color: 'warning' | 'error' | 'inherit';\n handleClick?: (e: MouseEvent<HTMLButtonElement>) => void;\n link?: string;\n children: ReactElement;\n}\n\nexport const IconButtonComponent: React.FC<IconButtonProps> = ({\n title,\n label,\n color,\n handleClick,\n link,\n children,\n}) => {\n const button = (\n <IconButton\n size=\"small\"\n aria-label={label}\n color={color}\n aria-controls={`${label}-menu`}\n aria-haspopup=\"true\"\n sx={{\n width: '42px',\n height: '42px',\n borderRadius: '50%',\n }}\n onClick={handleClick}\n >\n {children}\n </IconButton>\n );\n\n return (\n <Tooltip title={title}>\n {link ? <Link to={link}>{button}</Link> : button}\n </Tooltip>\n );\n};\n","import { useTheme } from '@mui/material/styles';\nimport LightModeOutlinedIcon from '@mui/icons-material/LightModeOutlined';\nimport DarkModeOutlinedIcon from '@mui/icons-material/DarkModeOutlined';\nimport { appThemeApiRef, useApi } from '@backstage/core-plugin-api';\nimport { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\n\nexport const ToogleTheme = () => {\n const appThemeApi = useApi(appThemeApiRef);\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const tooltipTitle = isDarkMode\n ? 'Select theme Light Theme'\n : 'Select theme Dark Theme';\n const themeIds = appThemeApi.getInstalledThemes();\n\n const handleSetTheme = (\n e: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ) => {\n const newThemeId = isDarkMode ? 'light' : 'dark';\n e.preventDefault();\n e.stopPropagation();\n if (themeIds.some(it => it.id === newThemeId)) {\n appThemeApi.setActiveThemeId(newThemeId);\n } else {\n appThemeApi.setActiveThemeId(undefined);\n }\n };\n\n return (\n <IconButtonComponent\n title={tooltipTitle}\n handleClick={handleSetTheme}\n color=\"inherit\"\n label=\"Toggle-theme\"\n >\n {isDarkMode ? <LightModeOutlinedIcon /> : <DarkModeOutlinedIcon />}\n </IconButtonComponent>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Typography from '@mui/material/Typography';\n\n/**\n * Highlights the substring that matches the query term.\n * @param text The full text to render.\n * @param query The query term to highlight.\n * @returns JSX.Element with highlighted matching substring.\n */\nexport const highlightMatch = (text: string, query: string) => {\n if (!query) return <>{text}</>;\n\n const escapeRegex = (input: string) =>\n input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const escapedQuery = escapeRegex(query);\n\n const regex = new RegExp(`(${escapedQuery})`, 'i');\n const parts = text.split(regex);\n\n return (\n <>\n {parts.map((part, index) =>\n regex.test(part) ? (\n <Typography\n key={`${part}-${index}`}\n component=\"span\"\n sx={{ fontWeight: 'normal' }}\n >\n {part}\n </Typography>\n ) : (\n <Typography\n key={`${part}-${index}`}\n component=\"span\"\n sx={{ fontWeight: 'bold' }}\n >\n {part}\n </Typography>\n ),\n )}\n </>\n );\n};\n\nexport const createSearchLink = (searchTerm: string) => {\n return `/search?query=${encodeURIComponent(searchTerm)}`;\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\n\ninterface SearchInputProps {\n params: any;\n error: boolean;\n helperText: string;\n}\n\nexport const SearchInput = ({\n params,\n error,\n helperText,\n}: SearchInputProps) => (\n <TextField\n {...params}\n placeholder=\"Search...\"\n variant=\"standard\"\n error={error}\n helperText={helperText}\n InputProps={{\n ...params.InputProps,\n disableUnderline: true,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon style={{ color: '#ffffff' }} />\n </InputAdornment>\n ),\n }}\n sx={{\n input: { color: '#CDCDCD' },\n button: { color: 'inherit' },\n '& fieldset': { border: 'none' },\n }}\n />\n);\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Link } from '@backstage/core-components';\nimport ListItem from '@mui/material/ListItem';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { highlightMatch } from '../../../utils/stringUtils';\nimport { SearchResultProps } from '@backstage/plugin-search-react';\nimport { Result, SearchDocument } from '@backstage/plugin-search-common';\nimport { useAnalytics } from '@backstage/core-plugin-api';\n\ninterface SearchResultItemProps {\n option: string;\n query: SearchResultProps['query'];\n result: Result<SearchDocument> | undefined;\n renderProps: any;\n}\n\nexport const SearchResultItem = ({\n option,\n query,\n result,\n renderProps,\n}: SearchResultItemProps) => {\n const isNoResultsFound = option === 'No results found';\n const analytics = useAnalytics();\n\n return (\n <Box\n component={isNoResultsFound ? 'div' : Link}\n to={result?.document.location}\n underline=\"none\"\n sx={{ width: '100%', ...(isNoResultsFound ? {} : { cursor: 'pointer' }) }}\n >\n <ListItem\n {...renderProps}\n sx={{ py: 1 }}\n onClick={(e: any) => {\n analytics.captureEvent('discover', result?.document.title ?? '', {\n attributes: { to: result?.document.location ?? '#' },\n value: result?.rank,\n });\n renderProps?.onClick?.(e);\n }}\n >\n <Typography sx={{ color: 'text.primary', flexGrow: 1 }}>\n {isNoResultsFound\n ? option\n : highlightMatch(option, query?.term ?? '')}\n </Typography>\n </ListItem>\n </Box>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport { Link } from '@backstage/core-components';\nimport ListItem from '@mui/material/ListItem';\nimport Typography from '@mui/material/Typography';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport { SearchResultItem } from './SearchResultItem';\nimport { Result, SearchDocument } from '@backstage/plugin-search-common';\nimport { SearchResultProps } from '@backstage/plugin-search-react';\n\ninterface SearchOptionProps {\n option: string;\n index: number;\n options: string[];\n query: SearchResultProps['query'];\n results: Result<SearchDocument>[];\n renderProps: any;\n searchLink: string;\n}\n\nexport const SearchOption = ({\n option,\n index,\n options,\n query,\n results,\n renderProps,\n searchLink,\n}: SearchOptionProps) => {\n if (option === query?.term && index === options.length - 1) {\n return (\n <Box key=\"all-results\" id=\"all-results\">\n <Divider sx={{ my: 0.5 }} />\n <Link to={searchLink} underline=\"none\">\n <ListItem\n {...renderProps}\n sx={{ my: 0 }}\n className=\"allResultsOption\"\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography sx={{ flexGrow: 1 }}>All results</Typography>\n <ArrowForwardIcon fontSize=\"small\" />\n </Box>\n </ListItem>\n </Link>\n </Box>\n );\n }\n\n const result = results.find(r => r.document.title === option);\n return (\n <SearchResultItem\n key={index}\n option={option}\n query={query}\n result={result}\n renderProps={renderProps}\n />\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport {\n SearchResultState,\n SearchResultProps,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport { createSearchLink } from '../../../utils/stringUtils';\nimport { useNavigate } from 'react-router-dom';\nimport { SearchInput } from './SearchInput';\nimport { SearchOption } from './SearchOption';\nimport { useDebouncedCallback } from '../../../hooks/useDebouncedCallback';\nimport { useTheme } from '@mui/material/styles';\n\ninterface SearchBarProps {\n query: SearchResultProps['query'];\n setSearchTerm: (term: string) => void;\n}\nexport const SearchBar = (props: SearchBarProps) => {\n const { query, setSearchTerm } = props;\n const navigate = useNavigate();\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const highlightedIndexRef = useRef(highlightedIndex);\n const { setTerm } = useSearch();\n const theme = useTheme();\n\n const onInputChange = useDebouncedCallback((_, inputValue) => {\n setSearchTerm(inputValue);\n setTerm(inputValue);\n }, 300);\n\n useEffect(() => {\n highlightedIndexRef.current = highlightedIndex;\n }, [highlightedIndex]);\n\n return (\n <SearchResultState {...props}>\n {({ loading, error, value }) => {\n const results = query?.term ? value?.results ?? [] : [];\n let options: string[] = [];\n if (query?.term && results.length === 0) {\n options = ['No results found'];\n }\n if (results.length > 0) {\n options = [\n ...results.map(result => result.document.title),\n `${query?.term}`,\n ];\n }\n const searchLink = createSearchLink(query?.term ?? '');\n\n return (\n <Autocomplete\n freeSolo\n options={options}\n loading={loading}\n value={query?.term ?? ''}\n getOptionLabel={option => option ?? ''}\n onInputChange={onInputChange}\n onHighlightChange={(_, option) =>\n setHighlightedIndex(options.indexOf(option ?? ''))\n }\n componentsProps={{\n paper: {\n sx: {\n borderRadius: '4px',\n outline: 'unset',\n },\n },\n }}\n sx={{\n width: '100%',\n background:\n theme.palette.mode === 'dark' ? '#FFFFFF10' : '#CDCDCD10',\n '& [class*=\"MuiAutocomplete-clearIndicator\"]': {\n visibility: query?.term ? 'visible' : 'hidden',\n },\n padding: '.2rem',\n borderRadius: '8px',\n '&:hover': {\n background:\n theme.palette.mode === 'dark' ? '#FFFFFF25' : '#CDCDCD25',\n },\n }}\n filterOptions={x => x}\n onKeyDown={event => {\n const currentHighlight = highlightedIndexRef.current;\n if (event.key === 'Enter') {\n event.preventDefault();\n if (currentHighlight === -1 && query?.term) {\n navigate(searchLink);\n } else if (currentHighlight !== -1) {\n navigate(\n results[highlightedIndex]?.document?.location ?? searchLink,\n );\n }\n setHighlightedIndex(-1);\n }\n }}\n renderInput={params => (\n <SearchInput\n params={params}\n error={!!error}\n helperText={error ? 'Error fetching results' : ''}\n />\n )}\n renderOption={(renderProps, option, { index }) => (\n <SearchOption\n option={option}\n index={index}\n options={options}\n query={query}\n results={results}\n renderProps={renderProps}\n searchLink={searchLink}\n />\n )}\n ListboxProps={{\n sx: { maxHeight: '60vh' },\n }}\n />\n );\n }}\n </SearchResultState>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useRef, useEffect, useCallback } from 'react';\n\nexport const useDebouncedCallback = <T extends (...args: any[]) => void>(\n callback: T,\n delay: number,\n) => {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n },\n [callback, delay],\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { useState } from 'react';\nimport { SearchBar } from './SearchBar';\nimport { Box } from '@material-ui/core';\n\nexport const SearchComponent = () => {\n const [searchTerm, setSearchTerm] = useState<string>('');\n\n return (\n <SearchContextProvider>\n <Box component=\"div\" sx={{ width: '100%', maxWidth: '50vw' }}>\n <SearchBar query={{ term: searchTerm }} setSearchTerm={setSearchTerm} />\n </Box>\n </SearchContextProvider>\n );\n};\n","/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Avatar from '@mui/material/Avatar';\nimport Skeleton from '@mui/material/Skeleton';\nimport AvatarImg from '../../assets/avatar.svg';\n\ninterface UserAvatarProps {\n width?: string;\n height?: string;\n}\n\nexport const UserAvatar: React.FC<UserAvatarProps> = ({ width, height }) => {\n const { profile, loading: profileLoading } = useUserProfile();\n\n return (\n <>\n {profileLoading ? (\n <Skeleton variant=\"circular\" sx={{ width, height }} />\n ) : (\n <Avatar\n src={profile.picture ?? AvatarImg}\n sx={{ width, height, objectFit: 'cover' }}\n alt=\"Profile picture\"\n />\n )}\n </>\n );\n};\n","import { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport LogoutIcon from '@mui/icons-material/Logout';\nimport Box from '@mui/material/Box';\n\nexport const Logout = () => {\n const identityApi = useApi(identityApiRef);\n\n return (\n <Box\n component=\"div\"\n onClick={async () => {\n await identityApi.signOut();\n }}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n }}\n >\n <ListItemIcon>\n <LogoutIcon fontSize=\"small\" />\n </ListItemIcon>\n Log out\n </Box>\n );\n};\n","import { ReactElement, useEffect } from 'react';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport Menu from '@mui/material/Menu';\nimport Box from '@mui/material/Box';\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Typography from '@mui/material/Typography';\nimport { Divider, ListItemIcon, MenuItem } from '@material-ui/core';\nimport { UserAvatar } from '../../userAvatar/UserAvatar';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { configApiRef } from '@backstage/core-plugin-api';\nimport { UserEntity } from '@backstage/catalog-model';\nimport { Link } from 'react-router-dom';\nimport { Logout } from '../logout/Logout';\nimport Chip from '@mui/material/Chip';\nimport { useTheme } from '@mui/material/styles';\n\ninterface MenuItemsProps {\n anchorEl: HTMLElement | null;\n menuId: string;\n isOpen: boolean;\n handleClose: () => void;\n}\n\ninterface MenuItemProps {\n handleClose: () => void;\n link: string;\n children: ReactElement;\n}\n\nconst MenuItemComponent: React.FC<MenuItemProps> = ({\n handleClose,\n link,\n children,\n}) => {\n return (\n <MenuItem onClick={handleClose}>\n <Link to={link}>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n padding: '.1rem 0',\n }}\n >\n {children}\n </Box>\n </Link>\n </MenuItem>\n );\n};\n\nexport const MenuItems: React.FC<MenuItemsProps> = ({\n anchorEl,\n menuId,\n isOpen,\n handleClose,\n}) => {\n const theme = useTheme();\n const { displayName, backstageIdentity } = useUserProfile();\n const catalogApi = useApi(catalogApiRef);\n const config = useApi(configApiRef);\n const supportUrl =\n config.app?.support?.url ??\n // config.getOptionalString('app.support.url') ??\n 'https://github.com/orgs/veecode-platform/discussions';\n\n useEffect(() => {\n const fetchUserEntity = async () => {\n let userProfile;\n try {\n if (backstageIdentity?.userEntityRef) {\n userProfile = (await catalogApi.getEntityByRef(\n backstageIdentity.userEntityRef,\n )) as unknown as UserEntity;\n }\n return userProfile;\n } catch (_err) {\n return null;\n }\n };\n\n fetchUserEntity();\n }, [backstageIdentity, catalogApi]);\n\n const profileDisplayName = () => {\n const name = displayName;\n const regex = /^[^:/]+:[^/]+\\/[^/]+$/;\n if (regex.test(name)) {\n return name\n .charAt(name.indexOf('/') + 1)\n .toLocaleUpperCase('en-US')\n .concat(name.substring(name.indexOf('/') + 2));\n }\n return name;\n };\n\n return (\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={menuId}\n keepMounted\n open={isOpen}\n onClose={handleClose}\n slotProps={{\n paper: {\n sx: {\n width: 250,\n borderRadius: 2,\n mt: 0.8,\n mr: -0.5,\n boxShadow: 3,\n background: `${theme.palette.background.default} !important`,\n border: `1px solid ${theme.palette.grey[600]}`,\n },\n },\n }}\n >\n {/* Profile */}\n <Box\n sx={{ px: 2, py: 1.5, display: 'flex', alignItems: 'center', gap: 1.5 }}\n >\n <UserAvatar />\n <Box>\n <Typography variant=\"subtitle1\">{profileDisplayName()}</Typography>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={backstageIdentity?.ownershipEntityRefs[0].split('/')[1]}\n />\n </Box>\n </Box>\n\n <Divider />\n\n {/* Support */}\n <MenuItemComponent handleClose={handleClose} link={supportUrl}>\n <>\n <ListItemIcon>\n <HelpOutlineIcon fontSize=\"small\" />\n </ListItemIcon>\n Help\n </>\n </MenuItemComponent>\n {/* Settings */}\n <MenuItemComponent handleClose={handleClose} link=\"/settings\">\n <>\n <ListItemIcon>\n <SettingsIcon fontSize=\"small\" />\n </ListItemIcon>\n Settings\n </>\n </MenuItemComponent>\n <Divider />\n\n {/* Logout */}\n <MenuItem>\n <Logout />\n </MenuItem>\n </Menu>\n );\n};\n","/* eslint-disable no-restricted-syntax */\nimport { useState, useEffect, useMemo } from 'react';\nimport Badge from '@mui/material/Badge';\nimport NotificationsIcon from '@mui/icons-material/Notifications';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {\n GetNotificationsOptions,\n GetNotificationsResponse,\n GetTopicsResponse,\n useNotificationsApi,\n} from '@backstage/plugin-notifications';\nimport {\n NotificationSeverity,\n NotificationStatus,\n} from '@backstage/plugin-notifications-common';\nimport { useSignal } from '@backstage/plugin-signals-react';\nimport throttle from 'lodash/throttle';\nimport { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\n\nconst ThrottleDelayMs = 2000;\n\nexport const Notifications = () => {\n const [unreadOnly] = useState<boolean | undefined>(true);\n const [saved] = useState<boolean | undefined>(undefined);\n const [severity] = useState<NotificationSeverity>('low');\n const [topic] = useState<string>();\n\n const { lastSignal } = useSignal('notifications');\n\n const { error, value, retry, loading } = useNotificationsApi<\n [GetNotificationsResponse, NotificationStatus, GetTopicsResponse]\n >(\n api => {\n const options: GetNotificationsOptions = {\n minimumSeverity: severity,\n };\n\n if (unreadOnly !== undefined) {\n options.read = !unreadOnly;\n }\n if (saved !== undefined) {\n options.saved = saved;\n }\n if (topic !== undefined) {\n options.topic = topic;\n }\n\n return Promise.all([\n api.getNotifications(options),\n api.getStatus(),\n api.getTopics(options),\n ]);\n },\n [unreadOnly, severity, saved, topic],\n );\n\n const throttledRetry = useMemo(\n () => throttle(() => retry(), ThrottleDelayMs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const totalCount = value?.[1]?.unread ?? 0;\n\n useEffect(() => {\n if (lastSignal?.action) {\n throttledRetry();\n }\n }, [lastSignal, throttledRetry]);\n\n return (\n <IconButtonComponent\n title=\"Notifications\"\n label={`Mostrar ${totalCount} notificações não lidas`}\n color=\"inherit\"\n link=\"/notifications\"\n >\n <Badge\n badgeContent={totalCount}\n color=\"error\"\n invisible={loading || !!error || totalCount === 0}\n >\n {loading ? (\n <CircularProgress size={20} color=\"inherit\" />\n ) : (\n <NotificationsIcon />\n )}\n </Badge>\n </IconButtonComponent>\n );\n};\n","import { IconButtonComponent } from '../iconButtonComponent/IconButtonComponent';\nimport { UserAvatar } from '../../userAvatar/UserAvatar';\n\ninterface ProfileProps {\n handleOpenMenu: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\nexport const Profile: React.FC<ProfileProps> = ({ handleOpenMenu }) => {\n return (\n <IconButtonComponent\n title=\"\"\n label=\"profile-menu\"\n handleClick={handleOpenMenu}\n color=\"inherit\"\n >\n <UserAvatar width=\"42px\" height=\"42px\" />\n </IconButtonComponent>\n );\n};\n","// eslint-disable-next-line no-restricted-syntax\nimport * as React from 'react';\nimport AppBar from '@mui/material/AppBar';\nimport Box from '@mui/material/Box';\nimport Toolbar from '@mui/material/Toolbar';\nimport { ToogleTheme } from './toggleTheme/ToggleTheme';\nimport { SearchComponent } from './searchComponent/SearchComponent';\nimport { MenuItems } from './menuItems/MenuItems';\nimport { Notifications } from './notifications/Notifications';\nimport { Profile } from './profile/Profle';\nimport { useTheme } from '@mui/material/styles';\n\nexport const HeaderComponent = () => {\n const theme = useTheme();\n const [profileAnchorEl, setProfileAnchorEl] =\n React.useState<null | HTMLElement>(null);\n\n const isProfileMenuOpen = Boolean(profileAnchorEl);\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setProfileAnchorEl(event.currentTarget);\n };\n\n const handleProfileMenuClose = () => {\n setProfileAnchorEl(null);\n };\n\n return (\n <Box sx={{ flexGrow: 1, position: 'relative' }}>\n <AppBar\n position=\"sticky\"\n component=\"nav\"\n style={{ zIndex: theme.zIndex.appBar - 1 }}\n >\n <Toolbar>\n <SearchComponent />\n <Box sx={{ flexGrow: 1 }} />\n <Box\n sx={{\n display: {\n xs: 'none',\n md: 'flex',\n alignItems: 'center',\n gap: '.5rem',\n },\n }}\n >\n <Notifications />\n <ToogleTheme />\n <Profile handleOpenMenu={handleProfileMenuOpen} />\n </Box>\n </Toolbar>\n </AppBar>\n\n {/* Profile options */}\n <MenuItems\n anchorEl={profileAnchorEl}\n menuId=\"profile-menu\"\n isOpen={isProfileMenuOpen}\n handleClose={handleProfileMenuClose}\n />\n </Box>\n );\n};\n","import Box from '@mui/material/Box';\nimport { useTheme } from '@mui/material/styles';\nimport { UserAvatar } from '../userAvatar/UserAvatar';\nimport Typography from '@mui/material/Typography';\nimport { useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { useUserProfile } from '@backstage/plugin-user-settings';\nimport Skeleton from '@mui/material/Skeleton';\nimport { useEffect, useState } from 'react';\nimport WavesImg from '../../assets/waves.svg';\n\nexport const HomeGreeting = () => {\n const [loading, setLoading] = useState<boolean>(false);\n const { displayName } = useUserProfile();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n const color1 =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const color2 =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor2\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo2')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo2')) ??\n configApi.app?.branding?.theme?.light?.headerColor2) ?? '#86F4CE';\n\n const profileDisplayName = () => {\n const name = displayName;\n const regex = /^[^:/]+:[^/]+\\/[^/]+$/;\n if (regex.test(name)) {\n return name\n .charAt(name.indexOf('/') + 1)\n .toLocaleUpperCase('en-US')\n .concat(name.substring(name.indexOf('/') + 2));\n }\n return name;\n };\n\n useEffect(() => {\n setLoading(true);\n setTimeout(() => setLoading(false), 1000);\n }, []);\n\n return (\n <Box\n sx={{\n background: `linear-gradient(90deg, ${color1} 0%, ${color2} 100%)`,\n width: '100%',\n minHeight: '210px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n overflow: 'hidden',\n [theme.breakpoints.only('xs')]: {\n height: '380px',\n padding: '1rem 0',\n },\n }}\n >\n <Box\n sx={{\n width: '90%',\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: '2rem',\n [theme.breakpoints.only('xs')]: {\n flexDirection: 'column',\n padding: '1rem 0',\n },\n }}\n >\n <Box>\n <UserAvatar width=\"120px\" height=\"120px\" />\n </Box>\n <Box\n sx={{\n [theme.breakpoints.only('xs')]: {\n textAlign: 'center',\n color: theme.palette.grey[100],\n maxWidth: '70vw',\n },\n }}\n >\n <Typography variant=\"h3\" color=\"#FAFAFA\">\n Welcome back\n {loading ? (\n <Skeleton\n variant=\"rectangular\"\n width={150}\n height={80}\n style={{ display: 'inline' }}\n />\n ) : (\n <>, {profileDisplayName()} 👋</>\n )}{' '}\n </Typography>\n <Typography variant=\"h6\" color=\"#FAFAFA\">\n Let's get started.\n </Typography>\n </Box>\n </Box>\n <img\n src={WavesImg}\n alt=\"\"\n style={{\n width: '100%',\n height: '250px',\n objectFit: 'cover',\n position: 'absolute',\n top: '-20%',\n left: '0',\n opacity: '0.7',\n }}\n />\n </Box>\n );\n};\n","import { useTheme } from '@mui/material/styles';\n\nconst Communitylogo = () => {\n const theme = useTheme();\n return (\n <svg\n height=\"45px\"\n width=\"45px\"\n version=\"1.1\"\n id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 502.648 502.648\"\n xmlSpace=\"preserve\"\n style={{ cursor: 'pointer ' }}\n >\n <g>\n <g>\n <g>\n <circle\n style={{ fill: theme.palette.grey[600] }}\n cx=\"250.399\"\n cy=\"91.549\"\n r=\"58.694\"\n />\n <path\n style={{ fill: theme.palette.grey[600] }}\n d=\"M455.861,253.028l-54.703-11.411c-18.637-3.904-37.037,4.638-46.765,19.824\n\t\t\t\tc-9.448-4.853-19.608-9.038-30.415-12.511v-32.529c0.022-24.612-20.126-44.738-44.651-44.738h-55.933\n\t\t\t\tc-24.655,0-44.716,20.126-44.716,44.738v32.701c-10.699,3.408-20.751,7.593-30.264,12.468\n\t\t\t\tc-9.728-15.251-28.15-23.857-46.809-19.953l-54.747,11.411c-24.03,5.026-39.626,28.862-34.6,52.978l13.741,65.64\n\t\t\t\tc4.983,24.051,28.84,39.647,52.892,34.621l17.321-3.624c8.671,12.813,20.665,24.569,36.023,34.621\n\t\t\t\tc31.989,20.967,74.247,32.529,119.092,32.529c68.617,0,127.721-27.589,154.943-67.215l17.602,3.689\n\t\t\t\tc24.03,5.004,47.887-10.57,52.87-34.621l13.762-65.64C495.508,281.89,479.912,258.054,455.861,253.028z M251.305,447.381\n\t\t\t\tc-40.51,0-78.475-10.203-106.797-28.862c-9.707-6.342-17.753-13.395-24.202-20.945l13.266-2.783\n\t\t\t\tc24.073-5.004,39.669-28.84,34.643-52.913l-12.317-59.018c7.183-3.861,14.733-7.248,22.757-10.138v10.764\n\t\t\t\tc0,24.569,20.104,44.695,44.716,44.695h55.933c24.548,0,44.652-20.147,44.652-44.695v-11.325\n\t\t\t\tc8.175,2.912,15.854,6.256,22.973,10.052L334.439,341.9c-4.983,24.073,10.591,47.909,34.664,52.913l13.395,2.804\n\t\t\t\tC357.52,427.191,308.101,447.381,251.305,447.381z\"\n />\n <circle\n style={{ fill: theme.palette.grey[600] }}\n cx=\"443.954\"\n cy=\"168.708\"\n r=\"58.694\"\n />\n <path\n style={{ fill: theme.palette.grey[600] }}\n d=\"M70.736,226.172c31.752-6.644,52.029-37.77,45.471-69.501\n\t\t\t\tc-6.687-31.709-37.749-52.072-69.523-45.428c-31.709,6.622-52.072,37.727-45.428,69.458\n\t\t\t\tC7.879,212.453,38.984,232.795,70.736,226.172z\"\n />\n </g>\n </g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n <g></g>\n </g>\n </svg>\n );\n};\n\nexport default Communitylogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst DocsLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n style={{ cursor: 'pointer ' }}\n >\n <path\n fill={theme.palette.grey[600]}\n fill-rule=\"evenodd\"\n d=\"M4.25 1A2.25 2.25 0 002 3.25v9.5A2.25 2.25 0 004.25 15h8.5c.69 0 1.25-.56 1.25-1.25V2.25C14 1.56 13.44 1 12.75 1h-8.5zM3.5 12.75c0 .414.336.75.75.75h8.25v-2H4.25a.75.75 0 00-.75.75v.5zm0-2.622c.235-.083.487-.128.75-.128h8.25V2.5H4.25a.75.75 0 00-.75.75v6.878z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n};\n\nexport default DocsLogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst WebsiteLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ cursor: 'pointer ' }}\n >\n <rect x=\"0\" fill=\"none\" width=\"20\" height=\"20\" />\n\n <g fill={theme.palette.grey[600]}>\n <path d=\"M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm7.5 6.48c-.274.896-.908 1.64-1.75 2.05-.45-1.69-1.658-3.074-3.27-3.75.13-.444.41-.83.79-1.09-.43-.28-1-.42-1.34.07-.53.69 0 1.61.21 2v.14c-.555-.337-.99-.84-1.24-1.44-.966-.03-1.922.208-2.76.69-.087-.565-.032-1.142.16-1.68.733.07 1.453-.23 1.92-.8.46-.52-.13-1.18-.59-1.58h.36c1.36-.01 2.702.335 3.89 1 1.36 1.005 2.194 2.57 2.27 4.26.24 0 .7-.55.91-.92.172.34.32.69.44 1.05zM9 16.84c-2.05-2.08.25-3.75-1-5.24-.92-.85-2.29-.26-3.11-1.23-.282-1.473.267-2.982 1.43-3.93.52-.44 4-1 5.42.22.83.715 1.415 1.674 1.67 2.74.46.035.918-.066 1.32-.29.41 2.98-3.15 6.74-5.73 7.73zM5.15 2.09c.786-.3 1.676-.028 2.16.66-.42.38-.94.63-1.5.72.02-.294.085-.584.19-.86l-.85-.52z\" />\n </g>\n </svg>\n );\n};\n\nexport default WebsiteLogo;\n","import { useTheme } from '@mui/material/styles';\n\nconst SupportLogo = () => {\n const theme = useTheme();\n return (\n <svg\n width=\"45px\"\n height=\"45px\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ cursor: 'pointer ' }}\n >\n <title>support</title>\n <rect width=\"24\" height=\"24\" fill=\"none\" />\n <path\n fill={theme.palette.grey[600]}\n d=\"M12,2a8,8,0,0,0-8,8v1.9A2.92,2.92,0,0,0,3,14a2.88,2.88,0,0,0,1.94,2.61C6.24,19.72,8.85,22,12,22h3V20H12c-2.26,0-4.31-1.7-5.34-4.39l-.21-.55L5.86,15A1,1,0,0,1,5,14a1,1,0,0,1,.5-.86l.5-.29V11a1,1,0,0,1,1-1H17a1,1,0,0,1,1,1v5H13.91a1.5,1.5,0,1,0-1.52,2H20a2,2,0,0,0,2-2V14a2,2,0,0,0-2-2V10A8,8,0,0,0,12,2Z\"\n />\n </svg>\n );\n};\n\nexport default SupportLogo;\n","function rgbToHsl(\n rInput: number,\n gInput: number,\n bInput: number,\n): { h: number; s: number; l: number } {\n const r = rInput / 255;\n const g = gInput / 255;\n const b = bInput / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n if (max === r) {\n h = (g - b) / d + (g < b ? 6 : 0);\n } else if (max === g) {\n h = (b - r) / d + 2;\n } else {\n h = (r - g) / d + 4;\n }\n\n h *= 60;\n }\n\n return {\n h: Math.round(h),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function parseToHSL(color: string): { h: number; s: number; l: number } {\n const ctx = document.createElement('canvas').getContext('2d');\n if (!ctx) throw new Error('Canvas not supported');\n\n // forces the browser to resolve the color\n ctx.fillStyle = color;\n const resolved = ctx.fillStyle; // will be a hex color like \"#rrggbb\"\n\n const hex = resolved.replace(/^#/, '');\n const normalizedHex =\n hex.length === 3\n ? hex\n .split('')\n .map(c => c + c)\n .join('')\n : hex;\n\n const bigint = parseInt(normalizedHex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n\n return rgbToHsl(r, g, b);\n}\n\nexport function generateColorVariants(\n inputColor: string = 'royalblue',\n count: number,\n startLightness = 70,\n endLightness = 30,\n): string[] {\n const { h, s } = parseToHSL(inputColor);\n const step = (startLightness - endLightness) / Math.max(count - 1, 1);\n\n return Array.from({ length: count }, (_, i) => {\n const l = startLightness - i * step;\n return `hsl(${h}, ${s}%, ${l}%)`;\n });\n}\n","// eslint-disable-next-line no-restricted-syntax\nimport * as React from 'react';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { styled, useTheme } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { CardHeader, Divider } from '@material-ui/core';\nimport { useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { useVisited } from '../../hooks/useVisited';\nimport { generateColorVariants } from '../../utils/generateColor';\nimport TurnedInNotIcon from '@mui/icons-material/TurnedInNot';\n\ninterface StyledTextProps {\n variant: 'primary' | 'secondary';\n}\n\nconst StyledText = styled('text', {\n shouldForwardProp: prop => prop !== 'variant',\n})<StyledTextProps>(({ theme }) => ({\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fill: theme.palette.text.secondary,\n variants: [\n {\n props: {\n variant: 'primary',\n },\n style: {\n fontSize: theme.typography.h5.fontSize,\n },\n },\n {\n props: ({ variant }) => variant !== 'primary',\n style: {\n fontSize: theme.typography.body2.fontSize,\n },\n },\n {\n props: {\n variant: 'primary',\n },\n style: {\n fontWeight: theme.typography.h5.fontWeight,\n },\n },\n {\n props: ({ variant }) => variant !== 'primary',\n style: {\n fontWeight: theme.typography.body2.fontWeight,\n },\n },\n ],\n}));\n\ninterface PieCenterLabelProps {\n primaryText: string;\n secondaryText: string;\n}\n\nfunction PieCenterLabel({ primaryText, secondaryText }: PieCenterLabelProps) {\n const { width, height, left, top } = useDrawingArea();\n const primaryY = top + height / 2 - 10;\n const secondaryY = primaryY + 24;\n\n return (\n <React.Fragment>\n <StyledText variant=\"primary\" x={left + width / 2} y={primaryY}>\n {primaryText}\n </StyledText>\n <StyledText variant=\"secondary\" x={left + width / 2} y={secondaryY}>\n {secondaryText}\n </StyledText>\n </React.Fragment>\n );\n}\n\nexport default function VisitedCharts() {\n const { total, items, visits } = useVisited();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n const color =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const colors = generateColorVariants(color, items.length);\n const calculatePercent = (value: number) => {\n const percent = value / (total / 100);\n return Number(percent.toFixed(2));\n };\n\n return (\n <Card\n variant=\"outlined\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n flexGrow: 1,\n maxHeight: '900px',\n overfloyY: 'auto',\n }}\n >\n <CardHeader title=\"Top Visited\" />\n <Divider />\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <PieChart\n colors={colors}\n margin={{\n left: 80,\n right: 80,\n top: 80,\n bottom: 80,\n }}\n series={[\n {\n data: items,\n innerRadius: 75,\n outerRadius: 100,\n paddingAngle: 0,\n highlightScope: { fade: 'global', highlight: 'item' },\n },\n ]}\n height={260}\n width={260}\n hideLegend\n >\n <PieCenterLabel primaryText={`${total}`} secondaryText=\"Total\" />\n </PieChart>\n </Box>\n </CardContent>\n <Box\n sx={{ padding: '2rem', background: theme.palette.background.default }}\n >\n {visits.map(visit => (\n <Stack\n key={visit.id}\n direction=\"row\"\n sx={{ alignItems: 'center', gap: 2, pb: 2 }}\n >\n <TurnedInNotIcon />\n <Stack sx={{ gap: 1, flexGrow: 1 }}>\n <Stack\n direction=\"row\"\n sx={{\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 2,\n }}\n >\n <Typography variant=\"body2\" sx={{ fontWeight: '500' }}>\n {visit.name}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {calculatePercent(visit.hits)}%\n </Typography>\n </Stack>\n <LinearProgress\n variant=\"determinate\"\n aria-label=\"Number of users by country\"\n value={calculatePercent(visit.hits)}\n />\n </Stack>\n </Stack>\n ))}\n </Box>\n </Card>\n );\n}\n","import { useApi } from '@backstage/core-plugin-api';\nimport { Visit, visitsApiRef } from '@backstage/plugin-home';\nimport useAsync from 'react-use/esm/useAsync';\n\ntype VisitItem = {\n label: string;\n value: number;\n};\n\ntype VisitData = {\n id: string;\n name: string;\n path: string;\n hits: number;\n};\n\ninterface VisitType {\n total: number;\n items: VisitItem[];\n visits: VisitData[];\n}\n\nexport const useVisited = () => {\n const useVisitedApi = useApi(visitsApiRef);\n\n const { value, loading, error } = useAsync(async (): Promise<VisitType> => {\n const data = (await useVisitedApi.list()) as Visit[];\n const total = data.reduce((acc, item) => acc + item.hits, 0);\n const items = data.map(visit => ({\n label: visit.name,\n value: visit.hits,\n }));\n const visits = data.map(visit => ({\n id: visit.id,\n name: visit.name,\n path: visit.pathname,\n hits: visit.hits,\n }));\n return {\n total,\n items,\n visits,\n };\n }, []);\n\n return {\n loading,\n error,\n total: value?.total ?? 0,\n items: value?.items ?? [],\n visits: value?.visits ?? [],\n };\n};\n","import Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { alpha } from '@mui/material/styles';\n\nexport type StatCardProps = {\n icon: React.ElementType;\n title: string;\n value: string;\n color: string;\n};\n\nexport default function StatCard({\n icon: Icon,\n title,\n value,\n color,\n}: StatCardProps) {\n return (\n <Card\n variant=\"outlined\"\n sx={{\n width: '100%',\n height: '100%',\n flexGrow: 1,\n background: alpha(color, 0.15),\n }}\n >\n <CardContent>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n gap: '.5rem',\n padding: '.5rem 0',\n }}\n >\n <Icon color=\"secondary\" style={{ fontSize: '18px' }} />\n <Typography component=\"h2\" variant=\"subtitle1\" gutterBottom>\n {title}\n </Typography>\n </Box>\n\n <Stack\n direction=\"row\"\n sx={{\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <Typography\n variant=\"h4\"\n component=\"div\"\n sx={{\n width: '100%',\n textAlign: 'right',\n padding: '0 .5rem',\n }}\n >\n {value}\n </Typography>\n </Stack>\n </CardContent>\n </Card>\n );\n}\n","import Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport AddIcon from '@mui/icons-material/Add';\nimport InsightsRoundedIcon from '@mui/icons-material/InsightsRounded';\nimport Box from '@mui/material/Box';\nimport { LinkButton } from '@backstage/core-components';\nimport { useTheme } from '@mui/material/styles';\n\nexport default function HighlightedCard() {\n const theme = useTheme();\n return (\n <Card\n variant=\"outlined\"\n sx={{\n width: '100%',\n height: '100%',\n flexGrow: 1,\n border: '1px solid transparent',\n [theme.breakpoints.down('lg')]: {\n justifyContent: 'center',\n background: theme.palette.background.default,\n },\n }}\n >\n <CardContent>\n <Box\n component=\"div\"\n sx={{\n display: 'flex',\n gap: '.5rem',\n padding: '.5rem 0',\n [theme.breakpoints.down('lg')]: {\n justifyContent: 'center',\n },\n }}\n >\n <InsightsRoundedIcon color=\"primary\" />\n <Typography\n component=\"h2\"\n variant=\"subtitle2\"\n gutterBottom\n sx={{ fontWeight: '600' }}\n >\n Add new features\n </Typography>\n </Box>\n <Box\n sx={{\n [theme.breakpoints.down('lg')]: {\n textAlign: 'center',\n },\n }}\n >\n <LinkButton variant=\"contained\" to=\"/create\">\n {' '}\n <AddIcon /> Create\n </LinkButton>\n </Box>\n </CardContent>\n </Card>\n );\n}\n","// eslint-disable-next-line no-restricted-syntax\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport { CardHeader, Divider } from '@material-ui/core';\nimport StatCard from './StatCards';\nimport HighlightedCard from './HighLightedCard';\nimport { useCatalog } from '../../hooks/useCatalog';\nimport AutoAwesomeMotionIcon from '@mui/icons-material/AutoAwesomeMotion';\nimport FolderCopyIcon from '@mui/icons-material/FolderCopy';\nimport ExtensionIcon from '@mui/icons-material/Extension';\nimport { useTheme } from '@mui/material/styles';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { generateColorVariants } from '../../utils/generateColor';\n\nexport default function Summary() {\n const { resources, apis, components } = useCatalog();\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === 'dark';\n const configApi = useApi(configApiRef);\n\n const data = [\n {\n icon: AutoAwesomeMotionIcon,\n title: 'Resources',\n value: resources.length.toString(),\n },\n {\n icon: FolderCopyIcon,\n title: 'Components',\n value: components.length.toString(),\n },\n {\n icon: ExtensionIcon,\n title: 'APIs',\n value: apis.length.toString(),\n },\n ];\n\n const color =\n (isDarkMode\n ? configApi.app?.branding?.theme?.dark?.headerColor1\n : // ? configApi.getOptionalString('app.branding.theme.dark.headerColo1')\n // : configApi.getOptionalString('app.branding.theme.light.headerColo1')) ??\n configApi.app?.branding?.theme?.light?.headerColor1) ?? '#45556D';\n const colors = generateColorVariants(color, data.length);\n\n return (\n <Card\n variant=\"outlined\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n flexGrow: 1,\n overfloyY: 'auto',\n }}\n >\n <CardHeader title=\"Summary\" />\n <Divider />\n <CardContent>\n <Box\n sx={{\n display: 'grid',\n alignItems: 'center',\n gap: '1rem',\n gridTemplateColumns: 'repeat(4,1fr)',\n [theme.breakpoints.down('lg')]: {\n gridTemplateColumns: '1fr',\n },\n }}\n >\n {data.map((card, index) => (\n <StatCard key={index} {...card} color={colors[index]} />\n ))}\n <HighlightedCard />\n </Box>\n </CardContent>\n </Card>\n );\n}\n","import { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\n\n// type VisitItem = {\n// label: string;\n// value: number;\n// };\n\n// type VisitData = {\n// id: string;\n// name: string;\n// path: string;\n// hits: number;\n// };\ninterface GetEntitiesResponse {\n items: Entity[];\n}\ninterface UseCatalogType {\n resources: Entity[];\n apis: Entity[];\n components: Entity[];\n}\n\nexport const useCatalog = () => {\n const useCatalogApi = useApi(catalogApiRef);\n\n const { value, loading, error } =\n useAsync(async (): Promise<UseCatalogType> => {\n const response =\n (await useCatalogApi.getEntities()) as GetEntitiesResponse;\n\n const resources = response.items.filter(\n item =>\n item.kind.toLocaleLowerCase() !== 'api' &&\n item.kind.toLocaleLowerCase() !== 'Component' &&\n item.kind.toLocaleLowerCase() !== 'group' &&\n item.kind.toLocaleLowerCase() !== 'user' &&\n item.kind.toLocaleLowerCase() !== 'location',\n );\n const apis = response.items.filter(\n item => item.kind.toLocaleLowerCase() === 'api',\n );\n const components = response.items.filter(\n item => item.kind.toLocaleLowerCase() === 'component',\n );\n\n return {\n resources,\n apis,\n components,\n };\n }, []);\n\n return {\n loading,\n error,\n resources: value?.resources ?? [],\n apis: value?.apis ?? [],\n components: value?.components ?? [],\n };\n};\n","/* eslint-disable no-restricted-syntax */\nimport {\n HomePageStarredEntities,\n HomePageToolkit,\n HomePageRecentlyVisited,\n} from '@backstage/plugin-home';\nimport Grid from '@mui/material/Grid';\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { Content } from '@backstage/core-components';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Communitylogo from '../../assets/Community';\nimport DocsLogo from '../../assets/Docs';\nimport WebsiteLogo from '../../assets/Website';\nimport SupportLogo from '../../assets/Support';\nimport BackstageLogo from '../../assets/backstage.png';\nimport PieAnimation from './VisitedCharts';\nimport Summary from './Summary';\n\nexport const HomeContent = () => {\n const tools = [\n {\n url: 'https://docs.platform.vee.codes/',\n label: 'Docs',\n icon: <DocsLogo />,\n },\n {\n url: 'https://github.com/orgs/veecode-platform/discussions',\n label: 'Community',\n icon: <Communitylogo />,\n },\n {\n url: 'https://platform.vee.codes/',\n label: 'Website',\n icon: <WebsiteLogo />,\n },\n {\n url: 'https://veecode-suporte.freshdesk.com/support/login',\n label: 'Support',\n icon: <SupportLogo />,\n },\n ];\n\n return (\n <SearchContextProvider>\n <Content stretch>\n <Grid container spacing={2} justifyContent=\"center\">\n {/* Top & Recently Visited */}\n <Grid item xs={12}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={6} lg={8}>\n <Grid container spacing={2} justifyContent=\"center\">\n <Grid item xs={12} md={12} lg={12}>\n <Summary />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageRecentlyVisited />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageStarredEntities />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <Grid container spacing={2} justifyContent=\"center\">\n <Grid item xs={12} md={12} lg={12}>\n <PieAnimation />\n </Grid>\n <Grid item xs={12} md={12} lg={12}>\n <HomePageToolkit tools={tools} />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n {/* Footer */}\n <Grid item xs={12} sx={{ marginTop: '7rem' }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '1.3em',\n gap: '10px',\n }}\n >\n <Typography\n sx={{\n fontSize: '1.2em',\n fontWeight: 'bold',\n }}\n >\n Powered by\n </Typography>\n <img\n src={BackstageLogo}\n alt=\"backstage logo\"\n style={{ width: '7.5em', height: '1.5em' }}\n />\n </Box>\n </Grid>\n </Grid>\n </Content>\n </SearchContextProvider>\n );\n};\n","import { makeStyles } from '@material-ui/core';\nimport { HeaderComponent } from './headerComponent/HeaderComponent';\nimport { HomeGreeting } from './homeGretting/HomeGretting';\nimport { HomeContent } from './homeContent/HomeContent';\nimport { Page } from '@backstage/core-components';\n\nconst useVeeCodeHomePageStyles = makeStyles(theme => ({\n pageRoot: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default,\n },\n}));\n\nexport const VeeCodeHomePage = () => {\n const { pageRoot } = useVeeCodeHomePageStyles();\n return (\n <Page themeId=\"home\" className={pageRoot}>\n <HeaderComponent />\n <HomeGreeting />\n <HomeContent />\n </Page>\n );\n};\n"],"names":["IconButtonComponent","title","label","color","handleClick","link","children","button","IconButton","size","aria-label","aria-controls","aria-haspopup","sx","width","height","borderRadius","onClick","Tooltip","Link","to","ToogleTheme","appThemeApi","useApi","appThemeApiRef","isDarkMode","useTheme","palette","mode","tooltipTitle","themeIds","getInstalledThemes","e","newThemeId","preventDefault","stopPropagation","some","it","id","setActiveThemeId","undefined","LightModeOutlinedIcon","DarkModeOutlinedIcon","highlightMatch","text","query","escapedQuery","replace","regex","RegExp","parts","split","map","part","index","test","Typography","component","fontWeight","SearchInput","params","error","helperText","TextField","placeholder","variant","InputProps","disableUnderline","startAdornment","InputAdornment","position","SearchIcon","style","input","border","SearchResultItem","option","result","renderProps","isNoResultsFound","analytics","useAnalytics","Box","document","location","underline","cursor","ListItem","py","captureEvent","attributes","value","rank","flexGrow","term","SearchOption","options","results","searchLink","length","Divider","my","className","display","alignItems","ArrowForwardIcon","fontSize","find","r","SearchBar","props","setSearchTerm","navigate","useNavigate","highlightedIndex","setHighlightedIndex","useState","highlightedIndexRef","useRef","setTerm","useSearch","theme","onInputChange","callback","timeoutRef","useEffect","current","clearTimeout","useCallback","args","setTimeout","useDebouncedCallback","_","inputValue","SearchResultState","loading","searchTerm","encodeURIComponent","Autocomplete","freeSolo","getOptionLabel","onHighlightChange","indexOf","componentsProps","paper","outline","background","visibility","padding","filterOptions","x","onKeyDown","event","currentHighlight","key","renderInput","renderOption","ListboxProps","maxHeight","SearchComponent","SearchContextProvider","maxWidth","UserAvatar","profile","profileLoading","useUserProfile","Skeleton","Avatar","src","picture","AvatarImg","objectFit","alt","Logout","identityApi","identityApiRef","async","signOut","justifyContent","ListItemIcon","LogoutIcon","MenuItemComponent","handleClose","MenuItem","MenuItems","anchorEl","menuId","isOpen","config","displayName","backstageIdentity","catalogApi","catalogApiRef","supportUrl","configApiRef","app","support","url","userProfile","userEntityRef","getEntityByRef","_err","fetchUserEntity","Menu","anchorOrigin","vertical","horizontal","transformOrigin","keepMounted","open","onClose","slotProps","mt","mr","boxShadow","default","grey","px","gap","name","charAt","toLocaleUpperCase","concat","substring","profileDisplayName","Chip","ownershipEntityRefs","HelpOutlineIcon","SettingsIcon","Notifications","unreadOnly","saved","severity","topic","lastSignal","useSignal","retry","useNotificationsApi","api","minimumSeverity","read","Promise","all","getNotifications","getStatus","getTopics","throttledRetry","useMemo","throttle","totalCount","unread","action","Badge","badgeContent","invisible","CircularProgress","NotificationsIcon","Profile","handleOpenMenu","HeaderComponent","profileAnchorEl","setProfileAnchorEl","React","isProfileMenuOpen","Boolean","AppBar","zIndex","appBar","Toolbar","xs","md","currentTarget","HomeGreeting","configApi","setLoading","color1","branding","dark","headerColor1","light","color2","headerColor2","minHeight","overflow","breakpoints","only","margin","flexDirection","textAlign","img","WavesImg","top","left","opacity","svg","version","xmlns","xmlnsXlink","viewBox","xmlSpace","g","circle","fill","cx","cy","path","d","fill-rule","clip-rule","rect","generateColorVariants","inputColor","count","startLightness","endLightness","h","s","ctx","createElement","getContext","Error","fillStyle","hex","normalizedHex","c","join","bigint","parseInt","rInput","gInput","bInput","b","max","Math","min","l","round","rgbToHsl","parseToHSL","step","Array","from","i","StyledText","styled","shouldForwardProp","prop","textAnchor","dominantBaseline","secondary","variants","typography","h5","body2","PieCenterLabel","primaryText","secondaryText","useDrawingArea","primaryY","secondaryY","y","VisitedCharts","total","items","visits","useVisitedApi","visitsApiRef","useAsync","data","list","reduce","acc","item","hits","visit","pathname","useVisited","colors","calculatePercent","Number","toFixed","Card","overfloyY","CardHeader","CardContent","PieChart","right","bottom","series","innerRadius","outerRadius","paddingAngle","highlightScope","fade","highlight","hideLegend","Stack","direction","pb","TurnedInNotIcon","LinearProgress","StatCard","icon","Icon","alpha","gutterBottom","HighlightedCard","down","InsightsRoundedIcon","LinkButton","AddIcon","Summary","resources","apis","components","useCatalogApi","response","getEntities","filter","kind","toLocaleLowerCase","useCatalog","AutoAwesomeMotionIcon","toString","FolderCopyIcon","ExtensionIcon","gridTemplateColumns","card","HomeContent","tools","DocsLogo","Communitylogo","WebsiteLogo","SupportLogo","Content","stretch","Grid","container","spacing","lg","HomePageRecentlyVisited","HomePageStarredEntities","PieAnimation","HomePageToolkit","marginTop","BackstageLogo","useVeeCodeHomePageStyles","makeStyles","pageRoot","backgroundColor","VeeCodeHomePage","Page","themeId"],"sourceRoot":""}
|