@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.
Files changed (105) hide show
  1. package/README.md +124 -8
  2. package/dist/components/VeeCodeHomePage.esm.js +10 -6
  3. package/dist/components/VeeCodeHomePage.esm.js.map +1 -1
  4. package/dist/components/headerComponent/HeaderComponent.esm.js +1 -1
  5. package/dist/components/headerComponent/HeaderComponent.esm.js.map +1 -1
  6. package/dist/components/headerComponent/menuItems/MenuItems.esm.js +1 -1
  7. package/dist/components/headerComponent/menuItems/MenuItems.esm.js.map +1 -1
  8. package/dist/components/headerComponent/searchComponent/SearchComponent.esm.js +1 -1
  9. package/dist/components/headerComponent/searchComponent/SearchComponent.esm.js.map +1 -1
  10. package/dist/components/homeContent/Summary.esm.js +1 -1
  11. package/dist/components/homeContent/Summary.esm.js.map +1 -1
  12. package/dist/components/homeContent/VisitedCharts.esm.js +1 -1
  13. package/dist/components/homeContent/VisitedCharts.esm.js.map +1 -1
  14. package/dist-scalprum/plugin-manifest.json +3 -3
  15. package/dist-scalprum/static/1213.412457e8.chunk.js +9 -0
  16. package/dist-scalprum/static/1213.412457e8.chunk.js.map +1 -0
  17. package/dist-scalprum/static/2203.ea66ef58.chunk.js +2 -0
  18. package/dist-scalprum/static/2203.ea66ef58.chunk.js.map +1 -0
  19. package/dist-scalprum/static/2435.ed5faea3.chunk.js +2 -0
  20. package/dist-scalprum/static/2435.ed5faea3.chunk.js.map +1 -0
  21. package/dist-scalprum/static/2976.168b3d3b.chunk.js +2 -0
  22. package/dist-scalprum/static/2976.168b3d3b.chunk.js.map +1 -0
  23. package/dist-scalprum/static/3937.22b10472.chunk.js +2 -0
  24. package/dist-scalprum/static/3937.22b10472.chunk.js.map +1 -0
  25. package/dist-scalprum/static/4656.e80c73a4.chunk.js +3 -0
  26. package/dist-scalprum/static/{4570.e8ea2b1b.chunk.js.LICENSE.txt → 4656.e80c73a4.chunk.js.LICENSE.txt} +0 -8
  27. package/dist-scalprum/static/4656.e80c73a4.chunk.js.map +1 -0
  28. package/dist-scalprum/static/4816.6f8976cb.chunk.js +3 -0
  29. package/dist-scalprum/static/4816.6f8976cb.chunk.js.map +1 -0
  30. package/dist-scalprum/static/5091.dc1a9c0f.chunk.js +3 -0
  31. package/dist-scalprum/static/5091.dc1a9c0f.chunk.js.map +1 -0
  32. package/dist-scalprum/static/5571.096199d4.chunk.js +206 -0
  33. package/dist-scalprum/static/5571.096199d4.chunk.js.LICENSE.txt +9 -0
  34. package/dist-scalprum/static/5571.096199d4.chunk.js.map +1 -0
  35. package/dist-scalprum/static/5741.6a870f83.chunk.js +2 -0
  36. package/dist-scalprum/static/5741.6a870f83.chunk.js.map +1 -0
  37. package/dist-scalprum/static/6338.37bbe4bd.chunk.js +3 -0
  38. package/dist-scalprum/static/6338.37bbe4bd.chunk.js.LICENSE.txt +7 -0
  39. package/dist-scalprum/static/6338.37bbe4bd.chunk.js.map +1 -0
  40. package/dist-scalprum/static/{7332.4d69761c.chunk.js → 6352.9e636536.chunk.js} +2 -2
  41. package/dist-scalprum/static/6352.9e636536.chunk.js.map +1 -0
  42. package/dist-scalprum/static/6460.b727a14c.chunk.js +2 -0
  43. package/dist-scalprum/static/6460.b727a14c.chunk.js.map +1 -0
  44. package/dist-scalprum/static/6921.efadb98d.chunk.js +2 -0
  45. package/dist-scalprum/static/6921.efadb98d.chunk.js.map +1 -0
  46. package/dist-scalprum/static/7524.b179cb10.chunk.js +3 -0
  47. package/dist-scalprum/static/7524.b179cb10.chunk.js.LICENSE.txt +8 -0
  48. package/dist-scalprum/static/7524.b179cb10.chunk.js.map +1 -0
  49. package/dist-scalprum/static/7996.1d65dbec.chunk.js +3 -0
  50. package/dist-scalprum/static/{4765.afedf928.chunk.js.LICENSE.txt → 7996.1d65dbec.chunk.js.LICENSE.txt} +0 -10
  51. package/dist-scalprum/static/7996.1d65dbec.chunk.js.map +1 -0
  52. package/dist-scalprum/static/{8067.ae1736df.chunk.js → 8067.c743580c.chunk.js} +2 -2
  53. package/dist-scalprum/static/{8067.ae1736df.chunk.js.map → 8067.c743580c.chunk.js.map} +1 -1
  54. package/dist-scalprum/static/8819.a0205f1d.chunk.js +2 -0
  55. package/dist-scalprum/static/8819.a0205f1d.chunk.js.map +1 -0
  56. package/dist-scalprum/static/9315.3aed9231.chunk.js +3 -0
  57. package/dist-scalprum/static/9315.3aed9231.chunk.js.LICENSE.txt +9 -0
  58. package/dist-scalprum/static/9315.3aed9231.chunk.js.map +1 -0
  59. package/dist-scalprum/static/{9633.4d914694.chunk.js → 9633.d7b4641e.chunk.js} +2 -2
  60. package/dist-scalprum/static/9633.d7b4641e.chunk.js.map +1 -0
  61. package/dist-scalprum/static/9710.ed3c2299.chunk.js +2 -0
  62. package/dist-scalprum/static/9710.ed3c2299.chunk.js.map +1 -0
  63. package/dist-scalprum/static/9996.79855bb7.chunk.js +2 -0
  64. package/dist-scalprum/static/9996.79855bb7.chunk.js.map +1 -0
  65. package/dist-scalprum/static/exposed-PluginRoot.28a57811.chunk.js +2 -0
  66. package/dist-scalprum/static/{exposed-PluginRoot.d759ac0a.chunk.js.map → exposed-PluginRoot.28a57811.chunk.js.map} +1 -1
  67. package/dist-scalprum/veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js +2 -0
  68. package/dist-scalprum/veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js.map +1 -0
  69. package/package.json +1 -1
  70. package/dist-scalprum/static/118.a2028f0c.chunk.js +0 -2
  71. package/dist-scalprum/static/118.a2028f0c.chunk.js.map +0 -1
  72. package/dist-scalprum/static/1645.d73aec32.chunk.js +0 -3
  73. package/dist-scalprum/static/1645.d73aec32.chunk.js.map +0 -1
  74. package/dist-scalprum/static/1853.1924a984.chunk.js +0 -2
  75. package/dist-scalprum/static/1853.1924a984.chunk.js.map +0 -1
  76. package/dist-scalprum/static/2203.00647934.chunk.js +0 -2
  77. package/dist-scalprum/static/2203.00647934.chunk.js.map +0 -1
  78. package/dist-scalprum/static/237.4f1bff62.chunk.js +0 -9
  79. package/dist-scalprum/static/237.4f1bff62.chunk.js.map +0 -1
  80. package/dist-scalprum/static/3007.a2931d13.chunk.js +0 -2
  81. package/dist-scalprum/static/3007.a2931d13.chunk.js.map +0 -1
  82. package/dist-scalprum/static/4026.247ddcd8.chunk.js +0 -2
  83. package/dist-scalprum/static/4026.247ddcd8.chunk.js.map +0 -1
  84. package/dist-scalprum/static/4140.f3243f8b.chunk.js +0 -2
  85. package/dist-scalprum/static/4140.f3243f8b.chunk.js.map +0 -1
  86. package/dist-scalprum/static/4491.dace3748.chunk.js +0 -2
  87. package/dist-scalprum/static/4491.dace3748.chunk.js.map +0 -1
  88. package/dist-scalprum/static/4570.e8ea2b1b.chunk.js +0 -3
  89. package/dist-scalprum/static/4570.e8ea2b1b.chunk.js.map +0 -1
  90. package/dist-scalprum/static/4765.afedf928.chunk.js +0 -206
  91. package/dist-scalprum/static/4765.afedf928.chunk.js.map +0 -1
  92. package/dist-scalprum/static/566.3c6819f6.chunk.js +0 -2
  93. package/dist-scalprum/static/566.3c6819f6.chunk.js.map +0 -1
  94. package/dist-scalprum/static/6033.086c7035.chunk.js +0 -3
  95. package/dist-scalprum/static/6033.086c7035.chunk.js.map +0 -1
  96. package/dist-scalprum/static/6460.18ed7640.chunk.js +0 -2
  97. package/dist-scalprum/static/6460.18ed7640.chunk.js.map +0 -1
  98. package/dist-scalprum/static/7332.4d69761c.chunk.js.map +0 -1
  99. package/dist-scalprum/static/9633.4d914694.chunk.js.map +0 -1
  100. package/dist-scalprum/static/exposed-PluginRoot.d759ac0a.chunk.js +0 -2
  101. package/dist-scalprum/veecode-platform.plugin-veecode-homepage.2efbfcbfcafae3f318ff.js +0 -2
  102. package/dist-scalprum/veecode-platform.plugin-veecode-homepage.2efbfcbfcafae3f318ff.js.map +0 -1
  103. /package/dist-scalprum/static/{237.4f1bff62.chunk.js.LICENSE.txt → 1213.412457e8.chunk.js.LICENSE.txt} +0 -0
  104. /package/dist-scalprum/static/{1645.d73aec32.chunk.js.LICENSE.txt → 4816.6f8976cb.chunk.js.LICENSE.txt} +0 -0
  105. /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
