@backstage/plugin-home 0.9.10 → 0.9.11-next.1

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 (65) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/alpha/DefaultHomePageLayout.esm.js.map +1 -1
  3. package/dist/alpha.esm.js.map +1 -1
  4. package/dist/api/VisitsApi.esm.js.map +1 -1
  5. package/dist/api/VisitsStorageApi.esm.js.map +1 -1
  6. package/dist/api/VisitsWebStorageApi.esm.js.map +1 -1
  7. package/dist/api/config.esm.js.map +1 -1
  8. package/dist/assets/TemplateBackstageLogo.esm.js.map +1 -1
  9. package/dist/assets/TemplateBackstageLogoIcon.esm.js.map +1 -1
  10. package/dist/componentRenderers/ComponentAccordion.esm.js.map +1 -1
  11. package/dist/componentRenderers/ComponentTabs/ComponentTab.esm.js.map +1 -1
  12. package/dist/componentRenderers/ComponentTabs/ComponentTabs.esm.js.map +1 -1
  13. package/dist/components/CustomHomepage/AddWidgetDialog.esm.js.map +1 -1
  14. package/dist/components/CustomHomepage/CustomHomepageButtons.esm.js.map +1 -1
  15. package/dist/components/CustomHomepage/CustomHomepageGrid.esm.js +1 -1
  16. package/dist/components/CustomHomepage/CustomHomepageGrid.esm.js.map +1 -1
  17. package/dist/components/CustomHomepage/WidgetSettingsOverlay.esm.js.map +1 -1
  18. package/dist/components/CustomHomepage/types.esm.js.map +1 -1
  19. package/dist/components/HomepageCompositionRoot.esm.js.map +1 -1
  20. package/dist/components/StarredEntityListItem/StarredEntityListItem.esm.js.map +1 -1
  21. package/dist/components/VisitList/Context.esm.js.map +1 -1
  22. package/dist/components/VisitList/ItemCategory.esm.js.map +1 -1
  23. package/dist/components/VisitList/ItemDetail.esm.js.map +1 -1
  24. package/dist/components/VisitList/ItemName.esm.js.map +1 -1
  25. package/dist/components/VisitList/VisitList.esm.js.map +1 -1
  26. package/dist/components/VisitList/VisitListEmpty.esm.js.map +1 -1
  27. package/dist/components/VisitList/VisitListFew.esm.js.map +1 -1
  28. package/dist/components/VisitList/VisitListItem.esm.js.map +1 -1
  29. package/dist/components/VisitList/VisitListSkeleton.esm.js.map +1 -1
  30. package/dist/components/VisitListener.esm.js.map +1 -1
  31. package/dist/deprecated.esm.js.map +1 -1
  32. package/dist/homePageComponents/CompanyLogo/CompanyLogo.esm.js.map +1 -1
  33. package/dist/homePageComponents/FeaturedDocsCard/Content.esm.js.map +1 -1
  34. package/dist/homePageComponents/HeaderWorldClock/HeaderWorldClock.esm.js.map +1 -1
  35. package/dist/homePageComponents/QuickStart/Content.esm.js.map +1 -1
  36. package/dist/homePageComponents/QuickStart/styles.esm.js.map +1 -1
  37. package/dist/homePageComponents/RandomJoke/Actions.esm.js.map +1 -1
  38. package/dist/homePageComponents/RandomJoke/Content.esm.js.map +1 -1
  39. package/dist/homePageComponents/RandomJoke/Context.esm.js +1 -1
  40. package/dist/homePageComponents/RandomJoke/Context.esm.js.map +1 -1
  41. package/dist/homePageComponents/RandomJoke/Settings.esm.js.map +1 -1
  42. package/dist/homePageComponents/StarredEntities/Content.esm.js.map +1 -1
  43. package/dist/homePageComponents/Toolkit/Content.esm.js.map +1 -1
  44. package/dist/homePageComponents/Toolkit/Context.esm.js +1 -1
  45. package/dist/homePageComponents/Toolkit/Context.esm.js.map +1 -1
  46. package/dist/homePageComponents/VisitedByType/Actions.esm.js.map +1 -1
  47. package/dist/homePageComponents/VisitedByType/Content.esm.js.map +1 -1
  48. package/dist/homePageComponents/VisitedByType/Context.esm.js +1 -1
  49. package/dist/homePageComponents/VisitedByType/Context.esm.js.map +1 -1
  50. package/dist/homePageComponents/VisitedByType/RecentlyVisited.esm.js.map +1 -1
  51. package/dist/homePageComponents/VisitedByType/TopVisited.esm.js.map +1 -1
  52. package/dist/homePageComponents/VisitedByType/VisitedByType.esm.js.map +1 -1
  53. package/dist/homePageComponents/WelcomeTitle/WelcomeTitle.esm.js.map +1 -1
  54. package/dist/homePageComponents/WelcomeTitle/locales/goodAfternoon.locales.json.esm.js.map +1 -1
  55. package/dist/homePageComponents/WelcomeTitle/locales/goodEvening.locales.json.esm.js.map +1 -1
  56. package/dist/homePageComponents/WelcomeTitle/locales/goodMorning.locales.json.esm.js.map +1 -1
  57. package/dist/homePageComponents/WelcomeTitle/timeUtil.esm.js.map +1 -1
  58. package/dist/homePageComponents/WorldClock/WorldClock.esm.js.map +1 -1
  59. package/dist/homePageComponents/WorldClock/clocks.esm.js.map +1 -1
  60. package/dist/package.json.esm.js +1 -1
  61. package/dist/package.json.esm.js.map +1 -1
  62. package/dist/plugin.esm.js.map +1 -1
  63. package/dist/routes.esm.js.map +1 -1
  64. package/dist/translation.esm.js.map +1 -1
  65. package/package.json +17 -17
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @backstage/plugin-home
2
2
 
3
+ ## 0.9.11-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @backstage/frontend-plugin-api@0.18.2-next.1
9
+ - @backstage/catalog-client@1.16.3-next.1
10
+ - @backstage/plugin-catalog-react@3.3.0-next.2
11
+ - @backstage/core-components@0.18.15-next.3
12
+ - @backstage/core-compat-api@0.5.16-next.1
13
+ - @backstage/core-app-api@1.20.6-next.1
14
+
15
+ ## 0.9.11-next.0
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies
20
+ - @backstage/config@1.3.10-next.0
21
+ - @backstage/core-app-api@1.20.6-next.0
22
+ - @backstage/core-components@0.18.15-next.0
23
+ - @backstage/core-plugin-api@1.12.11-next.0
24
+ - @backstage/frontend-plugin-api@0.18.2-next.0
25
+ - @backstage/catalog-client@1.16.3-next.0
26
+ - @backstage/catalog-model@1.10.2-next.0
27
+ - @backstage/core-compat-api@0.5.16-next.0
28
+ - @backstage/plugin-catalog-react@3.2.4-next.0
29
+ - @backstage/plugin-home-react@0.1.43-next.0
30
+
3
31
  ## 0.9.10
4
32
 
