@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.
- package/CHANGELOG.md +12 -0
- package/README.md +232 -0
- package/config.d.ts +30 -0
- package/dist/App.esm.js +12 -0
- package/dist/App.esm.js.map +1 -0
- package/dist/api/index.esm.js +71 -0
- package/dist/api/index.esm.js.map +1 -0
- package/dist/assets/BulleyeIcon.esm.js +454 -0
- package/dist/assets/BulleyeIcon.esm.js.map +1 -0
- package/dist/assets/NoResultIcon.esm.js +146 -0
- package/dist/assets/NoResultIcon.esm.js.map +1 -0
- package/dist/assets/RiskIcon.esm.js +27 -0
- package/dist/assets/RiskIcon.esm.js.map +1 -0
- package/dist/assets/SettingIcon.esm.js +49 -0
- package/dist/assets/SettingIcon.esm.js.map +1 -0
- package/dist/assets/apiiroLogo/apiiroLogo.esm.js +21 -0
- package/dist/assets/apiiroLogo/apiiroLogo.esm.js.map +1 -0
- package/dist/assets/apiiroLogo/apiiroSidebar.esm.js +23 -0
- package/dist/assets/apiiroLogo/apiiroSidebar.esm.js.map +1 -0
- package/dist/assets/apiiroLogo/apiiroSmall.esm.js +19 -0
- package/dist/assets/apiiroLogo/apiiroSmall.esm.js.map +1 -0
- package/dist/assets/languageIcons/C.esm.js +7 -0
- package/dist/assets/languageIcons/C.esm.js.map +1 -0
- package/dist/assets/languageIcons/Cicd.esm.js +7 -0
- package/dist/assets/languageIcons/Cicd.esm.js.map +1 -0
- package/dist/assets/languageIcons/Clojure.esm.js +7 -0
- package/dist/assets/languageIcons/Clojure.esm.js.map +1 -0
- package/dist/assets/languageIcons/Cpp.esm.js +7 -0
- package/dist/assets/languageIcons/Cpp.esm.js.map +1 -0
- package/dist/assets/languageIcons/Csharp.esm.js +7 -0
- package/dist/assets/languageIcons/Csharp.esm.js.map +1 -0
- package/dist/assets/languageIcons/Dart.esm.js +7 -0
- package/dist/assets/languageIcons/Dart.esm.js.map +1 -0
- package/dist/assets/languageIcons/Go.esm.js +7 -0
- package/dist/assets/languageIcons/Go.esm.js.map +1 -0
- package/dist/assets/languageIcons/Groovy.esm.js +7 -0
- package/dist/assets/languageIcons/Groovy.esm.js.map +1 -0
- package/dist/assets/languageIcons/HTML.esm.js +7 -0
- package/dist/assets/languageIcons/HTML.esm.js.map +1 -0
- package/dist/assets/languageIcons/HclLanguage.esm.js +7 -0
- package/dist/assets/languageIcons/HclLanguage.esm.js.map +1 -0
- package/dist/assets/languageIcons/Java.esm.js +7 -0
- package/dist/assets/languageIcons/Java.esm.js.map +1 -0
- package/dist/assets/languageIcons/Javascript.esm.js +7 -0
- package/dist/assets/languageIcons/Javascript.esm.js.map +1 -0
- package/dist/assets/languageIcons/Kotlin.esm.js +7 -0
- package/dist/assets/languageIcons/Kotlin.esm.js.map +1 -0
- package/dist/assets/languageIcons/ObjectiveC.esm.js +7 -0
- package/dist/assets/languageIcons/ObjectiveC.esm.js.map +1 -0
- package/dist/assets/languageIcons/PHP.esm.js +7 -0
- package/dist/assets/languageIcons/PHP.esm.js.map +1 -0
- package/dist/assets/languageIcons/Perl.esm.js +13 -0
- package/dist/assets/languageIcons/Perl.esm.js.map +1 -0
- package/dist/assets/languageIcons/Python.esm.js +7 -0
- package/dist/assets/languageIcons/Python.esm.js.map +1 -0
- package/dist/assets/languageIcons/Ruby.esm.js +7 -0
- package/dist/assets/languageIcons/Ruby.esm.js.map +1 -0
- package/dist/assets/languageIcons/Rust.esm.js +7 -0
- package/dist/assets/languageIcons/Rust.esm.js.map +1 -0
- package/dist/assets/languageIcons/Scala.esm.js +7 -0
- package/dist/assets/languageIcons/Scala.esm.js.map +1 -0
- package/dist/assets/languageIcons/Swift.esm.js +7 -0
- package/dist/assets/languageIcons/Swift.esm.js.map +1 -0
- package/dist/assets/languageIcons/Terraform.esm.js +7 -0
- package/dist/assets/languageIcons/Terraform.esm.js.map +1 -0
- package/dist/assets/languageIcons/Typescript.esm.js +7 -0
- package/dist/assets/languageIcons/Typescript.esm.js.map +1 -0
- package/dist/assets/languageIcons/Unknown.esm.js +7 -0
- package/dist/assets/languageIcons/Unknown.esm.js.map +1 -0
- package/dist/assets/languageIcons/VB.esm.js +10 -0
- package/dist/assets/languageIcons/VB.esm.js.map +1 -0
- package/dist/assets/languageIcons/YAML.esm.js +7 -0
- package/dist/assets/languageIcons/YAML.esm.js.map +1 -0
- package/dist/assets/providerIcons/Azure.esm.js +7 -0
- package/dist/assets/providerIcons/Azure.esm.js.map +1 -0
- package/dist/assets/providerIcons/Bitbucket.esm.js +7 -0
- package/dist/assets/providerIcons/Bitbucket.esm.js.map +1 -0
- package/dist/assets/providerIcons/Gitlab.esm.js +7 -0
- package/dist/assets/providerIcons/Gitlab.esm.js.map +1 -0
- package/dist/components/ApiiroSidebar.esm.js +10 -0
- package/dist/components/ApiiroSidebar.esm.js.map +1 -0
- package/dist/components/ApplicationsList/ApplicationsList.esm.js +196 -0
- package/dist/components/ApplicationsList/ApplicationsList.esm.js.map +1 -0
- package/dist/components/CalendarDatePicker.esm.js +154 -0
- package/dist/components/CalendarDatePicker.esm.js.map +1 -0
- package/dist/components/CalendarDatePicker.styles.esm.js +198 -0
- package/dist/components/CalendarDatePicker.styles.esm.js.map +1 -0
- package/dist/components/Chip.esm.js +60 -0
- package/dist/components/Chip.esm.js.map +1 -0
- package/dist/components/ChipsList.esm.js +207 -0
- package/dist/components/ChipsList.esm.js.map +1 -0
- package/dist/components/ComponentDisplay.esm.js +42 -0
- package/dist/components/ComponentDisplay.esm.js.map +1 -0
- package/dist/components/DataGrid/CustomColumnMenu.esm.js +29 -0
- package/dist/components/DataGrid/CustomColumnMenu.esm.js.map +1 -0
- package/dist/components/DataGrid/CustomPagination.esm.js +113 -0
- package/dist/components/DataGrid/CustomPagination.esm.js.map +1 -0
- package/dist/components/DataGrid/CustomSearchToolbar.esm.js +117 -0
- package/dist/components/DataGrid/CustomSearchToolbar.esm.js.map +1 -0
- package/dist/components/DataGrid/DataGrid.esm.js +336 -0
- package/dist/components/DataGrid/DataGrid.esm.js.map +1 -0
- package/dist/components/DataGrid/PinColumnMenuItem.esm.js +24 -0
- package/dist/components/DataGrid/PinColumnMenuItem.esm.js.map +1 -0
- package/dist/components/DueDate.esm.js +34 -0
- package/dist/components/DueDate.esm.js.map +1 -0
- package/dist/components/Header.esm.js +27 -0
- package/dist/components/Header.esm.js.map +1 -0
- package/dist/components/MainContributors/MainContributors.esm.js +62 -0
- package/dist/components/MainContributors/MainContributors.esm.js.map +1 -0
- package/dist/components/MetricsGroup/TabMetricsGroup.esm.js +37 -0
- package/dist/components/MetricsGroup/TabMetricsGroup.esm.js.map +1 -0
- package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js +36 -0
- package/dist/components/MetricsGroup/WidgetMetricsGroup.esm.js.map +1 -0
- package/dist/components/RepositoryDisplay/RepositoryDisplay.esm.js +121 -0
- package/dist/components/RepositoryDisplay/RepositoryDisplay.esm.js.map +1 -0
- package/dist/components/RiskLevel.esm.js +88 -0
- package/dist/components/RiskLevel.esm.js.map +1 -0
- package/dist/components/RiskStatus.esm.js +58 -0
- package/dist/components/RiskStatus.esm.js.map +1 -0
- package/dist/components/SimpleTooltip.esm.js +24 -0
- package/dist/components/SimpleTooltip.esm.js.map +1 -0
- package/dist/components/SourcesDisplay.esm.js +47 -0
- package/dist/components/SourcesDisplay.esm.js.map +1 -0
- package/dist/components/TagsList/TagsList.esm.js +38 -0
- package/dist/components/TagsList/TagsList.esm.js.map +1 -0
- package/dist/components/TeamsDisplay.esm.js +47 -0
- package/dist/components/TeamsDisplay.esm.js.map +1 -0
- package/dist/components/charts/ColumnChart.esm.js +402 -0
- package/dist/components/charts/ColumnChart.esm.js.map +1 -0
- package/dist/components/charts/GaugeChart.esm.js +249 -0
- package/dist/components/charts/GaugeChart.esm.js.map +1 -0
- package/dist/components/charts/LineChart.esm.js +328 -0
- package/dist/components/charts/LineChart.esm.js.map +1 -0
- package/dist/components/charts/PieChart.esm.js +233 -0
- package/dist/components/charts/PieChart.esm.js.map +1 -0
- package/dist/components/common/ChartBox.esm.js +88 -0
- package/dist/components/common/ChartBox.esm.js.map +1 -0
- package/dist/components/common/CustomTooltip.esm.js +255 -0
- package/dist/components/common/CustomTooltip.esm.js.map +1 -0
- package/dist/components/common/ErrorSnackbar.esm.js +39 -0
- package/dist/components/common/ErrorSnackbar.esm.js.map +1 -0
- package/dist/components/common/NotFound.esm.js +30 -0
- package/dist/components/common/NotFound.esm.js.map +1 -0
- package/dist/components/common/SomethingWentWrong.esm.js +35 -0
- package/dist/components/common/SomethingWentWrong.esm.js.map +1 -0
- package/dist/components/common/languageIcons.esm.js +61 -0
- package/dist/components/common/languageIcons.esm.js.map +1 -0
- package/dist/components/common/logoSpinner.esm.js +28 -0
- package/dist/components/common/logoSpinner.esm.js.map +1 -0
- package/dist/components/common/scmProviders.esm.js +41 -0
- package/dist/components/common/scmProviders.esm.js.map +1 -0
- package/dist/components/filters/DiscoveredOnFilter.esm.js +284 -0
- package/dist/components/filters/DiscoveredOnFilter.esm.js.map +1 -0
- package/dist/components/filters/FilterDropdown.esm.js +325 -0
- package/dist/components/filters/FilterDropdown.esm.js.map +1 -0
- package/dist/components/filters/FilterDropdownClear.esm.js +45 -0
- package/dist/components/filters/FilterDropdownClear.esm.js.map +1 -0
- package/dist/components/filters/FilterDropdownList.esm.js +102 -0
- package/dist/components/filters/FilterDropdownList.esm.js.map +1 -0
- package/dist/components/filters/FilterDropdownSearch.esm.js +65 -0
- package/dist/components/filters/FilterDropdownSearch.esm.js.map +1 -0
- package/dist/components/filters/RiskInsightFilter.esm.js +579 -0
- package/dist/components/filters/RiskInsightFilter.esm.js.map +1 -0
- package/dist/components/tiles/MttrVsSLATile.esm.js +170 -0
- package/dist/components/tiles/MttrVsSLATile.esm.js.map +1 -0
- package/dist/components/tiles/RiskOverTimeTile.esm.js +311 -0
- package/dist/components/tiles/RiskOverTimeTile.esm.js.map +1 -0
- package/dist/components/tiles/SLAAdherenceTile.esm.js +115 -0
- package/dist/components/tiles/SLAAdherenceTile.esm.js.map +1 -0
- package/dist/components/tiles/StatusTile.esm.js +235 -0
- package/dist/components/tiles/StatusTile.esm.js.map +1 -0
- package/dist/components/tiles/TopLanguagesTile.esm.js +234 -0
- package/dist/components/tiles/TopLanguagesTile.esm.js.map +1 -0
- package/dist/components/tiles/TopRiskTile.esm.js +208 -0
- package/dist/components/tiles/TopRiskTile.esm.js.map +1 -0
- package/dist/hooks/useUrlFilters.esm.js +102 -0
- package/dist/hooks/useUrlFilters.esm.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.esm.js +42 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/pages/Repositories/Repositories.esm.js +102 -0
- package/dist/pages/Repositories/Repositories.esm.js.map +1 -0
- package/dist/pages/Repositories/tableConfig.esm.js +294 -0
- package/dist/pages/Repositories/tableConfig.esm.js.map +1 -0
- package/dist/pages/Risks/Risks.esm.js +258 -0
- package/dist/pages/Risks/Risks.esm.js.map +1 -0
- package/dist/pages/Risks/tableConfig.esm.js +305 -0
- package/dist/pages/Risks/tableConfig.esm.js.map +1 -0
- package/dist/pages/tab/Tab.esm.js +147 -0
- package/dist/pages/tab/Tab.esm.js.map +1 -0
- package/dist/pages/tab/TabProvider.esm.js +11 -0
- package/dist/pages/tab/TabProvider.esm.js.map +1 -0
- package/dist/pages/widget/Widget.esm.js +161 -0
- package/dist/pages/widget/Widget.esm.js.map +1 -0
- package/dist/pages/widget/WidgetProvider.esm.js +12 -0
- package/dist/pages/widget/WidgetProvider.esm.js.map +1 -0
- package/dist/plugin.esm.js +30 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/queries/filterOptions.queries.esm.js +46 -0
- package/dist/queries/filterOptions.queries.esm.js.map +1 -0
- package/dist/queries/mttr-statistics.queries.esm.js +61 -0
- package/dist/queries/mttr-statistics.queries.esm.js.map +1 -0
- package/dist/queries/repository.queries.esm.js +60 -0
- package/dist/queries/repository.queries.esm.js.map +1 -0
- package/dist/queries/risk-score-over-time.queries.esm.js +61 -0
- package/dist/queries/risk-score-over-time.queries.esm.js.map +1 -0
- package/dist/queries/risks.queries.esm.js +65 -0
- package/dist/queries/risks.queries.esm.js.map +1 -0
- package/dist/queries/sla-breach.queries.esm.js +57 -0
- package/dist/queries/sla-breach.queries.esm.js.map +1 -0
- package/dist/queries/top-risks.queries.esm.js +47 -0
- package/dist/queries/top-risks.queries.esm.js.map +1 -0
- package/dist/routes.esm.js +8 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/theme/themeUtils.esm.js +290 -0
- package/dist/theme/themeUtils.esm.js.map +1 -0
- package/dist/utils/dateFormatter.esm.js +67 -0
- package/dist/utils/dateFormatter.esm.js.map +1 -0
- package/dist/utils/numberFormatter.esm.js +21 -0
- package/dist/utils/numberFormatter.esm.js.map +1 -0
- package/dist/utils/utils.esm.js +27 -0
- package/dist/utils/utils.esm.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomTooltip.esm.js","sources":["../../../src/components/common/CustomTooltip.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 { useState, ReactNode, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '@mui/material/styles';\n\ninterface CustomTooltipProps {\n title: string | ReactNode;\n children: ReactNode;\n placement?: 'top' | 'bottom' | 'left' | 'right';\n enterDelay?: number;\n leaveDelay?: number;\n disableInteractive?: boolean;\n centered?: boolean;\n}\n\nexport const CustomTooltip = ({\n title,\n children,\n placement = 'top',\n enterDelay = 0,\n leaveDelay = 0,\n disableInteractive = true,\n centered = false,\n}: CustomTooltipProps) => {\n const theme = useTheme();\n const [showTooltip, setShowTooltip] = useState(false);\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });\n const [arrowOffset, setArrowOffset] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLDivElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const enterTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const leaveTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const calculateTooltipPosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft =\n window.pageXOffset || document.documentElement.scrollLeft;\n\n let idealTop = 0;\n let idealLeft = 0;\n\n // Calculate ideal position\n switch (placement) {\n case 'top':\n idealTop = triggerRect.top + scrollTop - tooltipRect.height - 8;\n idealLeft =\n triggerRect.left +\n scrollLeft +\n triggerRect.width / 2 -\n tooltipRect.width / 2;\n break;\n case 'bottom':\n idealTop = triggerRect.bottom + scrollTop + 8;\n idealLeft =\n triggerRect.left +\n scrollLeft +\n triggerRect.width / 2 -\n tooltipRect.width / 2;\n break;\n case 'left':\n idealTop =\n triggerRect.top +\n scrollTop +\n triggerRect.height / 2 -\n tooltipRect.height / 2;\n idealLeft = triggerRect.left + scrollLeft - tooltipRect.width - 8;\n break;\n case 'right':\n idealTop =\n triggerRect.top +\n scrollTop +\n triggerRect.height / 2 -\n tooltipRect.height / 2;\n idealLeft = triggerRect.right + scrollLeft + 8;\n break;\n default:\n idealTop = triggerRect.top + scrollTop - tooltipRect.height - 8;\n idealLeft =\n triggerRect.left +\n scrollLeft +\n triggerRect.width / 2 -\n tooltipRect.width / 2;\n }\n\n let finalLeft = idealLeft;\n let finalTop = idealTop;\n\n // Adjust for viewport boundaries\n const margin = 8;\n if (finalLeft < scrollLeft + margin) {\n finalLeft = scrollLeft + margin;\n }\n if (\n finalLeft + tooltipRect.width >\n scrollLeft + window.innerWidth - margin\n ) {\n finalLeft = scrollLeft + window.innerWidth - tooltipRect.width - margin;\n }\n if (finalTop < scrollTop + margin) {\n finalTop = scrollTop + margin;\n }\n if (\n finalTop + tooltipRect.height >\n scrollTop + window.innerHeight - margin\n ) {\n finalTop = scrollTop + window.innerHeight - tooltipRect.height - margin;\n }\n\n setArrowOffset({ top: idealTop - finalTop, left: idealLeft - finalLeft });\n setTooltipPosition({ top: finalTop, left: finalLeft });\n setIsTooltipVisible(true); // Make it visible after position is set\n }, [placement]);\n\n const handleMouseEnter = () => {\n if (leaveTimeoutRef.current) {\n clearTimeout(leaveTimeoutRef.current);\n leaveTimeoutRef.current = null;\n }\n\n if (enterDelay > 0) {\n enterTimeoutRef.current = setTimeout(() => {\n setShowTooltip(true);\n }, enterDelay);\n } else {\n setShowTooltip(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (enterTimeoutRef.current) {\n clearTimeout(enterTimeoutRef.current);\n enterTimeoutRef.current = null;\n }\n\n if (leaveDelay > 0) {\n leaveTimeoutRef.current = setTimeout(() => {\n setShowTooltip(false);\n setIsTooltipVisible(false);\n setArrowOffset({ top: 0, left: 0 });\n }, leaveDelay);\n } else {\n setShowTooltip(false);\n setIsTooltipVisible(false);\n setArrowOffset({ top: 0, left: 0 });\n }\n };\n\n const handleTooltipMouseEnter = () => {\n if (!disableInteractive && leaveTimeoutRef.current) {\n clearTimeout(leaveTimeoutRef.current);\n leaveTimeoutRef.current = null;\n }\n };\n\n const handleTooltipMouseLeave = () => {\n if (!disableInteractive) {\n handleMouseLeave();\n }\n };\n\n useEffect(() => {\n if (showTooltip) {\n // Position is calculated after the tooltip is rendered but before it's visible\n calculateTooltipPosition();\n }\n }, [showTooltip, calculateTooltipPosition]);\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n if (enterTimeoutRef.current) {\n clearTimeout(enterTimeoutRef.current);\n }\n if (leaveTimeoutRef.current) {\n clearTimeout(leaveTimeoutRef.current);\n }\n };\n }, []);\n\n const getArrowStyle = () => {\n // Get theme-aware arrow color\n const arrowColor =\n theme.palette.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.common.white;\n\n const baseArrow = {\n position: 'absolute' as const,\n width: 0,\n height: 0,\n };\n\n switch (placement) {\n case 'top':\n return {\n ...baseArrow,\n top: '100%',\n left: `calc(50% + ${arrowOffset.left}px)`,\n transform: 'translateX(-50%)',\n borderLeft: '6px solid transparent',\n borderRight: '6px solid transparent',\n borderTop: `6px solid ${arrowColor}`,\n filter:\n theme.palette.mode === 'dark'\n ? 'drop-shadow(0 2px 4px rgba(0,0,0,0.3))'\n : 'drop-shadow(0 2px 4px rgba(0,0,0,0.1))',\n };\n case 'bottom':\n return {\n ...baseArrow,\n bottom: '100%',\n left: `calc(50% + ${arrowOffset.left}px)`,\n transform: 'translateX(-50%)',\n borderLeft: '6px solid transparent',\n borderRight: '6px solid transparent',\n borderBottom: `6px solid ${arrowColor}`,\n filter:\n theme.palette.mode === 'dark'\n ? 'drop-shadow(0 -2px 4px rgba(0,0,0,0.3))'\n : 'drop-shadow(0 -2px 4px rgba(0,0,0,0.1))',\n };\n case 'left':\n return {\n ...baseArrow,\n left: '100%',\n top: `calc(50% - ${arrowOffset.top}px)`,\n transform: 'translateY(-50%)',\n borderTop: '6px solid transparent',\n borderBottom: '6px solid transparent',\n borderLeft: `6px solid ${arrowColor}`,\n filter:\n theme.palette.mode === 'dark'\n ? 'drop-shadow(2px 0 4px rgba(0,0,0,0.3))'\n : 'drop-shadow(2px 0 4px rgba(0,0,0,0.1))',\n };\n case 'right':\n return {\n ...baseArrow,\n right: '100%',\n top: `calc(50% - ${arrowOffset.top}px)`,\n transform: 'translateY(-50%)',\n borderTop: '6px solid transparent',\n borderBottom: '6px solid transparent',\n borderRight: `6px solid ${arrowColor}`,\n filter:\n theme.palette.mode === 'dark'\n ? 'drop-shadow(-2px 0 4px rgba(0,0,0,0.3))'\n : 'drop-shadow(-2px 0 4px rgba(0,0,0,0.1))',\n };\n default:\n return {\n ...baseArrow,\n top: '100%',\n left: `calc(50% - ${arrowOffset.left}px)`,\n transform: 'translateX(-50%)',\n borderLeft: '6px solid transparent',\n borderRight: '6px solid transparent',\n borderTop: `6px solid ${arrowColor}`,\n filter:\n theme.palette.mode === 'dark'\n ? 'drop-shadow(0 2px 4px rgba(0,0,0,0.3))'\n : 'drop-shadow(0 2px 4px rgba(0,0,0,0.1))',\n };\n }\n };\n\n const renderTooltip = () => {\n if (!showTooltip) return null;\n\n return createPortal(\n <div\n ref={tooltipRef}\n style={{\n position: 'absolute',\n top: `${tooltipPosition.top}px`,\n left: `${tooltipPosition.left}px`,\n visibility: isTooltipVisible ? 'visible' : 'hidden',\n backgroundColor:\n theme.palette.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.common.white,\n color:\n theme.palette.mode === 'dark'\n ? theme.palette.common.white\n : theme.palette.text.primary,\n padding: '12px 16px',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: '400',\n lineHeight: '1.4',\n maxWidth: '300px',\n minWidth: 'max-content',\n zIndex: 9999,\n boxShadow:\n theme.palette.mode === 'dark'\n ? '0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3)'\n : '0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1)',\n border:\n theme.palette.mode === 'dark'\n ? `1px solid ${theme.palette.grey[800]}`\n : '1px solid rgba(0, 0, 0, 0.08)',\n whiteSpace: 'normal',\n wordWrap: 'break-word',\n pointerEvents: disableInteractive ? 'none' : 'auto',\n }}\n onMouseEnter={handleTooltipMouseEnter}\n onMouseLeave={handleTooltipMouseLeave}\n >\n {title}\n <div style={getArrowStyle()} />\n </div>,\n document.body,\n );\n };\n\n return (\n <>\n <div\n ref={triggerRef}\n style={{\n position: 'relative',\n display: centered ? 'flex' : 'inline-block',\n alignItems: centered ? 'center' : undefined,\n justifyContent: centered ? 'center' : undefined,\n height: centered ? '100%' : undefined,\n width: centered ? '100%' : undefined,\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n {renderTooltip()}\n </>\n );\n};\n\nexport default CustomTooltip;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import Snackbar from '@mui/material/Snackbar';
|
|
4
|
+
import Alert from '@mui/material/Alert';
|
|
5
|
+
|
|
6
|
+
const ErrorSnackbar = ({ error }) => {
|
|
7
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (error) {
|
|
10
|
+
setIsOpen(true);
|
|
11
|
+
}
|
|
12
|
+
}, [error]);
|
|
13
|
+
const handleClose = (_event, reason) => {
|
|
14
|
+
if (reason === "clickaway") {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
setIsOpen(false);
|
|
18
|
+
};
|
|
19
|
+
if (!error) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const errorMessage = (
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
error?.error || error?.message || "An unknown error occurred."
|
|
25
|
+
);
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
Snackbar,
|
|
28
|
+
{
|
|
29
|
+
open: isOpen,
|
|
30
|
+
autoHideDuration: 6e3,
|
|
31
|
+
onClose: handleClose,
|
|
32
|
+
anchorOrigin: { vertical: "top", horizontal: "right" },
|
|
33
|
+
children: /* @__PURE__ */ jsx(Alert, { onClose: handleClose, severity: "error", sx: { width: "100%" }, children: errorMessage })
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { ErrorSnackbar };
|
|
39
|
+
//# sourceMappingURL=ErrorSnackbar.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorSnackbar.esm.js","sources":["../../../src/components/common/ErrorSnackbar.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 { useState, useEffect, SyntheticEvent } from 'react';\nimport Snackbar from '@mui/material/Snackbar';\nimport Alert from '@mui/material/Alert';\n\ninterface ErrorSnackbarProps {\n error: Error | null | unknown;\n}\n\nexport const ErrorSnackbar = ({ error }: ErrorSnackbarProps) => {\n const [isOpen, setIsOpen] = useState(false);\n\n useEffect(() => {\n if (error) {\n setIsOpen(true);\n }\n }, [error]);\n\n const handleClose = (_event?: SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setIsOpen(false);\n };\n\n if (!error) {\n return null;\n }\n\n // Accommodate the custom 'details' property while providing fallbacks\n const errorMessage =\n // @ts-ignore\n (error as any)?.error ||\n (error as Error)?.message ||\n 'An unknown error occurred.';\n\n return (\n <Snackbar\n open={isOpen}\n autoHideDuration={6000}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <Alert onClose={handleClose} severity=\"error\" sx={{ width: '100%' }}>\n {errorMessage}\n </Alert>\n </Snackbar>\n );\n};\n"],"names":[],"mappings":";;;;;AAuBO,MAAM,aAAA,GAAgB,CAAC,EAAE,KAAA,EAAM,KAA0B;AAC9D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,EAAiC,MAAA,KAAoB;AACxE,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,YAAA;AAAA;AAAA,IAEH,KAAA,EAAe,KAAA,IACf,KAAA,EAAiB,OAAA,IAClB;AAAA,GAAA;AAEF,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,gBAAA,EAAkB,GAAA;AAAA,MAClB,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc,EAAE,QAAA,EAAU,KAAA,EAAO,YAAY,OAAA,EAAQ;AAAA,MAErD,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,WAAA,EAAa,QAAA,EAAS,OAAA,EAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,MAAA,EAAO,EAC/D,QAAA,EAAA,YAAA,EACH;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import Box from '@mui/material/Box';
|
|
3
|
+
import Typography from '@mui/material/Typography';
|
|
4
|
+
import { NoResultsIcon } from '../../assets/NoResultIcon.esm.js';
|
|
5
|
+
|
|
6
|
+
const NotFound = ({
|
|
7
|
+
message = "No results found."
|
|
8
|
+
}) => {
|
|
9
|
+
return /* @__PURE__ */ jsxs(
|
|
10
|
+
Box,
|
|
11
|
+
{
|
|
12
|
+
sx: {
|
|
13
|
+
display: "flex",
|
|
14
|
+
flexDirection: "column",
|
|
15
|
+
alignItems: "center",
|
|
16
|
+
justifyContent: "center",
|
|
17
|
+
height: "100%",
|
|
18
|
+
textAlign: "center",
|
|
19
|
+
mb: 3
|
|
20
|
+
},
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsx(NoResultsIcon, {}),
|
|
23
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", sx: { color: "text.secondary" }, children: message })
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { NotFound };
|
|
30
|
+
//# sourceMappingURL=NotFound.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFound.esm.js","sources":["../../../src/components/common/NotFound.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 Typography from '@mui/material/Typography';\nimport NoResultsIcon from '../../assets/NoResultIcon';\n\nexport const NotFound = ({\n message = 'No results found.',\n}: {\n message?: string;\n}) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n textAlign: 'center',\n mb: 3,\n }}\n >\n <NoResultsIcon />\n <Typography variant=\"body1\" sx={{ color: 'text.secondary' }}>\n {message}\n </Typography>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;AAmBO,MAAM,WAAW,CAAC;AAAA,EACvB,OAAA,GAAU;AACZ,CAAA,KAEM;AACJ,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,QAAA;AAAA,QACX,EAAA,EAAI;AAAA,OACN;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,CAAA;AAAA,wBACf,GAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EACvD,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import Box from '@mui/material/Box';
|
|
3
|
+
import Typography from '@mui/material/Typography';
|
|
4
|
+
import { BulleyeIcon } from '../../assets/BulleyeIcon.esm.js';
|
|
5
|
+
|
|
6
|
+
const SomethingWentWrong = ({
|
|
7
|
+
message = "Oops! Something went wrong",
|
|
8
|
+
subtitle = "You can refresh or try again later",
|
|
9
|
+
statusCode
|
|
10
|
+
}) => {
|
|
11
|
+
const displayMessage = statusCode === 401 ? "Your Apiiro token is invalid or has expired" : message;
|
|
12
|
+
const displaySubtitle = statusCode === 401 ? "Please contact your Administrator" : subtitle;
|
|
13
|
+
return /* @__PURE__ */ jsxs(
|
|
14
|
+
Box,
|
|
15
|
+
{
|
|
16
|
+
sx: {
|
|
17
|
+
display: "flex",
|
|
18
|
+
flexDirection: "column",
|
|
19
|
+
alignItems: "center",
|
|
20
|
+
justifyContent: "center",
|
|
21
|
+
height: "100%",
|
|
22
|
+
textAlign: "center",
|
|
23
|
+
mb: 3
|
|
24
|
+
},
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ jsx(BulleyeIcon, {}),
|
|
27
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", sx: { color: "text.secondary" }, children: displayMessage }),
|
|
28
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { color: "text.secondary" }, children: displaySubtitle })
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { SomethingWentWrong };
|
|
35
|
+
//# sourceMappingURL=SomethingWentWrong.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SomethingWentWrong.esm.js","sources":["../../../src/components/common/SomethingWentWrong.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 Typography from '@mui/material/Typography';\nimport BulleyeIcon from '../../assets/BulleyeIcon';\n\nexport const SomethingWentWrong = ({\n message = 'Oops! Something went wrong',\n subtitle = 'You can refresh or try again later',\n statusCode,\n}: {\n message?: string;\n subtitle?: string;\n statusCode?: number;\n}) => {\n // Set messages based on status code\n const displayMessage =\n statusCode === 401\n ? 'Your Apiiro token is invalid or has expired'\n : message;\n\n const displaySubtitle =\n statusCode === 401 ? 'Please contact your Administrator' : subtitle;\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n textAlign: 'center',\n mb: 3,\n }}\n >\n <BulleyeIcon />\n <Typography variant=\"body1\" sx={{ color: 'text.secondary' }}>\n {displayMessage}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {displaySubtitle}\n </Typography>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;AAmBO,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA,GAAU,4BAAA;AAAA,EACV,QAAA,GAAW,oCAAA;AAAA,EACX;AACF,CAAA,KAIM;AAEJ,EAAA,MAAM,cAAA,GACJ,UAAA,KAAe,GAAA,GACX,6CAAA,GACA,OAAA;AAEN,EAAA,MAAM,eAAA,GACJ,UAAA,KAAe,GAAA,GAAM,mCAAA,GAAsC,QAAA;AAE7D,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,QAAA;AAAA,QACX,EAAA,EAAI;AAAA,OACN;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,CAAA;AAAA,wBACb,GAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EACvD,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,wBACA,GAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EACvD,QAAA,EAAA,eAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { C } from '../../assets/languageIcons/C.esm.js';
|
|
2
|
+
import { Csharp } from '../../assets/languageIcons/Csharp.esm.js';
|
|
3
|
+
import { Cicd } from '../../assets/languageIcons/Cicd.esm.js';
|
|
4
|
+
import { Clojure } from '../../assets/languageIcons/Clojure.esm.js';
|
|
5
|
+
import { Cpp } from '../../assets/languageIcons/Cpp.esm.js';
|
|
6
|
+
import { Dart } from '../../assets/languageIcons/Dart.esm.js';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
8
|
+
import 'react-icons/si';
|
|
9
|
+
import { Go } from '../../assets/languageIcons/Go.esm.js';
|
|
10
|
+
import 'react-icons/tb';
|
|
11
|
+
import { Groovy } from '../../assets/languageIcons/Groovy.esm.js';
|
|
12
|
+
import { HTML } from '../../assets/languageIcons/HTML.esm.js';
|
|
13
|
+
import { HclLanguage } from '../../assets/languageIcons/HclLanguage.esm.js';
|
|
14
|
+
import { Java } from '../../assets/languageIcons/Java.esm.js';
|
|
15
|
+
import { Javascript } from '../../assets/languageIcons/Javascript.esm.js';
|
|
16
|
+
import { Kotlin } from '../../assets/languageIcons/Kotlin.esm.js';
|
|
17
|
+
import { ObjectiveC } from '../../assets/languageIcons/ObjectiveC.esm.js';
|
|
18
|
+
import { PHP } from '../../assets/languageIcons/PHP.esm.js';
|
|
19
|
+
import { Perl } from '../../assets/languageIcons/Perl.esm.js';
|
|
20
|
+
import { Python } from '../../assets/languageIcons/Python.esm.js';
|
|
21
|
+
import { Ruby } from '../../assets/languageIcons/Ruby.esm.js';
|
|
22
|
+
import { Rust } from '../../assets/languageIcons/Rust.esm.js';
|
|
23
|
+
import { Scala } from '../../assets/languageIcons/Scala.esm.js';
|
|
24
|
+
import { Swift } from '../../assets/languageIcons/Swift.esm.js';
|
|
25
|
+
import { Terraform } from '../../assets/languageIcons/Terraform.esm.js';
|
|
26
|
+
import { Typescript } from '../../assets/languageIcons/Typescript.esm.js';
|
|
27
|
+
import { Unknown } from '../../assets/languageIcons/Unknown.esm.js';
|
|
28
|
+
import { VB } from '../../assets/languageIcons/VB.esm.js';
|
|
29
|
+
import { YAML } from '../../assets/languageIcons/YAML.esm.js';
|
|
30
|
+
|
|
31
|
+
const languageIconMap = {
|
|
32
|
+
Java: Java,
|
|
33
|
+
"C#": Csharp,
|
|
34
|
+
JavaScript: Javascript,
|
|
35
|
+
TypeScript: Typescript,
|
|
36
|
+
Python: Python,
|
|
37
|
+
Kotlin: Kotlin,
|
|
38
|
+
C: C,
|
|
39
|
+
"C++": Cpp,
|
|
40
|
+
"Visual Basic": VB,
|
|
41
|
+
HTML: HTML,
|
|
42
|
+
"Objective-C": ObjectiveC,
|
|
43
|
+
Swift: Swift,
|
|
44
|
+
Perl: Perl,
|
|
45
|
+
Ruby: Ruby,
|
|
46
|
+
Go: Go,
|
|
47
|
+
Rust: Rust,
|
|
48
|
+
Clojure: Clojure,
|
|
49
|
+
Scala: Scala,
|
|
50
|
+
PHP: PHP,
|
|
51
|
+
Dart: Dart,
|
|
52
|
+
HCL: HclLanguage,
|
|
53
|
+
"CI/CD": Cicd,
|
|
54
|
+
Groovy: Groovy,
|
|
55
|
+
Yaml: YAML,
|
|
56
|
+
Terraform: Terraform,
|
|
57
|
+
Unknown: Unknown
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export { languageIconMap };
|
|
61
|
+
//# sourceMappingURL=languageIcons.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languageIcons.esm.js","sources":["../../../src/components/common/languageIcons.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 * as icons from '../../assets/languageIcons';\n\nexport type LanguageKey =\n | 'Java'\n | 'C#'\n | 'TypeScript'\n | 'JavaScript'\n | 'Python'\n | 'Kotlin'\n | 'C'\n | 'C++'\n | 'Visual Basic'\n | 'HTML'\n | 'Objective-C'\n | 'Swift'\n | 'Perl'\n | 'Ruby'\n | 'Go'\n | 'Rust'\n | 'Clojure'\n | 'Scala'\n | 'PHP'\n | 'Dart'\n | 'HCL'\n | 'CI/CD'\n | 'Groovy'\n | 'Yaml'\n | 'Terraform'\n | 'Unknown';\n\nexport interface LanguageIconProps {\n color?: string;\n}\n\nexport const languageIconMap: Record<\n LanguageKey,\n React.FC<LanguageIconProps>\n> = {\n Java: icons.Java,\n 'C#': icons.Csharp,\n JavaScript: icons.Javascript,\n TypeScript: icons.Typescript,\n Python: icons.Python,\n Kotlin: icons.Kotlin,\n C: icons.C,\n 'C++': icons.Cpp,\n 'Visual Basic': icons.VB,\n HTML: icons.HTML,\n 'Objective-C': icons.ObjectiveC,\n Swift: icons.Swift,\n Perl: icons.Perl,\n Ruby: icons.Ruby,\n Go: icons.Go,\n Rust: icons.Rust,\n Clojure: icons.Clojure,\n Scala: icons.Scala,\n PHP: icons.PHP,\n Dart: icons.Dart,\n HCL: icons.HclLanguage,\n 'CI/CD': icons.Cicd,\n Groovy: icons.Groovy,\n Yaml: icons.YAML,\n Terraform: icons.Terraform,\n Unknown: icons.Unknown,\n};\n"],"names":["icons.Java","icons.Csharp","icons.Javascript","icons.Typescript","icons.Python","icons.Kotlin","icons.C","icons.Cpp","icons.VB","icons.HTML","icons.ObjectiveC","icons.Swift","icons.Perl","icons.Ruby","icons.Go","icons.Rust","icons.Clojure","icons.Scala","icons.PHP","icons.Dart","icons.HclLanguage","icons.Cicd","icons.Groovy","icons.YAML","icons.Terraform","icons.Unknown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDO,MAAM,eAAA,GAGT;AAAA,EACF,MAAMA,IAAM;AAAA,EACZ,MAAMC,MAAM;AAAA,EACZ,YAAYC,UAAM;AAAA,EAClB,YAAYC,UAAM;AAAA,EAClB,QAAQC,MAAM;AAAA,EACd,QAAQC,MAAM;AAAA,EACd,GAAGC,CAAM;AAAA,EACT,OAAOC,GAAM;AAAA,EACb,gBAAgBC,EAAM;AAAA,EACtB,MAAMC,IAAM;AAAA,EACZ,eAAeC,UAAM;AAAA,EACrB,OAAOC,KAAM;AAAA,EACb,MAAMC,IAAM;AAAA,EACZ,MAAMC,IAAM;AAAA,EACZ,IAAIC,EAAM;AAAA,EACV,MAAMC,IAAM;AAAA,EACZ,SAASC,OAAM;AAAA,EACf,OAAOC,KAAM;AAAA,EACb,KAAKC,GAAM;AAAA,EACX,MAAMC,IAAM;AAAA,EACZ,KAAKC,WAAM;AAAA,EACX,SAASC,IAAM;AAAA,EACf,QAAQC,MAAM;AAAA,EACd,MAAMC,IAAM;AAAA,EACZ,WAAWC,SAAM;AAAA,EACjB,SAASC;AACX;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ApiiroSmall } from '../../assets/apiiroLogo/apiiroSmall.esm.js';
|
|
3
|
+
import { styled, keyframes } from '@mui/material/styles';
|
|
4
|
+
import { getSpinnerColor } from '../../theme/themeUtils.esm.js';
|
|
5
|
+
|
|
6
|
+
const rotate3d = keyframes`
|
|
7
|
+
25% {
|
|
8
|
+
transform: rotateX(180deg);
|
|
9
|
+
}
|
|
10
|
+
50% {
|
|
11
|
+
transform: rotateY(180deg);
|
|
12
|
+
}
|
|
13
|
+
75% {
|
|
14
|
+
transform: rotateZ(180deg);
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
const AnimatedLogo = styled(ApiiroSmall)(({ theme }) => ({
|
|
18
|
+
color: getSpinnerColor(theme),
|
|
19
|
+
animation: `${rotate3d} 3s infinite`,
|
|
20
|
+
display: "inline-block",
|
|
21
|
+
transformStyle: "preserve-3d"
|
|
22
|
+
}));
|
|
23
|
+
const LogoSpinner = () => {
|
|
24
|
+
return /* @__PURE__ */ jsx(AnimatedLogo, {});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { LogoSpinner };
|
|
28
|
+
//# sourceMappingURL=logoSpinner.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logoSpinner.esm.js","sources":["../../../src/components/common/logoSpinner.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 { ApiiroSmall } from '../../assets/apiiroLogo/apiiroSmall';\nimport { styled, keyframes } from '@mui/material/styles';\nimport { getSpinnerColor } from '../../theme/themeUtils';\n\nconst rotate3d = keyframes`\n 25% {\n transform: rotateX(180deg);\n }\n 50% {\n transform: rotateY(180deg);\n }\n 75% {\n transform: rotateZ(180deg);\n }\n`;\n\nconst AnimatedLogo = styled(ApiiroSmall)(({ theme }) => ({\n color: getSpinnerColor(theme),\n animation: `${rotate3d} 3s infinite`,\n display: 'inline-block',\n transformStyle: 'preserve-3d',\n}));\n\nexport const LogoSpinner = () => {\n return <AnimatedLogo />;\n};\n"],"names":[],"mappings":";;;;;AAmBA,MAAM,QAAA,GAAW,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYjB,MAAM,eAAe,MAAA,CAAO,WAAW,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACvD,KAAA,EAAO,gBAAgB,KAAK,CAAA;AAAA,EAC5B,SAAA,EAAW,GAAG,QAAQ,CAAA,YAAA,CAAA;AAAA,EACtB,OAAA,EAAS,cAAA;AAAA,EACT,cAAA,EAAgB;AAClB,CAAA,CAAE,CAAA;AAEK,MAAM,cAAc,MAAM;AAC/B,EAAA,2BAAQ,YAAA,EAAA,EAAa,CAAA;AACvB;;;;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Azure } from '../../assets/providerIcons/Azure.esm.js';
|
|
2
|
+
import { Bitbucket } from '../../assets/providerIcons/Bitbucket.esm.js';
|
|
3
|
+
import { Gitlab } from '../../assets/providerIcons/Gitlab.esm.js';
|
|
4
|
+
import { GitHub } from '@mui/icons-material';
|
|
5
|
+
|
|
6
|
+
const scmProviderIcons = {
|
|
7
|
+
["AzureDevops" /* AzureDevops */]: Azure,
|
|
8
|
+
["AzureDevopsServer" /* AzureDevopsServer */]: Azure,
|
|
9
|
+
["BitbucketCloud" /* BitbucketCloud */]: Bitbucket,
|
|
10
|
+
["BitbucketServer" /* BitbucketServer */]: Bitbucket,
|
|
11
|
+
["Bitbucket" /* Bitbucket */]: Bitbucket,
|
|
12
|
+
["Github" /* Github */]: GitHub,
|
|
13
|
+
["GithubEnterprise" /* GithubEnterprise */]: GitHub,
|
|
14
|
+
["Gitlab" /* Gitlab */]: Gitlab,
|
|
15
|
+
["GitlabServer" /* GitlabServer */]: Gitlab
|
|
16
|
+
};
|
|
17
|
+
const generateRepoURL = (repository) => {
|
|
18
|
+
const { provider, branchName, url } = repository;
|
|
19
|
+
if (!url) return void 0;
|
|
20
|
+
switch (provider) {
|
|
21
|
+
case "Github" /* Github */:
|
|
22
|
+
case "GithubEnterprise" /* GithubEnterprise */:
|
|
23
|
+
return `${url}/tree/${branchName}`;
|
|
24
|
+
case "Gitlab" /* Gitlab */:
|
|
25
|
+
case "GitlabServer" /* GitlabServer */:
|
|
26
|
+
return `${url}/-/tree/${branchName}`;
|
|
27
|
+
case "AzureDevops" /* AzureDevops */:
|
|
28
|
+
case "AzureDevopsServer" /* AzureDevopsServer */:
|
|
29
|
+
return `${url}?version=GB${branchName}`;
|
|
30
|
+
case "BitbucketServer" /* BitbucketServer */:
|
|
31
|
+
return `${url}/browse?at=refs/heads/${branchName}`;
|
|
32
|
+
case "BitbucketCloud" /* BitbucketCloud */:
|
|
33
|
+
case "Bitbucket" /* Bitbucket */:
|
|
34
|
+
return `${url}/branch/${branchName}`;
|
|
35
|
+
default:
|
|
36
|
+
return url;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { generateRepoURL, scmProviderIcons };
|
|
41
|
+
//# sourceMappingURL=scmProviders.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scmProviders.esm.js","sources":["../../../src/components/common/scmProviders.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 { Azure as AzureIcon } from '../../assets/providerIcons/Azure';\nimport { Bitbucket as BitbucketIcon } from '../../assets/providerIcons/Bitbucket';\nimport { Gitlab as GitlabIcon } from '../../assets/providerIcons/Gitlab';\nimport { GitHub as GitHubIcon } from '@mui/icons-material';\nimport { RepositoryType } from '../../queries';\n\nexport enum Provider {\n AzureDevops = 'AzureDevops',\n AzureDevopsServer = 'AzureDevopsServer',\n BitbucketServer = 'BitbucketServer',\n BitbucketCloud = 'BitbucketCloud',\n Bitbucket = 'Bitbucket',\n Github = 'Github',\n GithubEnterprise = 'GithubEnterprise',\n Gitlab = 'Gitlab',\n GitlabServer = 'GitlabServer',\n}\n\nexport const scmProviderIcons: Record<string, any> = {\n [Provider.AzureDevops]: AzureIcon,\n [Provider.AzureDevopsServer]: AzureIcon,\n [Provider.BitbucketCloud]: BitbucketIcon,\n [Provider.BitbucketServer]: BitbucketIcon,\n [Provider.Bitbucket]: BitbucketIcon,\n [Provider.Github]: GitHubIcon,\n [Provider.GithubEnterprise]: GitHubIcon,\n [Provider.Gitlab]: GitlabIcon,\n [Provider.GitlabServer]: GitlabIcon,\n};\n\nexport const generateRepoURL = (\n repository: RepositoryType,\n): string | undefined => {\n const { provider, branchName, url } = repository;\n\n if (!url) return undefined;\n\n switch (provider) {\n case Provider.Github:\n case Provider.GithubEnterprise:\n return `${url}/tree/${branchName}`;\n\n case Provider.Gitlab:\n case Provider.GitlabServer:\n return `${url}/-/tree/${branchName}`;\n\n case Provider.AzureDevops:\n case Provider.AzureDevopsServer:\n return `${url}?version=GB${branchName}`;\n\n case Provider.BitbucketServer:\n return `${url}/browse?at=refs/heads/${branchName}`;\n\n case Provider.BitbucketCloud:\n case Provider.Bitbucket:\n return `${url}/branch/${branchName}`;\n\n default:\n // Return URL as is for unsupported providers\n return url;\n }\n};\n\nexport const getRepositoryUrl = (url: string | null) => {\n if (!url) return null;\n\n // Extract repository URL for any Git provider (GitHub, GitLab, Bitbucket, Azure DevOps, etc.)\n // Matches: https://domain.com/user/repo (stops before /tree/, /blob/, /-/, etc.)\n const repoMatch = url.match(/url:https?:\\/\\/.*/);\n\n return repoMatch ? repoMatch[0].replace('url:', '') : null;\n};\n"],"names":["AzureIcon","BitbucketIcon","GitHubIcon","GitlabIcon"],"mappings":";;;;;AAiCO,MAAM,gBAAA,GAAwC;AAAA,EACnD,CAAC,kCAAuBA,KAAA;AAAA,EACxB,CAAC,8CAA6BA,KAAA;AAAA,EAC9B,CAAC,wCAA0BC,SAAA;AAAA,EAC3B,CAAC,0CAA2BA,SAAA;AAAA,EAC5B,CAAC,8BAAqBA,SAAA;AAAA,EACtB,CAAC,wBAAkBC,MAAA;AAAA,EACnB,CAAC,4CAA4BA,MAAA;AAAA,EAC7B,CAAC,wBAAkBC,MAAA;AAAA,EACnB,CAAC,oCAAwBA;AAC3B;AAEO,MAAM,eAAA,GAAkB,CAC7B,UAAA,KACuB;AACvB,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,GAAA,EAAI,GAAI,UAAA;AAEtC,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAEjB,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA;AAAA,IACL,KAAK,kBAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,MAAA,EAAS,UAAU,CAAA,CAAA;AAAA,IAElC,KAAK,QAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA;AAAA,IAEpC,KAAK,aAAA;AAAA,IACL,KAAK,mBAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA;AAAA,IAEvC,KAAK,iBAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,sBAAA,EAAyB,UAAU,CAAA,CAAA;AAAA,IAElD,KAAK,gBAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA;AAAA,IAEpC;AAEE,MAAA,OAAO,GAAA;AAAA;AAEb;;;;"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useMemo } from 'react';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import ButtonBase from '@mui/material/ButtonBase';
|
|
5
|
+
import Typography from '@mui/material/Typography';
|
|
6
|
+
import Popper from '@mui/material/Popper';
|
|
7
|
+
import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
8
|
+
import Tooltip from '@mui/material/Tooltip';
|
|
9
|
+
import IconButton from '@mui/material/IconButton';
|
|
10
|
+
import Skeleton from '@mui/material/Skeleton';
|
|
11
|
+
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
|
|
12
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
13
|
+
import { alpha } from '@mui/material/styles';
|
|
14
|
+
import { CalendarDatePicker } from '../CalendarDatePicker.esm.js';
|
|
15
|
+
|
|
16
|
+
const hasCompleteRange = (value) => {
|
|
17
|
+
if (!Array.isArray(value)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const [start, end] = value;
|
|
21
|
+
return start instanceof Date && end instanceof Date;
|
|
22
|
+
};
|
|
23
|
+
const getYearsDifference = (startDate, endDate) => {
|
|
24
|
+
const start = new Date(startDate);
|
|
25
|
+
const end = new Date(endDate);
|
|
26
|
+
const diffTime = Math.abs(end.getTime() - start.getTime());
|
|
27
|
+
const diffYears = diffTime / (1e3 * 60 * 60 * 24 * 365.25);
|
|
28
|
+
return diffYears;
|
|
29
|
+
};
|
|
30
|
+
const formatDateRangeSpan = (startDate, endDate) => {
|
|
31
|
+
const start = new Date(startDate);
|
|
32
|
+
const end = new Date(endDate);
|
|
33
|
+
const diffTime = Math.abs(end.getTime() - start.getTime());
|
|
34
|
+
const totalDays = diffTime / (1e3 * 60 * 60 * 24);
|
|
35
|
+
const years = Math.floor(totalDays / 365.25);
|
|
36
|
+
const remainingDays = Math.floor(totalDays % 365.25);
|
|
37
|
+
if (years > 0) {
|
|
38
|
+
return `${years} year${years !== 1 ? "s" : ""} and ${remainingDays} day${remainingDays !== 1 ? "s" : ""}`;
|
|
39
|
+
}
|
|
40
|
+
return `${Math.floor(totalDays)} day${Math.floor(totalDays) !== 1 ? "s" : ""}`;
|
|
41
|
+
};
|
|
42
|
+
const MAX_RANGE_YEARS = 10;
|
|
43
|
+
const DiscoveredOnFilter = ({
|
|
44
|
+
label = "Discovered on",
|
|
45
|
+
value,
|
|
46
|
+
quickRanges,
|
|
47
|
+
selectedQuickRange,
|
|
48
|
+
onChange,
|
|
49
|
+
onQuickRangeSelect,
|
|
50
|
+
loading = false
|
|
51
|
+
}) => {
|
|
52
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
53
|
+
const [validationError, setValidationError] = useState(null);
|
|
54
|
+
const skipCloseRef = useRef(false);
|
|
55
|
+
const isOpen = Boolean(anchorEl);
|
|
56
|
+
const displayLabel = useMemo(() => {
|
|
57
|
+
if (selectedQuickRange !== "custom") {
|
|
58
|
+
const preset = quickRanges.find(
|
|
59
|
+
(range) => range.value === selectedQuickRange
|
|
60
|
+
);
|
|
61
|
+
if (preset) {
|
|
62
|
+
return `${label}: ${preset.label}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (hasCompleteRange(value)) {
|
|
66
|
+
const [from, to] = value;
|
|
67
|
+
const formatDate = (date) => date.toLocaleDateString(void 0, {
|
|
68
|
+
year: "numeric",
|
|
69
|
+
month: "short",
|
|
70
|
+
day: "numeric"
|
|
71
|
+
});
|
|
72
|
+
return `${label}: ${formatDate(from)} \u2013 ${formatDate(to)}`;
|
|
73
|
+
}
|
|
74
|
+
return label;
|
|
75
|
+
}, [label, quickRanges, selectedQuickRange, value]);
|
|
76
|
+
const hasSelection = displayLabel !== label;
|
|
77
|
+
const handleToggle = (event) => {
|
|
78
|
+
setAnchorEl((prev) => prev ? null : event.currentTarget);
|
|
79
|
+
};
|
|
80
|
+
const handleClose = () => {
|
|
81
|
+
setAnchorEl(null);
|
|
82
|
+
setValidationError(null);
|
|
83
|
+
};
|
|
84
|
+
const handleCalendarChange = (nextValue) => {
|
|
85
|
+
setValidationError(null);
|
|
86
|
+
if (hasCompleteRange(nextValue)) {
|
|
87
|
+
const [startDate, endDate] = nextValue;
|
|
88
|
+
const yearsDiff = getYearsDifference(startDate, endDate);
|
|
89
|
+
if (yearsDiff > MAX_RANGE_YEARS) {
|
|
90
|
+
const spanText = formatDateRangeSpan(startDate, endDate);
|
|
91
|
+
setValidationError(
|
|
92
|
+
`Date range cannot exceed ${MAX_RANGE_YEARS} years. Current selection spans ${spanText}.`
|
|
93
|
+
);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
onChange(nextValue);
|
|
98
|
+
const shouldSkipClose = skipCloseRef.current;
|
|
99
|
+
skipCloseRef.current = false;
|
|
100
|
+
if (shouldSkipClose) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (hasCompleteRange(nextValue)) {
|
|
104
|
+
handleClose();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const handleQuickRangeClick = (range) => {
|
|
108
|
+
setValidationError(null);
|
|
109
|
+
if (range.value !== "custom") {
|
|
110
|
+
const rangeValue = range.getRange();
|
|
111
|
+
if (rangeValue && hasCompleteRange(rangeValue)) {
|
|
112
|
+
const [startDate, endDate] = rangeValue;
|
|
113
|
+
const yearsDiff = getYearsDifference(startDate, endDate);
|
|
114
|
+
if (yearsDiff > MAX_RANGE_YEARS) {
|
|
115
|
+
const spanText = formatDateRangeSpan(startDate, endDate);
|
|
116
|
+
setValidationError(
|
|
117
|
+
`"${range.label}" preset spans ${spanText}, which exceeds ${MAX_RANGE_YEARS} years limit. Please use a custom range.`
|
|
118
|
+
);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
skipCloseRef.current = range.value !== "custom";
|
|
124
|
+
onQuickRangeSelect(range);
|
|
125
|
+
};
|
|
126
|
+
const handleClear = (event) => {
|
|
127
|
+
event.stopPropagation();
|
|
128
|
+
skipCloseRef.current = false;
|
|
129
|
+
setValidationError(null);
|
|
130
|
+
onChange([]);
|
|
131
|
+
handleClose();
|
|
132
|
+
};
|
|
133
|
+
if (loading) {
|
|
134
|
+
return /* @__PURE__ */ jsx(
|
|
135
|
+
Skeleton,
|
|
136
|
+
{
|
|
137
|
+
variant: "rounded",
|
|
138
|
+
width: 140,
|
|
139
|
+
height: 36,
|
|
140
|
+
sx: {
|
|
141
|
+
borderRadius: 999
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
return /* @__PURE__ */ jsxs(Box, { "data-testid": "discovered-on-filter", sx: { position: "relative" }, children: [
|
|
147
|
+
/* @__PURE__ */ jsxs(
|
|
148
|
+
ButtonBase,
|
|
149
|
+
{
|
|
150
|
+
className: "discovered-on-button",
|
|
151
|
+
onClick: handleToggle,
|
|
152
|
+
sx: (theme) => {
|
|
153
|
+
const primaryMain = theme.palette.primary.main;
|
|
154
|
+
const closedBorder = theme.palette.divider;
|
|
155
|
+
const isDark = theme.palette.mode === "dark";
|
|
156
|
+
const hoverBackground = alpha(primaryMain, isDark ? 0.28 : 0.12);
|
|
157
|
+
const selectedBorder = isDark ? theme.palette.primary.light : theme.palette.primary.dark;
|
|
158
|
+
const selectedBackground = alpha(primaryMain, isDark ? 0.2 : 0.06);
|
|
159
|
+
let backgroundColor = theme.palette.background.paper;
|
|
160
|
+
if (isOpen) {
|
|
161
|
+
backgroundColor = hoverBackground;
|
|
162
|
+
} else if (hasSelection) {
|
|
163
|
+
backgroundColor = selectedBackground;
|
|
164
|
+
}
|
|
165
|
+
let borderColor = closedBorder;
|
|
166
|
+
if (isOpen) {
|
|
167
|
+
borderColor = primaryMain;
|
|
168
|
+
} else if (hasSelection) {
|
|
169
|
+
borderColor = selectedBorder;
|
|
170
|
+
}
|
|
171
|
+
let boxShadow = "none";
|
|
172
|
+
if (isOpen) {
|
|
173
|
+
boxShadow = "0 4px 12px rgba(38, 54, 140, 0.18)";
|
|
174
|
+
} else if (hasSelection) {
|
|
175
|
+
boxShadow = "0 2px 8px rgba(38, 54, 140, 0.12)";
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
borderRadius: 999,
|
|
179
|
+
padding: theme.spacing(0.75, 1.75),
|
|
180
|
+
border: `1px solid ${borderColor}`,
|
|
181
|
+
display: "flex",
|
|
182
|
+
alignItems: "center",
|
|
183
|
+
gap: 0.5,
|
|
184
|
+
backgroundColor,
|
|
185
|
+
boxShadow,
|
|
186
|
+
transition: "all 0.2s ease",
|
|
187
|
+
minHeight: 38
|
|
188
|
+
};
|
|
189
|
+
},
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ jsx(
|
|
192
|
+
Typography,
|
|
193
|
+
{
|
|
194
|
+
variant: "body2",
|
|
195
|
+
sx: (theme) => ({
|
|
196
|
+
whiteSpace: "nowrap",
|
|
197
|
+
color: theme.palette.text.primary
|
|
198
|
+
}),
|
|
199
|
+
children: displayLabel
|
|
200
|
+
}
|
|
201
|
+
),
|
|
202
|
+
hasSelection ? /* @__PURE__ */ jsx(Tooltip, { title: "Clear and remove filter", children: /* @__PURE__ */ jsx(
|
|
203
|
+
IconButton,
|
|
204
|
+
{
|
|
205
|
+
size: "small",
|
|
206
|
+
onClick: handleClear,
|
|
207
|
+
sx: (theme) => ({
|
|
208
|
+
color: theme.palette.text.secondary,
|
|
209
|
+
"&:hover": {
|
|
210
|
+
color: theme.palette.primary.main
|
|
211
|
+
}
|
|
212
|
+
}),
|
|
213
|
+
children: /* @__PURE__ */ jsx(CloseIcon, { fontSize: "inherit" })
|
|
214
|
+
}
|
|
215
|
+
) }) : null,
|
|
216
|
+
/* @__PURE__ */ jsx(
|
|
217
|
+
KeyboardArrowDownIcon,
|
|
218
|
+
{
|
|
219
|
+
fontSize: "small",
|
|
220
|
+
sx: (theme) => ({
|
|
221
|
+
transform: isOpen ? "rotate(180deg)" : "none",
|
|
222
|
+
transition: "transform 0.2s ease",
|
|
223
|
+
color: hasSelection ? theme.palette.primary.main : theme.palette.text.secondary
|
|
224
|
+
})
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
),
|
|
230
|
+
/* @__PURE__ */ jsx(
|
|
231
|
+
Popper,
|
|
232
|
+
{
|
|
233
|
+
open: isOpen,
|
|
234
|
+
anchorEl,
|
|
235
|
+
placement: "bottom-start",
|
|
236
|
+
modifiers: [
|
|
237
|
+
{
|
|
238
|
+
name: "offset",
|
|
239
|
+
options: { offset: [0, 8] }
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
children: /* @__PURE__ */ jsx(ClickAwayListener, { onClickAway: handleClose, children: /* @__PURE__ */ jsxs(Box, { sx: { mt: 1 }, children: [
|
|
243
|
+
/* @__PURE__ */ jsx(
|
|
244
|
+
CalendarDatePicker,
|
|
245
|
+
{
|
|
246
|
+
value,
|
|
247
|
+
onChange: handleCalendarChange,
|
|
248
|
+
selectedQuickRange,
|
|
249
|
+
onQuickRangeSelect: handleQuickRangeClick,
|
|
250
|
+
quickRanges
|
|
251
|
+
}
|
|
252
|
+
),
|
|
253
|
+
validationError && /* @__PURE__ */ jsx(
|
|
254
|
+
Box,
|
|
255
|
+
{
|
|
256
|
+
sx: {
|
|
257
|
+
mt: 1,
|
|
258
|
+
p: 1,
|
|
259
|
+
backgroundColor: "error.light",
|
|
260
|
+
borderRadius: 1,
|
|
261
|
+
border: "1px solid",
|
|
262
|
+
borderColor: "error.main"
|
|
263
|
+
},
|
|
264
|
+
children: /* @__PURE__ */ jsx(
|
|
265
|
+
Typography,
|
|
266
|
+
{
|
|
267
|
+
variant: "caption",
|
|
268
|
+
sx: {
|
|
269
|
+
color: "error.contrastText",
|
|
270
|
+
fontWeight: 500
|
|
271
|
+
},
|
|
272
|
+
children: validationError
|
|
273
|
+
}
|
|
274
|
+
)
|
|
275
|
+
}
|
|
276
|
+
)
|
|
277
|
+
] }) })
|
|
278
|
+
}
|
|
279
|
+
)
|
|
280
|
+
] });
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
export { DiscoveredOnFilter };
|
|
284
|
+
//# sourceMappingURL=DiscoveredOnFilter.esm.js.map
|