- # veecode-homepage
1
+ # VeeCode Homepage Plugin
2
2
 
3
- Welcome to the veecode-homepage plugin!
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
- _This plugin was created through the Backstage CLI_
5
+ ## What it does
6
6
 
7
- ## Getting started
7
+ The VeeCode Homepage plugin creates a modern, responsive homepage that includes:
8
8
 
9
- Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/veecode-homepage](http://localhost:3000/veecode-homepage).
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
- You can also serve the plugin in isolation by running `yarn start` in the plugin directory.
12
- This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads.
13
- It is only meant for local development, and the setup for it can be found inside the [/dev](./dev) directory.
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 { jsxs, jsx } from 'react/jsx-runtime';
2
- import { makeStyles } from '@material-ui/core';
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__ */ jsxs(Page, { themeId: "home", className: pageRoot, children: [
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 '@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":[],"mappings":";;;;;;;AAMA,MAAM,wBAAA,GAA2B,WAAW,CAAA,KAAA,MAAU;AAAA,EACpD,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,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,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,MAAA,EAAO,WAAW,QAAA,EAC9B,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;AAEJ;;;;"}
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: { flexGrow: 1, position: "relative" }, children: [
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={{ 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"],"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,uBACE,IAAA,CAAC,OAAI,EAAA,EAAI,EAAE,UAAU,CAAA,EAAG,QAAA,EAAU,YAAW,EAC3C,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;;;;"}
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-ui/core';
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-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"],"names":[],"mappings":"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"}
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-ui/core';
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-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"],"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;;;;"}
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-ui/core';
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-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"],"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;;;;"}
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-ui/core';
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-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"],"names":[],"mappings":"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"}
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":";;;;;;;;;;;;;;;;;AAqBA,MAAM,UAAA,GAAa,OAAO,MAAA,EAAQ;AAAA,EAChC,iBAAA,EAAmB,UAAQ,IAAA,KAAS;AACtC,CAAC,CAAA,CAAmB,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,EAClC,UAAA,EAAY,QAAA;AAAA,EACZ,gBAAA,EAAkB,SAAA;AAAA,EAClB,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,EACzB,QAAA,EAAU;AAAA,IACR;AAAA,MACE,KAAA,EAAO;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,EAAA,CAAG;AAAA;AAChC,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,CAAC,EAAE,OAAA,OAAc,OAAA,KAAY,SAAA;AAAA,MACpC,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AAAA;AACnC,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,EAAA,CAAG;AAAA;AAClC,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,CAAC,EAAE,OAAA,OAAc,OAAA,KAAY,SAAA;AAAA,MACpC,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AAAA;AACrC;AACF;AAEJ,CAAA,CAAE,CAAA;AAOF,SAAS,cAAA,CAAe,EAAE,WAAA,EAAa,aAAA,EAAc,EAAwB;AAC3E,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,GAAA,KAAQ,cAAA,EAAe;AACpD,EAAA,MAAM,QAAA,GAAW,GAAA,GAAM,MAAA,GAAS,CAAA,GAAI,EAAA;AACpC,EAAA,MAAM,aAAa,QAAA,GAAW,EAAA;AAE9B,EAAA,uBACE,IAAA,CAAC,KAAA,CAAM,QAAA,EAAN,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,SAAA,EAAU,CAAA,EAAG,OAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,QAAA,EACnD,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,CAAA,EAAG,OAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,UAAA,EACrD,QAAA,EAAA,aAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAwB,aAAA,GAAgB;AACtC,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,KAAW,UAAA,EAAW;AAC5C,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;AACrC,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,KAAA,CAAM,MAAM,CAAA;AACxD,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAkB;AAC1C,IAAA,MAAM,OAAA,GAAU,SAAS,KAAA,GAAQ,GAAA,CAAA;AACjC,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,EAClC,CAAA;AAEA,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,OAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACb;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,aAAA,EAAc,CAAA;AAAA,4BAC/B,OAAA,EAAA,EAAQ,CAAA;AAAA,wBACT,GAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS,EAC/C,QAAA,kBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,EAAA;AAAA,cACN,KAAA,EAAO,EAAA;AAAA,cACP,GAAA,EAAK,EAAA;AAAA,cACL,MAAA,EAAQ;AAAA,aACV;AAAA,YACA,MAAA,EAAQ;AAAA,cACN;AAAA,gBACE,IAAA,EAAM,KAAA;AAAA,gBACN,WAAA,EAAa,EAAA;AAAA,gBACb,WAAA,EAAa,GAAA;AAAA,gBACb,YAAA,EAAc,CAAA;AAAA,gBACd,cAAA,EAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,MAAA;AAAO;AACtD,aACF;AAAA,YACA,MAAA,EAAQ,GAAA;AAAA,YACR,KAAA,EAAO,GAAA;AAAA,YACP,UAAA,EAAU,IAAA;AAAA,YAEV,8BAAC,cAAA,EAAA,EAAe,WAAA,EAAa,GAAG,KAAK,CAAA,CAAA,EAAI,eAAc,OAAA,EAAQ;AAAA;AAAA,WAEnE,CAAA,EACF,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAY,KAAA,CAAM,OAAA,CAAQ,WAAW,OAAA,EAAQ;AAAA,YAEnE,QAAA,EAAA,MAAA,CAAO,IAAI,CAAA,KAAA,qBACV,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,KAAA;AAAA,gBACV,IAAI,EAAE,UAAA,EAAY,UAAU,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA,gBAE1C,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,kCACjB,IAAA,CAAC,SAAM,EAAA,EAAI,EAAE,KAAK,CAAA,EAAG,QAAA,EAAU,GAAE,EAC/B,QAAA,EAAA;AAAA,oCAAA,IAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,KAAA;AAAA,wBACV,EAAA,EAAI;AAAA,0BACF,cAAA,EAAgB,eAAA;AAAA,0BAChB,UAAA,EAAY,QAAA;AAAA,0BACZ,GAAA,EAAK;AAAA,yBACP;AAAA,wBAEA,QAAA,EAAA;AAAA,0CAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,UAAA,EAAY,KAAA,EAAM,EACjD,QAAA,EAAA,KAAA,CAAM,IAAA,EACT,CAAA;AAAA,0CACA,IAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,kBAAiB,EACvD,QAAA,EAAA;AAAA,4BAAA,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAAA,4BAAE;AAAA,2BAAA,EAChC;AAAA;AAAA;AAAA,qBACF;AAAA,oCACA,GAAA;AAAA,sBAAC,cAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,aAAA;AAAA,wBACR,YAAA,EAAW,4BAAA;AAAA,wBACX,KAAA,EAAO,gBAAA,CAAiB,KAAA,CAAM,IAAI;AAAA;AAAA;AACpC,mBAAA,EACF;AAAA;AAAA,eAAA;AAAA,cA1BK,KAAA,CAAM;AAAA,aA4Bd;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "veecode-platform.plugin-veecode-homepage",
3
- "version": "0.1.11",
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.2efbfcbfcafae3f318ff.js"
8
+ "veecode-platform.plugin-veecode-homepage.c0e148296c7bf186a8d0.js"
9
9
  ],
10
- "buildHash": "2efbfcbfcafae3f318ff48cdbea2146e"
10
+ "buildHash": "c0e148296c7bf186a8d0f880e5b45af8"
11
11
  }