5
33
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultHomePageLayout.esm.js","sources":["../../src/alpha/DefaultHomePageLayout.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 */\n\nimport { Fragment, useMemo } from 'react';\nimport { Content } from '@backstage/core-components';\nimport type { HomePageLayoutProps } from '@backstage/plugin-home-react/alpha';\nimport { CustomHomepageGrid } from '../components';\n\n/**\n * The default home page layout component.\n *\n * Renders widgets inside a `<CustomHomepageGrid/>` wrapped in `<Content/>`.\n * This is used when no custom layout extension is installed.\n */\nexport function DefaultHomePageLayout(props: HomePageLayoutProps) {\n const { widgets, defaultConfig } = props;\n const gridConfig = useMemo(\n () =>\n defaultConfig?.map(item => ({\n component: item.component,\n x: item.column,\n y: item.row,\n width: item.width,\n height: item.height,\n movable: item.movable,\n deletable: item.deletable,\n resizable: item.resizable,\n })),\n [defaultConfig],\n );\n return (\n <Content>\n <CustomHomepageGrid config={gridConfig}>\n {widgets.map((widget, index) => (\n <Fragment key={widget.name ?? index}>{widget.component}</Fragment>\n ))}\n </CustomHomepageGrid>\n </Content>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA2BO,SAAS,sBAAsB,KAAA,EAA4B;AAChE,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAI,KAAA;AACnC,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,MACE,aAAA,EAAe,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,MAC1B,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,GAAG,IAAA,CAAK,MAAA;AAAA,MACR,GAAG,IAAA,CAAK,GAAA;AAAA,MACR,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK;AAAA,KAClB,CAAE,CAAA;AAAA,IACJ,CAAC,aAAa;AAAA,GAChB;AACA,EAAA,uBACE,GAAA,CAAC,WACC,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,QAAQ,UAAA,EACzB,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,MAAA,EAAQ,0BACpB,GAAA,CAAC,QAAA,EAAA,EAAqC,iBAAO,SAAA,EAAA,EAA9B,MAAA,CAAO,QAAQ,KAAyB,CACxD,GACH,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"DefaultHomePageLayout.esm.js","sources":["../../src/alpha/DefaultHomePageLayout.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 */\n\nimport { Fragment, useMemo } from 'react';\nimport { Content } from '@backstage/core-components';\nimport type { HomePageLayoutProps } from '@backstage/plugin-home-react/alpha';\nimport { CustomHomepageGrid } from '../components';\n\n/**\n * The default home page layout component.\n *\n * Renders widgets inside a `<CustomHomepageGrid/>` wrapped in `<Content/>`.\n * This is used when no custom layout extension is installed.\n */\nexport function DefaultHomePageLayout(props: HomePageLayoutProps) {\n const { widgets, defaultConfig } = props;\n const gridConfig = useMemo(\n () =>\n defaultConfig?.map(item => ({\n component: item.component,\n x: item.column,\n y: item.row,\n width: item.width,\n height: item.height,\n movable: item.movable,\n deletable: item.deletable,\n resizable: item.resizable,\n })),\n [defaultConfig],\n );\n return (\n <Content>\n <CustomHomepageGrid config={gridConfig}>\n {widgets.map((widget, index) => (\n <Fragment key={widget.name ?? index}>{widget.component}</Fragment>\n ))}\n </CustomHomepageGrid>\n </Content>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA2BO,SAAS,sBAAsB,KAAA,EAA4B;AAChE,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAI,KAAA;AACnC,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,MACE,aAAA,EAAe,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,MAC1B,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,GAAG,IAAA,CAAK,MAAA;AAAA,MACR,GAAG,IAAA,CAAK,GAAA;AAAA,MACR,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK;AAAA,KAClB,CAAE,CAAA;AAAA,IACJ,CAAC,aAAa;AAAA,GAChB;AACA,EAAA,uBACE,GAAA,CAAC,WACC,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,QAAQ,UAAA,EACzB,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,MAAA,EAAQ,0BACpB,GAAA,CAAC,QAAA,EAAA,EAAqC,iBAAO,SAAA,EAAA,EAA9B,MAAA,CAAO,QAAQ,KAAyB,CACxD,GACH,CAAA,EACF,CAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\n/**\n * The home plugin for Backstage's new frontend system.\n *\n * @remarks\n * This package provides the new frontend system implementation of the home plugin,\n * which offers customizable home pages with widget support and optional visit tracking.\n *\n * @packageDocumentation\n */\n\nimport { lazy as reactLazy } from 'react';\nimport { z } from 'zod/v4';\nimport {\n createExtensionInput,\n PageBlueprint,\n createFrontendPlugin,\n createRouteRef,\n AppRootElementBlueprint,\n identityApiRef,\n storageApiRef,\n errorApiRef,\n ApiBlueprint,\n ExtensionBoundary,\n iconsApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { visitsApiRef, VisitsStorageApi, VisitsWebStorageApi } from './api';\nimport HomeIcon from '@material-ui/icons/Home';\nimport LinkIcon from '@material-ui/icons/Link';\nimport {\n homePageWidgetDataRef,\n homePageLayoutComponentDataRef,\n HomePageLayoutBlueprint,\n HomePageWidgetBlueprint,\n type HomePageLayoutProps,\n} from '@backstage/plugin-home-react/alpha';\n\nconst rootRouteRef = createRouteRef();\n\nconst VisitListener = reactLazy(() =>\n import('./components/VisitListener').then(m => ({\n default: m.VisitListener,\n })),\n);\n\nconst defaultConfigItemSchema = z.object({\n component: z.string(),\n column: z.number(),\n row: z.number(),\n width: z.number(),\n height: z.number(),\n movable: z.boolean().optional(),\n deletable: z.boolean().optional(),\n resizable: z.boolean().optional(),\n});\n\nconst homePage = PageBlueprint.makeWithOverrides({\n inputs: {\n widgets: createExtensionInput([homePageWidgetDataRef]),\n layout: createExtensionInput([HomePageLayoutBlueprint.dataRefs.component], {\n singleton: true,\n optional: true,\n internal: true,\n }),\n },\n configSchema: {\n defaultConfig: z.array(defaultConfigItemSchema).optional(),\n },\n factory(originalFactory, { node, inputs, config }) {\n return originalFactory({\n path: '/home',\n noHeader: true,\n routeRef: rootRouteRef,\n title: 'Home',\n icon: <HomeIcon fontSize=\"inherit\" />,\n loader: async () => {\n const LazyDefaultLayout = reactLazy(() =>\n import('./alpha/DefaultHomePageLayout').then(m => ({\n default: m.DefaultHomePageLayout,\n })),\n );\n\n const DefaultLayoutComponent = (props: HomePageLayoutProps) => (\n <ExtensionBoundary node={node}>\n <LazyDefaultLayout {...props} />\n </ExtensionBoundary>\n );\n\n const Layout =\n inputs.layout?.get(homePageLayoutComponentDataRef) ??\n DefaultLayoutComponent;\n\n const widgets = inputs.widgets.map(widget => ({\n ...widget.get(homePageWidgetDataRef),\n node: widget.node,\n }));\n\n return (\n <Layout widgets={widgets} defaultConfig={config.defaultConfig} />\n );\n },\n });\n },\n});\n\nconst visitListenerAppRootElement = AppRootElementBlueprint.make({\n name: 'visit-listener',\n disabled: true,\n params: {\n element: <VisitListener />,\n },\n});\n\nconst visitsApi = ApiBlueprint.make({\n name: 'visits',\n disabled: true,\n params: defineParams =>\n defineParams({\n api: visitsApiRef,\n deps: {\n storageApi: storageApiRef,\n identityApi: identityApiRef,\n errorApi: errorApiRef,\n },\n factory: ({ storageApi, identityApi, errorApi }) => {\n // Smart fallback: use custom storage API if available, otherwise localStorage\n if (storageApi) {\n return VisitsStorageApi.create({ storageApi, identityApi });\n }\n return VisitsWebStorageApi.create({ identityApi, errorApi });\n },\n }),\n});\n\nconst homePageToolkitWidget = HomePageWidgetBlueprint.makeWithOverrides({\n name: 'toolkit',\n configSchema: {\n tools: z\n .array(\n z.object({\n url: z.string(),\n label: z.string(),\n icon: z.string().optional(),\n }),\n )\n .default([{ url: 'https://backstage.io', label: 'Backstage Docs' }]),\n },\n *factory(originalFactory, { config }) {\n yield* originalFactory({\n name: 'HomePageToolkit',\n title: 'Toolkit',\n description: 'A collection of useful links and tools',\n components: () =>\n import('./homePageComponents/Toolkit').then(m => ({\n Content: (props: Record<string, unknown>) => {\n const iconsApi = useApi(iconsApiRef);\n const tools = config.tools.map(tool => ({\n url: tool.url,\n label: tool.label,\n icon: (tool.icon && iconsApi.icon(tool.icon)) ?? <LinkIcon />,\n }));\n return <m.Content {...props} tools={tools} />;\n },\n ContextProvider: m.ContextProvider,\n })),\n });\n },\n});\n\nconst homePageStarredEntitiesWidget = HomePageWidgetBlueprint.make({\n name: 'starred-entities',\n params: {\n name: 'HomePageStarredEntities',\n title: 'Your Starred Entities',\n description: 'Shows entities you have starred in the catalog',\n components: () =>\n import('./homePageComponents/StarredEntities').then(m => ({\n Content: m.Content,\n })),\n },\n});\n\nconst homePageRandomJokeWidget = HomePageWidgetBlueprint.make({\n name: 'random-joke',\n params: {\n name: 'HomePageRandomJoke',\n title: 'Random Joke',\n description: 'Shows a random programming joke',\n components: () =>\n import('./homePageComponents/RandomJoke').then(m => ({\n Content: m.Content,\n Settings: m.Settings,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n layout: {\n height: { minRows: 4 },\n width: { minColumns: 3 },\n },\n settings: {\n schema: {\n title: 'Random Joke settings',\n type: 'object',\n properties: {\n defaultCategory: {\n title: 'Category',\n type: 'string',\n enum: ['any', 'programming', 'dad'],\n default: 'any',\n },\n },\n },\n },\n },\n});\n\nconst homePageMostVisitedWidget = HomePageWidgetBlueprint.make({\n name: 'most-visited',\n params: {\n name: 'HomePageMostVisited',\n title: 'Most Visited',\n description: 'Shows your most frequently visited pages',\n components: () =>\n import('./homePageComponents/VisitedByType/TopVisited').then(m => ({\n Content: m.Content,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n },\n});\n\nconst homePageRecentlyVisitedWidget = HomePageWidgetBlueprint.make({\n name: 'recently-visited',\n params: {\n name: 'HomePageRecentlyVisited',\n title: 'Recently Visited',\n description: 'Shows pages you have recently visited',\n components: () =>\n import('./homePageComponents/VisitedByType/RecentlyVisited').then(m => ({\n Content: m.Content,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n },\n});\n\nconst homePageWorldClockWidget = HomePageWidgetBlueprint.makeWithOverrides({\n name: 'world-clock',\n configSchema: {\n clockConfigs: z\n .array(\n z.object({\n label: z.string(),\n timeZone: z.string(),\n }),\n )\n .optional(),\n customTimeFormat: z\n .object({\n hour12: z.boolean().optional(),\n })\n .optional(),\n },\n *factory(originalFactory, { config }) {\n yield* originalFactory({\n name: 'HomePageWorldClock',\n title: 'World Clocks',\n description: 'Displays clocks for configured time zones',\n components: () =>\n import('./homePageComponents/WorldClock').then(m => ({\n Content: () => (\n <m.WorldClock\n clockConfigs={config.clockConfigs}\n customTimeFormat={\n config.customTimeFormat\n ? {\n hour: '2-digit',\n minute: '2-digit',\n ...config.customTimeFormat,\n }\n : undefined\n }\n />\n ),\n })),\n });\n },\n});\n\n/**\n * Home plugin for the new frontend system.\n *\n * Provides core homepage functionality with optional visit tracking extensions.\n * Visit tracking extensions are disabled by default and can be enabled via app-config.yaml.\n *\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'home',\n title: 'Home',\n icon: <HomeIcon />,\n info: { packageJson: () => import('../package.json') },\n extensions: [\n homePage,\n visitsApi,\n visitListenerAppRootElement,\n homePageToolkitWidget,\n homePageStarredEntitiesWidget,\n homePageRandomJokeWidget,\n homePageMostVisitedWidget,\n homePageRecentlyVisitedWidget,\n homePageWorldClockWidget,\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\nimport { homeTranslationRef as _homeTranslationRef } from './translation';\n\n/**\n * @alpha\n * @deprecated Import from `@backstage/plugin-home` instead.\n */\nexport const homeTranslationRef = _homeTranslationRef;\n"],"names":["reactLazy","_homeTranslationRef"],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\n/**\n * The home plugin for Backstage's new frontend system.\n *\n * @remarks\n * This package provides the new frontend system implementation of the home plugin,\n * which offers customizable home pages with widget support and optional visit tracking.\n *\n * @packageDocumentation\n */\n\nimport { lazy as reactLazy } from 'react';\nimport { z } from 'zod/v4';\nimport {\n createExtensionInput,\n PageBlueprint,\n createFrontendPlugin,\n createRouteRef,\n AppRootElementBlueprint,\n identityApiRef,\n storageApiRef,\n errorApiRef,\n ApiBlueprint,\n ExtensionBoundary,\n iconsApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { visitsApiRef, VisitsStorageApi, VisitsWebStorageApi } from './api';\nimport HomeIcon from '@material-ui/icons/Home';\nimport LinkIcon from '@material-ui/icons/Link';\nimport {\n homePageWidgetDataRef,\n homePageLayoutComponentDataRef,\n HomePageLayoutBlueprint,\n HomePageWidgetBlueprint,\n type HomePageLayoutProps,\n} from '@backstage/plugin-home-react/alpha';\n\nconst rootRouteRef = createRouteRef();\n\nconst VisitListener = reactLazy(() =>\n import('./components/VisitListener').then(m => ({\n default: m.VisitListener,\n })),\n);\n\nconst defaultConfigItemSchema = z.object({\n component: z.string(),\n column: z.number(),\n row: z.number(),\n width: z.number(),\n height: z.number(),\n movable: z.boolean().optional(),\n deletable: z.boolean().optional(),\n resizable: z.boolean().optional(),\n});\n\nconst homePage = PageBlueprint.makeWithOverrides({\n inputs: {\n widgets: createExtensionInput([homePageWidgetDataRef]),\n layout: createExtensionInput([HomePageLayoutBlueprint.dataRefs.component], {\n singleton: true,\n optional: true,\n internal: true,\n }),\n },\n configSchema: {\n defaultConfig: z.array(defaultConfigItemSchema).optional(),\n },\n factory(originalFactory, { node, inputs, config }) {\n return originalFactory({\n path: '/home',\n noHeader: true,\n routeRef: rootRouteRef,\n title: 'Home',\n icon: <HomeIcon fontSize=\"inherit\" />,\n loader: async () => {\n const LazyDefaultLayout = reactLazy(() =>\n import('./alpha/DefaultHomePageLayout').then(m => ({\n default: m.DefaultHomePageLayout,\n })),\n );\n\n const DefaultLayoutComponent = (props: HomePageLayoutProps) => (\n <ExtensionBoundary node={node}>\n <LazyDefaultLayout {...props} />\n </ExtensionBoundary>\n );\n\n const Layout =\n inputs.layout?.get(homePageLayoutComponentDataRef) ??\n DefaultLayoutComponent;\n\n const widgets = inputs.widgets.map(widget => ({\n ...widget.get(homePageWidgetDataRef),\n node: widget.node,\n }));\n\n return (\n <Layout widgets={widgets} defaultConfig={config.defaultConfig} />\n );\n },\n });\n },\n});\n\nconst visitListenerAppRootElement = AppRootElementBlueprint.make({\n name: 'visit-listener',\n disabled: true,\n params: {\n element: <VisitListener />,\n },\n});\n\nconst visitsApi = ApiBlueprint.make({\n name: 'visits',\n disabled: true,\n params: defineParams =>\n defineParams({\n api: visitsApiRef,\n deps: {\n storageApi: storageApiRef,\n identityApi: identityApiRef,\n errorApi: errorApiRef,\n },\n factory: ({ storageApi, identityApi, errorApi }) => {\n // Smart fallback: use custom storage API if available, otherwise localStorage\n if (storageApi) {\n return VisitsStorageApi.create({ storageApi, identityApi });\n }\n return VisitsWebStorageApi.create({ identityApi, errorApi });\n },\n }),\n});\n\nconst homePageToolkitWidget = HomePageWidgetBlueprint.makeWithOverrides({\n name: 'toolkit',\n configSchema: {\n tools: z\n .array(\n z.object({\n url: z.string(),\n label: z.string(),\n icon: z.string().optional(),\n }),\n )\n .default([{ url: 'https://backstage.io', label: 'Backstage Docs' }]),\n },\n *factory(originalFactory, { config }) {\n yield* originalFactory({\n name: 'HomePageToolkit',\n title: 'Toolkit',\n description: 'A collection of useful links and tools',\n components: () =>\n import('./homePageComponents/Toolkit').then(m => ({\n Content: (props: Record<string, unknown>) => {\n const iconsApi = useApi(iconsApiRef);\n const tools = config.tools.map(tool => ({\n url: tool.url,\n label: tool.label,\n icon: (tool.icon && iconsApi.icon(tool.icon)) ?? <LinkIcon />,\n }));\n return <m.Content {...props} tools={tools} />;\n },\n ContextProvider: m.ContextProvider,\n })),\n });\n },\n});\n\nconst homePageStarredEntitiesWidget = HomePageWidgetBlueprint.make({\n name: 'starred-entities',\n params: {\n name: 'HomePageStarredEntities',\n title: 'Your Starred Entities',\n description: 'Shows entities you have starred in the catalog',\n components: () =>\n import('./homePageComponents/StarredEntities').then(m => ({\n Content: m.Content,\n })),\n },\n});\n\nconst homePageRandomJokeWidget = HomePageWidgetBlueprint.make({\n name: 'random-joke',\n params: {\n name: 'HomePageRandomJoke',\n title: 'Random Joke',\n description: 'Shows a random programming joke',\n components: () =>\n import('./homePageComponents/RandomJoke').then(m => ({\n Content: m.Content,\n Settings: m.Settings,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n layout: {\n height: { minRows: 4 },\n width: { minColumns: 3 },\n },\n settings: {\n schema: {\n title: 'Random Joke settings',\n type: 'object',\n properties: {\n defaultCategory: {\n title: 'Category',\n type: 'string',\n enum: ['any', 'programming', 'dad'],\n default: 'any',\n },\n },\n },\n },\n },\n});\n\nconst homePageMostVisitedWidget = HomePageWidgetBlueprint.make({\n name: 'most-visited',\n params: {\n name: 'HomePageMostVisited',\n title: 'Most Visited',\n description: 'Shows your most frequently visited pages',\n components: () =>\n import('./homePageComponents/VisitedByType/TopVisited').then(m => ({\n Content: m.Content,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n },\n});\n\nconst homePageRecentlyVisitedWidget = HomePageWidgetBlueprint.make({\n name: 'recently-visited',\n params: {\n name: 'HomePageRecentlyVisited',\n title: 'Recently Visited',\n description: 'Shows pages you have recently visited',\n components: () =>\n import('./homePageComponents/VisitedByType/RecentlyVisited').then(m => ({\n Content: m.Content,\n Actions: m.Actions,\n ContextProvider: m.ContextProvider,\n })),\n },\n});\n\nconst homePageWorldClockWidget = HomePageWidgetBlueprint.makeWithOverrides({\n name: 'world-clock',\n configSchema: {\n clockConfigs: z\n .array(\n z.object({\n label: z.string(),\n timeZone: z.string(),\n }),\n )\n .optional(),\n customTimeFormat: z\n .object({\n hour12: z.boolean().optional(),\n })\n .optional(),\n },\n *factory(originalFactory, { config }) {\n yield* originalFactory({\n name: 'HomePageWorldClock',\n title: 'World Clocks',\n description: 'Displays clocks for configured time zones',\n components: () =>\n import('./homePageComponents/WorldClock').then(m => ({\n Content: () => (\n <m.WorldClock\n clockConfigs={config.clockConfigs}\n customTimeFormat={\n config.customTimeFormat\n ? {\n hour: '2-digit',\n minute: '2-digit',\n ...config.customTimeFormat,\n }\n : undefined\n }\n />\n ),\n })),\n });\n },\n});\n\n/**\n * Home plugin for the new frontend system.\n *\n * Provides core homepage functionality with optional visit tracking extensions.\n * Visit tracking extensions are disabled by default and can be enabled via app-config.yaml.\n *\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: 'home',\n title: 'Home',\n icon: <HomeIcon />,\n info: { packageJson: () => import('../package.json') },\n extensions: [\n homePage,\n visitsApi,\n visitListenerAppRootElement,\n homePageToolkitWidget,\n homePageStarredEntitiesWidget,\n homePageRandomJokeWidget,\n homePageMostVisitedWidget,\n homePageRecentlyVisitedWidget,\n homePageWorldClockWidget,\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\nimport { homeTranslationRef as _homeTranslationRef } from './translation';\n\n/**\n * @alpha\n * @deprecated Import from `@backstage/plugin-home` instead.\n */\nexport const homeTranslationRef = _homeTranslationRef;\n"],"names":["reactLazy","_homeTranslationRef"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VisitsApi.esm.js","sources":["../../src/api/VisitsApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport { createApiRef } from '@backstage/core-plugin-api';\nimport { VisitInput } from './VisitsStorageApi';\n\n/**\n * @public\n * The operators that can be used in filter.\n */\nexport type Operators = '<' | '<=' | '==' | '!=' | '>' | '>=' | 'contains';\n\n/**\n * @public\n * Type guard for operators.\n */\nexport const isOperator = (s: string): s is Operators => {\n return ['<', '<=', '==', '!=', '>', '>=', 'contains'].includes(s);\n};\n\n/**\n * @public\n * Model for a visit entity.\n */\nexport type Visit = {\n /**\n * The auto-generated visit identification.\n */\n id: string;\n /**\n * The visited entity, usually an entity id.\n */\n name: string;\n /**\n * The visited url pathname, usually the entity route.\n */\n pathname: string;\n /**\n * An individual view count.\n */\n hits: number;\n /**\n * Last date and time of visit. Format: unix epoch in ms.\n */\n timestamp: number;\n /**\n * Optional entity reference. See stringifyEntityRef from catalog-model.\n */\n entityRef?: string;\n};\n\n/**\n * @public\n * This data structure represents the parameters associated with search queries for visits.\n */\nexport type VisitsApiQueryParams = {\n /**\n * Limits the number of results returned. The default is 8.\n */\n limit?: number;\n /**\n * Allows ordering visits on entity properties.\n * @example\n * Sort ascending by the timestamp field.\n * ```\n * { orderBy: [{ field: 'timestamp', direction: 'asc' }] }\n * ```\n */\n orderBy?: Array<{\n field: keyof Visit;\n direction: 'asc' | 'desc';\n }>;\n /**\n * Allows filtering visits on entity properties.\n * @example\n * Most popular docs on the past 7 days\n * ```\n * {\n * orderBy: [{ field: 'hits', direction: 'desc' }],\n * filterBy: [\n * { field: 'timestamp', operator: '>=', value: <date> },\n * { field: 'entityRef', operator: 'contains', value: 'docs' }\n * ]\n * }\n * ```\n */\n filterBy?: Array<{\n field: keyof Visit;\n operator: Operators;\n value: string | number;\n }>;\n};\n\n/**\n * @public\n * This data structure represents the parameters associated with saving visits.\n */\nexport type VisitsApiSaveParams = {\n visit: Omit<Visit, 'id' | 'hits' | 'timestamp'>;\n};\n\n/**\n * @public\n * Visits API public contract.\n */\nexport interface VisitsApi {\n /**\n * Persist a new visit.\n * @param pageVisit - a new visit data\n */\n save(saveParams: VisitsApiSaveParams): Promise<Visit>;\n /**\n * Get user visits.\n * @param queryParams - optional search query params.\n */\n list(queryParams?: VisitsApiQueryParams): Promise<Visit[]>;\n /**\n * Transform the pathname before it is considered for any other processing.\n * @param pathname - the original pathname\n */\n transformPathname?(pathname: string): string;\n /**\n * Determine whether a visit should be saved.\n * @param visit - page visit data\n */\n canSave?(visit: VisitInput): boolean | Promise<boolean>;\n /**\n * Add additional data to the visit before saving.\n * @param visit - page visit data\n */\n enrichVisit?(\n visit: VisitInput,\n ): Promise<Record<string, any>> | Record<string, any>;\n}\n\n/**\n * API reference for the visits tracking service.\n * Provides functionality to track and retrieve user page visit history.\n *\n * @public\n */\nexport const visitsApiRef = createApiRef<VisitsApi>({\n id: 'homepage.visits',\n});\n"],"names":[],"mappings":";;AA6BO,MAAM,UAAA,GAAa,CAAC,CAAA,KAA8B;AACvD,EAAA,OAAO,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,IAAA,EAAM,UAAU,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA;AAClE;AA2HO,MAAM,eAAe,YAAA,CAAwB;AAAA,EAClD,EAAA,EAAI;AACN,CAAC;;;;"}
1
+ {"version":3,"file":"VisitsApi.esm.js","sources":["../../src/api/VisitsApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport { createApiRef } from '@backstage/core-plugin-api';\nimport { VisitInput } from './VisitsStorageApi';\n\n/**\n * @public\n * The operators that can be used in filter.\n */\nexport type Operators = '<' | '<=' | '==' | '!=' | '>' | '>=' | 'contains';\n\n/**\n * @public\n * Type guard for operators.\n */\nexport const isOperator = (s: string): s is Operators => {\n return ['<', '<=', '==', '!=', '>', '>=', 'contains'].includes(s);\n};\n\n/**\n * @public\n * Model for a visit entity.\n */\nexport type Visit = {\n /**\n * The auto-generated visit identification.\n */\n id: string;\n /**\n * The visited entity, usually an entity id.\n */\n name: string;\n /**\n * The visited url pathname, usually the entity route.\n */\n pathname: string;\n /**\n * An individual view count.\n */\n hits: number;\n /**\n * Last date and time of visit. Format: unix epoch in ms.\n */\n timestamp: number;\n /**\n * Optional entity reference. See stringifyEntityRef from catalog-model.\n */\n entityRef?: string;\n};\n\n/**\n * @public\n * This data structure represents the parameters associated with search queries for visits.\n */\nexport type VisitsApiQueryParams = {\n /**\n * Limits the number of results returned. The default is 8.\n */\n limit?: number;\n /**\n * Allows ordering visits on entity properties.\n * @example\n * Sort ascending by the timestamp field.\n * ```\n * { orderBy: [{ field: 'timestamp', direction: 'asc' }] }\n * ```\n */\n orderBy?: Array<{\n field: keyof Visit;\n direction: 'asc' | 'desc';\n }>;\n /**\n * Allows filtering visits on entity properties.\n * @example\n * Most popular docs on the past 7 days\n * ```\n * {\n * orderBy: [{ field: 'hits', direction: 'desc' }],\n * filterBy: [\n * { field: 'timestamp', operator: '>=', value: <date> },\n * { field: 'entityRef', operator: 'contains', value: 'docs' }\n * ]\n * }\n * ```\n */\n filterBy?: Array<{\n field: keyof Visit;\n operator: Operators;\n value: string | number;\n }>;\n};\n\n/**\n * @public\n * This data structure represents the parameters associated with saving visits.\n */\nexport type VisitsApiSaveParams = {\n visit: Omit<Visit, 'id' | 'hits' | 'timestamp'>;\n};\n\n/**\n * @public\n * Visits API public contract.\n */\nexport interface VisitsApi {\n /**\n * Persist a new visit.\n * @param pageVisit - a new visit data\n */\n save(saveParams: VisitsApiSaveParams): Promise<Visit>;\n /**\n * Get user visits.\n * @param queryParams - optional search query params.\n */\n list(queryParams?: VisitsApiQueryParams): Promise<Visit[]>;\n /**\n * Transform the pathname before it is considered for any other processing.\n * @param pathname - the original pathname\n */\n transformPathname?(pathname: string): string;\n /**\n * Determine whether a visit should be saved.\n * @param visit - page visit data\n */\n canSave?(visit: VisitInput): boolean | Promise<boolean>;\n /**\n * Add additional data to the visit before saving.\n * @param visit - page visit data\n */\n enrichVisit?(\n visit: VisitInput,\n ): Promise<Record<string, any>> | Record<string, any>;\n}\n\n/**\n * API reference for the visits tracking service.\n * Provides functionality to track and retrieve user page visit history.\n *\n * @public\n */\nexport const visitsApiRef = createApiRef<VisitsApi>({\n id: 'homepage.visits',\n});\n"],"names":[],"mappings":";;AA6BO,MAAM,UAAA,GAAa,CAAC,CAAA,KAA8B;AACvD,EAAA,OAAO,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,IAAA,EAAM,UAAU,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA;AAClE;AA2HO,MAAM,eAAe,YAAA,CAAwB;AAAA,EAClD,EAAA,EAAI;AACN,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VisitsStorageApi.esm.js","sources":["../../src/api/VisitsStorageApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { IdentityApi, StorageApi } from '@backstage/core-plugin-api';\nimport {\n Visit,\n VisitsApi,\n VisitsApiQueryParams,\n VisitsApiSaveParams,\n} from './VisitsApi';\n\n/**\n * @public\n * Type definition for visit data before it's saved (without auto-generated fields)\n */\nexport type VisitInput = {\n name: string;\n pathname: string;\n entityRef?: string;\n};\n\n/** @public */\nexport type VisitsStorageApiOptions = {\n limit?: number;\n storageApi: StorageApi;\n identityApi: IdentityApi;\n transformPathname?: (pathname: string) => string;\n canSave?: (visit: VisitInput) => boolean | Promise<boolean>;\n enrichVisit?: (\n visit: VisitInput,\n ) => Promise<Record<string, any>> | Record<string, any>;\n};\n\ntype ArrayElement<A> = A extends readonly (infer T)[] ? T : never;\n\nconst DEFAULT_LIST_LIMIT = 8;\n\n/**\n * @public\n * This is an implementation of VisitsApi that relies on a StorageApi.\n * Beware that filtering and ordering are done in memory therefore it is\n * prudent to keep limit to a reasonable size.\n */\nexport class VisitsStorageApi implements VisitsApi {\n private readonly limit: number;\n private readonly storageApi: StorageApi;\n private readonly storageKeyPrefix = '@backstage/plugin-home:visits';\n private readonly identityApi: IdentityApi;\n private readonly transformPathnameImpl?: (pathname: string) => string;\n private readonly canSaveImpl?: (\n visit: VisitInput,\n ) => boolean | Promise<boolean>;\n private readonly enrichVisitImpl?: (\n visit: VisitInput,\n ) => Promise<Record<string, any>> | Record<string, any>;\n\n static create(options: VisitsStorageApiOptions) {\n return new VisitsStorageApi(options);\n }\n\n private constructor(options: VisitsStorageApiOptions) {\n this.limit = Math.abs(options.limit ?? 100);\n this.storageApi = options.storageApi;\n this.identityApi = options.identityApi;\n this.transformPathnameImpl = options.transformPathname;\n this.canSaveImpl = options.canSave;\n this.enrichVisitImpl = options.enrichVisit;\n }\n\n /**\n * Returns a list of visits through the visitsApi\n */\n async list(queryParams?: VisitsApiQueryParams): Promise<Visit[]> {\n let visits = [...(await this.retrieveAll())];\n\n // reversing order to guarantee orderBy priority\n (queryParams?.orderBy ?? []).reverse().forEach(order => {\n if (order.direction === 'asc') {\n visits.sort((a, b) => this.compare(order, a, b));\n } else {\n visits.sort((a, b) => this.compare(order, b, a));\n }\n });\n\n // reversing order to guarantee filterBy priority\n (queryParams?.filterBy ?? []).reverse().forEach(filter => {\n visits = visits.filter(visit => {\n const field = visit[filter.field] as number | string;\n if (filter.operator === '>') return field > filter.value;\n if (filter.operator === '>=') return field >= filter.value;\n if (filter.operator === '<') return field < filter.value;\n if (filter.operator === '<=') return field <= filter.value;\n if (filter.operator === '==') return field === filter.value;\n if (filter.operator === '!=') return field !== filter.value;\n if (filter.operator === 'contains')\n return `${field}`.includes(`${filter.value}`);\n return false;\n });\n });\n\n return visits.slice(0, queryParams?.limit ?? DEFAULT_LIST_LIMIT);\n }\n\n /**\n * Transform the pathname before it is considered for any other processing.\n * @param pathname - the original pathname\n * @returns the transformed pathname\n */\n transformPathname(pathname: string): string {\n return this.transformPathnameImpl?.(pathname) ?? pathname;\n }\n\n /**\n * Determine whether a visit should be saved.\n * @param visit - page visit data\n */\n async canSave(visit: VisitInput): Promise<boolean> {\n if (!this.canSaveImpl) {\n return true;\n }\n return Promise.resolve(this.canSaveImpl(visit));\n }\n\n /**\n * Add additional data to the visit before saving.\n * @param visit - page visit data\n */\n async enrichVisit(visit: VisitInput): Promise<Record<string, any>> {\n if (!this.enrichVisitImpl) {\n return {};\n }\n return Promise.resolve(this.enrichVisitImpl(visit));\n }\n\n /**\n * Saves a visit through the visitsApi\n */\n async save(saveParams: VisitsApiSaveParams): Promise<Visit> {\n let visit = saveParams.visit;\n\n // Transform pathname if needed\n visit = {\n ...visit,\n pathname: this.transformPathname(visit.pathname),\n };\n\n // Check if visit should be saved\n if (!(await this.canSave(visit))) {\n // Return a minimal visit object without saving\n return {\n ...visit,\n id: '',\n hits: 0,\n timestamp: Date.now(),\n };\n }\n\n // Enrich the visit\n const enrichedData = await this.enrichVisit(visit);\n const enrichedVisit = { ...visit, ...enrichedData };\n\n const visits: Visit[] = [...(await this.retrieveAll())];\n\n const visitToSave: Visit = {\n ...enrichedVisit,\n id: window.crypto.randomUUID(),\n hits: 1,\n timestamp: Date.now(),\n };\n\n // Updates entry if pathname is already registered\n const visitIndex = visits.findIndex(\n e => e.pathname === visitToSave.pathname,\n );\n if (visitIndex >= 0) {\n visitToSave.id = visits[visitIndex].id;\n visitToSave.hits = visits[visitIndex].hits + 1;\n visits[visitIndex] = visitToSave;\n } else {\n visits.push(visitToSave);\n }\n\n // Sort by time, most recent first\n visits.sort((a, b) => b.timestamp - a.timestamp);\n // Keep the most recent items up to limit\n await this.persistAll(visits.splice(0, this.limit));\n return visitToSave;\n }\n\n private async persistAll(visits: Array<Visit>) {\n const storageKey = await this.getStorageKey();\n return this.storageApi.set<Array<Visit>>(storageKey, visits);\n }\n\n private async retrieveAll(): Promise<Array<Visit>> {\n const storageKey = await this.getStorageKey();\n // Handles for case when snapshot is and is not referenced per storage type used\n const snapshot = this.storageApi.snapshot<Array<Visit>>(storageKey);\n if (snapshot?.presence !== 'unknown') {\n return snapshot?.value ?? [];\n }\n\n return new Promise((resolve, reject) => {\n const subscription = this.storageApi\n .observe$<Visit[]>(storageKey)\n .subscribe({\n next: next => {\n const visits = next.value ?? [];\n subscription.unsubscribe();\n resolve(visits);\n },\n error: err => {\n subscription.unsubscribe();\n reject(err);\n },\n });\n });\n }\n\n private async getStorageKey(): Promise<string> {\n const { userEntityRef } = await this.identityApi.getBackstageIdentity();\n const storageKey = `${this.storageKeyPrefix}:${userEntityRef}`;\n return storageKey;\n }\n\n // This assumes Visit fields are either numbers or strings\n private compare(\n order: ArrayElement<VisitsApiQueryParams['orderBy']>,\n a: Visit,\n b: Visit,\n ): number {\n const isNumber = typeof a[order.field] === 'number';\n return isNumber\n ? (a[order.field] as number) - (b[order.field] as number)\n : `${a[order.field]}`.localeCompare(`${b[order.field]}`);\n }\n}\n"],"names":[],"mappings":"AA+CA,MAAM,kBAAA,GAAqB,CAAA;AAQpB,MAAM,gBAAA,CAAsC;AAAA,EAChC,KAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA,GAAmB,+BAAA;AAAA,EACnB,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EAGA,eAAA;AAAA,EAIjB,OAAO,OAAO,OAAA,EAAkC;AAC9C,IAAA,OAAO,IAAI,iBAAiB,OAAO,CAAA;AAAA,EACrC;AAAA,EAEQ,YAAY,OAAA,EAAkC;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,SAAS,GAAG,CAAA;AAC1C,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA;AAC1B,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,wBAAwB,OAAA,CAAQ,iBAAA;AACrC,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,OAAA;AAC3B,IAAA,IAAA,CAAK,kBAAkB,OAAA,CAAQ,WAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,WAAA,EAAsD;AAC/D,IAAA,IAAI,SAAS,CAAC,GAAI,MAAM,IAAA,CAAK,aAAc,CAAA;AAG3C,IAAA,CAAC,aAAa,OAAA,IAAW,IAAI,OAAA,EAAQ,CAAE,QAAQ,CAAA,KAAA,KAAS;AACtD,MAAA,IAAI,KAAA,CAAM,cAAc,KAAA,EAAO;AAC7B,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACjD,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACjD;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,CAAC,aAAa,QAAA,IAAY,IAAI,OAAA,EAAQ,CAAE,QAAQ,CAAA,MAAA,KAAU;AACxD,MAAA,MAAA,GAAS,MAAA,CAAO,OAAO,CAAA,KAAA,KAAS;AAC9B,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAChC,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,GAAA,EAAK,OAAO,QAAQ,MAAA,CAAO,KAAA;AACnD,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,IAAA,EAAM,OAAO,SAAS,MAAA,CAAO,KAAA;AACrD,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,GAAA,EAAK,OAAO,QAAQ,MAAA,CAAO,KAAA;AACnD,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,IAAA,EAAM,OAAO,SAAS,MAAA,CAAO,KAAA;AACrD,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,IAAA,EAAM,OAAO,UAAU,MAAA,CAAO,KAAA;AACtD,QAAA,IAAI,MAAA,CAAO,QAAA,KAAa,IAAA,EAAM,OAAO,UAAU,MAAA,CAAO,KAAA;AACtD,QAAA,IAAI,OAAO,QAAA,KAAa,UAAA;AACtB,UAAA,OAAO,GAAG,KAAK,CAAA,CAAA,CAAG,SAAS,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAC9C,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,WAAA,EAAa,SAAS,kBAAkB,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,QAAA,EAA0B;AAC1C,IAAA,OAAO,IAAA,CAAK,qBAAA,GAAwB,QAAQ,CAAA,IAAK,QAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ,KAAA,EAAqC;AACjD,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAY,KAAA,EAAiD;AACjE,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,UAAA,EAAiD;AAC1D,IAAA,IAAI,QAAQ,UAAA,CAAW,KAAA;AAGvB,IAAA,KAAA,GAAQ;AAAA,MACN,GAAG,KAAA;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,QAAQ;AAAA,KACjD;AAGA,IAAA,IAAI,CAAE,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAI;AAEhC,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,EAAA,EAAI,EAAA;AAAA,QACJ,IAAA,EAAM,CAAA;AAAA,QACN,SAAA,EAAW,KAAK,GAAA;AAAI,OACtB;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AACjD,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,EAAO,GAAG,YAAA,EAAa;AAElD,IAAA,MAAM,SAAkB,CAAC,GAAI,MAAM,IAAA,CAAK,aAAc,CAAA;AAEtD,IAAA,MAAM,WAAA,GAAqB;AAAA,MACzB,GAAG,aAAA;AAAA,MACH,EAAA,EAAI,MAAA,CAAO,MAAA,CAAO,UAAA,EAAW;AAAA,MAC7B,IAAA,EAAM,CAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAGA,IAAA,MAAM,aAAa,MAAA,CAAO,SAAA;AAAA,MACxB,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,KAAa,WAAA,CAAY;AAAA,KAClC;AACA,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,WAAA,CAAY,EAAA,GAAK,MAAA,CAAO,UAAU,CAAA,CAAE,EAAA;AACpC,MAAA,WAAA,CAAY,IAAA,GAAO,MAAA,CAAO,UAAU,CAAA,CAAE,IAAA,GAAO,CAAA;AAC7C,MAAA,MAAA,CAAO,UAAU,CAAA,GAAI,WAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AAGA,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAE/C,IAAA,MAAM,KAAK,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA;AAClD,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,MAAc,WAAW,MAAA,EAAsB;AAC7C,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,aAAA,EAAc;AAC5C,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAkB,UAAA,EAAY,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAc,WAAA,GAAqC;AACjD,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,aAAA,EAAc;AAE5C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,QAAA,CAAuB,UAAU,CAAA;AAClE,IAAA,IAAI,QAAA,EAAU,aAAa,SAAA,EAAW;AACpC,MAAA,OAAO,QAAA,EAAU,SAAS,EAAC;AAAA,IAC7B;AAEA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,MAAM,eAAe,IAAA,CAAK,UAAA,CACvB,QAAA,CAAkB,UAAU,EAC5B,SAAA,CAAU;AAAA,QACT,MAAM,CAAA,IAAA,KAAQ;AACZ,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,IAAS,EAAC;AAC9B,UAAA,YAAA,CAAa,WAAA,EAAY;AACzB,UAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,QAChB,CAAA;AAAA,QACA,OAAO,CAAA,GAAA,KAAO;AACZ,UAAA,YAAA,CAAa,WAAA,EAAY;AACzB,UAAA,MAAA,CAAO,GAAG,CAAA;AAAA,QACZ;AAAA,OACD,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,aAAA,GAAiC;AAC7C,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,IAAA,CAAK,YAAY,oBAAA,EAAqB;AACtE,IAAA,MAAM,UAAA,GAAa,CAAA,EAAG,IAAA,CAAK,gBAAgB,IAAI,aAAa,CAAA,CAAA;AAC5D,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA,EAGQ,OAAA,CACN,KAAA,EACA,CAAA,EACA,CAAA,EACQ;AACR,IAAA,MAAM,QAAA,GAAW,OAAO,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA,KAAM,QAAA;AAC3C,IAAA,OAAO,QAAA,GACF,EAAE,KAAA,CAAM,KAAK,IAAgB,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA,GAC3C,CAAA,EAAG,EAAE,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,CAAG,aAAA,CAAc,GAAG,CAAA,CAAE,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AACF;;;;"}
1
+ {"version":3,"file":"VisitsStorageApi.esm.js","sources":["../../src/api/VisitsStorageApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { IdentityApi, StorageApi } from '@backstage/core-plugin-api';\nimport {\n Visit,\n VisitsApi,\n VisitsApiQueryParams,\n VisitsApiSaveParams,\n} from './VisitsApi';\n\n/**\n * @public\n * Type definition for visit data before it's saved (without auto-generated fields)\n */\nexport type VisitInput = {\n name: string;\n pathname: string;\n entityRef?: string;\n};\n\n/** @public */\nexport type VisitsStorageApiOptions = {\n limit?: number;\n storageApi: StorageApi;\n identityApi: IdentityApi;\n transformPathname?: (pathname: string) => string;\n canSave?: (visit: VisitInput) => boolean | Promise<boolean>;\n enrichVisit?: (\n visit: VisitInput,\n ) => Promise<Record<string, any>> | Record<string, any>;\n};\n\ntype ArrayElement<A> = A extends readonly (infer T)[] ? T : never;\n\nconst DEFAULT_LIST_LIMIT = 8;\n\n/**\n * @public\n * This is an implementation of VisitsApi that relies on a StorageApi.\n * Beware that filtering and ordering are done in memory therefore it is\n * prudent to keep limit to a reasonable size.\n */\nexport class VisitsStorageApi implements VisitsApi {\n private readonly limit: number;\n private readonly storageApi: StorageApi;\n private readonly storageKeyPrefix = '@backstage/plugin-home:visits';\n private readonly identityApi: IdentityApi;\n private readonly transformPathnameImpl?: (pathname: string) => string;\n private readonly canSaveImpl?: (\n visit: VisitInput,\n ) => boolean | Promise<boolean>;\n private readonly enrichVisitImpl?: (\n visit: VisitInput,\n ) => Promise<Record<string, any>> | Record<string, any>;\n\n static create(options: VisitsStorageApiOptions) {\n return new VisitsStorageApi(options);\n }\n\n private constructor(options: VisitsStorageApiOptions) {\n this.limit = Math.abs(options.limit ?? 100);\n this.storageApi = options.storageApi;\n this.identityApi = options.identityApi;\n this.transformPathnameImpl = options.transformPathname;\n this.canSaveImpl = options.canSave;\n this.enrichVisitImpl = options.enrichVisit;\n }\n\n /**\n * Returns a list of visits through the visitsApi\n */\n async list(queryParams?: VisitsApiQueryParams): Promise<Visit[]> {\n let visits = [...(await this.retrieveAll())];\n\n // reversing order to guarantee orderBy priority\n (queryParams?.orderBy ?? []).reverse().forEach(order => {\n if (order.direction === 'asc') {\n visits.sort((a, b) => this.compare(order, a, b));\n } else {\n visits.sort((a, b) => this.compare(order, b, a));\n }\n });\n\n // reversing order to guarantee filterBy priority\n (queryParams?.filterBy ?? []).reverse().forEach(filter => {\n visits = visits.filter(visit => {\n const field = visit[filter.field] as number | string;\n if (filter.operator === '>') return field > filter.value;\n if (filter.operator === '>=') return field >= filter.value;\n if (filter.operator === '<') return field < filter.value;\n if (filter.operator === '<=') return field <= filter.value;\n if (filter.operator === '==') return field === filter.value;\n if (filter.operator === '!=') return field !== filter.value;\n if (filter.operator === 'contains')\n return `${field}`.includes(`${filter.value}`);\n return false;\n });\n });\n\n return visits.slice(0, queryParams?.limit ?? DEFAULT_LIST_LIMIT);\n }\n\n /**\n * Transform the pathname before it is considered for any other processing.\n * @param pathname - the original pathname\n * @returns the transformed pathname\n */\n transformPathname(pathname: string): string {\n return this.transformPathnameImpl?.(pathname) ?? pathname;\n }\n\n /**\n * Determine whether a visit should be saved.\n * @param visit - page visit data\n */\n async canSave(visit: VisitInput): Promise<boolean> {\n if (!this.canSaveImpl) {\n return true;\n }\n return Promise.resolve(this.canSaveImpl(visit));\n }\n\n /**\n * Add additional data to the visit before saving.\n * @param visit - page visit data\n */\n async enrichVisit(visit: VisitInput): Promise<Record<string, any>> {\n if (!this.enrichVisitImpl) {\n return {};\n }\n return Promise.resolve(this.enrichVisitImpl(visit));\n }\n\n /**\n * Saves a visit through the visitsApi\n */\n async save(saveParams: VisitsApiSaveParams): Promise<Visit> {\n let visit = saveParams.visit;\n\n // Transform pathname if needed\n visit = {\n ...visit,\n pathname: this.transformPathname(visit.pathname),\n };\n\n // Check if visit should be saved\n if (!(await this.canSave(visit))) {\n // Return a minimal visit object without saving\n return {\n ...visit,\n id: '',\n hits: 0,\n timestamp: Date.now(),\n };\n }\n\n // Enrich the visit\n const enrichedData = await this.enrichVisit(visit);\n const enrichedVisit = { ...visit, ...enrichedData };\n\n const visits: Visit[] = [...(await this.retrieveAll())];\n\n const visitToSave: Visit = {\n ...enrichedVisit,\n id: window.crypto.randomUUID(),\n hits: 1,\n timestamp: Date.now(),\n };\n\n // Updates entry if pathname is already registered\n const visitIndex = visits.findIndex(\n e => e.pathname === visitToSave.pathname,\n );\n if (visitIndex >= 0) {\n visitToSave.id = visits[visitIndex].id;\n visitToSave.hits = visits[visitIndex].hits + 1;\n visits[visitIndex] = visitToSave;\n } else {\n visits.push(visitToSave);\n }\n\n // Sort by time, most recent first\n visits.sort((a, b) => b.timestamp - a.timestamp);\n // Keep the most recent items up to limit\n await this.persistAll(visits.splice(0, this.limit));\n return visitToSave;\n }\n\n private async persistAll(visits: Array<Visit>) {\n const storageKey = await this.getStorageKey();\n return this.storageApi.set<Array<Visit>>(storageKey, visits);\n }\n\n private async retrieveAll(): Promise<Array<Visit>> {\n const storageKey = await this.getStorageKey();\n // Handles for case when snapshot is and is not referenced per storage type used\n const snapshot = this.storageApi.snapshot<Array<Visit>>(storageKey);\n if (snapshot?.presence !== 'unknown') {\n return snapshot?.value ?? [];\n }\n\n return new Promise((resolve, reject) => {\n const subscription = this.storageApi\n .observe$<Visit[]>(storageKey)\n .subscribe({\n next: next => {\n const visits = next.value ?? [];\n subscription.unsubscribe();\n resolve(visits);\n },\n error: err => {\n subscription.unsubscribe();\n reject(err);\n },\n });\n });\n }\n\n private async getStorageKey(): Promise<string> {\n const { userEntityRef } = await this.identityApi.getBackstageIdentity();\n const storageKey = `${this.storageKeyPrefix}:${userEntityRef}`;\n return storageKey;\n }\n\n // This assumes Visit fields are either numbers or strings\n private compare(\n order: ArrayElement<VisitsApiQueryParams['orderBy']>,\n a: Visit,\n b: Visit,\n ): number {\n const isNumber = typeof a[order.field] === 'number';\n return isNumber\n ? (a[order.field] as number) - (b[order.field] as number)\n : `${a[order.field]}`.localeCompare(`${b[order.field]}`);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VisitsWebStorageApi.esm.js","sources":["../../src/api/VisitsWebStorageApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { ErrorApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { VisitsStorageApi } from './VisitsStorageApi';\nimport { WebStorage } from '@backstage/core-app-api';\n\n/** @public */\nexport type VisitsWebStorageApiOptions = {\n limit?: number;\n identityApi: IdentityApi;\n errorApi: ErrorApi;\n};\n\n/**\n * @public\n * This is a reference implementation of VisitsApi using WebStorage.\n */\nexport class VisitsWebStorageApi {\n static create(options: VisitsWebStorageApiOptions) {\n return VisitsStorageApi.create({\n limit: options.limit,\n identityApi: options.identityApi,\n storageApi: WebStorage.create({ errorApi: options.errorApi }),\n });\n }\n}\n"],"names":[],"mappings":";;;AA8BO,MAAM,mBAAA,CAAoB;AAAA,EAC/B,OAAO,OAAO,OAAA,EAAqC;AACjD,IAAA,OAAO,iBAAiB,MAAA,CAAO;AAAA,MAC7B,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAY,UAAA,CAAW,MAAA,CAAO,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAU;AAAA,KAC7D,CAAA;AAAA,EACH;AACF;;;;"}
1
+ {"version":3,"file":"VisitsWebStorageApi.esm.js","sources":["../../src/api/VisitsWebStorageApi.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { ErrorApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { VisitsStorageApi } from './VisitsStorageApi';\nimport { WebStorage } from '@backstage/core-app-api';\n\n/** @public */\nexport type VisitsWebStorageApiOptions = {\n limit?: number;\n identityApi: IdentityApi;\n errorApi: ErrorApi;\n};\n\n/**\n * @public\n * This is a reference implementation of VisitsApi using WebStorage.\n */\nexport class VisitsWebStorageApi {\n static create(options: VisitsWebStorageApiOptions) {\n return VisitsStorageApi.create({\n limit: options.limit,\n identityApi: options.identityApi,\n storageApi: WebStorage.create({ errorApi: options.errorApi }),\n });\n }\n}\n"],"names":[],"mappings":";;;AA8BO,MAAM,mBAAA,CAAoB;AAAA,EAC/B,OAAO,OAAO,OAAA,EAAqC;AACjD,IAAA,OAAO,iBAAiB,MAAA,CAAO;AAAA,MAC7B,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,YAAY,UAAA,CAAW,MAAA,CAAO,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAU;AAAA,KAC7D,CAAA;AAAA,EACH;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.esm.js","sources":["../../src/api/config.ts"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport {\n Visit,\n VisitsApiQueryParams,\n Operators,\n isOperator,\n} from './VisitsApi';\nimport { Config } from '@backstage/config';\n\n/**\n * Reads a single FilterBy config.\n *\n * @param config - The single config object\n *\n * @public\n */\n\nexport function readFilterConfig(config: Config):\n | {\n field: keyof Visit;\n operator: Operators;\n value: string | number;\n }\n | undefined {\n try {\n const field = config.getString('field') as keyof Visit;\n const operator = config.getString('operator');\n const value = getValue(config);\n if (isOperator(operator) && value !== undefined) {\n return { field, operator, value };\n }\n return undefined;\n } catch (error) {\n // invalid filter config - ignore filter\n return undefined;\n }\n}\n\nfunction getValue(config: Config) {\n let value = undefined;\n try {\n value = config.getString('value');\n } catch (error) {\n try {\n value = config.getNumber('value');\n } catch {\n // value is not string or number - ignore filter\n }\n }\n return value;\n}\n\n/**\n * Reads a set of filter by configs.\n *\n * @param configs - All of the config objects\n *\n * @public\n */\nexport function createFilterByQueryParamFromConfig(\n configs: Config[],\n): VisitsApiQueryParams['filterBy'] | undefined {\n try {\n return configs\n .map(readFilterConfig)\n .filter(Boolean) as VisitsApiQueryParams['filterBy'];\n } catch {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;AAgCO,SAAS,iBAAiB,MAAA,EAMnB;AACZ,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAC7B,IAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,IAAK,KAAA,KAAU,KAAA,CAAA,EAAW;AAC/C,MAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,OAAO,KAAA,CAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAEd,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,SAAS,MAAA,EAAgB;AAChC,EAAA,IAAI,KAAA,GAAQ,MAAA;AACZ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,mCACd,OAAA,EAC8C;AAC9C,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,gBAAgB,CAAA,CACpB,OAAO,OAAO,CAAA;AAAA,EACnB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"config.esm.js","sources":["../../src/api/config.ts"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport {\n Visit,\n VisitsApiQueryParams,\n Operators,\n isOperator,\n} from './VisitsApi';\nimport { Config } from '@backstage/config';\n\n/**\n * Reads a single FilterBy config.\n *\n * @param config - The single config object\n *\n * @public\n */\n\nexport function readFilterConfig(config: Config):\n | {\n field: keyof Visit;\n operator: Operators;\n value: string | number;\n }\n | undefined {\n try {\n const field = config.getString('field') as keyof Visit;\n const operator = config.getString('operator');\n const value = getValue(config);\n if (isOperator(operator) && value !== undefined) {\n return { field, operator, value };\n }\n return undefined;\n } catch (error) {\n // invalid filter config - ignore filter\n return undefined;\n }\n}\n\nfunction getValue(config: Config) {\n let value = undefined;\n try {\n value = config.getString('value');\n } catch (error) {\n try {\n value = config.getNumber('value');\n } catch {\n // value is not string or number - ignore filter\n }\n }\n return value;\n}\n\n/**\n * Reads a set of filter by configs.\n *\n * @param configs - All of the config objects\n *\n * @public\n */\nexport function createFilterByQueryParamFromConfig(\n configs: Config[],\n): VisitsApiQueryParams['filterBy'] | undefined {\n try {\n return configs\n .map(readFilterConfig)\n .filter(Boolean) as VisitsApiQueryParams['filterBy'];\n } catch {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;AAgCO,SAAS,iBAAiB,MAAA,EAMnB;AACZ,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAC7B,IAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,IAAK,KAAA,KAAU,KAAA,CAAA,EAAW;AAC/C,MAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,OAAO,KAAA,CAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAEd,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,SAAS,MAAA,EAAgB;AAChC,EAAA,IAAI,KAAA,GAAQ,MAAA;AACZ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,mCACd,OAAA,EAC8C;AAC9C,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,gBAAgB,CAAA,CACpB,OAAO,OAAO,CAAA;AAAA,EACnB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateBackstageLogo.esm.js","sources":["../../src/assets/TemplateBackstageLogo.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\n\n/** @public */\nexport const TemplateBackstageLogo = (props: {\n classes: {\n svg: string;\n path: string;\n };\n}) => {\n return (\n <svg\n className={props.classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2079.95 456.05\"\n >\n <path\n className={props.classes.path}\n d=\"M302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Zm241-88.84q7.94,0,17.09.17t18.12,1a139.3,139.3,0,0,1,16.74,2.57,42.78,42.78,0,0,1,13.3,5.14,64.27,64.27,0,0,1,20.54,19.89Q662,168,662,186.54q0,19.54-9.49,33.78t-27.1,21.09v.68q22.78,4.82,34.87,20.58t12.08,38.4a72.62,72.62,0,0,1-4.83,26.06,65.29,65.29,0,0,1-14.33,22.46,71.57,71.57,0,0,1-23.47,15.78q-14,6-32.28,6H478.38V126.54Zm9,105.27q28,0,40.21-9.78t12.26-29.31q0-13-4.14-20.58a29.47,29.47,0,0,0-11.4-11.66A45,45,0,0,0,597,155.17a161.2,161.2,0,0,0-20.19-1.2h-65.6v77.84Zm16.57,112.13q21.74,0,34-11.66T639.59,300q0-12-4.48-19.88a34.85,34.85,0,0,0-11.91-12.52,50.14,50.14,0,0,0-17.09-6.52,105,105,0,0,0-20-1.88H511.17v84.7Zm274.79,26.74q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58A41.19,41.19,0,0,1,705,348.56q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.08-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7T736.6,249.29H707.26q.69-16.46,6.9-27.77a52.21,52.21,0,0,1,16.57-18.35,70,70,0,0,1,23.65-10.11A125.51,125.51,0,0,1,782.86,190a168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7A41.23,41.23,0,0,1,844,213.59q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-18,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.5,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14ZM1002.07,225q-11.05-9.25-29.69-9.26-15.89,0-26.58,5.83A47.29,47.29,0,0,0,928.71,237a64.66,64.66,0,0,0-9.15,22.12A119.83,119.83,0,0,0,916.8,285a98.22,98.22,0,0,0,2.93,24,64.18,64.18,0,0,0,9.15,20.74,46.2,46.2,0,0,0,16.23,14.58q10,5.49,23.82,5.48,21.75,0,34-11.31t15-31.89h30q-4.83,32.91-24.68,50.75t-54,17.83q-20.37,0-36.07-6.52A69.86,69.86,0,0,1,907,350.11a79.92,79.92,0,0,1-15.88-28.63A118.64,118.64,0,0,1,885.73,285a129.41,129.41,0,0,1,5.18-37.21,85.63,85.63,0,0,1,15.71-30.17A73.46,73.46,0,0,1,933,197.35Q948.91,190,970,190a108.54,108.54,0,0,1,28.48,3.6,69.59,69.59,0,0,1,23.48,11.15,61,61,0,0,1,16.74,19q6.55,11.49,8.29,27.26h-30.38Q1013.11,234.21,1002.07,225Zm109.77-98.41v145l81.47-77.49h39.36l-70.77,64.46,75.95,112.82h-37.29l-61.1-92.59-27.62,25.38v67.21H1082.5V126.54Zm170.54,205.22a31.07,31.07,0,0,0,10.87,10.63,49,49,0,0,0,15.19,5.66,87.06,87.06,0,0,0,17.44,1.71,109.18,109.18,0,0,0,14.5-1,53.22,53.22,0,0,0,14-3.78,26.27,26.27,0,0,0,10.53-8q4.14-5.32,4.14-13.55,0-11.31-8.63-17.14a73.69,73.69,0,0,0-21.58-9.43q-12.94-3.6-28.13-6.52a146,146,0,0,1-28.14-8.23A58.16,58.16,0,0,1,1261,267.13q-8.64-9.6-8.63-26.75,0-13.38,6-23a49.26,49.26,0,0,1,15.53-15.61,71.76,71.76,0,0,1,21.4-8.91A99.41,99.41,0,0,1,1319,190a141.31,141.31,0,0,1,28,2.58,64.85,64.85,0,0,1,22.62,8.91,46.16,46.16,0,0,1,15.7,17.15q5.87,10.8,6.91,26.91h-29.35q-.69-8.57-4.48-14.23a29.36,29.36,0,0,0-9.67-9.08,44.16,44.16,0,0,0-12.94-5,67.68,67.68,0,0,0-14.33-1.54,87.29,87.29,0,0,0-13.29,1,45.28,45.28,0,0,0-12.26,3.6,24.49,24.49,0,0,0-9,6.86q-3.46,4.29-3.46,11.14a16.32,16.32,0,0,0,5.36,12.52,42.75,42.75,0,0,0,13.63,8.23,120,120,0,0,0,18.64,5.48q10.37,2.24,20.72,4.63,11,2.4,21.57,5.83A70.74,70.74,0,0,1,1382,284.1a44.55,44.55,0,0,1,13.12,14.23q5,8.58,5,21.26,0,16.13-6.73,26.75a52.5,52.5,0,0,1-17.61,17.14,73.89,73.89,0,0,1-24.51,9.09,146.3,146.3,0,0,1-27.1,2.57,126.24,126.24,0,0,1-28.31-3.09A69.56,69.56,0,0,1,1272,361.94a51.74,51.74,0,0,1-16.57-18.52q-6.21-11.49-6.9-27.95h29.34A32.65,32.65,0,0,0,1282.38,331.76Zm226.46-137.67v25.72h-35.56V329.88a31.37,31.37,0,0,0,.87,8.23,8.42,8.42,0,0,0,3.28,4.8,14.61,14.61,0,0,0,6.73,2.23,99.19,99.19,0,0,0,11.22.51h13.46v25.72H1486.4a105.8,105.8,0,0,1-19.5-1.55,28.65,28.65,0,0,1-13.12-5.65,24.09,24.09,0,0,1-7.42-11.66q-2.43-7.54-2.42-19.89V219.81h-30.38V194.09h30.38V140.94h29.34v53.15ZM1699.4,370.68q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58,41.19,41.19,0,0,1-12.6-15.26q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.07-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7t-13.46,26.57h-29.34q.67-16.46,6.9-27.77A52.21,52.21,0,0,1,1562,203.17a70,70,0,0,1,23.65-10.11,125.51,125.51,0,0,1,28.48-3.09,168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7,41.23,41.23,0,0,1,15.53,14.89q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-17.95,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.51,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14Zm208.85,141.62q-20,21.6-62.83,21.6a122.11,122.11,0,0,1-25.37-2.74,78,78,0,0,1-23.48-8.92,54.41,54.41,0,0,1-17.43-16.11q-6.91-10-7.6-24.35h29.35a21.47,21.47,0,0,0,5,13.38,36.67,36.67,0,0,0,11.4,8.91,55.52,55.52,0,0,0,14.67,5,79.51,79.51,0,0,0,15.19,1.55q14.49,0,24.51-5A46,46,0,0,0,1840.59,401a56.53,56.53,0,0,0,9.49-21.09,117.46,117.46,0,0,0,2.94-27.09V341.19h-.7q-7.59,16.46-23,24.18a71.8,71.8,0,0,1-32.63,7.71q-20,0-34.86-7.2A72.88,72.88,0,0,1,1737,346.51a82.13,82.13,0,0,1-15-28.46,116.62,116.62,0,0,1-5-34.47,133.92,133.92,0,0,1,4.14-32.4A88.17,88.17,0,0,1,1735,221a75.49,75.49,0,0,1,25.55-22.29q15.87-8.75,39-8.75a66.21,66.21,0,0,1,31.07,7.38,52.13,52.13,0,0,1,22.09,22.11h.35V194.09h27.61V356.28Q1880.63,399.83,1860.61,421.43Zm-37.46-79.72a47.94,47.94,0,0,0,16.4-15.78,71.89,71.89,0,0,0,9.15-22.11,106.77,106.77,0,0,0,2.93-24.69,96.71,96.71,0,0,0-2.76-23,64,64,0,0,0-8.8-20.4,45.76,45.76,0,0,0-15.71-14.57q-9.66-5.49-23.47-5.49-14.16,0-24.17,5.32a46.77,46.77,0,0,0-16.4,14.23,60.14,60.14,0,0,0-9.32,20.57,99.69,99.69,0,0,0-2.93,24.35,120.63,120.63,0,0,0,2.42,24,67.5,67.5,0,0,0,8.28,21.77,46.37,46.37,0,0,0,15.54,15.78q9.66,6,24.16,6T1823.15,341.71Zm228,18.34q-20,15.09-50.41,15.09-21.4,0-37.11-6.86a73.16,73.16,0,0,1-26.41-19.2,81.52,81.52,0,0,1-16-29.49,141.12,141.12,0,0,1-6-37.38,106.1,106.1,0,0,1,6.21-37A88.56,88.56,0,0,1,1938.8,216a79.09,79.09,0,0,1,26.58-19.2A81.66,81.66,0,0,1,1999,190q23.82,0,39.53,9.78a78,78,0,0,1,25.2,24.86,98.18,98.18,0,0,1,13.12,32.91,140.6,140.6,0,0,1,2.93,34h-133.6a70,70,0,0,0,2.76,22.12,49.9,49.9,0,0,0,10,18.51A49.1,49.1,0,0,0,1976.6,345q10.7,4.82,25.2,4.8,18.65,0,30.55-8.57t15.71-26.06h29Q2071.18,345,2051.17,360.05Zm-7.08-113.84a50,50,0,0,0-10.7-16,53.1,53.1,0,0,0-56.62-10.63,47.48,47.48,0,0,0-15.71,10.81,51.69,51.69,0,0,0-10.35,15.94,60.18,60.18,0,0,0-4.49,19.37h102.53A59.47,59.47,0,0,0,2044.09,246.21ZM302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Z\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAiBO,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAKhC;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,MACzB,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,oBAAA;AAAA,MAER,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,MAAM,OAAA,CAAQ,IAAA;AAAA,UACzB,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"TemplateBackstageLogo.esm.js","sources":["../../src/assets/TemplateBackstageLogo.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\n\n/** @public */\nexport const TemplateBackstageLogo = (props: {\n classes: {\n svg: string;\n path: string;\n };\n}) => {\n return (\n <svg\n className={props.classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2079.95 456.05\"\n >\n <path\n className={props.classes.path}\n d=\"M302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Zm241-88.84q7.94,0,17.09.17t18.12,1a139.3,139.3,0,0,1,16.74,2.57,42.78,42.78,0,0,1,13.3,5.14,64.27,64.27,0,0,1,20.54,19.89Q662,168,662,186.54q0,19.54-9.49,33.78t-27.1,21.09v.68q22.78,4.82,34.87,20.58t12.08,38.4a72.62,72.62,0,0,1-4.83,26.06,65.29,65.29,0,0,1-14.33,22.46,71.57,71.57,0,0,1-23.47,15.78q-14,6-32.28,6H478.38V126.54Zm9,105.27q28,0,40.21-9.78t12.26-29.31q0-13-4.14-20.58a29.47,29.47,0,0,0-11.4-11.66A45,45,0,0,0,597,155.17a161.2,161.2,0,0,0-20.19-1.2h-65.6v77.84Zm16.57,112.13q21.74,0,34-11.66T639.59,300q0-12-4.48-19.88a34.85,34.85,0,0,0-11.91-12.52,50.14,50.14,0,0,0-17.09-6.52,105,105,0,0,0-20-1.88H511.17v84.7Zm274.79,26.74q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58A41.19,41.19,0,0,1,705,348.56q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.08-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7T736.6,249.29H707.26q.69-16.46,6.9-27.77a52.21,52.21,0,0,1,16.57-18.35,70,70,0,0,1,23.65-10.11A125.51,125.51,0,0,1,782.86,190a168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7A41.23,41.23,0,0,1,844,213.59q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-18,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.5,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14ZM1002.07,225q-11.05-9.25-29.69-9.26-15.89,0-26.58,5.83A47.29,47.29,0,0,0,928.71,237a64.66,64.66,0,0,0-9.15,22.12A119.83,119.83,0,0,0,916.8,285a98.22,98.22,0,0,0,2.93,24,64.18,64.18,0,0,0,9.15,20.74,46.2,46.2,0,0,0,16.23,14.58q10,5.49,23.82,5.48,21.75,0,34-11.31t15-31.89h30q-4.83,32.91-24.68,50.75t-54,17.83q-20.37,0-36.07-6.52A69.86,69.86,0,0,1,907,350.11a79.92,79.92,0,0,1-15.88-28.63A118.64,118.64,0,0,1,885.73,285a129.41,129.41,0,0,1,5.18-37.21,85.63,85.63,0,0,1,15.71-30.17A73.46,73.46,0,0,1,933,197.35Q948.91,190,970,190a108.54,108.54,0,0,1,28.48,3.6,69.59,69.59,0,0,1,23.48,11.15,61,61,0,0,1,16.74,19q6.55,11.49,8.29,27.26h-30.38Q1013.11,234.21,1002.07,225Zm109.77-98.41v145l81.47-77.49h39.36l-70.77,64.46,75.95,112.82h-37.29l-61.1-92.59-27.62,25.38v67.21H1082.5V126.54Zm170.54,205.22a31.07,31.07,0,0,0,10.87,10.63,49,49,0,0,0,15.19,5.66,87.06,87.06,0,0,0,17.44,1.71,109.18,109.18,0,0,0,14.5-1,53.22,53.22,0,0,0,14-3.78,26.27,26.27,0,0,0,10.53-8q4.14-5.32,4.14-13.55,0-11.31-8.63-17.14a73.69,73.69,0,0,0-21.58-9.43q-12.94-3.6-28.13-6.52a146,146,0,0,1-28.14-8.23A58.16,58.16,0,0,1,1261,267.13q-8.64-9.6-8.63-26.75,0-13.38,6-23a49.26,49.26,0,0,1,15.53-15.61,71.76,71.76,0,0,1,21.4-8.91A99.41,99.41,0,0,1,1319,190a141.31,141.31,0,0,1,28,2.58,64.85,64.85,0,0,1,22.62,8.91,46.16,46.16,0,0,1,15.7,17.15q5.87,10.8,6.91,26.91h-29.35q-.69-8.57-4.48-14.23a29.36,29.36,0,0,0-9.67-9.08,44.16,44.16,0,0,0-12.94-5,67.68,67.68,0,0,0-14.33-1.54,87.29,87.29,0,0,0-13.29,1,45.28,45.28,0,0,0-12.26,3.6,24.49,24.49,0,0,0-9,6.86q-3.46,4.29-3.46,11.14a16.32,16.32,0,0,0,5.36,12.52,42.75,42.75,0,0,0,13.63,8.23,120,120,0,0,0,18.64,5.48q10.37,2.24,20.72,4.63,11,2.4,21.57,5.83A70.74,70.74,0,0,1,1382,284.1a44.55,44.55,0,0,1,13.12,14.23q5,8.58,5,21.26,0,16.13-6.73,26.75a52.5,52.5,0,0,1-17.61,17.14,73.89,73.89,0,0,1-24.51,9.09,146.3,146.3,0,0,1-27.1,2.57,126.24,126.24,0,0,1-28.31-3.09A69.56,69.56,0,0,1,1272,361.94a51.74,51.74,0,0,1-16.57-18.52q-6.21-11.49-6.9-27.95h29.34A32.65,32.65,0,0,0,1282.38,331.76Zm226.46-137.67v25.72h-35.56V329.88a31.37,31.37,0,0,0,.87,8.23,8.42,8.42,0,0,0,3.28,4.8,14.61,14.61,0,0,0,6.73,2.23,99.19,99.19,0,0,0,11.22.51h13.46v25.72H1486.4a105.8,105.8,0,0,1-19.5-1.55,28.65,28.65,0,0,1-13.12-5.65,24.09,24.09,0,0,1-7.42-11.66q-2.43-7.54-2.42-19.89V219.81h-30.38V194.09h30.38V140.94h29.34v53.15ZM1699.4,370.68q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58,41.19,41.19,0,0,1-12.6-15.26q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.07-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7t-13.46,26.57h-29.34q.67-16.46,6.9-27.77A52.21,52.21,0,0,1,1562,203.17a70,70,0,0,1,23.65-10.11,125.51,125.51,0,0,1,28.48-3.09,168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7,41.23,41.23,0,0,1,15.53,14.89q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-17.95,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.51,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14Zm208.85,141.62q-20,21.6-62.83,21.6a122.11,122.11,0,0,1-25.37-2.74,78,78,0,0,1-23.48-8.92,54.41,54.41,0,0,1-17.43-16.11q-6.91-10-7.6-24.35h29.35a21.47,21.47,0,0,0,5,13.38,36.67,36.67,0,0,0,11.4,8.91,55.52,55.52,0,0,0,14.67,5,79.51,79.51,0,0,0,15.19,1.55q14.49,0,24.51-5A46,46,0,0,0,1840.59,401a56.53,56.53,0,0,0,9.49-21.09,117.46,117.46,0,0,0,2.94-27.09V341.19h-.7q-7.59,16.46-23,24.18a71.8,71.8,0,0,1-32.63,7.71q-20,0-34.86-7.2A72.88,72.88,0,0,1,1737,346.51a82.13,82.13,0,0,1-15-28.46,116.62,116.62,0,0,1-5-34.47,133.92,133.92,0,0,1,4.14-32.4A88.17,88.17,0,0,1,1735,221a75.49,75.49,0,0,1,25.55-22.29q15.87-8.75,39-8.75a66.21,66.21,0,0,1,31.07,7.38,52.13,52.13,0,0,1,22.09,22.11h.35V194.09h27.61V356.28Q1880.63,399.83,1860.61,421.43Zm-37.46-79.72a47.94,47.94,0,0,0,16.4-15.78,71.89,71.89,0,0,0,9.15-22.11,106.77,106.77,0,0,0,2.93-24.69,96.71,96.71,0,0,0-2.76-23,64,64,0,0,0-8.8-20.4,45.76,45.76,0,0,0-15.71-14.57q-9.66-5.49-23.47-5.49-14.16,0-24.17,5.32a46.77,46.77,0,0,0-16.4,14.23,60.14,60.14,0,0,0-9.32,20.57,99.69,99.69,0,0,0-2.93,24.35,120.63,120.63,0,0,0,2.42,24,67.5,67.5,0,0,0,8.28,21.77,46.37,46.37,0,0,0,15.54,15.78q9.66,6,24.16,6T1823.15,341.71Zm228,18.34q-20,15.09-50.41,15.09-21.4,0-37.11-6.86a73.16,73.16,0,0,1-26.41-19.2,81.52,81.52,0,0,1-16-29.49,141.12,141.12,0,0,1-6-37.38,106.1,106.1,0,0,1,6.21-37A88.56,88.56,0,0,1,1938.8,216a79.09,79.09,0,0,1,26.58-19.2A81.66,81.66,0,0,1,1999,190q23.82,0,39.53,9.78a78,78,0,0,1,25.2,24.86,98.18,98.18,0,0,1,13.12,32.91,140.6,140.6,0,0,1,2.93,34h-133.6a70,70,0,0,0,2.76,22.12,49.9,49.9,0,0,0,10,18.51A49.1,49.1,0,0,0,1976.6,345q10.7,4.82,25.2,4.8,18.65,0,30.55-8.57t15.71-26.06h29Q2071.18,345,2051.17,360.05Zm-7.08-113.84a50,50,0,0,0-10.7-16,53.1,53.1,0,0,0-56.62-10.63,47.48,47.48,0,0,0-15.71,10.81,51.69,51.69,0,0,0-10.35,15.94,60.18,60.18,0,0,0-4.49,19.37h102.53A59.47,59.47,0,0,0,2044.09,246.21ZM302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Z\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAiBO,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAKhC;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,MACzB,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,oBAAA;AAAA,MAER,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,MAAM,OAAA,CAAQ,IAAA;AAAA,UACzB,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,GACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateBackstageLogoIcon.esm.js","sources":["../../src/assets/TemplateBackstageLogoIcon.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 28,\n },\n path: {\n fill: '#7df3e1',\n },\n});\n\n/** @public */\nexport const TemplateBackstageLogoIcon = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 337.46 428.5\"\n >\n <path\n className={classes.path}\n d=\"M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;;AAkBA,MAAM,YAAY,UAAA,CAAW;AAAA,EAC3B,GAAA,EAAK;AAAA,IACH,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAGM,MAAM,4BAA4B,MAAM;AAC7C,EAAA,MAAM,UAAU,SAAA,EAAU;AAE1B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAA,CAAQ,GAAA;AAAA,MACnB,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,kBAAA;AAAA,MAER,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,IAAA;AAAA,UACnB,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"TemplateBackstageLogoIcon.esm.js","sources":["../../src/assets/TemplateBackstageLogoIcon.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 */\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 28,\n },\n path: {\n fill: '#7df3e1',\n },\n});\n\n/** @public */\nexport const TemplateBackstageLogoIcon = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 337.46 428.5\"\n >\n <path\n className={classes.path}\n d=\"M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;;AAkBA,MAAM,YAAY,UAAA,CAAW;AAAA,EAC3B,GAAA,EAAK;AAAA,IACH,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAGM,MAAM,4BAA4B,MAAM;AAC7C,EAAA,MAAM,UAAU,SAAA,EAAU;AAE1B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAA,CAAQ,GAAA;AAAA,MACnB,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,kBAAA;AAAA,MAER,QAAA,kBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAW,OAAA,CAAQ,IAAA;AAAA,UACnB,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,GACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentAccordion.esm.js","sources":["../../src/componentRenderers/ComponentAccordion.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nimport { useState } from 'react';\nimport { SettingsModal } from '@backstage/plugin-home-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Theme } from '@material-ui/core/styles';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport SettingsIcon from '@material-ui/icons/Settings';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n settingsIconButton: {\n padding: theme.spacing(0, 1, 0, 0),\n },\n contentContainer: {\n width: '100%',\n },\n}));\n\nexport const ComponentAccordion = (props: {\n title?: string;\n expanded?: boolean;\n Content: () => JSX.Element;\n Actions?: () => JSX.Element;\n Settings?: () => JSX.Element;\n ContextProvider?: (props: any) => JSX.Element;\n}) => {\n const {\n title,\n expanded = false,\n Content,\n Actions,\n Settings,\n ContextProvider,\n ...childProps\n } = props;\n\n const classes = useStyles();\n const [settingsIsExpanded, setSettingsIsExpanded] = useState(false);\n const [isExpanded, setIsExpanded] = useState(expanded);\n\n const handleOpenSettings = (e: any) => {\n e.stopPropagation();\n setSettingsIsExpanded(prevState => !prevState);\n };\n\n const innerContent = (\n <>\n {Settings && (\n <SettingsModal\n open={settingsIsExpanded}\n close={() => setSettingsIsExpanded(false)}\n componentName={title}\n >\n <Settings />\n </SettingsModal>\n )}\n <Accordion\n expanded={isExpanded}\n onChange={(_e: any, expandedValue: boolean) =>\n setIsExpanded(expandedValue)\n }\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n {Settings && (\n <IconButton\n onClick={handleOpenSettings}\n className={classes.settingsIconButton}\n >\n <SettingsIcon />\n </IconButton>\n )}\n <Typography>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <div className={classes.contentContainer}>\n <Content />\n {Actions && <Actions />}\n </div>\n </AccordionDetails>\n </Accordion>\n </>\n );\n\n return ContextProvider ? (\n <ContextProvider {...childProps}>{innerContent}</ContextProvider>\n ) : (\n innerContent\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AA4BA,MAAM,SAAA,GAAY,UAAA,CAAW,CAAC,KAAA,MAAkB;AAAA,EAC9C,kBAAA,EAAoB;AAAA,IAClB,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC;AAAA,GACnC;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO;AAAA;AAEX,CAAA,CAAE,CAAA;AAEK,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAO7B;AACJ,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,QAAQ,CAAA;AAErD,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAW;AACrC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,qBAAA,CAAsB,CAAA,SAAA,KAAa,CAAC,SAAS,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,oBACC,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,kBAAA;AAAA,QACN,KAAA,EAAO,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,QACxC,aAAA,EAAe,KAAA;AAAA,QAEf,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,KACZ;AAAA,oBAEF,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,CAAC,EAAA,EAAS,aAAA,KAClB,cAAc,aAAa,CAAA;AAAA,QAG7B,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,kBAAY,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA,EAC3C,QAAA,EAAA;AAAA,YAAA,QAAA,oBACC,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,kBAAA;AAAA,gBACT,WAAW,OAAA,CAAQ,kBAAA;AAAA,gBAEnB,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,aAChB;AAAA,4BAEF,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACrB,CAAA;AAAA,8BACC,gBAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,gBAAA,EACtB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,YACR,OAAA,wBAAY,OAAA,EAAA,EAAQ;AAAA,WAAA,EACvB,CAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAGF,EAAA,OAAO,kCACL,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,UAAA,EAAa,wBAAa,CAAA,GAE/C,YAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ComponentAccordion.esm.js","sources":["../../src/componentRenderers/ComponentAccordion.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nimport { useState } from 'react';\nimport { SettingsModal } from '@backstage/plugin-home-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Theme } from '@material-ui/core/styles';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport SettingsIcon from '@material-ui/icons/Settings';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n settingsIconButton: {\n padding: theme.spacing(0, 1, 0, 0),\n },\n contentContainer: {\n width: '100%',\n },\n}));\n\nexport const ComponentAccordion = (props: {\n title?: string;\n expanded?: boolean;\n Content: () => JSX.Element;\n Actions?: () => JSX.Element;\n Settings?: () => JSX.Element;\n ContextProvider?: (props: any) => JSX.Element;\n}) => {\n const {\n title,\n expanded = false,\n Content,\n Actions,\n Settings,\n ContextProvider,\n ...childProps\n } = props;\n\n const classes = useStyles();\n const [settingsIsExpanded, setSettingsIsExpanded] = useState(false);\n const [isExpanded, setIsExpanded] = useState(expanded);\n\n const handleOpenSettings = (e: any) => {\n e.stopPropagation();\n setSettingsIsExpanded(prevState => !prevState);\n };\n\n const innerContent = (\n <>\n {Settings && (\n <SettingsModal\n open={settingsIsExpanded}\n close={() => setSettingsIsExpanded(false)}\n componentName={title}\n >\n <Settings />\n </SettingsModal>\n )}\n <Accordion\n expanded={isExpanded}\n onChange={(_e: any, expandedValue: boolean) =>\n setIsExpanded(expandedValue)\n }\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n {Settings && (\n <IconButton\n onClick={handleOpenSettings}\n className={classes.settingsIconButton}\n >\n <SettingsIcon />\n </IconButton>\n )}\n <Typography>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <div className={classes.contentContainer}>\n <Content />\n {Actions && <Actions />}\n </div>\n </AccordionDetails>\n </Accordion>\n </>\n );\n\n return ContextProvider ? (\n <ContextProvider {...childProps}>{innerContent}</ContextProvider>\n ) : (\n innerContent\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AA4BA,MAAM,SAAA,GAAY,UAAA,CAAW,CAAC,KAAA,MAAkB;AAAA,EAC9C,kBAAA,EAAoB;AAAA,IAClB,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC;AAAA,GACnC;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO;AAAA;AAEX,CAAA,CAAE,CAAA;AAEK,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAO7B;AACJ,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,QAAQ,CAAA;AAErD,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAW;AACrC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,qBAAA,CAAsB,CAAA,SAAA,KAAa,CAAC,SAAS,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,oBACC,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,kBAAA;AAAA,QACN,KAAA,EAAO,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,QACxC,aAAA,EAAe,KAAA;AAAA,QAEf,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA,KACZ;AAAA,oBAEF,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,CAAC,EAAA,EAAS,aAAA,KAClB,cAAc,aAAa,CAAA;AAAA,QAG7B,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,kBAAY,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA,EAC3C,QAAA,EAAA;AAAA,YAAA,QAAA,oBACC,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,kBAAA;AAAA,gBACT,WAAW,OAAA,CAAQ,kBAAA;AAAA,gBAEnB,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,aAChB;AAAA,4BAEF,GAAA,CAAC,cAAY,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACrB,CAAA;AAAA,8BACC,gBAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,gBAAA,EACtB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,YACR,OAAA,wBAAY,OAAA,EAAA,EAAQ;AAAA,WAAA,EACvB,CAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAGF,EAAA,OAAO,kCACL,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,UAAA,EAAa,wBAAa,CAAA,GAE/C,YAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentTab.esm.js","sources":["../../../src/componentRenderers/ComponentTabs/ComponentTab.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nexport const ComponentTab = (props: {\n title: string;\n Content: () => JSX.Element;\n ContextProvider?: (props: any) => JSX.Element;\n}) => {\n const { title, Content, ContextProvider, ...childProps } = props;\n\n return ContextProvider ? (\n <ContextProvider {...childProps}>\n <Content />\n </ContextProvider>\n ) : (\n <Content />\n );\n};\n"],"names":[],"mappings":";;AAgBO,MAAM,YAAA,GAAe,CAAC,KAAA,KAIvB;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,eAAA,EAAiB,GAAG,YAAW,GAAI,KAAA;AAE3D,EAAA,OAAO,eAAA,mBACL,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,UAAA,EACnB,8BAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA,mBAEA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAEb;;;;"}
1
+ {"version":3,"file":"ComponentTab.esm.js","sources":["../../../src/componentRenderers/ComponentTabs/ComponentTab.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nexport const ComponentTab = (props: {\n title: string;\n Content: () => JSX.Element;\n ContextProvider?: (props: any) => JSX.Element;\n}) => {\n const { title, Content, ContextProvider, ...childProps } = props;\n\n return ContextProvider ? (\n <ContextProvider {...childProps}>\n <Content />\n </ContextProvider>\n ) : (\n <Content />\n );\n};\n"],"names":[],"mappings":";;AAgBO,MAAM,YAAA,GAAe,CAAC,KAAA,KAIvB;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,eAAA,EAAiB,GAAG,YAAW,GAAI,KAAA;AAE3D,EAAA,OAAO,eAAA,mBACL,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,UAAA,EACnB,8BAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA,mBAEA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAEb;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentTabs.esm.js","sources":["../../../src/componentRenderers/ComponentTabs/ComponentTabs.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nimport { useState } from 'react';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { InfoCard } from '@backstage/core-components';\n\ntype TabType = {\n label: string;\n Component: () => JSX.Element;\n};\n\nexport const ComponentTabs = (props: { title: string; tabs: TabType[] }) => {\n const { title, tabs } = props;\n\n const [value, setValue] = useState(0);\n\n const handleChange = (_event: any, newValue: number) => {\n setValue(newValue);\n };\n\n return (\n <InfoCard title={title}>\n <Tabs value={value} onChange={handleChange}>\n {tabs.map(t => (\n <Tab key={t.label} label={t.label} />\n ))}\n </Tabs>\n {tabs.map(({ Component }, idx) => (\n <div\n key={idx}\n {...(idx !== value ? { style: { display: 'none' } } : {})}\n >\n <Component />\n </div>\n ))}\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AA0BO,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA8C;AAC1E,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,KAAA;AAExB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAa,QAAA,KAAqB;AACtD,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,YAAS,KAAA,EACR,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAc,QAAA,EAAU,YAAA,EAC3B,eAAK,GAAA,CAAI,CAAA,CAAA,qBACR,GAAA,CAAC,GAAA,EAAA,EAAkB,OAAO,CAAA,CAAE,KAAA,EAAA,EAAlB,CAAA,CAAE,KAAuB,CACpC,CAAA,EACH,CAAA;AAAA,IACC,KAAK,GAAA,CAAI,CAAC,EAAE,SAAA,IAAa,GAAA,qBACxB,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEE,GAAI,GAAA,KAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO,EAAE,GAAI,EAAC;AAAA,QAEvD,8BAAC,SAAA,EAAA,EAAU;AAAA,OAAA;AAAA,MAHN;AAAA,KAKR;AAAA,GAAA,EACH,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ComponentTabs.esm.js","sources":["../../../src/componentRenderers/ComponentTabs/ComponentTabs.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 */\n\nimport { useState } from 'react';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { InfoCard } from '@backstage/core-components';\n\ntype TabType = {\n label: string;\n Component: () => JSX.Element;\n};\n\nexport const ComponentTabs = (props: { title: string; tabs: TabType[] }) => {\n const { title, tabs } = props;\n\n const [value, setValue] = useState(0);\n\n const handleChange = (_event: any, newValue: number) => {\n setValue(newValue);\n };\n\n return (\n <InfoCard title={title}>\n <Tabs value={value} onChange={handleChange}>\n {tabs.map(t => (\n <Tab key={t.label} label={t.label} />\n ))}\n </Tabs>\n {tabs.map(({ Component }, idx) => (\n <div\n key={idx}\n {...(idx !== value ? { style: { display: 'none' } } : {})}\n >\n <Component />\n </div>\n ))}\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AA0BO,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA8C;AAC1E,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,KAAA;AAExB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAa,QAAA,KAAqB;AACtD,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,YAAS,KAAA,EACR,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAc,QAAA,EAAU,YAAA,EAC3B,eAAK,GAAA,CAAI,CAAA,CAAA,qBACR,GAAA,CAAC,GAAA,EAAA,EAAkB,OAAO,CAAA,CAAE,KAAA,EAAA,EAAlB,CAAA,CAAE,KAAuB,CACpC,CAAA,EACH,CAAA;AAAA,IACC,KAAK,GAAA,CAAI,CAAC,EAAE,SAAA,IAAa,GAAA,qBACxB,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEE,GAAI,GAAA,KAAQ,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO,EAAE,GAAI,EAAC;AAAA,QAEvD,8BAAC,SAAA,EAAA,EAAU;AAAA,OAAA;AAAA,MAHN;AAAA,KAKR;AAAA,GAAA,EACH,CAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddWidgetDialog.esm.js","sources":["../../../src/components/CustomHomepage/AddWidgetDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport { Widget } from './types';\nimport Box from '@material-ui/core/Box';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport AddIcon from '@material-ui/icons/Add';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { homeTranslationRef } from '../../translation';\n\ninterface AddWidgetDialogProps {\n widgets: Widget[];\n handleAdd: (widget: Widget) => void;\n}\n\nconst getTitle = (widget: Widget) => {\n return widget.title || widget.name;\n};\n\nexport const AddWidgetDialog = (props: AddWidgetDialogProps) => {\n const { widgets, handleAdd } = props;\n const { t } = useTranslationRef(homeTranslationRef);\n return (\n <>\n <DialogTitle>{t('addWidgetDialog.title')}</DialogTitle>\n <DialogContent>\n {widgets.length === 0 ? (\n <Box pb={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {t('addWidgetDialog.noAvailableWidgets')}\n </Typography>\n </Box>\n ) : (\n <List dense>\n {widgets.map(widget => {\n return (\n <ListItem\n key={widget.name}\n button\n onClick={() => handleAdd(widget)}\n >\n <ListItemAvatar>\n <AddIcon />\n </ListItemAvatar>\n <ListItemText\n secondary={\n widget.description && (\n <Typography\n component=\"span\"\n variant=\"caption\"\n color=\"textPrimary\"\n >\n {widget.description}\n </Typography>\n )\n }\n primary={\n <Typography variant=\"body1\" color=\"textPrimary\">\n {getTitle(widget)}\n </Typography>\n }\n />\n </ListItem>\n );\n })}\n </List>\n )}\n </DialogContent>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkCA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAmB;AACnC,EAAA,OAAO,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAChC,CAAA;AAEO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAgC;AAC9D,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,KAAA;AAC/B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAAE,CAAA;AAAA,oBACzC,GAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,MAAA,KAAW,CAAA,mBAClB,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,SAAA,EAAU,QAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,eAAA,EAC/B,QAAA,EAAA,CAAA,CAAE,oCAAoC,CAAA,EACzC,CAAA,EACF,CAAA,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAK,IAAA,EACR,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,KAAU;AACrB,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,MAAA,EAAM,IAAA;AAAA,UACN,OAAA,EAAS,MAAM,SAAA,CAAU,MAAM,CAAA;AAAA,UAE/B,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EACE,OAAO,WAAA,oBACL,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,MAAA;AAAA,oBACV,OAAA,EAAQ,SAAA;AAAA,oBACR,KAAA,EAAM,aAAA;AAAA,oBAEL,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,iBACV;AAAA,gBAGJ,OAAA,sBACG,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAQ,KAAA,EAAM,aAAA,EAC/B,QAAA,EAAA,QAAA,CAAS,MAAM,CAAA,EAClB;AAAA;AAAA;AAEJ;AAAA,SAAA;AAAA,QAxBK,MAAA,CAAO;AAAA,OAyBd;AAAA,IAEJ,CAAC,GACH,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AddWidgetDialog.esm.js","sources":["../../../src/components/CustomHomepage/AddWidgetDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 */\n\nimport { Widget } from './types';\nimport Box from '@material-ui/core/Box';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport AddIcon from '@material-ui/icons/Add';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { homeTranslationRef } from '../../translation';\n\ninterface AddWidgetDialogProps {\n widgets: Widget[];\n handleAdd: (widget: Widget) => void;\n}\n\nconst getTitle = (widget: Widget) => {\n return widget.title || widget.name;\n};\n\nexport const AddWidgetDialog = (props: AddWidgetDialogProps) => {\n const { widgets, handleAdd } = props;\n const { t } = useTranslationRef(homeTranslationRef);\n return (\n <>\n <DialogTitle>{t('addWidgetDialog.title')}</DialogTitle>\n <DialogContent>\n {widgets.length === 0 ? (\n <Box pb={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {t('addWidgetDialog.noAvailableWidgets')}\n </Typography>\n </Box>\n ) : (\n <List dense>\n {widgets.map(widget => {\n return (\n <ListItem\n key={widget.name}\n button\n onClick={() => handleAdd(widget)}\n >\n <ListItemAvatar>\n <AddIcon />\n </ListItemAvatar>\n <ListItemText\n secondary={\n widget.description && (\n <Typography\n component=\"span\"\n variant=\"caption\"\n color=\"textPrimary\"\n >\n {widget.description}\n </Typography>\n )\n }\n primary={\n <Typography variant=\"body1\" color=\"textPrimary\">\n {getTitle(widget)}\n </Typography>\n }\n />\n </ListItem>\n );\n })}\n </List>\n )}\n </DialogContent>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkCA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAmB;AACnC,EAAA,OAAO,MAAA,CAAO,SAAS,MAAA,CAAO,IAAA;AAChC,CAAA;AAEO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAgC;AAC9D,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,KAAA;AAC/B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAAE,CAAA;AAAA,oBACzC,GAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,MAAA,KAAW,CAAA,mBAClB,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,SAAA,EAAU,QAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,eAAA,EAC/B,QAAA,EAAA,CAAA,CAAE,oCAAoC,CAAA,EACzC,CAAA,EACF,CAAA,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAK,IAAA,EACR,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,KAAU;AACrB,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,MAAA,EAAM,IAAA;AAAA,UACN,OAAA,EAAS,MAAM,SAAA,CAAU,MAAM,CAAA;AAAA,UAE/B,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,EACX,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EACE,OAAO,WAAA,oBACL,GAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,MAAA;AAAA,oBACV,OAAA,EAAQ,SAAA;AAAA,oBACR,KAAA,EAAM,aAAA;AAAA,oBAEL,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,iBACV;AAAA,gBAGJ,OAAA,sBACG,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAQ,KAAA,EAAM,aAAA,EAC/B,QAAA,EAAA,QAAA,CAAS,MAAM,CAAA,EAClB;AAAA;AAAA;AAEJ;AAAA,SAAA;AAAA,QAxBK,MAAA,CAAO;AAAA,OAyBd;AAAA,IAEJ,CAAC,GACH,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomHomepageButtons.esm.js","sources":["../../../src/components/CustomHomepage/CustomHomepageButtons.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 Button from '@material-ui/core/Button';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport SaveIcon from '@material-ui/icons/Save';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddIcon from '@material-ui/icons/Add';\nimport EditIcon from '@material-ui/icons/Edit';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { homeTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n contentHeaderBtn: {\n marginLeft: theme.spacing(2),\n },\n widgetWrapper: {\n '& > *:first-child': {\n width: '100%',\n height: '100%',\n },\n },\n }),\n);\n\ninterface CustomHomepageButtonsProps {\n editMode: boolean;\n numWidgets: number;\n clearLayout: () => void;\n setAddWidgetDialogOpen: (open: boolean) => void;\n changeEditMode: (mode: boolean) => void;\n defaultConfigAvailable: boolean;\n restoreDefault: () => void;\n cancel: () => void;\n}\nexport const CustomHomepageButtons = (props: CustomHomepageButtonsProps) => {\n const {\n editMode,\n numWidgets,\n clearLayout,\n setAddWidgetDialogOpen,\n changeEditMode,\n defaultConfigAvailable,\n restoreDefault,\n cancel,\n } = props;\n const styles = useStyles();\n const { t } = useTranslationRef(homeTranslationRef);\n\n return (\n <>\n {!editMode && numWidgets > 0 ? (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => changeEditMode(true)}\n size=\"small\"\n startIcon={<EditIcon />}\n >\n {t('customHomepageButtons.edit')}\n </Button>\n ) : (\n <>\n <Button variant=\"contained\" onClick={cancel} size=\"small\">\n {t('customHomepageButtons.cancel')}\n </Button>\n {defaultConfigAvailable && (\n <Button\n variant=\"contained\"\n className={styles.contentHeaderBtn}\n onClick={restoreDefault}\n size=\"small\"\n startIcon={<CancelIcon />}\n >\n {t('customHomepageButtons.restoreDefaults')}\n </Button>\n )}\n {numWidgets > 0 && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={styles.contentHeaderBtn}\n onClick={clearLayout}\n size=\"small\"\n startIcon={<DeleteIcon />}\n >\n {t('customHomepageButtons.clearAll')}\n </Button>\n )}\n <Button\n variant=\"contained\"\n className={styles.contentHeaderBtn}\n onClick={() => setAddWidgetDialogOpen(true)}\n size=\"small\"\n startIcon={<AddIcon />}\n >\n {t('customHomepageButtons.addWidget')}\n </Button>\n {numWidgets > 0 && (\n <Button\n className={styles.contentHeaderBtn}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => changeEditMode(false)}\n size=\"small\"\n startIcon={<SaveIcon />}\n >\n {t('customHomepageButtons.save')}\n </Button>\n )}\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CustomHomepageButtons.esm.js","sources":["../../../src/components/CustomHomepage/CustomHomepageButtons.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 Button from '@material-ui/core/Button';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport SaveIcon from '@material-ui/icons/Save';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddIcon from '@material-ui/icons/Add';\nimport EditIcon from '@material-ui/icons/Edit';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { homeTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n contentHeaderBtn: {\n marginLeft: theme.spacing(2),\n },\n widgetWrapper: {\n '& > *:first-child': {\n width: '100%',\n height: '100%',\n },\n },\n }),\n);\n\ninterface CustomHomepageButtonsProps {\n editMode: boolean;\n numWidgets: number;\n clearLayout: () => void;\n setAddWidgetDialogOpen: (open: boolean) => void;\n changeEditMode: (mode: boolean) => void;\n defaultConfigAvailable: boolean;\n restoreDefault: () => void;\n cancel: () => void;\n}\nexport const CustomHomepageButtons = (props: CustomHomepageButtonsProps) => {\n const {\n editMode,\n numWidgets,\n clearLayout,\n setAddWidgetDialogOpen,\n changeEditMode,\n defaultConfigAvailable,\n restoreDefault,\n cancel,\n } = props;\n const styles = useStyles();\n const { t } = useTranslationRef(homeTranslationRef);\n\n return (\n <>\n {!editMode && numWidgets > 0 ? (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => changeEditMode(true)}\n size=\"small\"\n startIcon={<EditIcon />}\n >\n {t('customHomepageButtons.edit')}\n </Button>\n ) : (\n <>\n <Button variant=\"contained\" onClick={cancel} size=\"small\">\n {t('customHomepageButtons.cancel')}\n </Button>\n {defaultConfigAvailable && (\n <Button\n variant=\"contained\"\n className={styles.contentHeaderBtn}\n onClick={restoreDefault}\n size=\"small\"\n startIcon={<CancelIcon />}\n >\n {t('customHomepageButtons.restoreDefaults')}\n </Button>\n )}\n {numWidgets > 0 && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={styles.contentHeaderBtn}\n onClick={clearLayout}\n size=\"small\"\n startIcon={<DeleteIcon />}\n >\n {t('customHomepageButtons.clearAll')}\n </Button>\n )}\n <Button\n variant=\"contained\"\n className={styles.contentHeaderBtn}\n onClick={() => setAddWidgetDialogOpen(true)}\n size=\"small\"\n startIcon={<AddIcon />}\n >\n {t('customHomepageButtons.addWidget')}\n </Button>\n {numWidgets > 0 && (\n <Button\n className={styles.contentHeaderBtn}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => changeEditMode(false)}\n size=\"small\"\n startIcon={<SaveIcon />}\n >\n {t('customHomepageButtons.save')}\n </Button>\n )}\n </>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { useElementFilter, getComponentData, useApi, storageApiRef } from '@back
5
5
  import 'react-grid-layout/css/styles.css';
6
6
  import 'react-resizable/css/styles.css';
7
7
  import Dialog from '@material-ui/core/Dialog';
8
- import { makeStyles, createStyles, useTheme } from '@material-ui/core/styles';
8
+ import { useTheme, makeStyles, createStyles } from '@material-ui/core/styles';
9
9
  import { compact } from 'lodash';
10
10
  import useObservable from 'react-use/esm/useObservable';
11
11
  import { Progress, ContentHeader, ErrorBoundary } from '@backstage/core-components';