@veecode-platform/plugin-veecode-homepage-dynamic 0.1.11 → 0.2.0
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/README.md +124 -8
- package/dist/components/VeeCodeHomePage.esm.js +10 -6
- package/dist/components/VeeCodeHomePage.esm.js.map +1 -1
- package/dist/components/headerComponent/HeaderComponent.esm.js +1 -1
- package/dist/components/headerComponent/HeaderComponent.esm.js.map +1 -1
- package/dist/components/headerComponent/menuItems/MenuItems.esm.js +1 -1
- package/dist/components/headerComponent/menuItems/MenuItems.esm.js.map +1 -1
- package/dist/components/headerComponent/searchComponent/SearchComponent.esm.js +1 -1
- package/dist/components/headerComponent/searchComponent/SearchComponent.esm.js.map +1 -1
- package/dist/components/homeContent/Summary.esm.js +1 -1
- package/dist/components/homeContent/Summary.esm.js.map +1 -1
- package/dist/components/homeContent/VisitedCharts.esm.js +1 -1
- package/dist/components/homeContent/VisitedCharts.esm.js.map +1 -1
- package/dist-scalprum/plugin-manifest.json +3 -3
- package/dist-scalprum/static/1213.412457e8.chunk.js +9 -0
- package/dist-scalprum/static/1213.412457e8.chunk.js.map +1 -0
- package/dist-scalprum/static/2203.ea66ef58.chunk.js +2 -0
- package/dist-scalprum/static/2203.ea66ef58.chunk.js.map +1 -0
- package/dist-scalprum/static/2435.ed5faea3.chunk.js +2 -0
- package/dist-scalprum/static/2435.ed5faea3.chunk.js.map +1 -0
- package/dist-scalprum/static/2976.168b3d3b.chunk.js +2 -0
- package/dist-scalprum/static/2976.168b3d3b.chunk.js.map +1 -0
- package/dist-scalprum/static/3937.22b10472.chunk.js +2 -0
- package/dist-scalprum/static/3937.22b10472.chunk.js.map +1 -0
- package/dist-scalprum/static/4656.e80c73a4.chunk.js +3 -0
- package/dist-scalprum/static/{4570.e8ea2b1b.chunk.js.LICENSE.txt → 4656.e80c73a4.chunk.js.LICENSE.txt} +0 -8
- package/dist-scalprum/static/4656.e80c73a4.chunk.js.map +1 -0
- package/dist-scalprum/static/4816.6f8976cb.chunk.js +3 -0
- package/dist-scalprum/static/4816.6f8976cb.chunk.js.map +1 -0
- package/dist-scalprum/static/5091.dc1a9c0f.chunk.js +3 -0
- package/dist-scalprum/static/5091.dc1a9c0f.chunk.js.map +1 -0
- package/dist-scalprum/static/5571.096199d4.chunk.js +206 -0
- package/dist-scalprum/static/5571.096199d4.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/5571.096199d4.chunk.js.map +1 -0
- package/dist-scalprum/static/5741.6a870f83.chunk.js +2 -0
- package/dist-scalprum/static/5741.6a870f83.chunk.js.map +1 -0
- package/dist-scalprum/static/6338.37bbe4bd.chunk.js +3 -0
- package/dist-scalprum/static/6338.37bbe4bd.chunk.js.LICENSE.txt +7 -0
- package/dist-scalprum/static/6338.37bbe4bd.chunk.js.map +1 -0
- package/dist-scalprum/static/{7332.4d69761c.chunk.js → 6352.9e636536.chunk.js} +2 -2
- package/dist-scalprum/static/6352.9e636536.chunk.js.map +1 -0
- package/dist-scalprum/static/6460.b727a14c.chunk.js +2 -0
- package/dist-scalprum/static/6460.b727a14c.chunk.js.map +1 -0
- package/dist-scalprum/static/6921.efadb98d.chunk.js +2 -0
- package/dist-scalprum/static/6921.efadb98d.chunk.js.map +1 -0
- package/dist-scalprum/static/7524.b179cb10.chunk.js +3 -0
- package/dist-scalprum/static/7524.b179cb10.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/7524.b179cb10.chunk.js.map +1 -0
- package/dist-scalprum/static/7996.1d65dbec.chunk.js +3 -0
- package/dist-scalprum/static/{4765.afedf928.chunk.js.LICENSE.txt → 7996.1d65dbec.chunk.js.LICENSE.txt} +0 -10
- package/dist-scalprum/static/7996.1d65dbec.chunk.js.map +1 -0
- package/dist-scalprum/static/{8067.ae1736df.chunk.js → 8067.c743580c.chunk.js} +2 -2
- package/dist-scalprum/static/{8067.ae1736df.chunk.js.map → 8067.c743580c.chunk.js.map} +1 -1
- package/dist-scalprum/static/8819.a0205f1d.chunk.js +2 -0
- package/dist-scalprum/static/8819.a0205f1d.chunk.js.map +1 -0
- package/dist-scalprum/static/9315.3aed9231.chunk.js +3 -0
- package/dist-scalprum/static/9315.3aed9231.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/9315.3aed9231.chunk.js.map +1 -0
- package/dist-scalprum/static/{9633.4d914694.chunk.js → 9633.d7b4641e.chunk.js} +2 -2
- package/dist-scalprum/static/9633.d7b4641e.chunk.js.map +1 -0
- package/dist-scalprum/static/9710.ed3c2299.chunk.js +2 -0
- package/dist-scalprum/static/9710.ed3c2299.chunk.js.map +1 -0
- package/dist-scalprum/static/9996.79855bb7.chunk.js +2 -0
- package/dist-scalprum/static/9996.79855bb7.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.28a57811.chunk.js +2 -0
- package/dist-scalprum/static/{exposed-PluginRoot.d759ac0a.chunk.js.map → exposed-PluginRoot.28a57811.chunk.js.map} +1 -1
- package/dist-scalprum/veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js +2 -0
- package/dist-scalprum/veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js.map +1 -0
- package/package.json +1 -1
- package/dist-scalprum/static/118.a2028f0c.chunk.js +0 -2
- package/dist-scalprum/static/118.a2028f0c.chunk.js.map +0 -1
- package/dist-scalprum/static/1645.d73aec32.chunk.js +0 -3
- package/dist-scalprum/static/1645.d73aec32.chunk.js.map +0 -1
- package/dist-scalprum/static/1853.1924a984.chunk.js +0 -2
- package/dist-scalprum/static/1853.1924a984.chunk.js.map +0 -1
- package/dist-scalprum/static/2203.00647934.chunk.js +0 -2
- package/dist-scalprum/static/2203.00647934.chunk.js.map +0 -1
- package/dist-scalprum/static/237.4f1bff62.chunk.js +0 -9
- package/dist-scalprum/static/237.4f1bff62.chunk.js.map +0 -1
- package/dist-scalprum/static/3007.a2931d13.chunk.js +0 -2
- package/dist-scalprum/static/3007.a2931d13.chunk.js.map +0 -1
- package/dist-scalprum/static/4026.247ddcd8.chunk.js +0 -2
- package/dist-scalprum/static/4026.247ddcd8.chunk.js.map +0 -1
- package/dist-scalprum/static/4140.f3243f8b.chunk.js +0 -2
- package/dist-scalprum/static/4140.f3243f8b.chunk.js.map +0 -1
- package/dist-scalprum/static/4491.dace3748.chunk.js +0 -2
- package/dist-scalprum/static/4491.dace3748.chunk.js.map +0 -1
- package/dist-scalprum/static/4570.e8ea2b1b.chunk.js +0 -3
- package/dist-scalprum/static/4570.e8ea2b1b.chunk.js.map +0 -1
- package/dist-scalprum/static/4765.afedf928.chunk.js +0 -206
- package/dist-scalprum/static/4765.afedf928.chunk.js.map +0 -1
- package/dist-scalprum/static/566.3c6819f6.chunk.js +0 -2
- package/dist-scalprum/static/566.3c6819f6.chunk.js.map +0 -1
- package/dist-scalprum/static/6033.086c7035.chunk.js +0 -3
- package/dist-scalprum/static/6033.086c7035.chunk.js.map +0 -1
- package/dist-scalprum/static/6460.18ed7640.chunk.js +0 -2
- package/dist-scalprum/static/6460.18ed7640.chunk.js.map +0 -1
- package/dist-scalprum/static/7332.4d69761c.chunk.js.map +0 -1
- package/dist-scalprum/static/9633.4d914694.chunk.js.map +0 -1
- package/dist-scalprum/static/exposed-PluginRoot.d759ac0a.chunk.js +0 -2
- package/dist-scalprum/veecode-platform.plugin-veecode-homepage.2efbfcbfcafae3f318ff.js +0 -2
- package/dist-scalprum/veecode-platform.plugin-veecode-homepage.2efbfcbfcafae3f318ff.js.map +0 -1
- /package/dist-scalprum/static/{237.4f1bff62.chunk.js.LICENSE.txt → 1213.412457e8.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{1645.d73aec32.chunk.js.LICENSE.txt → 4816.6f8976cb.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6033.086c7035.chunk.js.LICENSE.txt → 5091.dc1a9c0f.chunk.js.LICENSE.txt} +0 -0
package/README.md
CHANGED
|
@@ -1,13 +1,129 @@
|
|
|
1
|
-
#
|
|
1
|
+
# VeeCode Homepage Plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A comprehensive homepage plugin for Backstage that provides a customizable landing page with greeting components, content sections, and header functionality. This plugin serves as the main entry point for users accessing your developer portal.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## What it does
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The VeeCode Homepage plugin creates a modern, responsive homepage that includes:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- **Header Component**: Customizable header with navigation and branding
|
|
10
|
+
- **Home Greeting**: Personalized welcome section for users
|
|
11
|
+
- **Home Content**: Flexible content area for displaying relevant information, metrics, and quick access to tools
|
|
12
|
+
- **Visit Tracking**: Built-in API for tracking user visits and popular content
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
The plugin integrates seamlessly with Backstage's core components and theming system, providing a cohesive user experience.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
### Standard Installation
|
|
19
|
+
|
|
20
|
+
To install the plugin in your Backstage app:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install the plugin
|
|
24
|
+
yarn add @veecode-platform/plugin-veecode-homepage
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Then add it to your app by importing it in your `App.tsx`:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { VeecodeHomepagePage } from '@veecode-platform/plugin-veecode-homepage';
|
|
31
|
+
|
|
32
|
+
// In your routes
|
|
33
|
+
<Route path="/" element={<VeecodeHomepagePage />} />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Dynamic Plugin Installation
|
|
37
|
+
|
|
38
|
+
This plugin also supports dynamic loading and comes with a `-dynamic` version for Red Hat Developer Hub and other dynamic plugin environments.
|
|
39
|
+
|
|
40
|
+
Install the dynamic version:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
yarn add @veecode-platform/plugin-veecode-homepage-dynamic
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Configuration
|
|
47
|
+
|
|
48
|
+
### Basic Configuration
|
|
49
|
+
|
|
50
|
+
Add the following to your `app-config.yaml`:
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
dynamicPlugins:
|
|
54
|
+
frontend:
|
|
55
|
+
veecode-platform.plugin-veecode-homepage:
|
|
56
|
+
dynamicRoutes:
|
|
57
|
+
- path: /
|
|
58
|
+
importName: VeecodeHomepagePage
|
|
59
|
+
config:
|
|
60
|
+
props:
|
|
61
|
+
width: 1500
|
|
62
|
+
height: 800
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Advanced Configuration
|
|
66
|
+
|
|
67
|
+
You can customize various aspects of the homepage:
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
homepage:
|
|
71
|
+
# Enable/disable components
|
|
72
|
+
components:
|
|
73
|
+
header: true
|
|
74
|
+
greeting: true
|
|
75
|
+
content: true
|
|
76
|
+
|
|
77
|
+
# Customize greeting
|
|
78
|
+
greeting:
|
|
79
|
+
title: "Welcome to Your Developer Portal"
|
|
80
|
+
subtitle: "Everything you need to build great software"
|
|
81
|
+
|
|
82
|
+
# Content sections
|
|
83
|
+
content:
|
|
84
|
+
showMetrics: true
|
|
85
|
+
showQuickAccess: true
|
|
86
|
+
showRecentActivity: true
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Development
|
|
90
|
+
|
|
91
|
+
### Local Development
|
|
92
|
+
|
|
93
|
+
You can serve the plugin in isolation by running:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
yarn start
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This provides quicker iteration speed and faster startup with hot reloads. The development setup can be found in the [/dev](./dev) directory.
|
|
100
|
+
|
|
101
|
+
### Testing
|
|
102
|
+
|
|
103
|
+
Run the test suite:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
yarn test
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Building
|
|
110
|
+
|
|
111
|
+
Build the plugin:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
yarn build
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For dynamic plugin builds:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
yarn build-dynamic-plugin
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## API Integration
|
|
124
|
+
|
|
125
|
+
The plugin includes a visits tracking API that integrates with Backstage's storage and identity APIs to track user interactions and popular content.
|
|
126
|
+
|
|
127
|
+
## License
|
|
128
|
+
|
|
129
|
+
Apache-2.0
|
|
@@ -1,24 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { makeStyles } from '@
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { makeStyles } from '@mui/styles';
|
|
3
3
|
import { HeaderComponent } from './headerComponent/HeaderComponent.esm.js';
|
|
4
4
|
import { HomeGreeting } from './homeGretting/HomeGretting.esm.js';
|
|
5
5
|
import { HomeContent } from './homeContent/HomeContent.esm.js';
|
|
6
6
|
import { Page } from '@backstage/core-components';
|
|
7
|
+
import Box from '@mui/material/Box';
|
|
7
8
|
|
|
8
9
|
const useVeeCodeHomePageStyles = makeStyles((theme) => ({
|
|
9
10
|
pageRoot: {
|
|
10
|
-
display: "flex",
|
|
11
|
-
flexDirection: "column",
|
|
12
11
|
backgroundColor: theme.palette.background.default
|
|
13
12
|
}
|
|
14
13
|
}));
|
|
15
14
|
const VeeCodeHomePage = () => {
|
|
16
15
|
const { pageRoot } = useVeeCodeHomePageStyles();
|
|
17
|
-
return /* @__PURE__ */
|
|
16
|
+
return /* @__PURE__ */ jsx(Page, { themeId: "home", className: pageRoot, children: /* @__PURE__ */ jsxs(Box, { sx: {
|
|
17
|
+
display: "flex",
|
|
18
|
+
flexDirection: "column",
|
|
19
|
+
width: "100%",
|
|
20
|
+
minHeight: "100vh"
|
|
21
|
+
}, children: [
|
|
18
22
|
/* @__PURE__ */ jsx(HeaderComponent, {}),
|
|
19
23
|
/* @__PURE__ */ jsx(HomeGreeting, {}),
|
|
20
24
|
/* @__PURE__ */ jsx(HomeContent, {})
|
|
21
|
-
] });
|
|
25
|
+
] }) });
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
export { VeeCodeHomePage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VeeCodeHomePage.esm.js","sources":["../../src/components/VeeCodeHomePage.tsx"],"sourcesContent":["import { makeStyles } from '@
|
|
1
|
+
{"version":3,"file":"VeeCodeHomePage.esm.js","sources":["../../src/components/VeeCodeHomePage.tsx"],"sourcesContent":["import { makeStyles } from '@mui/styles';\nimport { HeaderComponent } from './headerComponent/HeaderComponent';\nimport { HomeGreeting } from './homeGretting/HomeGretting';\nimport { HomeContent } from './homeContent/HomeContent';\nimport { Page } from '@backstage/core-components';\nimport Box from '@mui/material/Box';\n\nconst useVeeCodeHomePageStyles = makeStyles(theme => ({\n pageRoot: {\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 <Box sx={{ \n display: 'flex', \n flexDirection: 'column', \n width: '100%', \n minHeight: '100vh' \n }}>\n <HeaderComponent />\n <HomeGreeting />\n <HomeContent />\n </Box>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,wBAAA,GAA2B,WAAW,CAAA,KAAA,MAAU;AAAA,EACpD,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW;AAAA;AAE9C,CAAA,CAAE,CAAA;AAEK,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,wBAAA,EAAyB;AAC9C,EAAA,uBACE,GAAA,CAAC,QAAK,OAAA,EAAQ,MAAA,EAAO,WAAW,QAAA,EAC9B,QAAA,kBAAA,IAAA,CAAC,OAAI,EAAA,EAAI;AAAA,IACP,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,wBAChB,YAAA,EAAA,EAAa,CAAA;AAAA,wBACb,WAAA,EAAA,EAAY;AAAA,GAAA,EACf,CAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -20,7 +20,7 @@ const HeaderComponent = () => {
|
|
|
20
20
|
const handleProfileMenuClose = () => {
|
|
21
21
|
setProfileAnchorEl(null);
|
|
22
22
|
};
|
|
23
|
-
return /* @__PURE__ */ jsxs(Box, { sx: {
|
|
23
|
+
return /* @__PURE__ */ jsxs(Box, { sx: { position: "relative" }, children: [
|
|
24
24
|
/* @__PURE__ */ jsx(
|
|
25
25
|
AppBar,
|
|
26
26
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderComponent.esm.js","sources":["../../../src/components/headerComponent/HeaderComponent.tsx"],"sourcesContent":["// 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={{
|
|
1
|
+
{"version":3,"file":"HeaderComponent.esm.js","sources":["../../../src/components/headerComponent/HeaderComponent.tsx"],"sourcesContent":["// 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={{ 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"],"names":[],"mappings":";;;;;;;;;;;;AAYO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GACxC,KAAA,CAAM,SAA6B,IAAI,CAAA;AAEzC,EAAA,MAAM,iBAAA,GAAoB,QAAQ,eAAe,CAAA;AAEjD,EAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAyC;AACtE,IAAA,kBAAA,CAAmB,MAAM,aAAa,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,4BACG,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,YAAW,EAC9B,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAU,KAAA;AAAA,QACV,OAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,QAEzC,+BAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,8BAChB,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,GAAE,EAAG,CAAA;AAAA,0BAC1B,IAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI;AAAA,gBACF,OAAA,EAAS;AAAA,kBACP,EAAA,EAAI,MAAA;AAAA,kBACJ,EAAA,EAAI,MAAA;AAAA,kBACJ,UAAA,EAAY,QAAA;AAAA,kBACZ,GAAA,EAAK;AAAA;AACP,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oCACd,WAAA,EAAA,EAAY,CAAA;AAAA,gCACb,GAAA,CAAC,OAAA,EAAA,EAAQ,cAAA,EAAgB,qBAAA,EAAuB;AAAA;AAAA;AAAA;AAClD,SAAA,EACF;AAAA;AAAA,KACF;AAAA,oBAGA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,eAAA;AAAA,QACV,MAAA,EAAO,cAAA;AAAA,QACP,MAAA,EAAQ,iBAAA;AAAA,QACR,WAAA,EAAa;AAAA;AAAA;AACf,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -6,7 +6,7 @@ import Menu from '@mui/material/Menu';
|
|
|
6
6
|
import Box from '@mui/material/Box';
|
|
7
7
|
import { useUserProfile } from '@backstage/plugin-user-settings';
|
|
8
8
|
import Typography from '@mui/material/Typography';
|
|
9
|
-
import { Divider, ListItemIcon, MenuItem } from '@material
|
|
9
|
+
import { Divider, ListItemIcon, MenuItem } from '@mui/material';
|
|
10
10
|
import { UserAvatar } from '../../userAvatar/UserAvatar.esm.js';
|
|
11
11
|
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
12
12
|
import { catalogApiRef } from '@backstage/plugin-catalog-react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItems.esm.js","sources":["../../../../src/components/headerComponent/menuItems/MenuItems.tsx"],"sourcesContent":["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
|
|
1
|
+
{"version":3,"file":"MenuItems.esm.js","sources":["../../../../src/components/headerComponent/menuItems/MenuItems.tsx"],"sourcesContent":["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 '@mui/material';\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"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { SearchContextProvider } from '@backstage/plugin-search-react';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { SearchBar } from './SearchBar.esm.js';
|
|
5
|
-
import { Box } from '@material
|
|
5
|
+
import { Box } from '@mui/material';
|
|
6
6
|
|
|
7
7
|
const SearchComponent = () => {
|
|
8
8
|
const [searchTerm, setSearchTerm] = useState("");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchComponent.esm.js","sources":["../../../../src/components/headerComponent/searchComponent/SearchComponent.tsx"],"sourcesContent":["/*\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
|
|
1
|
+
{"version":3,"file":"SearchComponent.esm.js","sources":["../../../../src/components/headerComponent/searchComponent/SearchComponent.tsx"],"sourcesContent":["/*\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 '@mui/material';\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"],"names":[],"mappings":";;;;;;AAqBO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,EAAE,CAAA;AAEvD,EAAA,uBACE,GAAA,CAAC,yBACC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,WAAU,KAAA,EAAM,EAAA,EAAI,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,QAAO,EACzD,QAAA,kBAAA,GAAA,CAAC,aAAU,KAAA,EAAO,EAAE,MAAM,UAAA,EAAW,EAAG,aAAA,EAA8B,CAAA,EACxE,CAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import Card from '@mui/material/Card';
|
|
3
3
|
import CardContent from '@mui/material/CardContent';
|
|
4
4
|
import Box from '@mui/material/Box';
|
|
5
|
-
import { CardHeader, Divider } from '@material
|
|
5
|
+
import { CardHeader, Divider } from '@mui/material';
|
|
6
6
|
import StatCard from './StatCards.esm.js';
|
|
7
7
|
import HighlightedCard from './HighLightedCard.esm.js';
|
|
8
8
|
import { useCatalog } from '../../hooks/useCatalog.esm.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Summary.esm.js","sources":["../../../src/components/homeContent/Summary.tsx"],"sourcesContent":["// 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
|
|
1
|
+
{"version":3,"file":"Summary.esm.js","sources":["../../../src/components/homeContent/Summary.tsx"],"sourcesContent":["// 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 '@mui/material';\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"],"names":[],"mappings":";;;;;;;;;;;;;;;AAeA,SAAwB,OAAA,GAAU;AAChC,EAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,UAAA,KAAe,UAAA,EAAW;AACnD,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AAErC,EAAA,MAAM,IAAA,GAAO;AAAA,IACX;AAAA,MACE,IAAA,EAAM,qBAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,KAAA,EAAO,SAAA,CAAU,MAAA,CAAO,QAAA;AAAS,KACnC;AAAA,IACA;AAAA,MACE,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO,YAAA;AAAA,MACP,KAAA,EAAO,UAAA,CAAW,MAAA,CAAO,QAAA;AAAS,KACpC;AAAA,IACA;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,QAAA;AAAS;AAC9B,GACF;AAEA,EAAA,MAAM,SACH,UAAA,GACG,SAAA,CAAU,GAAA,EAAK,QAAA,EAAU,OAAO,IAAA,EAAM,YAAA;AAAA;AAAA;AAAA,IAGtC,SAAA,CAAU,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO;AAAA,GAAA,KAAiB,SAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAEvD,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,UAAA;AAAA,MACR,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,GAAA,EAAK,KAAA;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAW;AAAA,OACb;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,SAAA,EAAU,CAAA;AAAA,4BAC3B,OAAA,EAAA,EAAQ,CAAA;AAAA,4BACR,WAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI;AAAA,cACF,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,MAAA;AAAA,cACL,mBAAA,EAAqB,eAAA;AAAA,cACrB,CAAC,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,GAAG;AAAA,gBAC9B,mBAAA,EAAqB;AAAA;AACvB,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACf,GAAA,CAAC,QAAA,EAAA,EAAsB,GAAG,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAA,EAApC,KAAuC,CACvD,CAAA;AAAA,kCACA,eAAA,EAAA,EAAgB;AAAA;AAAA;AAAA,SACnB,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -9,7 +9,7 @@ import CardContent from '@mui/material/CardContent';
|
|
|
9
9
|
import Box from '@mui/material/Box';
|
|
10
10
|
import Stack from '@mui/material/Stack';
|
|
11
11
|
import LinearProgress from '@mui/material/LinearProgress';
|
|
12
|
-
import { CardHeader, Divider } from '@material
|
|
12
|
+
import { CardHeader, Divider } from '@mui/material';
|
|
13
13
|
import { useApi, configApiRef } from '@backstage/core-plugin-api';
|
|
14
14
|
import { useVisited } from '../../hooks/useVisited.esm.js';
|
|
15
15
|
import { generateColorVariants } from '../../utils/generateColor.esm.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisitedCharts.esm.js","sources":["../../../src/components/homeContent/VisitedCharts.tsx"],"sourcesContent":["// 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
|
|
1
|
+
{"version":3,"file":"VisitedCharts.esm.js","sources":["../../../src/components/homeContent/VisitedCharts.tsx"],"sourcesContent":["// 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 '@mui/material';\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"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "veecode-platform.plugin-veecode-homepage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"extensions": [],
|
|
5
5
|
"registrationMethod": "callback",
|
|
6
6
|
"baseURL": "auto",
|
|
7
7
|
"loadScripts": [
|
|
8
|
-
"veecode-platform.plugin-veecode-homepage.
|
|
8
|
+
"veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js"
|
|
9
9
|
],
|
|
10
|
-
"buildHash": "
|
|
10
|
+
"buildHash": "c0e148296c7bf186a8d0f880e5b45af8"
|
|
11
11
|
}
|