@backstage-community/plugin-apiiro 0.1.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 (223) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +232 -0
  3. package/config.d.ts +30 -0
  4. package/dist/App.esm.js +12 -0
  5. package/dist/App.esm.js.map +1 -0
  6. package/dist/api/index.esm.js +71 -0
  7. package/dist/api/index.esm.js.map +1 -0
  8. package/dist/assets/BulleyeIcon.esm.js +454 -0
  9. package/dist/assets/BulleyeIcon.esm.js.map +1 -0
  10. package/dist/assets/NoResultIcon.esm.js +146 -0
  11. package/dist/assets/NoResultIcon.esm.js.map +1 -0
  12. package/dist/assets/RiskIcon.esm.js +27 -0
  13. package/dist/assets/RiskIcon.esm.js.map +1 -0
  14. package/dist/assets/SettingIcon.esm.js +49 -0
  15. package/dist/assets/SettingIcon.esm.js.map +1 -0
  16. package/dist/assets/apiiroLogo/apiiroLogo.esm.js +21 -0
  17. package/dist/assets/apiiroLogo/apiiroLogo.esm.js.map +1 -0
  18. package/dist/assets/apiiroLogo/apiiroSidebar.esm.js +23 -0
  19. package/dist/assets/apiiroLogo/apiiroSidebar.esm.js.map +1 -0
  20. package/dist/assets/apiiroLogo/apiiroSmall.esm.js +19 -0
  21. package/dist/assets/apiiroLogo/apiiroSmall.esm.js.map +1 -0
  22. package/dist/assets/languageIcons/C.esm.js +7 -0
  23. package/dist/assets/languageIcons/C.esm.js.map +1 -0
  24. package/dist/assets/languageIcons/Cicd.esm.js +7 -0
  25. package/dist/assets/languageIcons/Cicd.esm.js.map +1 -0
  26. package/dist/assets/languageIcons/Clojure.esm.js +7 -0
  27. package/dist/assets/languageIcons/Clojure.esm.js.map +1 -0
  28. package/dist/assets/languageIcons/Cpp.esm.js +7 -0
  29. package/dist/assets/languageIcons/Cpp.esm.js.map +1 -0
  30. package/dist/assets/languageIcons/Csharp.esm.js +7 -0
  31. package/dist/assets/languageIcons/Csharp.esm.js.map +1 -0
  32. package/dist/assets/languageIcons/Dart.esm.js +7 -0
  33. package/dist/assets/languageIcons/Dart.esm.js.map +1 -0
  34. package/dist/assets/languageIcons/Go.esm.js +7 -0
  35. package/dist/assets/languageIcons/Go.esm.js.map +1 -0
  36. package/dist/assets/languageIcons/Groovy.esm.js +7 -0
  37. package/dist/assets/languageIcons/Groovy.esm.js.map +1 -0
  38. package/dist/assets/languageIcons/HTML.esm.js +7 -0
  39. package/dist/assets/languageIcons/HTML.esm.js.map +1 -0
  40. package/dist/assets/languageIcons/HclLanguage.esm.js +7 -0
  41. package/dist/assets/languageIcons/HclLanguage.esm.js.map +1 -0
  42. package/dist/assets/languageIcons/Java.esm.js +7 -0
  43. package/dist/assets/languageIcons/Java.esm.js.map +1 -0
  44. package/dist/assets/languageIcons/Javascript.esm.js +7 -0
  45. package/dist/assets/languageIcons/Javascript.esm.js.map +1 -0
  46. package/dist/assets/languageIcons/Kotlin.esm.js +7 -0
  47. package/dist/assets/languageIcons/Kotlin.esm.js.map +1 -0
  48. package/dist/assets/languageIcons/ObjectiveC.esm.js +7 -0
  49. package/dist/assets/languageIcons/ObjectiveC.esm.js.map +1 -0
  50. package/dist/assets/languageIcons/PHP.esm.js +7 -0
  51. package/dist/assets/languageIcons/PHP.esm.js.map +1 -0
  52. package/dist/assets/languageIcons/Perl.esm.js +13 -0
  53. package/dist/assets/languageIcons/Perl.esm.js.map +1 -0
  54. package/dist/assets/languageIcons/Python.esm.js +7 -0
  55. package/dist/assets/languageIcons/Python.esm.js.map +1 -0
  56. package/dist/assets/languageIcons/Ruby.esm.js +7 -0
  57. package/dist/assets/languageIcons/Ruby.esm.js.map +1 -0
  58. package/dist/assets/languageIcons/Rust.esm.js +7 -0
  59. package/dist/assets/languageIcons/Rust.esm.js.map +1 -0
  60. package/dist/assets/languageIcons/Scala.esm.js +7 -0
  61. package/dist/assets/languageIcons/Scala.esm.js.map +1 -0
  62. package/dist/assets/languageIcons/Swift.esm.js +7 -0
  63. package/dist/assets/languageIcons/Swift.esm.js.map +1 -0
  64. package/dist/assets/languageIcons/Terraform.esm.js +7 -0
  65. package/dist/assets/languageIcons/Terraform.esm.js.map +1 -0
  66. package/dist/assets/languageIcons/Typescript.esm.js +7 -0
  67. package/dist/assets/languageIcons/Typescript.esm.js.map +1 -0
  68. package/dist/assets/languageIcons/Unknown.esm.js +7 -0
  69. package/dist/assets/languageIcons/Unknown.esm.js.map +1 -0
  70. package/dist/assets/languageIcons/VB.esm.js +10 -0
  71. package/dist/assets/languageIcons/VB.esm.js.map +1 -0
  72. package/dist/assets/languageIcons/YAML.esm.js +7 -0
  73. package/dist/assets/languageIcons/YAML.esm.js.map +1 -0
  74. package/dist/assets/providerIcons/Azure.esm.js +7 -0
  75. package/dist/assets/providerIcons/Azure.esm.js.map +1 -0
  76. package/dist/assets/providerIcons/Bitbucket.esm.js +7 -0
  77. package/dist/assets/providerIcons/Bitbucket.esm.js.map +1 -0
  78. package/dist/assets/providerIcons/Gitlab.esm.js +7 -0
  79. package/dist/assets/providerIcons/Gitlab.esm.js.map +1 -0
  80. package/dist/components/ApiiroSidebar.esm.js +10 -0
  81. package/dist/components/ApiiroSidebar.esm.js.map +1 -0
  82. package/dist/components/ApplicationsList/ApplicationsList.esm.js +196 -0
  83. package/dist/components/ApplicationsList/ApplicationsList.esm.js.map +1 -0
  84. package/dist/components/CalendarDatePicker.esm.js +154 -0
  85. package/dist/components/CalendarDatePicker.esm.js.map +1 -0
  86. package/dist/components/CalendarDatePicker.styles.esm.js +198 -0
  87. package/dist/components/CalendarDatePicker.styles.esm.js.map +1 -0
  88. package/dist/components/Chip.esm.js +60 -0
  89. package/dist/components/Chip.esm.js.map +1 -0
  90. package/dist/components/ChipsList.esm.js +207 -0
  91. package/dist/components/ChipsList.esm.js.map +1 -0
  92. package/dist/components/ComponentDisplay.esm.js +42 -0
  93. package/dist/components/ComponentDisplay.esm.js.map +1 -0
  94. package/dist/components/DataGrid/CustomColumnMenu.esm.js +29 -0
  95. package/dist/components/DataGrid/CustomColumnMenu.esm.js.map +1 -0
  96. package/dist/components/DataGrid/CustomPagination.esm.js +113 -0
  97. package/dist/components/DataGrid/CustomPagination.esm.js.map +1 -0
  98. package/dist/components/DataGrid/CustomSearchToolbar.esm.js +117 -0
  99. package/dist/components/DataGrid/CustomSearchToolbar.esm.js.map +1 -0
  100. package/dist/components/DataGrid/DataGrid.esm.js +336 -0
  101. package/dist/components/DataGrid/DataGrid.esm.js.map +1 -0
  102. package/dist/components/DataGrid/PinColumnMenuItem.esm.js +24 -0
  103. package/dist/components/DataGrid/PinColumnMenuItem.esm.js.map +1 -0
  104. package/dist/components/DueDate.esm.js +34 -0
  105. package/dist/components/DueDate.esm.js.map +1 -0
  106. package/dist/components/Header.esm.js +27 -0
  107. package/dist/components/Header.esm.js.map +1 -0
  108. package/dist/components/MainContributors/MainContributors.esm.js +62 -0
  109. package/dist/components/MainContributors/MainContributors.esm.js.map +1 -0
  110. package/dist/components/MetricsGroup/TabMetricsGroup.esm.js +37 -0
  111. package/dist/components/MetricsGroup/TabMetricsGroup.esm.js.map +1 -0
  112. package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js +36 -0
  113. package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js.map +1 -0
  114. package/dist/components/RepositoryDisplay/RepositoryDisplay.esm.js +121 -0
  115. package/dist/components/RepositoryDisplay/RepositoryDisplay.esm.js.map +1 -0
  116. package/dist/components/RiskLevel.esm.js +88 -0
  117. package/dist/components/RiskLevel.esm.js.map +1 -0
  118. package/dist/components/RiskStatus.esm.js +58 -0
  119. package/dist/components/RiskStatus.esm.js.map +1 -0
  120. package/dist/components/SimpleTooltip.esm.js +24 -0
  121. package/dist/components/SimpleTooltip.esm.js.map +1 -0
  122. package/dist/components/SourcesDisplay.esm.js +47 -0
  123. package/dist/components/SourcesDisplay.esm.js.map +1 -0
  124. package/dist/components/TagsList/TagsList.esm.js +38 -0
  125. package/dist/components/TagsList/TagsList.esm.js.map +1 -0
  126. package/dist/components/TeamsDisplay.esm.js +47 -0
  127. package/dist/components/TeamsDisplay.esm.js.map +1 -0
  128. package/dist/components/charts/ColumnChart.esm.js +402 -0
  129. package/dist/components/charts/ColumnChart.esm.js.map +1 -0
  130. package/dist/components/charts/GaugeChart.esm.js +249 -0
  131. package/dist/components/charts/GaugeChart.esm.js.map +1 -0
  132. package/dist/components/charts/LineChart.esm.js +328 -0
  133. package/dist/components/charts/LineChart.esm.js.map +1 -0
  134. package/dist/components/charts/PieChart.esm.js +233 -0
  135. package/dist/components/charts/PieChart.esm.js.map +1 -0
  136. package/dist/components/common/ChartBox.esm.js +88 -0
  137. package/dist/components/common/ChartBox.esm.js.map +1 -0
  138. package/dist/components/common/CustomTooltip.esm.js +255 -0
  139. package/dist/components/common/CustomTooltip.esm.js.map +1 -0
  140. package/dist/components/common/ErrorSnackbar.esm.js +39 -0
  141. package/dist/components/common/ErrorSnackbar.esm.js.map +1 -0
  142. package/dist/components/common/NotFound.esm.js +30 -0
  143. package/dist/components/common/NotFound.esm.js.map +1 -0
  144. package/dist/components/common/SomethingWentWrong.esm.js +35 -0
  145. package/dist/components/common/SomethingWentWrong.esm.js.map +1 -0
  146. package/dist/components/common/languageIcons.esm.js +61 -0
  147. package/dist/components/common/languageIcons.esm.js.map +1 -0
  148. package/dist/components/common/logoSpinner.esm.js +28 -0
  149. package/dist/components/common/logoSpinner.esm.js.map +1 -0
  150. package/dist/components/common/scmProviders.esm.js +41 -0
  151. package/dist/components/common/scmProviders.esm.js.map +1 -0
  152. package/dist/components/filters/DiscoveredOnFilter.esm.js +284 -0
  153. package/dist/components/filters/DiscoveredOnFilter.esm.js.map +1 -0
  154. package/dist/components/filters/FilterDropdown.esm.js +325 -0
  155. package/dist/components/filters/FilterDropdown.esm.js.map +1 -0
  156. package/dist/components/filters/FilterDropdownClear.esm.js +45 -0
  157. package/dist/components/filters/FilterDropdownClear.esm.js.map +1 -0
  158. package/dist/components/filters/FilterDropdownList.esm.js +102 -0
  159. package/dist/components/filters/FilterDropdownList.esm.js.map +1 -0
  160. package/dist/components/filters/FilterDropdownSearch.esm.js +65 -0
  161. package/dist/components/filters/FilterDropdownSearch.esm.js.map +1 -0
  162. package/dist/components/filters/RiskInsightFilter.esm.js +579 -0
  163. package/dist/components/filters/RiskInsightFilter.esm.js.map +1 -0
  164. package/dist/components/tiles/MttrVsSLATile.esm.js +170 -0
  165. package/dist/components/tiles/MttrVsSLATile.esm.js.map +1 -0
  166. package/dist/components/tiles/RiskOverTimeTile.esm.js +311 -0
  167. package/dist/components/tiles/RiskOverTimeTile.esm.js.map +1 -0
  168. package/dist/components/tiles/SLAAdherenceTile.esm.js +115 -0
  169. package/dist/components/tiles/SLAAdherenceTile.esm.js.map +1 -0
  170. package/dist/components/tiles/StatusTile.esm.js +235 -0
  171. package/dist/components/tiles/StatusTile.esm.js.map +1 -0
  172. package/dist/components/tiles/TopLanguagesTile.esm.js +234 -0
  173. package/dist/components/tiles/TopLanguagesTile.esm.js.map +1 -0
  174. package/dist/components/tiles/TopRiskTile.esm.js +208 -0
  175. package/dist/components/tiles/TopRiskTile.esm.js.map +1 -0
  176. package/dist/hooks/useUrlFilters.esm.js +102 -0
  177. package/dist/hooks/useUrlFilters.esm.js.map +1 -0
  178. package/dist/index.d.ts +28 -0
  179. package/dist/index.esm.js +42 -0
  180. package/dist/index.esm.js.map +1 -0
  181. package/dist/pages/Repositories/Repositories.esm.js +102 -0
  182. package/dist/pages/Repositories/Repositories.esm.js.map +1 -0
  183. package/dist/pages/Repositories/tableConfig.esm.js +294 -0
  184. package/dist/pages/Repositories/tableConfig.esm.js.map +1 -0
  185. package/dist/pages/Risks/Risks.esm.js +258 -0
  186. package/dist/pages/Risks/Risks.esm.js.map +1 -0
  187. package/dist/pages/Risks/tableConfig.esm.js +305 -0
  188. package/dist/pages/Risks/tableConfig.esm.js.map +1 -0
  189. package/dist/pages/tab/Tab.esm.js +147 -0
  190. package/dist/pages/tab/Tab.esm.js.map +1 -0
  191. package/dist/pages/tab/TabProvider.esm.js +11 -0
  192. package/dist/pages/tab/TabProvider.esm.js.map +1 -0
  193. package/dist/pages/widget/Widget.esm.js +161 -0
  194. package/dist/pages/widget/Widget.esm.js.map +1 -0
  195. package/dist/pages/widget/WidgetProvider.esm.js +12 -0
  196. package/dist/pages/widget/WidgetProvider.esm.js.map +1 -0
  197. package/dist/plugin.esm.js +30 -0
  198. package/dist/plugin.esm.js.map +1 -0
  199. package/dist/queries/filterOptions.queries.esm.js +46 -0
  200. package/dist/queries/filterOptions.queries.esm.js.map +1 -0
  201. package/dist/queries/mttr-statistics.queries.esm.js +61 -0
  202. package/dist/queries/mttr-statistics.queries.esm.js.map +1 -0
  203. package/dist/queries/repository.queries.esm.js +60 -0
  204. package/dist/queries/repository.queries.esm.js.map +1 -0
  205. package/dist/queries/risk-score-over-time.queries.esm.js +61 -0
  206. package/dist/queries/risk-score-over-time.queries.esm.js.map +1 -0
  207. package/dist/queries/risks.queries.esm.js +65 -0
  208. package/dist/queries/risks.queries.esm.js.map +1 -0
  209. package/dist/queries/sla-breach.queries.esm.js +57 -0
  210. package/dist/queries/sla-breach.queries.esm.js.map +1 -0
  211. package/dist/queries/top-risks.queries.esm.js +47 -0
  212. package/dist/queries/top-risks.queries.esm.js.map +1 -0
  213. package/dist/routes.esm.js +8 -0
  214. package/dist/routes.esm.js.map +1 -0
  215. package/dist/theme/themeUtils.esm.js +290 -0
  216. package/dist/theme/themeUtils.esm.js.map +1 -0
  217. package/dist/utils/dateFormatter.esm.js +67 -0
  218. package/dist/utils/dateFormatter.esm.js.map +1 -0
  219. package/dist/utils/numberFormatter.esm.js +21 -0
  220. package/dist/utils/numberFormatter.esm.js.map +1 -0
  221. package/dist/utils/utils.esm.js +27 -0
  222. package/dist/utils/utils.esm.js.map +1 -0
  223. package/package.json +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YAML.esm.js","sources":["../../../src/assets/languageIcons/YAML.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\nimport { SiYaml } from 'react-icons/si';\n\ninterface IconProps {\n color?: string;\n}\n\nexport const YAML: FC<IconProps> = ({ color = 'currentColor' }) => (\n <SiYaml size={24} color={color} />\n);\n"],"names":[],"mappings":";;;AAsBO,MAAM,IAAA,GAAsB,CAAC,EAAE,KAAA,GAAQ,cAAA,uBAC5C,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,KAAA,EAAc;;;;"}
@@ -0,0 +1,7 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { VscAzureDevops } from 'react-icons/vsc';
3
+
4
+ const Azure = ({ color = "#0072c6" }) => /* @__PURE__ */ jsx(VscAzureDevops, { size: 24, color });
5
+
6
+ export { Azure };
7
+ //# sourceMappingURL=Azure.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Azure.esm.js","sources":["../../../src/assets/providerIcons/Azure.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\nimport { VscAzureDevops } from 'react-icons/vsc';\n\ninterface IconProps {\n color?: string;\n}\n\nexport const Azure: FC<IconProps> = ({ color = '#0072c6' }) => (\n <VscAzureDevops size={24} color={color} />\n);\n"],"names":[],"mappings":";;;AAsBO,MAAM,KAAA,GAAuB,CAAC,EAAE,KAAA,GAAQ,SAAA,uBAC7C,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,EAAA,EAAI,KAAA,EAAc;;;;"}
@@ -0,0 +1,7 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { SiBitbucket } from 'react-icons/si';
3
+
4
+ const Bitbucket = ({ color = "#2684FF" }) => /* @__PURE__ */ jsx(SiBitbucket, { size: 24, color });
5
+
6
+ export { Bitbucket };
7
+ //# sourceMappingURL=Bitbucket.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bitbucket.esm.js","sources":["../../../src/assets/providerIcons/Bitbucket.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\nimport { SiBitbucket } from 'react-icons/si';\n\ninterface IconProps {\n color?: string;\n}\n\nexport const Bitbucket: FC<IconProps> = ({ color = '#2684FF' }) => (\n <SiBitbucket size={24} color={color} />\n);\n"],"names":[],"mappings":";;;AAsBO,MAAM,SAAA,GAA2B,CAAC,EAAE,KAAA,GAAQ,SAAA,uBACjD,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,KAAA,EAAc;;;;"}
@@ -0,0 +1,7 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { SiGitlab } from 'react-icons/si';
3
+
4
+ const Gitlab = ({ color = "#E24329" }) => /* @__PURE__ */ jsx(SiGitlab, { size: 24, color });
5
+
6
+ export { Gitlab };
7
+ //# sourceMappingURL=Gitlab.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gitlab.esm.js","sources":["../../../src/assets/providerIcons/Gitlab.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\nimport { SiGitlab } from 'react-icons/si';\n\ninterface IconProps {\n color?: string;\n}\n\nexport const Gitlab: FC<IconProps> = ({ color = '#E24329' }) => (\n <SiGitlab size={24} color={color} />\n);\n"],"names":[],"mappings":";;;AAsBO,MAAM,MAAA,GAAwB,CAAC,EAAE,KAAA,GAAQ,SAAA,uBAC9C,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI,KAAA,EAAc;;;;"}
@@ -0,0 +1,10 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { SidebarItem } from '@backstage/core-components';
3
+ import { ApiiroSidebar as ApiiroSidebar$1 } from '../assets/apiiroLogo/apiiroSidebar.esm.js';
4
+
5
+ const ApiiroSidebar = () => {
6
+ return /* @__PURE__ */ jsx(SidebarItem, { icon: ApiiroSidebar$1, to: "apiiro", text: "apiiro" });
7
+ };
8
+
9
+ export { ApiiroSidebar };
10
+ //# sourceMappingURL=ApiiroSidebar.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiiroSidebar.esm.js","sources":["../../src/components/ApiiroSidebar.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SidebarItem } from '@backstage/core-components';\nimport { ApiiroSidebar as ApiiroSidebarIcon } from '../assets/apiiroLogo/apiiroSidebar';\n\n/** @public */\nexport const ApiiroSidebar = (): JSX.Element => {\n return <SidebarItem icon={ApiiroSidebarIcon} to=\"apiiro\" text=\"apiiro\" />;\n};\n"],"names":["ApiiroSidebarIcon"],"mappings":";;;;AAmBO,MAAM,gBAAgB,MAAmB;AAC9C,EAAA,2BAAQ,WAAA,EAAA,EAAY,IAAA,EAAMA,iBAAmB,EAAA,EAAG,QAAA,EAAS,MAAK,QAAA,EAAS,CAAA;AACzE;;;;"}
@@ -0,0 +1,196 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import Box from '@mui/material/Box';
3
+ import Chip from '@mui/material/Chip';
4
+ import Link from '@mui/material/Link';
5
+ import { useTheme } from '@mui/material/styles';
6
+ import { SimpleTooltip } from '../SimpleTooltip.esm.js';
7
+ import { CustomTooltip } from '../common/CustomTooltip.esm.js';
8
+ import { getBusinessImpactColors } from '../../theme/themeUtils.esm.js';
9
+
10
+ const getBusinessImpactColor = (impact, theme) => {
11
+ const impactColors = getBusinessImpactColors(theme);
12
+ switch (impact.toLowerCase()) {
13
+ case "high":
14
+ return impactColors.high;
15
+ case "medium":
16
+ return impactColors.medium;
17
+ case "low":
18
+ return impactColors.low;
19
+ default:
20
+ return impactColors.default;
21
+ }
22
+ };
23
+ const ApplicationsList = ({
24
+ applications,
25
+ maxVisible = 1
26
+ }) => {
27
+ const theme = useTheme();
28
+ if (!applications || applications.length === 0) {
29
+ return "";
30
+ }
31
+ const visibleApplications = applications.slice(0, maxVisible);
32
+ const remainingCount = applications.length - maxVisible;
33
+ const renderApplication = (app) => {
34
+ const applicationElement = /* @__PURE__ */ jsxs(
35
+ Box,
36
+ {
37
+ display: "flex",
38
+ alignItems: "center",
39
+ gap: 0.5,
40
+ justifyContent: "center",
41
+ children: [
42
+ /* @__PURE__ */ jsx(
43
+ Link,
44
+ {
45
+ href: app.apiiroUrl,
46
+ target: "_blank",
47
+ rel: "noopener noreferrer",
48
+ style: {
49
+ color: "inherit",
50
+ fontSize: "0.875rem",
51
+ cursor: "pointer",
52
+ textDecoration: "underline"
53
+ },
54
+ children: app.name
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsx(
58
+ Chip,
59
+ {
60
+ label: app.businessImpact,
61
+ size: "small",
62
+ variant: "outlined",
63
+ style: {
64
+ borderColor: getBusinessImpactColor(app.businessImpact, theme),
65
+ color: getBusinessImpactColor(app.businessImpact, theme),
66
+ backgroundColor: "transparent",
67
+ fontSize: "0.75rem",
68
+ height: 20,
69
+ fontWeight: 500
70
+ }
71
+ }
72
+ )
73
+ ]
74
+ },
75
+ app.id
76
+ );
77
+ return /* @__PURE__ */ jsx(
78
+ SimpleTooltip,
79
+ {
80
+ title: /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", gap: 0.5, children: [
81
+ /* @__PURE__ */ jsx(
82
+ Link,
83
+ {
84
+ href: app.apiiroUrl,
85
+ target: "_blank",
86
+ rel: "noopener noreferrer",
87
+ style: {
88
+ color: "inherit",
89
+ fontSize: "0.875rem",
90
+ fontWeight: 500,
91
+ cursor: "pointer",
92
+ textDecoration: "underline"
93
+ },
94
+ children: app.name
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsx(
98
+ Chip,
99
+ {
100
+ label: app.businessImpact,
101
+ size: "small",
102
+ variant: "outlined",
103
+ style: {
104
+ borderColor: getBusinessImpactColor(app.businessImpact, theme),
105
+ color: getBusinessImpactColor(app.businessImpact, theme),
106
+ backgroundColor: "transparent",
107
+ fontSize: "0.75rem",
108
+ height: 20,
109
+ fontWeight: 500
110
+ }
111
+ }
112
+ )
113
+ ] }),
114
+ children: applicationElement
115
+ },
116
+ app.id
117
+ );
118
+ };
119
+ const getTooltipContent = () => {
120
+ const remainingApplications = applications.slice(maxVisible);
121
+ return /* @__PURE__ */ jsx(Box, { children: remainingApplications.map((app, index) => /* @__PURE__ */ jsx(
122
+ Box,
123
+ {
124
+ mb: index < remainingApplications.length - 1 ? 1 : 0,
125
+ children: /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", gap: 0.5, children: [
126
+ /* @__PURE__ */ jsx(
127
+ Link,
128
+ {
129
+ href: app.apiiroUrl,
130
+ target: "_blank",
131
+ rel: "noopener noreferrer",
132
+ style: {
133
+ color: "inherit",
134
+ fontSize: "0.875rem",
135
+ fontWeight: 500,
136
+ cursor: "pointer",
137
+ textDecoration: "underline"
138
+ },
139
+ children: app.name
140
+ }
141
+ ),
142
+ /* @__PURE__ */ jsx(
143
+ Chip,
144
+ {
145
+ label: app.businessImpact,
146
+ size: "small",
147
+ variant: "outlined",
148
+ style: {
149
+ borderColor: getBusinessImpactColor(
150
+ app.businessImpact,
151
+ theme
152
+ ),
153
+ color: getBusinessImpactColor(app.businessImpact, theme),
154
+ backgroundColor: "transparent",
155
+ fontSize: "0.75rem",
156
+ height: 20,
157
+ fontWeight: 500
158
+ }
159
+ }
160
+ )
161
+ ] })
162
+ },
163
+ app.id
164
+ )) });
165
+ };
166
+ return /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", flexWrap: "wrap", children: [
167
+ visibleApplications.map((app) => renderApplication(app)),
168
+ remainingCount > 0 && /* @__PURE__ */ jsx(
169
+ CustomTooltip,
170
+ {
171
+ title: getTooltipContent(),
172
+ placement: "top",
173
+ enterDelay: 200,
174
+ leaveDelay: 300,
175
+ disableInteractive: false,
176
+ children: /* @__PURE__ */ jsx(
177
+ Chip,
178
+ {
179
+ label: `+${remainingCount}`,
180
+ size: "small",
181
+ variant: "outlined",
182
+ style: {
183
+ fontSize: "0.75rem",
184
+ height: 20,
185
+ fontWeight: 500,
186
+ cursor: "pointer"
187
+ }
188
+ }
189
+ )
190
+ }
191
+ )
192
+ ] });
193
+ };
194
+
195
+ export { ApplicationsList };
196
+ //# sourceMappingURL=ApplicationsList.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationsList.esm.js","sources":["../../../src/components/ApplicationsList/ApplicationsList.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport Link from '@mui/material/Link';\nimport { useTheme, Theme } from '@mui/material/styles';\nimport { SimpleTooltip } from '../SimpleTooltip';\nimport { CustomTooltip } from '../common/CustomTooltip';\nimport { getBusinessImpactColors } from '../../theme/themeUtils';\n\ninterface Application {\n apiiroUrl: string;\n businessImpact: string;\n id: string;\n name: string;\n}\n\ninterface ApplicationsListProps {\n applications: Application[];\n maxVisible?: number;\n}\n\nconst getBusinessImpactColor = (impact: string, theme: Theme): string => {\n const impactColors = getBusinessImpactColors(theme);\n switch (impact.toLowerCase()) {\n case 'high':\n return impactColors.high;\n case 'medium':\n return impactColors.medium;\n case 'low':\n return impactColors.low;\n default:\n return impactColors.default;\n }\n};\n\nexport const ApplicationsList = ({\n applications,\n maxVisible = 1,\n}: ApplicationsListProps) => {\n const theme = useTheme();\n\n if (!applications || applications.length === 0) {\n return '';\n }\n\n const visibleApplications = applications.slice(0, maxVisible);\n const remainingCount = applications.length - maxVisible;\n\n const renderApplication = (app: Application) => {\n const applicationElement = (\n <Box\n key={app.id}\n display=\"flex\"\n alignItems=\"center\"\n gap={0.5}\n justifyContent=\"center\"\n >\n <Link\n href={app.apiiroUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: 'inherit',\n fontSize: '0.875rem',\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n {app.name}\n </Link>\n <Chip\n label={app.businessImpact}\n size=\"small\"\n variant=\"outlined\"\n style={{\n borderColor: getBusinessImpactColor(app.businessImpact, theme),\n color: getBusinessImpactColor(app.businessImpact, theme),\n backgroundColor: 'transparent',\n fontSize: '0.75rem',\n height: 20,\n fontWeight: 500,\n }}\n />\n </Box>\n );\n\n // Wrap with tooltip showing application details\n return (\n <SimpleTooltip\n key={app.id}\n title={\n <Box display=\"flex\" alignItems=\"center\" gap={0.5}>\n <Link\n href={app.apiiroUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: 'inherit',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n {app.name}\n </Link>\n <Chip\n label={app.businessImpact}\n size=\"small\"\n variant=\"outlined\"\n style={{\n borderColor: getBusinessImpactColor(app.businessImpact, theme),\n color: getBusinessImpactColor(app.businessImpact, theme),\n backgroundColor: 'transparent',\n fontSize: '0.75rem',\n height: 20,\n fontWeight: 500,\n }}\n />\n </Box>\n }\n >\n {applicationElement}\n </SimpleTooltip>\n );\n };\n\n const getTooltipContent = () => {\n const remainingApplications = applications.slice(maxVisible);\n return (\n <Box>\n {remainingApplications.map((app, index) => (\n <Box\n key={app.id}\n mb={index < remainingApplications.length - 1 ? 1 : 0}\n >\n <Box display=\"flex\" alignItems=\"center\" gap={0.5}>\n <Link\n href={app.apiiroUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: 'inherit',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n {app.name}\n </Link>\n <Chip\n label={app.businessImpact}\n size=\"small\"\n variant=\"outlined\"\n style={{\n borderColor: getBusinessImpactColor(\n app.businessImpact,\n theme,\n ),\n color: getBusinessImpactColor(app.businessImpact, theme),\n backgroundColor: 'transparent',\n fontSize: '0.75rem',\n height: 20,\n fontWeight: 500,\n }}\n />\n </Box>\n </Box>\n ))}\n </Box>\n );\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\" flexWrap=\"wrap\">\n {visibleApplications.map(app => renderApplication(app))}\n\n {remainingCount > 0 && (\n <CustomTooltip\n title={getTooltipContent()}\n placement=\"top\"\n enterDelay={200}\n leaveDelay={300}\n disableInteractive={false}\n >\n <Chip\n label={`+${remainingCount}`}\n size=\"small\"\n variant=\"outlined\"\n style={{\n fontSize: '0.75rem',\n height: 20,\n fontWeight: 500,\n cursor: 'pointer',\n }}\n />\n </CustomTooltip>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import 'react-calendar/dist/Calendar.css';
3
+ import { forwardRef, useMemo, useCallback } from 'react';
4
+ import Box from '@mui/material/Box';
5
+ import Typography from '@mui/material/Typography';
6
+ import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
7
+ import ChevronRightIcon from '@mui/icons-material/ChevronRight';
8
+ import { useTheme } from '@mui/material/styles';
9
+ import { CalendarContainer, StyledCalendar, QuickRangeList, QuickRangeItem, QuickRangeText } from './CalendarDatePicker.styles.esm.js';
10
+
11
+ const createDefaultQuickRanges = () => {
12
+ const today = /* @__PURE__ */ new Date();
13
+ const startOfDay = (date) => {
14
+ const copy = new Date(date);
15
+ copy.setHours(0, 0, 0, 0);
16
+ return copy;
17
+ };
18
+ const endOfDay = (date) => {
19
+ const copy = new Date(date);
20
+ copy.setHours(23, 59, 59, 999);
21
+ return copy;
22
+ };
23
+ const subtractDays = (amount) => {
24
+ const date = /* @__PURE__ */ new Date();
25
+ date.setDate(date.getDate() - amount);
26
+ return date;
27
+ };
28
+ return [
29
+ {
30
+ label: "All Dates",
31
+ value: "all",
32
+ getRange: () => [subtractDays(365 * 10), endOfDay(/* @__PURE__ */ new Date())]
33
+ },
34
+ {
35
+ label: "Last 7 days",
36
+ value: "last-7-days",
37
+ getRange: () => [startOfDay(subtractDays(6)), endOfDay(today)]
38
+ },
39
+ {
40
+ label: "Last 14 days",
41
+ value: "last-14-days",
42
+ getRange: () => [startOfDay(subtractDays(13)), endOfDay(today)]
43
+ },
44
+ {
45
+ label: "Last 30 days",
46
+ value: "last-30-days",
47
+ getRange: () => [startOfDay(subtractDays(29)), endOfDay(today)]
48
+ },
49
+ {
50
+ label: "Last 90 days",
51
+ value: "last-90-days",
52
+ getRange: () => [startOfDay(subtractDays(89)), endOfDay(today)]
53
+ },
54
+ {
55
+ label: "Custom",
56
+ value: "custom",
57
+ getRange: () => []
58
+ }
59
+ ];
60
+ };
61
+ const CalendarDatePicker = forwardRef(
62
+ ({
63
+ selectRange = true,
64
+ showQuickRanges = true,
65
+ quickRanges,
66
+ selectedQuickRange,
67
+ onQuickRangeSelect,
68
+ value,
69
+ onChange,
70
+ ...props
71
+ }, ref) => {
72
+ const theme = useTheme();
73
+ const computedQuickRanges = useMemo(
74
+ () => quickRanges ?? createDefaultQuickRanges(),
75
+ [quickRanges]
76
+ );
77
+ const formatShortWeekday = useCallback(
78
+ (locale, date) => date.toLocaleDateString(locale || "en-US", { weekday: "short" }).slice(0, 1),
79
+ []
80
+ );
81
+ const handleCalendarChange = useCallback(
82
+ (calendarValue) => {
83
+ if (onChange) {
84
+ onChange(calendarValue);
85
+ }
86
+ },
87
+ [onChange]
88
+ );
89
+ const handleQuickRangeSelect = (range) => {
90
+ if (onQuickRangeSelect) {
91
+ onQuickRangeSelect(range);
92
+ }
93
+ const nextValue = range.getRange();
94
+ if (nextValue && onChange) {
95
+ onChange(nextValue);
96
+ }
97
+ };
98
+ return /* @__PURE__ */ jsxs(CalendarContainer, { ref, children: [
99
+ /* @__PURE__ */ jsx(
100
+ StyledCalendar,
101
+ {
102
+ value,
103
+ onChange: handleCalendarChange,
104
+ selectRange,
105
+ formatShortWeekday,
106
+ prev2Label: null,
107
+ next2Label: null,
108
+ prevLabel: /* @__PURE__ */ jsx(ChevronLeftIcon, {}),
109
+ nextLabel: /* @__PURE__ */ jsx(ChevronRightIcon, {}),
110
+ minDetail: "decade",
111
+ ...props
112
+ }
113
+ ),
114
+ showQuickRanges && /* @__PURE__ */ jsxs(
115
+ Box,
116
+ {
117
+ sx: {
118
+ display: "flex",
119
+ flexDirection: "column",
120
+ gap: 1,
121
+ backgroundColor: theme.palette.background.paper
122
+ },
123
+ children: [
124
+ /* @__PURE__ */ jsx(
125
+ Typography,
126
+ {
127
+ variant: "subtitle2",
128
+ sx: {
129
+ color: theme.palette.text.secondary,
130
+ fontWeight: 600,
131
+ mb: 0.5
132
+ },
133
+ children: "Presets"
134
+ }
135
+ ),
136
+ /* @__PURE__ */ jsx(QuickRangeList, { children: computedQuickRanges.map((range) => /* @__PURE__ */ jsx(
137
+ QuickRangeItem,
138
+ {
139
+ $selected: selectedQuickRange === range.value,
140
+ onClick: () => handleQuickRangeSelect(range),
141
+ children: /* @__PURE__ */ jsx(QuickRangeText, { primary: range.label })
142
+ },
143
+ range.value
144
+ )) })
145
+ ]
146
+ }
147
+ )
148
+ ] });
149
+ }
150
+ );
151
+ CalendarDatePicker.displayName = "CalendarDatePicker";
152
+
153
+ export { CalendarDatePicker, createDefaultQuickRanges };
154
+ //# sourceMappingURL=CalendarDatePicker.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarDatePicker.esm.js","sources":["../../src/components/CalendarDatePicker.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport 'react-calendar/dist/Calendar.css';\n\nimport { forwardRef, useCallback, useMemo } from 'react';\nimport { CalendarProps } from 'react-calendar';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { useTheme } from '@mui/material/styles';\nimport {\n CalendarContainer,\n StyledCalendar,\n QuickRangeList,\n QuickRangeItem,\n QuickRangeText,\n} from './CalendarDatePicker.styles';\nimport { LooseValue } from 'react-calendar/dist/cjs/shared/types';\n\ntype Value = Date | Date[] | null;\n\nexport type CalendarDateValue = Date | [Date, Date] | [];\n\nexport type CalendarQuickRange = {\n label: string;\n value: string;\n getRange: () => CalendarDateValue | null;\n};\n\ntype CalendarDatePickerProps = {\n value?: CalendarDateValue;\n onChange?: (date: CalendarDateValue) => void;\n quickRanges?: CalendarQuickRange[];\n selectedQuickRange?: string;\n onQuickRangeSelect?: (quickRange: CalendarQuickRange) => void;\n showQuickRanges?: boolean;\n tileStyle?: (args: {\n date: Date;\n view: string;\n }) => globalThis.React.CSSProperties;\n} & Pick<\n CalendarProps,\n | 'activeStartDate'\n | 'minDate'\n | 'maxDate'\n | 'tileClassName'\n | 'tileContent'\n | 'tileDisabled'\n | 'selectRange'\n | 'onActiveStartDateChange'\n>;\n\nexport const createDefaultQuickRanges = (): CalendarQuickRange[] => {\n const today = new Date();\n\n const startOfDay = (date: Date) => {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n };\n\n const endOfDay = (date: Date) => {\n const copy = new Date(date);\n copy.setHours(23, 59, 59, 999);\n return copy;\n };\n\n const subtractDays = (amount: number) => {\n const date = new Date();\n date.setDate(date.getDate() - amount);\n return date;\n };\n\n return [\n {\n label: 'All Dates',\n value: 'all',\n getRange: () => [subtractDays(365 * 10), endOfDay(new Date())],\n },\n {\n label: 'Last 7 days',\n value: 'last-7-days',\n getRange: () => [startOfDay(subtractDays(6)), endOfDay(today)],\n },\n {\n label: 'Last 14 days',\n value: 'last-14-days',\n getRange: () => [startOfDay(subtractDays(13)), endOfDay(today)],\n },\n {\n label: 'Last 30 days',\n value: 'last-30-days',\n getRange: () => [startOfDay(subtractDays(29)), endOfDay(today)],\n },\n {\n label: 'Last 90 days',\n value: 'last-90-days',\n getRange: () => [startOfDay(subtractDays(89)), endOfDay(today)],\n },\n {\n label: 'Custom',\n value: 'custom',\n getRange: () => [],\n },\n ];\n};\n\nexport const CalendarDatePicker = forwardRef<\n HTMLDivElement,\n CalendarDatePickerProps\n>(\n (\n {\n selectRange = true,\n showQuickRanges = true,\n quickRanges,\n selectedQuickRange,\n onQuickRangeSelect,\n value,\n onChange,\n ...props\n },\n ref,\n ) => {\n const theme = useTheme();\n\n const computedQuickRanges = useMemo(\n () => quickRanges ?? createDefaultQuickRanges(),\n [quickRanges],\n );\n\n const formatShortWeekday = useCallback(\n (locale: string | undefined, date: Date) =>\n date\n .toLocaleDateString(locale || 'en-US', { weekday: 'short' })\n .slice(0, 1),\n [],\n );\n\n const handleCalendarChange = useCallback(\n (calendarValue: Value) => {\n if (onChange) {\n onChange(calendarValue as CalendarDateValue);\n }\n },\n [onChange],\n );\n\n const handleQuickRangeSelect = (range: CalendarQuickRange) => {\n if (onQuickRangeSelect) {\n onQuickRangeSelect(range);\n }\n const nextValue = range.getRange();\n if (nextValue && onChange) {\n onChange(nextValue);\n }\n };\n\n return (\n <CalendarContainer ref={ref}>\n <StyledCalendar\n value={value as LooseValue}\n onChange={handleCalendarChange as any}\n selectRange={selectRange}\n formatShortWeekday={formatShortWeekday}\n prev2Label={null}\n next2Label={null}\n prevLabel={<ChevronLeftIcon />}\n nextLabel={<ChevronRightIcon />}\n minDetail=\"decade\"\n {...props}\n />\n {showQuickRanges && (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n backgroundColor: theme.palette.background.paper,\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n color: theme.palette.text.secondary,\n fontWeight: 600,\n mb: 0.5,\n }}\n >\n Presets\n </Typography>\n <QuickRangeList>\n {computedQuickRanges.map(range => (\n <QuickRangeItem\n key={range.value}\n $selected={selectedQuickRange === range.value}\n onClick={() => handleQuickRangeSelect(range)}\n >\n <QuickRangeText primary={range.label} />\n </QuickRangeItem>\n ))}\n </QuickRangeList>\n </Box>\n )}\n </CalendarContainer>\n );\n },\n);\n\nCalendarDatePicker.displayName = 'CalendarDatePicker';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import Calendar from 'react-calendar';
2
+ import List from '@mui/material/List';
3
+ import ListItemButton from '@mui/material/ListItemButton';
4
+ import ListItemText from '@mui/material/ListItemText';
5
+ import { styled, alpha } from '@mui/material/styles';
6
+
7
+ const CalendarContainer = styled("div")(({ theme }) => {
8
+ const isDark = theme.palette.mode === "dark";
9
+ const surface = theme.palette.background.paper;
10
+ const borderColor = isDark ? alpha(theme.palette.common.white, 0.08) : alpha(theme.palette.primary.main, 0.12);
11
+ const shadow = isDark ? "0 24px 48px rgba(8, 12, 41, 0.5)" : "0 24px 48px rgba(38, 54, 140, 0.16)";
12
+ return {
13
+ display: "flex",
14
+ alignItems: "stretch",
15
+ gap: theme.spacing(2),
16
+ padding: theme.spacing(2.5),
17
+ borderRadius: theme.spacing(3),
18
+ backgroundColor: surface,
19
+ border: `1px solid ${borderColor}`,
20
+ boxShadow: shadow,
21
+ width: "fit-content",
22
+ maxWidth: "100%"
23
+ };
24
+ });
25
+ const StyledCalendar = styled(Calendar)(({ theme }) => {
26
+ const primary = theme.palette.primary.main;
27
+ const primarySoft = alpha(
28
+ primary,
29
+ theme.palette.mode === "dark" ? 0.28 : 0.16
30
+ );
31
+ const rangeSoft = alpha(primary, theme.palette.mode === "dark" ? 0.24 : 0.12);
32
+ const hoverSoft = alpha(primary, theme.palette.mode === "dark" ? 0.32 : 0.18);
33
+ return {
34
+ "&.react-calendar": {
35
+ border: "none",
36
+ width: 280,
37
+ backgroundColor: "transparent"
38
+ },
39
+ "& .react-calendar__navigation": {
40
+ display: "flex",
41
+ alignItems: "center",
42
+ justifyContent: "space-between",
43
+ marginBottom: theme.spacing(2.5),
44
+ button: {
45
+ minWidth: theme.spacing(4.5),
46
+ minHeight: theme.spacing(4.5),
47
+ borderRadius: theme.spacing(2.5),
48
+ border: "none",
49
+ backgroundColor: "transparent",
50
+ color: theme.palette.text.secondary,
51
+ fontWeight: 600,
52
+ display: "flex",
53
+ alignItems: "center",
54
+ justifyContent: "center",
55
+ "&:hover:not(:disabled)": {
56
+ backgroundColor: hoverSoft,
57
+ color: primary
58
+ },
59
+ "&:disabled": {
60
+ opacity: 0.4,
61
+ cursor: "not-allowed"
62
+ }
63
+ },
64
+ ".react-calendar__navigation__label": {
65
+ fontWeight: 700,
66
+ fontSize: 18,
67
+ color: theme.palette.text.primary
68
+ }
69
+ },
70
+ "& .react-calendar__month-view__weekdays": {
71
+ textTransform: "uppercase",
72
+ fontSize: 12,
73
+ fontWeight: 600,
74
+ letterSpacing: 0.4,
75
+ color: alpha(theme.palette.text.secondary, 0.8),
76
+ abbr: {
77
+ textDecoration: "none"
78
+ }
79
+ },
80
+ "& .react-calendar__tile": {
81
+ height: 40,
82
+ borderRadius: theme.spacing(3),
83
+ padding: 0,
84
+ fontWeight: 500,
85
+ color: theme.palette.text.primary,
86
+ transition: "all 0.2s ease",
87
+ position: "relative",
88
+ overflow: "hidden",
89
+ "> abbr": {
90
+ display: "flex",
91
+ alignItems: "center",
92
+ justifyContent: "center",
93
+ width: "100%",
94
+ height: "100%",
95
+ borderRadius: "inherit"
96
+ },
97
+ "&:hover:not(:disabled)": {
98
+ backgroundColor: hoverSoft,
99
+ color: primary
100
+ },
101
+ "&:disabled": {
102
+ color: alpha(theme.palette.text.disabled, 0.7),
103
+ backgroundColor: "transparent"
104
+ }
105
+ },
106
+ "& .react-calendar__tile--now": {
107
+ border: `1px solid ${alpha(primary, 0.5)}`,
108
+ borderRadius: theme.spacing(3),
109
+ backgroundColor: "inherit"
110
+ },
111
+ "& .react-calendar__tile--active": {
112
+ backgroundColor: primarySoft,
113
+ color: primary
114
+ },
115
+ "& .react-calendar__month-view .react-calendar__tile--range": {
116
+ backgroundColor: rangeSoft,
117
+ color: primary,
118
+ borderRadius: 0
119
+ },
120
+ "& .react-calendar__month-view .react-calendar__tile--rangeStart": {
121
+ backgroundColor: rangeSoft,
122
+ color: primary,
123
+ borderRadius: `${theme.spacing(3)} 0 0 ${theme.spacing(3)}`,
124
+ "> abbr": {
125
+ backgroundColor: primary,
126
+ color: theme.palette.primary.contrastText,
127
+ borderRadius: "50%",
128
+ width: 32,
129
+ height: 32,
130
+ margin: "auto"
131
+ }
132
+ },
133
+ "& .react-calendar__month-view .react-calendar__tile--rangeEnd": {
134
+ backgroundColor: rangeSoft,
135
+ color: primary,
136
+ borderRadius: `0 ${theme.spacing(3)} ${theme.spacing(3)} 0`,
137
+ "> abbr": {
138
+ backgroundColor: primary,
139
+ color: theme.palette.primary.contrastText,
140
+ borderRadius: "50%",
141
+ width: 32,
142
+ height: 32,
143
+ margin: "auto"
144
+ }
145
+ },
146
+ "& .react-calendar__month-view__days__day--neighboringMonth": {
147
+ color: alpha(theme.palette.text.disabled, 0.8)
148
+ },
149
+ "& .react-calendar__year-view .react-calendar__tile, & .react-calendar__decade-view .react-calendar__tile, & .react-calendar__century-view .react-calendar__tile": {
150
+ height: 64
151
+ }
152
+ };
153
+ });
154
+ const QuickRangeList = styled(List)(({ theme }) => ({
155
+ width: 160,
156
+ padding: 0,
157
+ margin: 0,
158
+ display: "flex",
159
+ flexDirection: "column",
160
+ gap: theme.spacing(1)
161
+ }));
162
+ const QuickRangeItem = styled(ListItemButton)(
163
+ ({ theme, $selected }) => {
164
+ const primary = theme.palette.primary.main;
165
+ const isDark = theme.palette.mode === "dark";
166
+ const inactiveBackground = isDark ? alpha(primary, 0.16) : alpha(primary, 0.06);
167
+ const hoverBackground = isDark ? alpha(primary, 0.28) : alpha(primary, 0.12);
168
+ return {
169
+ borderRadius: theme.spacing(2),
170
+ justifyContent: "flex-start",
171
+ alignItems: "center",
172
+ padding: theme.spacing(1, 1.75),
173
+ minHeight: 44,
174
+ border: `1px solid ${$selected ? alpha(primary, 0.48) : alpha(primary, 0.16)}`,
175
+ backgroundColor: $selected ? primary : inactiveBackground,
176
+ color: $selected ? theme.palette.primary.contrastText : theme.palette.text.secondary,
177
+ fontWeight: $selected ? 700 : 500,
178
+ transition: "all 0.2s ease",
179
+ "&:hover": {
180
+ backgroundColor: $selected ? primary : hoverBackground,
181
+ color: $selected ? theme.palette.primary.contrastText : primary
182
+ }
183
+ };
184
+ }
185
+ );
186
+ const QuickRangeText = styled(ListItemText)(({ theme }) => ({
187
+ ".MuiListItemText-primary": {
188
+ fontSize: 14,
189
+ fontWeight: 600
190
+ },
191
+ ".MuiListItemText-secondary": {
192
+ fontSize: 12,
193
+ color: theme.palette.text.secondary
194
+ }
195
+ }));
196
+
197
+ export { CalendarContainer, QuickRangeItem, QuickRangeList, QuickRangeText, StyledCalendar };
198
+ //# sourceMappingURL=CalendarDatePicker.styles.esm.js.map