@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-1cc1a15 → 0.0.2-dev-e6e0dbf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +229 -11
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +15 -151
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +10 -15
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js +6 -1
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +15 -2
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +2 -4
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
- package/dist/components/OidcProviderCard/OidcProviderCard.esm.js +23 -0
- package/dist/components/OidcProviderCard/OidcProviderCard.esm.js.map +1 -0
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +167 -0
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -0
- package/dist/index.d.ts +1 -5
- package/dist/index.esm.js +1 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +1 -17
- package/dist/plugin.esm.js.map +1 -1
- package/dist/utils/validation.esm.js.map +1 -1
- package/dist-scalprum/configSchema.json +27 -1
- package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js +2 -0
- package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js.map +1 -0
- package/dist-scalprum/plugin-manifest.json +2 -2
- package/dist-scalprum/static/1085.d17e689a.chunk.js +3 -0
- package/dist-scalprum/static/{1085.536aa0fa.chunk.js.map → 1085.d17e689a.chunk.js.map} +1 -1
- package/dist-scalprum/static/1645.db086648.chunk.js +3 -0
- package/dist-scalprum/static/1645.db086648.chunk.js.map +1 -0
- package/dist-scalprum/static/2233.bf0c10d7.chunk.js +3 -0
- package/dist-scalprum/static/2233.bf0c10d7.chunk.js.map +1 -0
- package/dist-scalprum/static/2628.20156dc1.chunk.js +3 -0
- package/dist-scalprum/static/2628.20156dc1.chunk.js.map +1 -0
- package/dist-scalprum/static/2822.27a4ac5b.chunk.js +2 -0
- package/dist-scalprum/static/2822.27a4ac5b.chunk.js.map +1 -0
- package/dist-scalprum/static/2946.a35243f1.chunk.js +3 -0
- package/dist-scalprum/static/{2946.167c50c2.chunk.js.map → 2946.a35243f1.chunk.js.map} +1 -1
- package/dist-scalprum/static/2952.b3c7e41c.chunk.js +2 -0
- package/dist-scalprum/static/2952.b3c7e41c.chunk.js.map +1 -0
- package/dist-scalprum/static/2967.6a1db3ad.chunk.js +2 -0
- package/dist-scalprum/static/2967.6a1db3ad.chunk.js.map +1 -0
- package/dist-scalprum/static/3091.9a74ea5f.chunk.js +2 -0
- package/dist-scalprum/static/3091.9a74ea5f.chunk.js.map +1 -0
- package/dist-scalprum/static/327.a9a99299.chunk.js +2 -0
- package/dist-scalprum/static/327.a9a99299.chunk.js.map +1 -0
- package/dist-scalprum/static/3459.a7c29521.chunk.js +2 -0
- package/dist-scalprum/static/3459.a7c29521.chunk.js.map +1 -0
- package/dist-scalprum/static/3504.1c2f2e54.chunk.js +3 -0
- package/dist-scalprum/static/3504.1c2f2e54.chunk.js.map +1 -0
- package/dist-scalprum/static/3650.4f0dc550.chunk.js +2 -0
- package/dist-scalprum/static/3650.4f0dc550.chunk.js.map +1 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
- package/dist-scalprum/static/3947.7458971d.chunk.js +2 -0
- package/dist-scalprum/static/3947.7458971d.chunk.js.map +1 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js +3 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js.map +1 -0
- package/dist-scalprum/static/3984.647ef00c.chunk.js +2 -0
- package/dist-scalprum/static/3984.647ef00c.chunk.js.map +1 -0
- package/dist-scalprum/static/4026.d652a7a1.chunk.js +2 -0
- package/dist-scalprum/static/4026.d652a7a1.chunk.js.map +1 -0
- package/dist-scalprum/static/4093.4093.3597955d.css +5 -0
- package/dist-scalprum/static/4093.4093.3597955d.css.map +1 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js +3 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js.LICENSE.txt +26 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js.map +1 -0
- package/dist-scalprum/static/4382.a7363415.chunk.js +3 -0
- package/dist-scalprum/static/4382.a7363415.chunk.js.map +1 -0
- package/dist-scalprum/static/441.f708f1e0.chunk.js +2 -0
- package/dist-scalprum/static/441.f708f1e0.chunk.js.map +1 -0
- package/dist-scalprum/static/4611.0d064cdf.chunk.js +2 -0
- package/dist-scalprum/static/4611.0d064cdf.chunk.js.map +1 -0
- package/dist-scalprum/static/4614.23f2a85b.chunk.js +2 -0
- package/dist-scalprum/static/4614.23f2a85b.chunk.js.map +1 -0
- package/dist-scalprum/static/4651.c85cecc4.chunk.js +2 -0
- package/dist-scalprum/static/4651.c85cecc4.chunk.js.map +1 -0
- package/dist-scalprum/static/{4682.6959fcd1.chunk.js → 4682.bd2dfccd.chunk.js} +2 -2
- package/dist-scalprum/static/4682.bd2dfccd.chunk.js.map +1 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js +3 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js.map +1 -0
- package/dist-scalprum/static/501.87de76da.chunk.js +3 -0
- package/dist-scalprum/static/501.87de76da.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/501.87de76da.chunk.js.map +1 -0
- package/dist-scalprum/static/5010.0cd6c959.chunk.js +3 -0
- package/dist-scalprum/static/5010.0cd6c959.chunk.js.map +1 -0
- package/dist-scalprum/static/5203.539ed3ec.chunk.js +2 -0
- package/dist-scalprum/static/5203.539ed3ec.chunk.js.map +1 -0
- package/dist-scalprum/static/5235.2a59dc45.chunk.js +2 -0
- package/dist-scalprum/static/5235.2a59dc45.chunk.js.map +1 -0
- package/dist-scalprum/static/5453.ecdee66d.chunk.js +2 -0
- package/dist-scalprum/static/5453.ecdee66d.chunk.js.map +1 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js +3 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js.map +1 -0
- package/dist-scalprum/static/{6371.c83dc422.chunk.js → 6371.d45f37cc.chunk.js} +2 -2
- package/dist-scalprum/static/6371.d45f37cc.chunk.js.map +1 -0
- package/dist-scalprum/static/{8563.7e068fb0.chunk.js → 6763.d6cd937f.chunk.js} +3 -3
- package/dist-scalprum/static/6763.d6cd937f.chunk.js.map +1 -0
- package/dist-scalprum/static/{6800.736d5da3.chunk.js → 6800.6e2a08fe.chunk.js} +2 -2
- package/dist-scalprum/static/6800.6e2a08fe.chunk.js.map +1 -0
- package/dist-scalprum/static/{6840.4728fab9.chunk.js → 6840.3bd67cf4.chunk.js} +2 -2
- package/dist-scalprum/static/6840.3bd67cf4.chunk.js.map +1 -0
- package/dist-scalprum/static/7076.8745d395.chunk.js +2 -0
- package/dist-scalprum/static/7076.8745d395.chunk.js.map +1 -0
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js +3 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js.map +1 -0
- package/dist-scalprum/static/7791.8135d440.chunk.js +2 -0
- package/dist-scalprum/static/7791.8135d440.chunk.js.map +1 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js +206 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js.map +1 -0
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js +2 -0
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js.map +1 -0
- package/dist-scalprum/static/8799.83d049f3.chunk.js +2 -0
- package/dist-scalprum/static/8799.83d049f3.chunk.js.map +1 -0
- package/dist-scalprum/static/9316.d9f2fe18.chunk.js +2 -0
- package/dist-scalprum/static/9316.d9f2fe18.chunk.js.map +1 -0
- package/dist-scalprum/static/{7556.aa8a002f.chunk.js → 9655.db0c82b2.chunk.js} +3 -3
- package/dist-scalprum/static/9655.db0c82b2.chunk.js.map +1 -0
- package/dist-scalprum/static/9710.7ec34777.chunk.js +2 -0
- package/dist-scalprum/static/9710.7ec34777.chunk.js.map +1 -0
- package/dist-scalprum/static/9738.b037daf3.chunk.js +2 -0
- package/dist-scalprum/static/9738.b037daf3.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js +2 -0
- package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js +2 -0
- package/dist-scalprum/static/{react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js.map → react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js.map} +1 -1
- package/package.json +12 -11
- package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js +0 -761
- package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js.map +0 -1
- package/dist/components/ApprovalQueueCard/index.esm.js +0 -2
- package/dist/components/ApprovalQueueCard/index.esm.js.map +0 -1
- package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js +0 -89
- package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js.map +0 -1
- package/dist/components/PlanPolicyDetailPage/index.esm.js +0 -2
- package/dist/components/PlanPolicyDetailPage/index.esm.js.map +0 -1
- package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js +0 -2
- package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js.map +0 -1
- package/dist-scalprum/static/1085.536aa0fa.chunk.js +0 -3
- package/dist-scalprum/static/1613.71f0fccd.chunk.js +0 -3
- package/dist-scalprum/static/1613.71f0fccd.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/1613.71f0fccd.chunk.js.map +0 -1
- package/dist-scalprum/static/1836.b74b4c40.chunk.js +0 -3
- package/dist-scalprum/static/1836.b74b4c40.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/1836.b74b4c40.chunk.js.map +0 -1
- package/dist-scalprum/static/2198.5905970e.chunk.js +0 -2
- package/dist-scalprum/static/2198.5905970e.chunk.js.map +0 -1
- package/dist-scalprum/static/2628.6619bf8b.chunk.js +0 -3
- package/dist-scalprum/static/2628.6619bf8b.chunk.js.map +0 -1
- package/dist-scalprum/static/2759.fceb317f.chunk.js +0 -2
- package/dist-scalprum/static/2759.fceb317f.chunk.js.map +0 -1
- package/dist-scalprum/static/2928.4303c12e.chunk.js +0 -3
- package/dist-scalprum/static/2928.4303c12e.chunk.js.map +0 -1
- package/dist-scalprum/static/2946.167c50c2.chunk.js +0 -3
- package/dist-scalprum/static/2967.ac3a4bee.chunk.js +0 -2
- package/dist-scalprum/static/2967.ac3a4bee.chunk.js.map +0 -1
- package/dist-scalprum/static/2987.1da15560.chunk.js +0 -2
- package/dist-scalprum/static/2987.1da15560.chunk.js.map +0 -1
- package/dist-scalprum/static/3097.4bd6b35f.chunk.js +0 -2
- package/dist-scalprum/static/3097.4bd6b35f.chunk.js.map +0 -1
- package/dist-scalprum/static/3459.5c90b5a3.chunk.js +0 -2
- package/dist-scalprum/static/3459.5c90b5a3.chunk.js.map +0 -1
- package/dist-scalprum/static/3466.43dfe991.chunk.js +0 -3
- package/dist-scalprum/static/3466.43dfe991.chunk.js.map +0 -1
- package/dist-scalprum/static/3503.66b6e510.chunk.js +0 -2
- package/dist-scalprum/static/3503.66b6e510.chunk.js.map +0 -1
- package/dist-scalprum/static/3647.b96f9b3e.chunk.js +0 -2
- package/dist-scalprum/static/3647.b96f9b3e.chunk.js.map +0 -1
- package/dist-scalprum/static/3650.515c743a.chunk.js +0 -2
- package/dist-scalprum/static/3650.515c743a.chunk.js.map +0 -1
- package/dist-scalprum/static/3657.59d45756.chunk.js +0 -3
- package/dist-scalprum/static/3657.59d45756.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/3657.59d45756.chunk.js.map +0 -1
- package/dist-scalprum/static/428.0a290bc6.chunk.js +0 -2
- package/dist-scalprum/static/428.0a290bc6.chunk.js.map +0 -1
- package/dist-scalprum/static/441.9f02e61b.chunk.js +0 -2
- package/dist-scalprum/static/441.9f02e61b.chunk.js.map +0 -1
- package/dist-scalprum/static/4682.6959fcd1.chunk.js.map +0 -1
- package/dist-scalprum/static/5010.a4aa0f8e.chunk.js +0 -3
- package/dist-scalprum/static/5010.a4aa0f8e.chunk.js.map +0 -1
- package/dist-scalprum/static/5453.280127dd.chunk.js +0 -2
- package/dist-scalprum/static/5453.280127dd.chunk.js.map +0 -1
- package/dist-scalprum/static/5603.05d9ca7f.chunk.js +0 -2
- package/dist-scalprum/static/5603.05d9ca7f.chunk.js.map +0 -1
- package/dist-scalprum/static/6272.b5ee5195.chunk.js +0 -3
- package/dist-scalprum/static/6272.b5ee5195.chunk.js.map +0 -1
- package/dist-scalprum/static/6371.c83dc422.chunk.js.map +0 -1
- package/dist-scalprum/static/6422.97baf774.chunk.js +0 -2
- package/dist-scalprum/static/6422.97baf774.chunk.js.map +0 -1
- package/dist-scalprum/static/6800.736d5da3.chunk.js.map +0 -1
- package/dist-scalprum/static/6840.4728fab9.chunk.js.map +0 -1
- package/dist-scalprum/static/7556.aa8a002f.chunk.js.map +0 -1
- package/dist-scalprum/static/7601.4df83556.chunk.js +0 -3
- package/dist-scalprum/static/7601.4df83556.chunk.js.map +0 -1
- package/dist-scalprum/static/7791.39417f8c.chunk.js +0 -2
- package/dist-scalprum/static/7791.39417f8c.chunk.js.map +0 -1
- package/dist-scalprum/static/7984.c8511b89.chunk.js +0 -2
- package/dist-scalprum/static/7984.c8511b89.chunk.js.map +0 -1
- package/dist-scalprum/static/8365.d3360f18.chunk.js +0 -2
- package/dist-scalprum/static/8365.d3360f18.chunk.js.map +0 -1
- package/dist-scalprum/static/8563.7e068fb0.chunk.js.map +0 -1
- package/dist-scalprum/static/8799.7c749838.chunk.js +0 -2
- package/dist-scalprum/static/8799.7c749838.chunk.js.map +0 -1
- package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js +0 -2
- package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js.map +0 -1
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js +0 -2
- /package/dist-scalprum/static/{1085.536aa0fa.chunk.js.LICENSE.txt → 1085.d17e689a.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{3466.43dfe991.chunk.js.LICENSE.txt → 1645.db086648.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6272.b5ee5195.chunk.js.LICENSE.txt → 2233.bf0c10d7.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2628.6619bf8b.chunk.js.LICENSE.txt → 2628.20156dc1.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2946.167c50c2.chunk.js.LICENSE.txt → 2946.a35243f1.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{7601.4df83556.chunk.js.LICENSE.txt → 3504.1c2f2e54.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2928.4303c12e.chunk.js.LICENSE.txt → 4382.a7363415.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{5010.a4aa0f8e.chunk.js.LICENSE.txt → 5010.0cd6c959.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{8563.7e068fb0.chunk.js.LICENSE.txt → 6763.d6cd937f.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{7556.aa8a002f.chunk.js.LICENSE.txt → 9655.db0c82b2.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/2987.1da15560.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Fade/Fade.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/utils/scrollLeft.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/internal/animate.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Tabs/ScrollbarSize.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Tabs/TabIndicator.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Tabs/Tabs.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Tab/Tab.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/TabScrollButton/TabScrollButton.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/DialogContent/DialogContent.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/internal/svg-icons/KeyboardArrowLeft.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/internal/svg-icons/KeyboardArrowRight.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Backdrop/Backdrop.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/Dialog/Dialog.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/core/esm/DialogActions/DialogActions.js"],"sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { duration } from '../styles/transitions';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport useForkRef from '../utils/useForkRef';\nvar styles = {\n entering: {\n opacity: 1\n },\n entered: {\n opacity: 1\n }\n};\nvar defaultTimeout = {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen\n};\n/**\n * The Fade transition is used by the [Modal](/components/modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {\n var children = props.children,\n _props$disableStrictM = props.disableStrictModeCompat,\n disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,\n inProp = props.in,\n onEnter = props.onEnter,\n onEntered = props.onEntered,\n onEntering = props.onEntering,\n onExit = props.onExit,\n onExited = props.onExited,\n onExiting = props.onExiting,\n style = props.style,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Transition : _props$TransitionComp,\n _props$timeout = props.timeout,\n timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n other = _objectWithoutProperties(props, [\"children\", \"disableStrictModeCompat\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"TransitionComponent\", \"timeout\"]);\n\n var theme = useTheme();\n var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;\n var nodeRef = React.useRef(null);\n var foreignRef = useForkRef(children.ref, ref);\n var handleRef = useForkRef(enableStrictModeCompat ? nodeRef : undefined, foreignRef);\n\n var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n return function (nodeOrAppearing, maybeAppearing) {\n if (callback) {\n var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],\n _ref2 = _slicedToArray(_ref, 2),\n node = _ref2[0],\n isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n\n if (isAppearing === undefined) {\n callback(node);\n } else {\n callback(node, isAppearing);\n }\n }\n };\n };\n\n var handleEntering = normalizedTransitionCallback(onEntering);\n var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n reflow(node); // So the animation always start from the start.\n\n var transitionProps = getTransitionProps({\n style: style,\n timeout: timeout\n }, {\n mode: 'enter'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n var handleEntered = normalizedTransitionCallback(onEntered);\n var handleExiting = normalizedTransitionCallback(onExiting);\n var handleExit = normalizedTransitionCallback(function (node) {\n var transitionProps = getTransitionProps({\n style: style,\n timeout: timeout\n }, {\n mode: 'exit'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n if (onExit) {\n onExit(node);\n }\n });\n var handleExited = normalizedTransitionCallback(onExited);\n return /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n appear: true,\n in: inProp,\n nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n timeout: timeout\n }, other), function (state, childProps) {\n return /*#__PURE__*/React.cloneElement(children, _extends({\n style: _extends({\n opacity: 0,\n visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n }, styles[state], style, children.props.style),\n ref: handleRef\n }, childProps));\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Fade.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * A single child content element.\n */\n children: PropTypes.element,\n\n /**\n * Enable this prop if you encounter 'Function components cannot be given refs',\n * use `unstable_createStrictModeTheme`,\n * and can't forward the ref in the child component.\n */\n disableStrictModeCompat: PropTypes.bool,\n\n /**\n * If `true`, the component will transition in.\n */\n in: PropTypes.bool,\n\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Fade;","// Source from https://github.com/alitaheri/normalize-scroll-left\nvar cachedType;\n/**\n * Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type\n *\n * Types of scrollLeft, assuming scrollWidth=100 and direction is rtl.\n *\n * Type | <- Most Left | Most Right -> | Initial\n * ---------------- | ------------ | ------------- | -------\n * default | 0 | 100 | 100\n * negative (spec*) | -100 | 0 | 0\n * reverse | 100 | 0 | 0\n *\n * Edge 85: default\n * Safari 14: negative\n * Chrome 85: negative\n * Firefox 81: negative\n * IE 11: reverse\n *\n * spec* https://drafts.csswg.org/cssom-view/#dom-window-scroll\n */\n\nexport function detectScrollType() {\n if (cachedType) {\n return cachedType;\n }\n\n var dummy = document.createElement('div');\n var container = document.createElement('div');\n container.style.width = '10px';\n container.style.height = '1px';\n dummy.appendChild(container);\n dummy.dir = 'rtl';\n dummy.style.fontSize = '14px';\n dummy.style.width = '4px';\n dummy.style.height = '1px';\n dummy.style.position = 'absolute';\n dummy.style.top = '-1000px';\n dummy.style.overflow = 'scroll';\n document.body.appendChild(dummy);\n cachedType = 'reverse';\n\n if (dummy.scrollLeft > 0) {\n cachedType = 'default';\n } else {\n dummy.scrollLeft = 1;\n\n if (dummy.scrollLeft === 0) {\n cachedType = 'negative';\n }\n }\n\n document.body.removeChild(dummy);\n return cachedType;\n} // Based on https://stackoverflow.com/a/24394376\n\nexport function getNormalizedScrollLeft(element, direction) {\n var scrollLeft = element.scrollLeft; // Perform the calculations only when direction is rtl to avoid messing up the ltr bahavior\n\n if (direction !== 'rtl') {\n return scrollLeft;\n }\n\n var type = detectScrollType();\n\n switch (type) {\n case 'negative':\n return element.scrollWidth - element.clientWidth + scrollLeft;\n\n case 'reverse':\n return element.scrollWidth - element.clientWidth - scrollLeft;\n\n default:\n return scrollLeft;\n }\n}","function easeInOutSin(time) {\n return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\n\nexport default function animate(property, element, to) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var cb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {};\n var _options$ease = options.ease,\n ease = _options$ease === void 0 ? easeInOutSin : _options$ease,\n _options$duration = options.duration,\n duration = _options$duration === void 0 ? 300 : _options$duration;\n var start = null;\n var from = element[property];\n var cancelled = false;\n\n var cancel = function cancel() {\n cancelled = true;\n };\n\n var step = function step(timestamp) {\n if (cancelled) {\n cb(new Error('Animation cancelled'));\n return;\n }\n\n if (start === null) {\n start = timestamp;\n }\n\n var time = Math.min(1, (timestamp - start) / duration);\n element[property] = ease(time) * (to - from) + from;\n\n if (time >= 1) {\n requestAnimationFrame(function () {\n cb(null);\n });\n return;\n }\n\n requestAnimationFrame(step);\n };\n\n if (from === to) {\n cb(new Error('Element already at target position'));\n return cancel;\n }\n\n requestAnimationFrame(step);\n return cancel;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nvar styles = {\n width: 99,\n height: 99,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll'\n};\n/**\n * @ignore - internal component.\n * The component originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\n\nexport default function ScrollbarSize(props) {\n var onChange = props.onChange,\n other = _objectWithoutProperties(props, [\"onChange\"]);\n\n var scrollbarHeight = React.useRef();\n var nodeRef = React.useRef(null);\n\n var setMeasurements = function setMeasurements() {\n scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n };\n\n React.useEffect(function () {\n var handleResize = debounce(function () {\n var prevHeight = scrollbarHeight.current;\n setMeasurements();\n\n if (prevHeight !== scrollbarHeight.current) {\n onChange(scrollbarHeight.current);\n }\n });\n window.addEventListener('resize', handleResize);\n return function () {\n handleResize.clear();\n window.removeEventListener('resize', handleResize);\n };\n }, [onChange]);\n React.useEffect(function () {\n setMeasurements();\n onChange(scrollbarHeight.current);\n }, [onChange]);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n style: styles,\n ref: nodeRef\n }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? ScrollbarSize.propTypes = {\n onChange: PropTypes.func.isRequired\n} : void 0;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n return {\n root: {\n position: 'absolute',\n height: 2,\n bottom: 0,\n width: '100%',\n transition: theme.transitions.create()\n },\n colorPrimary: {\n backgroundColor: theme.palette.primary.main\n },\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main\n },\n vertical: {\n height: '100%',\n width: 2,\n right: 0\n }\n };\n};\n/**\n * @ignore - internal component.\n */\n\nvar TabIndicator = /*#__PURE__*/React.forwardRef(function TabIndicator(props, ref) {\n var classes = props.classes,\n className = props.className,\n color = props.color,\n orientation = props.orientation,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"orientation\"]);\n\n return /*#__PURE__*/React.createElement(\"span\", _extends({\n className: clsx(classes.root, classes[\"color\".concat(capitalize(color))], className, orientation === 'vertical' && classes.vertical),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabIndicator.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object.isRequired,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * @ignore\n * The color of the tab indicator.\n */\n color: PropTypes.oneOf(['primary', 'secondary']).isRequired,\n\n /**\n * The tabs orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired\n} : void 0;\nexport default withStyles(styles, {\n name: 'PrivateTabIndicator'\n})(TabIndicator);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport debounce from '../utils/debounce';\nimport ownerWindow from '../utils/ownerWindow';\nimport { getNormalizedScrollLeft, detectScrollType } from '../utils/scrollLeft';\nimport animate from '../internal/animate';\nimport ScrollbarSize from './ScrollbarSize';\nimport withStyles from '../styles/withStyles';\nimport TabIndicator from './TabIndicator';\nimport TabScrollButton from '../TabScrollButton';\nimport useEventCallback from '../utils/useEventCallback';\nimport useTheme from '../styles/useTheme';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n overflow: 'hidden',\n minHeight: 48,\n WebkitOverflowScrolling: 'touch',\n // Add iOS momentum scrolling.\n display: 'flex'\n },\n\n /* Styles applied to the root element if `orientation=\"vertical\"`. */\n vertical: {\n flexDirection: 'column'\n },\n\n /* Styles applied to the flex container element. */\n flexContainer: {\n display: 'flex'\n },\n\n /* Styles applied to the flex container element if `orientation=\"vertical\"`. */\n flexContainerVertical: {\n flexDirection: 'column'\n },\n\n /* Styles applied to the flex container element if `centered={true}` & `!variant=\"scrollable\"`. */\n centered: {\n justifyContent: 'center'\n },\n\n /* Styles applied to the tablist element. */\n scroller: {\n position: 'relative',\n display: 'inline-block',\n flex: '1 1 auto',\n whiteSpace: 'nowrap'\n },\n\n /* Styles applied to the tablist element if `!variant=\"scrollable\"`\b\b\b. */\n fixed: {\n overflowX: 'hidden',\n width: '100%'\n },\n\n /* Styles applied to the tablist element if `variant=\"scrollable\"`. */\n scrollable: {\n overflowX: 'scroll',\n // Hide dimensionless scrollbar on MacOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n\n }\n },\n\n /* Styles applied to the `ScrollButtonComponent` component. */\n scrollButtons: {},\n\n /* Styles applied to the `ScrollButtonComponent` component if `scrollButtons=\"auto\"` or scrollButtons=\"desktop\"`. */\n scrollButtonsDesktop: _defineProperty({}, theme.breakpoints.down('xs'), {\n display: 'none'\n }),\n\n /* Styles applied to the `TabIndicator` component. */\n indicator: {}\n };\n};\nvar Tabs = /*#__PURE__*/React.forwardRef(function Tabs(props, ref) {\n var ariaLabel = props['aria-label'],\n ariaLabelledBy = props['aria-labelledby'],\n action = props.action,\n _props$centered = props.centered,\n centered = _props$centered === void 0 ? false : _props$centered,\n childrenProp = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n _props$indicatorColor = props.indicatorColor,\n indicatorColor = _props$indicatorColor === void 0 ? 'secondary' : _props$indicatorColor,\n onChange = props.onChange,\n _props$orientation = props.orientation,\n orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n _props$ScrollButtonCo = props.ScrollButtonComponent,\n ScrollButtonComponent = _props$ScrollButtonCo === void 0 ? TabScrollButton : _props$ScrollButtonCo,\n _props$scrollButtons = props.scrollButtons,\n scrollButtons = _props$scrollButtons === void 0 ? 'auto' : _props$scrollButtons,\n selectionFollowsFocus = props.selectionFollowsFocus,\n _props$TabIndicatorPr = props.TabIndicatorProps,\n TabIndicatorProps = _props$TabIndicatorPr === void 0 ? {} : _props$TabIndicatorPr,\n TabScrollButtonProps = props.TabScrollButtonProps,\n _props$textColor = props.textColor,\n textColor = _props$textColor === void 0 ? 'inherit' : _props$textColor,\n value = props.value,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'standard' : _props$variant,\n other = _objectWithoutProperties(props, [\"aria-label\", \"aria-labelledby\", \"action\", \"centered\", \"children\", \"classes\", \"className\", \"component\", \"indicatorColor\", \"onChange\", \"orientation\", \"ScrollButtonComponent\", \"scrollButtons\", \"selectionFollowsFocus\", \"TabIndicatorProps\", \"TabScrollButtonProps\", \"textColor\", \"value\", \"variant\"]);\n\n var theme = useTheme();\n var scrollable = variant === 'scrollable';\n var isRtl = theme.direction === 'rtl';\n var vertical = orientation === 'vertical';\n var scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n var start = vertical ? 'top' : 'left';\n var end = vertical ? 'bottom' : 'right';\n var clientSize = vertical ? 'clientHeight' : 'clientWidth';\n var size = vertical ? 'height' : 'width';\n\n if (process.env.NODE_ENV !== 'production') {\n if (centered && scrollable) {\n console.error('Material-UI: You can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n }\n }\n\n var _React$useState = React.useState(false),\n mounted = _React$useState[0],\n setMounted = _React$useState[1];\n\n var _React$useState2 = React.useState({}),\n indicatorStyle = _React$useState2[0],\n setIndicatorStyle = _React$useState2[1];\n\n var _React$useState3 = React.useState({\n start: false,\n end: false\n }),\n displayScroll = _React$useState3[0],\n setDisplayScroll = _React$useState3[1];\n\n var _React$useState4 = React.useState({\n overflow: 'hidden',\n marginBottom: null\n }),\n scrollerStyle = _React$useState4[0],\n setScrollerStyle = _React$useState4[1];\n\n var valueToIndex = new Map();\n var tabsRef = React.useRef(null);\n var tabListRef = React.useRef(null);\n\n var getTabsMeta = function getTabsMeta() {\n var tabsNode = tabsRef.current;\n var tabsMeta;\n\n if (tabsNode) {\n var rect = tabsNode.getBoundingClientRect(); // create a new object with ClientRect class props + scrollLeft\n\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollLeftNormalized: getNormalizedScrollLeft(tabsNode, theme.direction),\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right\n };\n }\n\n var tabMeta;\n\n if (tabsNode && value !== false) {\n var _children = tabListRef.current.children;\n\n if (_children.length > 0) {\n var tab = _children[valueToIndex.get(value)];\n\n if (process.env.NODE_ENV !== 'production') {\n if (!tab) {\n console.error([\"Material-UI: The value provided to the Tabs component is invalid.\", \"None of the Tabs' children match with `\".concat(value, \"`.\"), valueToIndex.keys ? \"You can provide one of the following values: \".concat(Array.from(valueToIndex.keys()).join(', '), \".\") : null].join('\\n'));\n }\n }\n\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n }\n }\n\n return {\n tabsMeta: tabsMeta,\n tabMeta: tabMeta\n };\n };\n\n var updateIndicatorState = useEventCallback(function () {\n var _newIndicatorStyle;\n\n var _getTabsMeta = getTabsMeta(),\n tabsMeta = _getTabsMeta.tabsMeta,\n tabMeta = _getTabsMeta.tabMeta;\n\n var startValue = 0;\n\n if (tabMeta && tabsMeta) {\n if (vertical) {\n startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n } else {\n var correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;\n startValue = tabMeta.left - tabsMeta.left + correction;\n }\n }\n\n var newIndicatorStyle = (_newIndicatorStyle = {}, _defineProperty(_newIndicatorStyle, start, startValue), _defineProperty(_newIndicatorStyle, size, tabMeta ? tabMeta[size] : 0), _newIndicatorStyle);\n\n if (isNaN(indicatorStyle[start]) || isNaN(indicatorStyle[size])) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n var dStart = Math.abs(indicatorStyle[start] - newIndicatorStyle[start]);\n var dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n\n var scroll = function scroll(scrollValue) {\n animate(scrollStart, tabsRef.current, scrollValue);\n };\n\n var moveTabsScroll = function moveTabsScroll(delta) {\n var scrollValue = tabsRef.current[scrollStart];\n\n if (vertical) {\n scrollValue += delta;\n } else {\n scrollValue += delta * (isRtl ? -1 : 1); // Fix for Edge\n\n scrollValue *= isRtl && detectScrollType() === 'reverse' ? -1 : 1;\n }\n\n scroll(scrollValue);\n };\n\n var handleStartScrollClick = function handleStartScrollClick() {\n moveTabsScroll(-tabsRef.current[clientSize]);\n };\n\n var handleEndScrollClick = function handleEndScrollClick() {\n moveTabsScroll(tabsRef.current[clientSize]);\n };\n\n var handleScrollbarSizeChange = React.useCallback(function (scrollbarHeight) {\n setScrollerStyle({\n overflow: null,\n marginBottom: -scrollbarHeight\n });\n }, []);\n\n var getConditionalElements = function getConditionalElements() {\n var conditionalElements = {};\n conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/React.createElement(ScrollbarSize, {\n className: classes.scrollable,\n onChange: handleScrollbarSizeChange\n }) : null;\n var scrollButtonsActive = displayScroll.start || displayScroll.end;\n var showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === 'desktop' || scrollButtons === 'on');\n conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/React.createElement(ScrollButtonComponent, _extends({\n orientation: orientation,\n direction: isRtl ? 'right' : 'left',\n onClick: handleStartScrollClick,\n disabled: !displayScroll.start,\n className: clsx(classes.scrollButtons, scrollButtons !== 'on' && classes.scrollButtonsDesktop)\n }, TabScrollButtonProps)) : null;\n conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/React.createElement(ScrollButtonComponent, _extends({\n orientation: orientation,\n direction: isRtl ? 'left' : 'right',\n onClick: handleEndScrollClick,\n disabled: !displayScroll.end,\n className: clsx(classes.scrollButtons, scrollButtons !== 'on' && classes.scrollButtonsDesktop)\n }, TabScrollButtonProps)) : null;\n return conditionalElements;\n };\n\n var scrollSelectedIntoView = useEventCallback(function () {\n var _getTabsMeta2 = getTabsMeta(),\n tabsMeta = _getTabsMeta2.tabsMeta,\n tabMeta = _getTabsMeta2.tabMeta;\n\n if (!tabMeta || !tabsMeta) {\n return;\n }\n\n if (tabMeta[start] < tabsMeta[start]) {\n // left side of button is out of view\n var nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n scroll(nextScrollStart);\n } else if (tabMeta[end] > tabsMeta[end]) {\n // right side of button is out of view\n var _nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n\n scroll(_nextScrollStart);\n }\n });\n var updateScrollButtonState = useEventCallback(function () {\n if (scrollable && scrollButtons !== 'off') {\n var _tabsRef$current = tabsRef.current,\n scrollTop = _tabsRef$current.scrollTop,\n scrollHeight = _tabsRef$current.scrollHeight,\n clientHeight = _tabsRef$current.clientHeight,\n scrollWidth = _tabsRef$current.scrollWidth,\n clientWidth = _tabsRef$current.clientWidth;\n var showStartScroll;\n var showEndScroll;\n\n if (vertical) {\n showStartScroll = scrollTop > 1;\n showEndScroll = scrollTop < scrollHeight - clientHeight - 1;\n } else {\n var scrollLeft = getNormalizedScrollLeft(tabsRef.current, theme.direction); // use 1 for the potential rounding error with browser zooms.\n\n showStartScroll = isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n showEndScroll = !isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n }\n\n if (showStartScroll !== displayScroll.start || showEndScroll !== displayScroll.end) {\n setDisplayScroll({\n start: showStartScroll,\n end: showEndScroll\n });\n }\n }\n });\n React.useEffect(function () {\n var handleResize = debounce(function () {\n updateIndicatorState();\n updateScrollButtonState();\n });\n var win = ownerWindow(tabsRef.current);\n win.addEventListener('resize', handleResize);\n return function () {\n handleResize.clear();\n win.removeEventListener('resize', handleResize);\n };\n }, [updateIndicatorState, updateScrollButtonState]);\n var handleTabsScroll = React.useCallback(debounce(function () {\n updateScrollButtonState();\n }));\n React.useEffect(function () {\n return function () {\n handleTabsScroll.clear();\n };\n }, [handleTabsScroll]);\n React.useEffect(function () {\n setMounted(true);\n }, []);\n React.useEffect(function () {\n updateIndicatorState();\n updateScrollButtonState();\n });\n React.useEffect(function () {\n scrollSelectedIntoView();\n }, [scrollSelectedIntoView, indicatorStyle]);\n React.useImperativeHandle(action, function () {\n return {\n updateIndicator: updateIndicatorState,\n updateScrollButtons: updateScrollButtonState\n };\n }, [updateIndicatorState, updateScrollButtonState]);\n var indicator = /*#__PURE__*/React.createElement(TabIndicator, _extends({\n className: classes.indicator,\n orientation: orientation,\n color: indicatorColor\n }, TabIndicatorProps, {\n style: _extends({}, indicatorStyle, TabIndicatorProps.style)\n }));\n var childIndex = 0;\n var children = React.Children.map(childrenProp, function (child) {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (isFragment(child)) {\n console.error([\"Material-UI: The Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n\n var childValue = child.props.value === undefined ? childIndex : child.props.value;\n valueToIndex.set(childValue, childIndex);\n var selected = childValue === value;\n childIndex += 1;\n return /*#__PURE__*/React.cloneElement(child, {\n fullWidth: variant === 'fullWidth',\n indicator: selected && !mounted && indicator,\n selected: selected,\n selectionFollowsFocus: selectionFollowsFocus,\n onChange: onChange,\n textColor: textColor,\n value: childValue\n });\n });\n\n var handleKeyDown = function handleKeyDown(event) {\n var target = event.target; // Keyboard navigation assumes that [role=\"tab\"] are siblings\n // though we might warn in the future about nested, interactive elements\n // as a a11y violation\n\n var role = target.getAttribute('role');\n\n if (role !== 'tab') {\n return;\n }\n\n var newFocusTarget = null;\n var previousItemKey = orientation !== \"vertical\" ? 'ArrowLeft' : 'ArrowUp';\n var nextItemKey = orientation !== \"vertical\" ? 'ArrowRight' : 'ArrowDown';\n\n if (orientation !== \"vertical\" && theme.direction === 'rtl') {\n // swap previousItemKey with nextItemKey\n previousItemKey = 'ArrowRight';\n nextItemKey = 'ArrowLeft';\n }\n\n switch (event.key) {\n case previousItemKey:\n newFocusTarget = target.previousElementSibling || tabListRef.current.lastChild;\n break;\n\n case nextItemKey:\n newFocusTarget = target.nextElementSibling || tabListRef.current.firstChild;\n break;\n\n case 'Home':\n newFocusTarget = tabListRef.current.firstChild;\n break;\n\n case 'End':\n newFocusTarget = tabListRef.current.lastChild;\n break;\n\n default:\n break;\n }\n\n if (newFocusTarget !== null) {\n newFocusTarget.focus();\n event.preventDefault();\n }\n };\n\n var conditionalElements = getConditionalElements();\n return /*#__PURE__*/React.createElement(Component, _extends({\n className: clsx(classes.root, className, vertical && classes.vertical),\n ref: ref\n }, other), conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(classes.scroller, scrollable ? classes.scrollable : classes.fixed),\n style: scrollerStyle,\n ref: tabsRef,\n onScroll: handleTabsScroll\n }, /*#__PURE__*/React.createElement(\"div\", {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className: clsx(classes.flexContainer, vertical && classes.flexContainerVertical, centered && !scrollable && classes.centered),\n onKeyDown: handleKeyDown,\n ref: tabListRef,\n role: \"tablist\"\n }, children), mounted && indicator), conditionalElements.scrollButtonEnd);\n});\nprocess.env.NODE_ENV !== \"production\" ? Tabs.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Callback fired when the component mounts.\n * This is useful when you want to trigger an action programmatically.\n * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n *\n * @param {object} actions This object contains all possible actions\n * that can be triggered programmatically.\n */\n action: refType,\n\n /**\n * The label for the Tabs as a string.\n */\n 'aria-label': PropTypes.string,\n\n /**\n * An id or list of ids separated by a space that label the Tabs.\n */\n 'aria-labelledby': PropTypes.string,\n\n /**\n * If `true`, the tabs will be centered.\n * This property is intended for large views.\n */\n centered: PropTypes.bool,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Determines the color of the indicator.\n */\n indicatorColor: PropTypes.oneOf(['primary', 'secondary']),\n\n /**\n * Callback fired when the value changes.\n *\n * @param {object} event The event source of the callback\n * @param {any} value We default to the index of the child (number)\n */\n onChange: PropTypes.func,\n\n /**\n * The tabs orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * The component used to render the scroll buttons.\n */\n ScrollButtonComponent: PropTypes.elementType,\n\n /**\n * Determine behavior of scroll buttons when tabs are set to scroll:\n *\n * - `auto` will only present them when not all the items are visible.\n * - `desktop` will only present them on medium and larger viewports.\n * - `on` will always present them.\n * - `off` will never present them.\n */\n scrollButtons: PropTypes.oneOf(['auto', 'desktop', 'off', 'on']),\n\n /**\n * If `true` the selected tab changes on focus. Otherwise it only\n * changes on activation.\n */\n selectionFollowsFocus: PropTypes.bool,\n\n /**\n * Props applied to the tab indicator element.\n */\n TabIndicatorProps: PropTypes.object,\n\n /**\n * Props applied to the [`TabScrollButton`](/api/tab-scroll-button/) element.\n */\n TabScrollButtonProps: PropTypes.object,\n\n /**\n * Determines the color of the `Tab`.\n */\n textColor: PropTypes.oneOf(['inherit', 'primary', 'secondary']),\n\n /**\n * The value of the currently selected `Tab`.\n * If you don't want any selected `Tab`, you can set this property to `false`.\n */\n value: PropTypes.any,\n\n /**\n * Determines additional display behavior of the tabs:\n *\n * - `scrollable` will invoke scrolling properties and allow for horizontally\n * scrolling (or swiping) of the tab bar.\n * -`fullWidth` will make the tabs grow to use all the available space,\n * which should be used for small views, like on mobile.\n * - `standard` will render the default state.\n */\n variant: PropTypes.oneOf(['fullWidth', 'scrollable', 'standard'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiTabs'\n})(Tabs);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nimport unsupportedProp from '../utils/unsupportedProp';\nexport var styles = function styles(theme) {\n var _extends2;\n\n return {\n /* Styles applied to the root element. */\n root: _extends({}, theme.typography.button, (_extends2 = {\n maxWidth: 264,\n minWidth: 72,\n position: 'relative',\n boxSizing: 'border-box',\n minHeight: 48,\n flexShrink: 0,\n padding: '6px 12px'\n }, _defineProperty(_extends2, theme.breakpoints.up('sm'), {\n padding: '6px 24px'\n }), _defineProperty(_extends2, \"overflow\", 'hidden'), _defineProperty(_extends2, \"whiteSpace\", 'normal'), _defineProperty(_extends2, \"textAlign\", 'center'), _defineProperty(_extends2, theme.breakpoints.up('sm'), {\n minWidth: 160\n }), _extends2)),\n\n /* Styles applied to the root element if both `icon` and `label` are provided. */\n labelIcon: {\n minHeight: 72,\n paddingTop: 9,\n '& $wrapper > *:first-child': {\n marginBottom: 6\n }\n },\n\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"inherit\"`. */\n textColorInherit: {\n color: 'inherit',\n opacity: 0.7,\n '&$selected': {\n opacity: 1\n },\n '&$disabled': {\n opacity: 0.5\n }\n },\n\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"primary\"`. */\n textColorPrimary: {\n color: theme.palette.text.secondary,\n '&$selected': {\n color: theme.palette.primary.main\n },\n '&$disabled': {\n color: theme.palette.text.disabled\n }\n },\n\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"secondary\"`. */\n textColorSecondary: {\n color: theme.palette.text.secondary,\n '&$selected': {\n color: theme.palette.secondary.main\n },\n '&$disabled': {\n color: theme.palette.text.disabled\n }\n },\n\n /* Pseudo-class applied to the root element if `selected={true}` (controlled by the Tabs component). */\n selected: {},\n\n /* Pseudo-class applied to the root element if `disabled={true}` (controlled by the Tabs component). */\n disabled: {},\n\n /* Styles applied to the root element if `fullWidth={true}` (controlled by the Tabs component). */\n fullWidth: {\n flexShrink: 1,\n flexGrow: 1,\n flexBasis: 0,\n maxWidth: 'none'\n },\n\n /* Styles applied to the root element if `wrapped={true}`. */\n wrapped: {\n fontSize: theme.typography.pxToRem(12),\n lineHeight: 1.5\n },\n\n /* Styles applied to the `icon` and `label`'s wrapper element. */\n wrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n flexDirection: 'column'\n }\n };\n};\nvar Tab = /*#__PURE__*/React.forwardRef(function Tab(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n _props$disableFocusRi = props.disableFocusRipple,\n disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n fullWidth = props.fullWidth,\n icon = props.icon,\n indicator = props.indicator,\n label = props.label,\n onChange = props.onChange,\n onClick = props.onClick,\n onFocus = props.onFocus,\n selected = props.selected,\n selectionFollowsFocus = props.selectionFollowsFocus,\n _props$textColor = props.textColor,\n textColor = _props$textColor === void 0 ? 'inherit' : _props$textColor,\n value = props.value,\n _props$wrapped = props.wrapped,\n wrapped = _props$wrapped === void 0 ? false : _props$wrapped,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"disabled\", \"disableFocusRipple\", \"fullWidth\", \"icon\", \"indicator\", \"label\", \"onChange\", \"onClick\", \"onFocus\", \"selected\", \"selectionFollowsFocus\", \"textColor\", \"value\", \"wrapped\"]);\n\n var handleClick = function handleClick(event) {\n if (onChange) {\n onChange(event, value);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n var handleFocus = function handleFocus(event) {\n if (selectionFollowsFocus && !selected && onChange) {\n onChange(event, value);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n return /*#__PURE__*/React.createElement(ButtonBase, _extends({\n focusRipple: !disableFocusRipple,\n className: clsx(classes.root, classes[\"textColor\".concat(capitalize(textColor))], className, disabled && classes.disabled, selected && classes.selected, label && icon && classes.labelIcon, fullWidth && classes.fullWidth, wrapped && classes.wrapped),\n ref: ref,\n role: \"tab\",\n \"aria-selected\": selected,\n disabled: disabled,\n onClick: handleClick,\n onFocus: handleFocus,\n tabIndex: selected ? 0 : -1\n }, other), /*#__PURE__*/React.createElement(\"span\", {\n className: classes.wrapper\n }, icon, label), indicator);\n});\nprocess.env.NODE_ENV !== \"production\" ? Tab.propTypes = {\n /**\n * This prop isn't supported.\n * Use the `component` prop if you need to change the children structure.\n */\n children: unsupportedProp,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object.isRequired,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the tab will be disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the keyboard focus ripple will be disabled.\n */\n disableFocusRipple: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect will be disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * @ignore\n */\n fullWidth: PropTypes.bool,\n\n /**\n * The icon element.\n */\n icon: PropTypes.node,\n\n /**\n * @ignore\n * For server-side rendering consideration, we let the selected tab\n * render the indicator.\n */\n indicator: PropTypes.node,\n\n /**\n * The label element.\n */\n label: PropTypes.node,\n\n /**\n * @ignore\n */\n onChange: PropTypes.func,\n\n /**\n * @ignore\n */\n onClick: PropTypes.func,\n\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n\n /**\n * @ignore\n */\n selected: PropTypes.bool,\n\n /**\n * @ignore\n */\n selectionFollowsFocus: PropTypes.bool,\n\n /**\n * @ignore\n */\n textColor: PropTypes.oneOf(['secondary', 'primary', 'inherit']),\n\n /**\n * You can provide your own value. Otherwise, we fallback to the child position index.\n */\n value: PropTypes.any,\n\n /**\n * Tab labels appear in a single row.\n * They can use a second line if needed.\n */\n wrapped: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiTab'\n})(Tab);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n\n/* eslint-disable jsx-a11y/aria-role */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n width: 40,\n flexShrink: 0,\n opacity: 0.8,\n '&$disabled': {\n opacity: 0\n }\n },\n\n /* Styles applied to the root element if `orientation=\"vertical\"`. */\n vertical: {\n width: '100%',\n height: 40,\n '& svg': {\n transform: 'rotate(90deg)'\n }\n },\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {}\n};\n\nvar _ref = /*#__PURE__*/React.createElement(KeyboardArrowLeft, {\n fontSize: \"small\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(KeyboardArrowRight, {\n fontSize: \"small\"\n});\n\nvar TabScrollButton = /*#__PURE__*/React.forwardRef(function TabScrollButton(props, ref) {\n var classes = props.classes,\n classNameProp = props.className,\n direction = props.direction,\n orientation = props.orientation,\n disabled = props.disabled,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"direction\", \"orientation\", \"disabled\"]);\n\n return /*#__PURE__*/React.createElement(ButtonBase, _extends({\n component: \"div\",\n className: clsx(classes.root, classNameProp, disabled && classes.disabled, orientation === 'vertical' && classes.vertical),\n ref: ref,\n role: null,\n tabIndex: null\n }, other), direction === 'left' ? _ref : _ref2);\n});\nprocess.env.NODE_ENV !== \"production\" ? TabScrollButton.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Which direction should the button indicate?\n */\n direction: PropTypes.oneOf(['left', 'right']).isRequired,\n\n /**\n * If `true`, the element will be disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * The tabs orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiTabScrollButton'\n})(TabScrollButton);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n flex: '1 1 auto',\n WebkitOverflowScrolling: 'touch',\n // Add iOS momentum scrolling.\n overflowY: 'auto',\n padding: '8px 24px',\n '&:first-child': {\n // dialog without title\n paddingTop: 20\n }\n },\n\n /* Styles applied to the root element if `dividers={true}`. */\n dividers: {\n padding: '16px 24px',\n borderTop: \"1px solid \".concat(theme.palette.divider),\n borderBottom: \"1px solid \".concat(theme.palette.divider)\n }\n };\n};\nvar DialogContent = /*#__PURE__*/React.forwardRef(function DialogContent(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$dividers = props.dividers,\n dividers = _props$dividers === void 0 ? false : _props$dividers,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"dividers\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className, dividers && classes.dividers),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContent.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Display the top and bottom dividers.\n */\n dividers: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiDialogContent'\n})(DialogContent);","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n margin: 0,\n padding: '16px 24px',\n flex: '0 0 auto'\n }\n};\nvar DialogTitle = /*#__PURE__*/React.forwardRef(function DialogTitle(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$disableTypogra = props.disableTypography,\n disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"disableTypography\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className),\n ref: ref\n }, other), disableTypography ? children : /*#__PURE__*/React.createElement(Typography, {\n component: \"h2\",\n variant: \"h6\"\n }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogTitle.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the children won't be wrapped by a typography component.\n * For instance, this can be useful to render an h4 instead of the default h2.\n */\n disableTypography: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiDialogTitle'\n})(DialogTitle);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Fade from '../Fade';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n // Improve scrollable dialog support.\n zIndex: -1,\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n WebkitTapHighlightColor: 'transparent'\n },\n\n /* Styles applied to the root element if `invisible={true}`. */\n invisible: {\n backgroundColor: 'transparent'\n }\n};\nvar Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$invisible = props.invisible,\n invisible = _props$invisible === void 0 ? false : _props$invisible,\n open = props.open,\n transitionDuration = props.transitionDuration,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Fade : _props$TransitionComp,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"]);\n\n return /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n in: open,\n timeout: transitionDuration\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(classes.root, className, invisible && classes.invisible),\n \"aria-hidden\": true,\n ref: ref\n }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n */\n invisible: PropTypes.bool,\n\n /**\n * If `true`, the backdrop is open.\n */\n open: PropTypes.bool.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiBackdrop'\n})(Backdrop);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport deprecatedPropType from '../utils/deprecatedPropType';\nimport Modal from '../Modal';\nimport Backdrop from '../Backdrop';\nimport Fade from '../Fade';\nimport { duration } from '../styles/transitions';\nimport Paper from '../Paper';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n '@media print': {\n // Use !important to override the Modal inline-style.\n position: 'absolute !important'\n }\n },\n\n /* Styles applied to the container element if `scroll=\"paper\"`. */\n scrollPaper: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n\n /* Styles applied to the container element if `scroll=\"body\"`. */\n scrollBody: {\n overflowY: 'auto',\n overflowX: 'hidden',\n textAlign: 'center',\n '&:after': {\n content: '\"\"',\n display: 'inline-block',\n verticalAlign: 'middle',\n height: '100%',\n width: '0'\n }\n },\n\n /* Styles applied to the container element. */\n container: {\n height: '100%',\n '@media print': {\n height: 'auto'\n },\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0\n },\n\n /* Styles applied to the `Paper` component. */\n paper: {\n margin: 32,\n position: 'relative',\n overflowY: 'auto',\n // Fix IE 11 issue, to remove at some point.\n '@media print': {\n overflowY: 'visible',\n boxShadow: 'none'\n }\n },\n\n /* Styles applied to the `Paper` component if `scroll=\"paper\"`. */\n paperScrollPaper: {\n display: 'flex',\n flexDirection: 'column',\n maxHeight: 'calc(100% - 64px)'\n },\n\n /* Styles applied to the `Paper` component if `scroll=\"body\"`. */\n paperScrollBody: {\n display: 'inline-block',\n verticalAlign: 'middle',\n textAlign: 'left' // 'initial' doesn't work on IE 11\n\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=false`. */\n paperWidthFalse: {\n maxWidth: 'calc(100% - 64px)'\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"xs\"`. */\n paperWidthXs: {\n maxWidth: Math.max(theme.breakpoints.values.xs, 444),\n '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2), {\n maxWidth: 'calc(100% - 64px)'\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"sm\"`. */\n paperWidthSm: {\n maxWidth: theme.breakpoints.values.sm,\n '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.sm + 32 * 2), {\n maxWidth: 'calc(100% - 64px)'\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"md\"`. */\n paperWidthMd: {\n maxWidth: theme.breakpoints.values.md,\n '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.md + 32 * 2), {\n maxWidth: 'calc(100% - 64px)'\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"lg\"`. */\n paperWidthLg: {\n maxWidth: theme.breakpoints.values.lg,\n '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.lg + 32 * 2), {\n maxWidth: 'calc(100% - 64px)'\n })\n },\n\n /* Styles applied to the `Paper` component if `maxWidth=\"xl\"`. */\n paperWidthXl: {\n maxWidth: theme.breakpoints.values.xl,\n '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.xl + 32 * 2), {\n maxWidth: 'calc(100% - 64px)'\n })\n },\n\n /* Styles applied to the `Paper` component if `fullWidth={true}`. */\n paperFullWidth: {\n width: 'calc(100% - 64px)'\n },\n\n /* Styles applied to the `Paper` component if `fullScreen={true}`. */\n paperFullScreen: {\n margin: 0,\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: 'none',\n borderRadius: 0,\n '&$paperScrollBody': {\n margin: 0,\n maxWidth: '100%'\n }\n }\n };\n};\nvar defaultTransitionDuration = {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen\n};\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\nvar Dialog = /*#__PURE__*/React.forwardRef(function Dialog(props, ref) {\n var BackdropProps = props.BackdropProps,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$disableBackdro = props.disableBackdropClick,\n disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n _props$disableEscapeK = props.disableEscapeKeyDown,\n disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n _props$fullScreen = props.fullScreen,\n fullScreen = _props$fullScreen === void 0 ? false : _props$fullScreen,\n _props$fullWidth = props.fullWidth,\n fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n _props$maxWidth = props.maxWidth,\n maxWidth = _props$maxWidth === void 0 ? 'sm' : _props$maxWidth,\n onBackdropClick = props.onBackdropClick,\n onClose = props.onClose,\n onEnter = props.onEnter,\n onEntered = props.onEntered,\n onEntering = props.onEntering,\n onEscapeKeyDown = props.onEscapeKeyDown,\n onExit = props.onExit,\n onExited = props.onExited,\n onExiting = props.onExiting,\n open = props.open,\n _props$PaperComponent = props.PaperComponent,\n PaperComponent = _props$PaperComponent === void 0 ? Paper : _props$PaperComponent,\n _props$PaperProps = props.PaperProps,\n PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n _props$scroll = props.scroll,\n scroll = _props$scroll === void 0 ? 'paper' : _props$scroll,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Fade : _props$TransitionComp,\n _props$transitionDura = props.transitionDuration,\n transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n TransitionProps = props.TransitionProps,\n ariaDescribedby = props['aria-describedby'],\n ariaLabelledby = props['aria-labelledby'],\n other = _objectWithoutProperties(props, [\"BackdropProps\", \"children\", \"classes\", \"className\", \"disableBackdropClick\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onEscapeKeyDown\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\", \"aria-describedby\", \"aria-labelledby\"]);\n\n var mouseDownTarget = React.useRef();\n\n var handleMouseDown = function handleMouseDown(event) {\n mouseDownTarget.current = event.target;\n };\n\n var handleBackdropClick = function handleBackdropClick(event) {\n // Ignore the events not coming from the \"backdrop\"\n // We don't want to close the dialog when clicking the dialog content.\n if (event.target !== event.currentTarget) {\n return;\n } // Make sure the event starts and ends on the same DOM element.\n\n\n if (event.target !== mouseDownTarget.current) {\n return;\n }\n\n mouseDownTarget.current = null;\n\n if (onBackdropClick) {\n onBackdropClick(event);\n }\n\n if (!disableBackdropClick && onClose) {\n onClose(event, 'backdropClick');\n }\n };\n\n return /*#__PURE__*/React.createElement(Modal, _extends({\n className: clsx(classes.root, className),\n BackdropComponent: Backdrop,\n BackdropProps: _extends({\n transitionDuration: transitionDuration\n }, BackdropProps),\n closeAfterTransition: true\n }, disableBackdropClick ? {\n disableBackdropClick: disableBackdropClick\n } : {}, {\n disableEscapeKeyDown: disableEscapeKeyDown,\n onEscapeKeyDown: onEscapeKeyDown,\n onClose: onClose,\n open: open,\n ref: ref\n }, other), /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n appear: true,\n in: open,\n timeout: transitionDuration,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n role: \"none presentation\"\n }, TransitionProps), /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(classes.container, classes[\"scroll\".concat(capitalize(scroll))]),\n onMouseUp: handleBackdropClick,\n onMouseDown: handleMouseDown\n }, /*#__PURE__*/React.createElement(PaperComponent, _extends({\n elevation: 24,\n role: \"dialog\",\n \"aria-describedby\": ariaDescribedby,\n \"aria-labelledby\": ariaLabelledby\n }, PaperProps, {\n className: clsx(classes.paper, classes[\"paperScroll\".concat(capitalize(scroll))], classes[\"paperWidth\".concat(capitalize(String(maxWidth)))], PaperProps.className, fullScreen && classes.paperFullScreen, fullWidth && classes.paperFullWidth)\n }), children))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The id(s) of the element(s) that describe the dialog.\n */\n 'aria-describedby': PropTypes.string,\n\n /**\n * The id(s) of the element(s) that label the dialog.\n */\n 'aria-labelledby': PropTypes.string,\n\n /**\n * @ignore\n */\n BackdropProps: PropTypes.object,\n\n /**\n * Dialog children, usually the included sub-components.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, clicking the backdrop will not fire the `onClose` callback.\n * @deprecated Use the onClose prop with the `reason` argument to filter the `backdropClick` events.\n */\n disableBackdropClick: deprecatedPropType(PropTypes.bool, 'Use the onClose prop with the `reason` argument to filter the `backdropClick` events.'),\n\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n */\n disableEscapeKeyDown: PropTypes.bool,\n\n /**\n * If `true`, the dialog will be full-screen\n */\n fullScreen: PropTypes.bool,\n\n /**\n * If `true`, the dialog stretches to `maxWidth`.\n *\n * Notice that the dialog width grow is limited by the default margin.\n */\n fullWidth: PropTypes.bool,\n\n /**\n * Determine the max-width of the dialog.\n * The dialog width grows with the size of the screen.\n * Set to `false` to disable `maxWidth`.\n */\n maxWidth: PropTypes.oneOf(['lg', 'md', 'sm', 'xl', 'xs', false]),\n\n /**\n * Callback fired when the backdrop is clicked.\n * @deprecated Use the onClose prop with the `reason` argument to handle the `backdropClick` events.\n */\n onBackdropClick: deprecatedPropType(PropTypes.func, 'Use the onClose prop with the `reason` argument to handle the `backdropClick` events.'),\n\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n */\n onClose: PropTypes.func,\n\n /**\n * Callback fired before the dialog enters.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onEnter: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * Callback fired when the dialog has entered.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onEntered: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * Callback fired when the dialog is entering.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onEntering: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * Callback fired when the escape key is pressed,\n * `disableKeyboard` is false and the modal is in focus.\n * @deprecated Use the onClose prop with the `reason` argument to handle the `escapeKeyDown` events.\n */\n onEscapeKeyDown: deprecatedPropType(PropTypes.func, 'Use the onClose prop with the `reason` argument to handle the `escapeKeyDown` events.'),\n\n /**\n * Callback fired before the dialog exits.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onExit: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * Callback fired when the dialog has exited.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onExited: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * Callback fired when the dialog is exiting.\n * @deprecated Use the `TransitionProps` prop instead.\n */\n onExiting: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n /**\n * If `true`, the Dialog is open.\n */\n open: PropTypes.bool.isRequired,\n\n /**\n * The component used to render the body of the dialog.\n */\n PaperComponent: PropTypes.elementType,\n\n /**\n * Props applied to the [`Paper`](/api/paper/) element.\n */\n PaperProps: PropTypes.object,\n\n /**\n * Determine the container for scrolling the dialog.\n */\n scroll: PropTypes.oneOf(['body', 'paper']),\n\n /**\n * The component used for the transition.\n * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n */\n TransitionComponent: PropTypes.elementType,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })]),\n\n /**\n * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n */\n TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiDialog'\n})(Dialog);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: 8,\n justifyContent: 'flex-end',\n flex: '0 0 auto'\n },\n\n /* Styles applied to the root element if `disableSpacing={false}`. */\n spacing: {\n '& > :not(:first-child)': {\n marginLeft: 8\n }\n }\n};\nvar DialogActions = /*#__PURE__*/React.forwardRef(function DialogActions(props, ref) {\n var _props$disableSpacing = props.disableSpacing,\n disableSpacing = _props$disableSpacing === void 0 ? false : _props$disableSpacing,\n classes = props.classes,\n className = props.className,\n other = _objectWithoutProperties(props, [\"disableSpacing\", \"classes\", \"className\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className, !disableSpacing && classes.spacing),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the actions do not have additional margin.\n */\n disableSpacing: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiDialogActions'\n})(DialogActions);"],"names":["styles","entering","opacity","entered","defaultTimeout","enter","enteringScreen","exit","leavingScreen","props","ref","children","_props$disableStrictM","disableStrictModeCompat","inProp","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","_props$TransitionComp","TransitionComponent","_props$timeout","timeout","other","theme","enableStrictModeCompat","unstable_strictMode","nodeRef","foreignRef","handleRef","undefined","normalizedTransitionCallback","callback","nodeOrAppearing","maybeAppearing","_ref","current","_ref2","node","isAppearing","handleEntering","handleEnter","transitionProps","mode","webkitTransition","transitions","create","transition","handleEntered","handleExiting","handleExit","handleExited","appear","state","childProps","visibility","cachedType","detectScrollType","dummy","document","createElement","container","width","height","appendChild","dir","fontSize","position","top","overflow","body","scrollLeft","removeChild","getNormalizedScrollLeft","element","direction","scrollWidth","clientWidth","easeInOutSin","time","Math","sin","PI","ScrollbarSize","onChange","scrollbarHeight","setMeasurements","offsetHeight","clientHeight","handleResize","debounce","prevHeight","window","addEventListener","clear","removeEventListener","TabIndicator","classes","className","color","orientation","root","concat","capitalize","vertical","withStyles","bottom","colorPrimary","backgroundColor","palette","primary","main","colorSecondary","secondary","right","name","Tabs","ariaLabel","ariaLabelledBy","action","_props$centered","centered","childrenProp","_props$component","component","Component","_props$indicatorColor","indicatorColor","_props$orientation","_props$ScrollButtonCo","ScrollButtonComponent","TabScrollButton","_props$scrollButtons","scrollButtons","selectionFollowsFocus","_props$TabIndicatorPr","TabIndicatorProps","TabScrollButtonProps","_props$textColor","textColor","value","_props$variant","variant","useTheme","scrollable","isRtl","scrollStart","start","end","clientSize","size","_React$useState","mounted","setMounted","_React$useState2","indicatorStyle","setIndicatorStyle","_React$useState3","displayScroll","setDisplayScroll","_React$useState4","marginBottom","scrollerStyle","setScrollerStyle","valueToIndex","Map","tabsRef","tabListRef","getTabsMeta","tabsMeta","tabMeta","tabsNode","rect","getBoundingClientRect","scrollTop","scrollLeftNormalized","left","_children","length","tab","get","updateIndicatorState","useEventCallback","_newIndicatorStyle","_getTabsMeta","startValue","correction","newIndicatorStyle","isNaN","dStart","abs","dSize","scroll","scrollValue","property","to","options","arguments","cb","_options$ease","ease","_options$duration","duration","from","cancelled","Error","requestAnimationFrame","step","timestamp","min","animate","moveTabsScroll","delta","handleStartScrollClick","handleEndScrollClick","handleScrollbarSizeChange","scrollSelectedIntoView","_getTabsMeta2","nextScrollStart","_nextScrollStart","updateScrollButtonState","showStartScroll","showEndScroll","_tabsRef$current","scrollHeight","win","ownerWindow","handleTabsScroll","updateIndicator","updateScrollButtons","indicator","childIndex","map","child","childValue","set","selected","fullWidth","conditionalElements","scrollbarSizeListener","scrollButtonsActive","showScrollButtons","scrollButtonStart","onClick","disabled","scrollButtonsDesktop","scrollButtonEnd","getConditionalElements","scroller","fixed","onScroll","flexContainer","flexContainerVertical","onKeyDown","event","target","getAttribute","newFocusTarget","previousItemKey","nextItemKey","key","previousElementSibling","lastChild","nextElementSibling","firstChild","focus","preventDefault","role","minHeight","WebkitOverflowScrolling","display","flexDirection","justifyContent","flex","whiteSpace","overflowX","scrollbarWidth","breakpoints","down","Tab","_props$disabled","_props$disableFocusRi","disableFocusRipple","icon","label","onFocus","_props$wrapped","wrapped","focusRipple","labelIcon","tabIndex","wrapper","_extends2","typography","button","maxWidth","minWidth","boxSizing","flexShrink","padding","up","paddingTop","textColorInherit","textColorPrimary","text","textColorSecondary","flexGrow","flexBasis","pxToRem","lineHeight","alignItems","classNameProp","transform","DialogContent","_props$dividers","dividers","overflowY","borderTop","divider","borderBottom","d","DialogTitle","_props$disableTypogra","disableTypography","margin","Backdrop","_props$invisible","invisible","open","transitionDuration","zIndex","WebkitTapHighlightColor","defaultTransitionDuration","Dialog","BackdropProps","_props$disableBackdro","disableBackdropClick","_props$disableEscapeK","disableEscapeKeyDown","_props$fullScreen","fullScreen","_props$fullWidth","_props$maxWidth","onBackdropClick","onClose","onEscapeKeyDown","_props$PaperComponent","PaperComponent","_props$PaperProps","PaperProps","_props$scroll","_props$transitionDura","TransitionProps","ariaDescribedby","ariaLabelledby","mouseDownTarget","BackdropComponent","closeAfterTransition","onMouseUp","currentTarget","onMouseDown","elevation","paper","String","paperFullScreen","paperFullWidth","scrollPaper","scrollBody","textAlign","content","verticalAlign","outline","boxShadow","paperScrollPaper","maxHeight","paperScrollBody","paperWidthFalse","paperWidthXs","max","values","xs","paperWidthSm","sm","paperWidthMd","md","paperWidthLg","lg","paperWidthXl","xl","borderRadius","DialogActions","_props$disableSpacing","disableSpacing","spacing","marginLeft"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[3097],{34955:(e,t,a)=>{a.d(t,{Al:()=>s,DS:()=>h,EM:()=>l,FL:()=>i,J:()=>r,KV:()=>A,R_:()=>c,U3:()=>o,dp:()=>u,jH:()=>y,q0:()=>m,uL:()=>g,v_:()=>d,vs:()=>p,z4:()=>v});var n=a(83572);(0,n.i)({name:"kuadrant.planpolicy.create",attributes:{action:"create"}}),(0,n.i)({name:"kuadrant.planpolicy.read",attributes:{action:"read"}}),(0,n.i)({name:"kuadrant.planpolicy.update",attributes:{action:"update"}}),(0,n.i)({name:"kuadrant.planpolicy.delete",attributes:{action:"delete"}});const r=(0,n.i)({name:"kuadrant.planpolicy.list",attributes:{action:"read"}}),i=(0,n.i)({name:"kuadrant.apiproduct.create",attributes:{action:"create"}}),s=((0,n.i)({name:"kuadrant.apiproduct.read.own",attributes:{action:"read"}}),(0,n.i)({name:"kuadrant.apiproduct.read.all",attributes:{action:"read"}})),o=(0,n.i)({name:"kuadrant.apiproduct.update.own",attributes:{action:"update"}}),d=(0,n.i)({name:"kuadrant.apiproduct.update.all",attributes:{action:"update"}}),l=(0,n.i)({name:"kuadrant.apiproduct.delete.own",attributes:{action:"delete"}}),c=(0,n.i)({name:"kuadrant.apiproduct.delete.all",attributes:{action:"delete"}}),p=(0,n.i)({name:"kuadrant.apiproduct.list",attributes:{action:"read"}}),u=(0,n.i)({name:"kuadrant.apikey.create",attributes:{action:"create"},resourceType:"apiproduct"}),h=(0,n.i)({name:"kuadrant.apikey.read.own",attributes:{action:"read"}}),m=((0,n.i)({name:"kuadrant.apikey.read.all",attributes:{action:"read"}}),(0,n.i)({name:"kuadrant.apikey.update.own",attributes:{action:"update"}})),v=(0,n.i)({name:"kuadrant.apikey.update.all",attributes:{action:"update"}}),g=(0,n.i)({name:"kuadrant.apikey.delete.own",attributes:{action:"delete"}}),y=(0,n.i)({name:"kuadrant.apikey.delete.all",attributes:{action:"delete"}}),A=(0,n.i)({name:"kuadrant.apikey.approve",attributes:{action:"update"}})},35015:(e,t,a)=>{a.d(t,{A:()=>s});var n=a(95478),r=a(85608),i=a(71581);function s(e,t){void 0===t&&(t=[]);var a=function(e,t,a){void 0===t&&(t=[]),void 0===a&&(a={loading:!1});var s=(0,n.useRef)(0),o=(0,i.A)(),d=(0,n.useState)(a),l=d[0],c=d[1],p=(0,n.useCallback)(function(){for(var t=[],a=0;a<arguments.length;a++)t[a]=arguments[a];var n=++s.current;return l.loading||c(function(e){return(0,r.__assign)((0,r.__assign)({},e),{loading:!0})}),e.apply(void 0,t).then(function(e){return o()&&n===s.current&&c({value:e,loading:!1}),e},function(e){return o()&&n===s.current&&c({error:e,loading:!1}),e})},t);return[l,p]}(e,t,{loading:!0}),s=a[0],o=a[1];return(0,n.useEffect)(function(){o()},[o]),s}},37725:(e,t,a)=>{a.d(t,{N_:()=>f});var n=a(31085),r=a(22097),i=a(49203),s=a(37976),o=a(72501),d=a(53373),l=a.n(d),c=a(45250),p=a(95478),u=a(42469),h=a(39330);const m=(0,s.makeStyles)(e=>({visuallyHidden:{clip:"rect(0 0 0 0)",clipPath:"inset(50%)",overflow:"hidden",position:"absolute",userSelect:"none",whiteSpace:"nowrap",height:1,width:1},externalLink:{position:"relative"},externalLinkIcon:{verticalAlign:"bottom",marginLeft:e.spacing(.5)}}),{name:"Link"}),v=()=>{const e=(0,r.useApp)().getSystemIcon("externalLink")||h.A,t=m();return(0,n.jsx)(e,{className:t.externalLinkIcon})},g=e=>/^([a-z+.-]+):/.test(e),y=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,A=window.open;if(A&&!A.__backstage){const e=function(...e){const t=String(e[0]);if(y.test(t))throw new Error("Rejected window.open() with a javascript: URL as a security precaution");return A.apply(this,e)};e.__backstage=!0,window.open=e}const x=e=>e instanceof Array?e.map(x).join(" ").trim():"object"==typeof e&&e?x(e?.props?.children):["string","number"].includes(typeof e)?String(e):"",f=(0,p.forwardRef)(({onClick:e,noTrack:t,externalLinkIcon:a,...s},d)=>{const p=m(),h=(0,r.useAnalytics)(),A=function(){const[e]=(0,u.createRoutesFromChildren)((0,n.jsx)(u.Route,{index:!0,element:(0,n.jsx)("div",{})}));return!e.index}()?(e=>{let t=String(e);const a=(()=>{const e=(()=>{try{return(0,r.useApi)(r.configApiRef).getOptionalString("app.baseUrl")}catch{return}})()??"/",{pathname:t}=new URL(e,"http://sample.dev");return(0,c.trimEnd)(t,"/")})(),n=g(t),i=t.startsWith(a);return n||i||(t=a.concat(t)),t})(s.to):s.to,f=x(s.children)||A,j=g(A),b=j&&!!/^https?:/.exec(A);if(y.test(A))throw new Error("Link component rejected javascript: URL as a security precaution");const k=a=>{e?.(a),t||h.captureEvent("click",f,{attributes:{to:A}})};return j?(0,n.jsxs)(i.A,{...b?{target:"_blank",rel:"noopener"}:{},...s,...s["aria-label"]?{"aria-label":`${s["aria-label"]}, Opens in a new window`}:{},ref:d,href:A,onClick:k,className:l()(p.externalLink,s.className),children:[s.children,a&&(0,n.jsx)(v,{}),(0,n.jsx)(o.A,{component:"span",className:p.visuallyHidden,children:", Opens in a new window"})]}):(0,n.jsx)(i.A,{...s,ref:d,component:u.Link,to:A,onClick:k})})},39330:(e,t,a)=>{var n=a(4293),r=a(78920);t.A=void 0;var i=r(a(95478)),s=(0,n(a(74044)).default)(i.createElement("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"}),"OpenInNew");t.A=s},43097:(e,t,a)=>{a.r(t),a.d(t,{ApprovalQueueCard:()=>B});var n=a(31085),r=a(95478),i=a(22097),s=a(35015),o=a(86687),d=a(42367),l=a(96040),c=a(25010),p=a(34955),u=a(46205),h=a(76891),m=a(61477),v=a(46805),g=a(10394),y=a(72501),A=a(93453),x=a(64947),f=a(78467),j=a(67720),b=a(71677),k=a(31653),w=a(38605),C=a(8973),q=a(29655),R=a(91567),S=a(55429),P=a(92399),I=a(6924);const T=({open:e,request:t,action:a,processing:r,onClose:i,onConfirm:s})=>{var o;const d="approve"===a?"Approve":"Reject",l="approve"===a?"Approving...":"Rejecting...";return(0,n.jsxs)(h.A,{open:e,onClose:r?void 0:i,maxWidth:"sm",fullWidth:!0,children:[(0,n.jsxs)(m.A,{children:[d," API Key"]}),(0,n.jsx)(v.A,{children:t&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"User:"})," ",t.spec.requestedBy.userId]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"API:"})," ",(null===(o=t.spec.apiProductRef)||void 0===o?void 0:o.name)||"unknown"]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"Tier:"})," ",t.spec.planTier]}),(0,n.jsxs)(g.A,{mb:2,children:[(0,n.jsx)(y.A,{variant:"body2",component:"span",style:{fontWeight:"bold"},children:"Use Case:"})," ",(0,n.jsx)(y.A,{variant:"body2",component:"span",style:{whiteSpace:"pre-wrap"},children:t.spec.useCase||"-"})]})]})}),(0,n.jsxs)(A.A,{children:[(0,n.jsx)(x.A,{onClick:i,disabled:r,children:"Cancel"}),(0,n.jsx)(x.A,{onClick:s,color:"approve"===a?"primary":"secondary",variant:"contained",disabled:r,startIcon:r?(0,n.jsx)(f.A,{size:16,color:"inherit"}):void 0,children:r?l:d})]})]})},$=({open:e,requests:t,action:a,processing:r,onClose:i,onConfirm:s})=>{const o="approve"===a,d=o?"Approve All":"Reject All",l=o?"Approving...":"Rejecting...";return(0,n.jsxs)(h.A,{open:e,onClose:r?void 0:i,maxWidth:"md",fullWidth:!0,children:[(0,n.jsxs)(m.A,{children:[o?"Approve":"Reject"," ",t.length," API Keys"]}),(0,n.jsxs)(v.A,{children:[(0,n.jsxs)(y.A,{variant:"body2",paragraph:!0,children:["You are about to ",o?"approve":"reject"," the following API keys:"]}),(0,n.jsx)(g.A,{mb:2,maxHeight:200,overflow:"auto",children:t.map(e=>{var t;return(0,n.jsx)(g.A,{mb:1,p:1,bgcolor:"background.default",children:(0,n.jsxs)(y.A,{variant:"body2",children:[(0,n.jsx)("strong",{children:e.spec.requestedBy.userId})," -"," ",(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"," (",e.spec.planTier,")"]})},`${e.metadata.namespace}/${e.metadata.name}`)})})]}),(0,n.jsxs)(A.A,{children:[(0,n.jsx)(x.A,{onClick:i,disabled:r,children:"Cancel"}),(0,n.jsx)(x.A,{onClick:s,color:o?"primary":"secondary",variant:"contained",disabled:r,startIcon:r?(0,n.jsx)(f.A,{size:16,color:"inherit"}):void 0,children:r?l:d})]})]})},B=()=>{const e=(0,i.useApi)(i.configApiRef),t=(0,i.useApi)(i.fetchApiRef),a=(0,i.useApi)(i.identityApiRef),h=(0,i.useApi)(i.alertApiRef),m=e.getString("backend.baseUrl"),[v,A]=(0,r.useState)(0),[f,B]=(0,r.useState)(0),[N,L]=(0,r.useState)([]),[z,_]=(0,r.useState)({open:!1,request:null,action:"approve",processing:!1}),[E,W]=(0,r.useState)({open:!1,requests:[],action:"approve",processing:!1}),{allowed:U,loading:O,error:H}=(0,u.l)(p.z4),{allowed:D,loading:F,error:M}=(0,u.l)(p.q0),Q=O||F,V=H||M,{value:J,loading:K,error:G}=(0,s.A)(async()=>{const e=(await a.getBackstageIdentity()).userEntityRef;console.log("ApprovalQueueCard: fetching all requests from",`${m}/api/kuadrant/requests`);const[n,r]=await Promise.all([t.fetch(`${m}/api/kuadrant/requests`),t.fetch(`${m}/api/kuadrant/apiproducts`)]);if(!n.ok)return console.log("ApprovalQueueCard: failed to fetch requests, status:",n.status),{pending:[],approved:[],rejected:[],reviewedBy:e,ownedApiProducts:new Set};const i=n.headers.get("content-type");if(!(null==i?void 0:i.includes("application/json")))return console.error("ApprovalQueueCard: received non-json response"),h.post({message:"Unexpected content-type from the server response. Please contact support.",display:"transient",severity:"warning"}),{pending:[],approved:[],rejected:[],reviewedBy:e,ownedApiProducts:new Set};const s=(await n.json()).items||[],o=new Set;if(r.ok){const t=await r.json();for(const a of t.items||[]){var d,l;(null===(l=a.metadata)||void 0===l||null===(d=l.annotations)||void 0===d?void 0:d["backstage.io/owner"])===e&&o.add(`${a.metadata.namespace}/${a.metadata.name}`)}}console.log("ApprovalQueueCard: received",s.length,"total requests"),console.log("ApprovalQueueCard: user owns",o.size,"api products");const c=s.filter(e=>{var t;return"Pending"===((null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending")}),p=s.filter(e=>{var t;return"Approved"===(null===(t=e.status)||void 0===t?void 0:t.phase)}),u=s.filter(e=>{var t;return"Rejected"===(null===(t=e.status)||void 0===t?void 0:t.phase)});return console.log("ApprovalQueueCard: grouped -",{pending:c.length,approved:p.length,rejected:u.length}),{pending:c,approved:p,rejected:u,reviewedBy:e,ownedApiProducts:o}},[m,t,a,v]);if(K||Q)return(0,n.jsx)(o.k,{});if(G)return(0,n.jsx)(d._,{error:G});if(V)return(0,n.jsxs)(g.A,{p:2,children:[(0,n.jsxs)(y.A,{color:"error",children:["Unable to check permissions: ",V.message]}),(0,n.jsx)(y.A,{variant:"body2",color:"textSecondary",children:"Permission: kuadrant.apikey.update.all"}),(0,n.jsx)(y.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]});const X=(null==J?void 0:J.pending)||[],Y=(null==J?void 0:J.approved)||[],Z=(null==J?void 0:J.rejected)||[],ee=e=>new Date(e).toLocaleDateString("en-GB",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),te=[{title:"Name",field:"metadata.name",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.name})},{title:"User",field:"spec.requestedBy.userId",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.spec.requestedBy.userId})},{title:"API",field:"spec.apiProductRef.name",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(0,n.jsx)("strong",{children:(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"})})}},{title:"Namespace",field:"metadata.namespace",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.namespace})},{title:"Tier",field:"spec.planTier",render:e=>(0,n.jsx)(j.A,{label:e.spec.planTier,size:"small"})},{title:"Use Case",field:"spec.useCase",render:e=>e.spec.useCase?(0,n.jsx)(b.Ay,{title:e.spec.useCase,placement:"top",children:(0,n.jsx)(y.A,{variant:"body2",style:{maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.spec.useCase})}):(0,n.jsx)(y.A,{variant:"body2",children:"-"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.creationTimestamp?ee(e.metadata.creationTimestamp):"-"})},{title:"Actions",filtering:!1,render:e=>{var t,a;const r=`${e.metadata.namespace}/${(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"}`;var i;const s=null!==(i=null==J||null===(a=J.ownedApiProducts)||void 0===a?void 0:a.has(r))&&void 0!==i&&i;return U||D&&s?(0,n.jsxs)(g.A,{display:"flex",style:{gap:8},children:[(0,n.jsx)(x.A,{size:"small",startIcon:(0,n.jsx)(S.A,{}),onClick:()=>{_({open:!0,request:e,action:"approve",processing:!1})},color:"primary",variant:"outlined",children:"Approve"}),(0,n.jsx)(x.A,{size:"small",startIcon:(0,n.jsx)(P.A,{}),onClick:()=>{_({open:!0,request:e,action:"reject",processing:!1})},color:"secondary",variant:"outlined",children:"Reject"})]}):null}}],ae=[{title:"Name",field:"metadata.name",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.name})},{title:"User",field:"spec.requestedBy.userId",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.spec.requestedBy.userId})},{title:"API",field:"spec.apiProductRef.name",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(0,n.jsx)("strong",{children:(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"})})}},{title:"Namespace",field:"metadata.namespace",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.namespace})},{title:"Tier",field:"spec.planTier",render:e=>(0,n.jsx)(j.A,{label:e.spec.planTier,size:"small"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.creationTimestamp?ee(e.metadata.creationTimestamp):"-"})},{title:"Approved",field:"status.reviewedAt",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(null===(t=e.status)||void 0===t?void 0:t.reviewedAt)?ee(e.status.reviewedAt):"-"})}},{title:"Reviewed By",field:"status.reviewedBy",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(null===(t=e.status)||void 0===t?void 0:t.reviewedBy)||"-"})}},{title:"Approval Type",field:"status.reviewedBy",render:e=>{var t;const a="system"===(null===(t=e.status)||void 0===t?void 0:t.reviewedBy);return(0,n.jsx)(j.A,{label:a?"Automatic":"Manual",size:"small",color:a?"default":"primary"})}}],ne=[{title:"Name",field:"metadata.name",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.name})},{title:"User",field:"spec.requestedBy.userId",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.spec.requestedBy.userId})},{title:"API",field:"spec.apiProductRef.name",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(0,n.jsx)("strong",{children:(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"})})}},{title:"Namespace",field:"metadata.namespace",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.namespace})},{title:"Tier",field:"spec.planTier",render:e=>(0,n.jsx)(j.A,{label:e.spec.planTier,size:"small"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,n.jsx)(y.A,{variant:"body2",children:e.metadata.creationTimestamp?ee(e.metadata.creationTimestamp):"-"})},{title:"Rejected",field:"status.reviewedAt",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(null===(t=e.status)||void 0===t?void 0:t.reviewedAt)?ee(e.status.reviewedAt):"-"})}},{title:"Reviewed By",field:"status.reviewedBy",render:e=>{var t;return(0,n.jsx)(y.A,{variant:"body2",children:(null===(t=e.status)||void 0===t?void 0:t.reviewedBy)||"-"})}}],re=(()=>{const e=e=>e.map(e=>({...e,id:e.metadata.name}));switch(f){case 0:return{data:X.map(e=>{const t=N.some(t=>t.metadata.name===e.metadata.name&&t.metadata.namespace===e.metadata.namespace);return{...e,tableData:{checked:t}}}),columns:te,showSelection:!0};case 1:return{data:e(Y),columns:ae,showSelection:!1};case 2:return{data:e(Z),columns:ne,showSelection:!1};default:return{data:e(X),columns:te,showSelection:!0}}})(),ie=(e=>{const t=new Map;return e.forEach(e=>{var a;const n=`${e.metadata.namespace}/${(null===(a=e.spec.apiProductRef)||void 0===a?void 0:a.name)||"unknown"}`;t.has(n)||t.set(n,[]),t.get(n).push(e)}),t})(re.data),se=Array.from(ie.keys()).sort();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(l.n,{title:"API Access Requests",subheader:`${X.length} pending, ${Y.length} approved, ${Z.length} rejected`,children:[(0,n.jsx)(g.A,{mb:2,"data-testid":"approval-queue-card",children:(0,n.jsxs)(k.A,{value:f,onChange:(e,t)=>{B(t),L([])},indicatorColor:"primary",textColor:"primary","data-testid":"approval-queue-tabs",children:[(0,n.jsx)(w.A,{label:`Pending (${X.length})`,"data-testid":"approval-queue-pending-tab"}),(0,n.jsx)(w.A,{label:`Approved (${Y.length})`,"data-testid":"approval-queue-approved-tab"}),(0,n.jsx)(w.A,{label:`Rejected (${Z.length})`,"data-testid":"approval-queue-rejected-tab"})]})}),0===f&&N.length>0&&(0,n.jsxs)(g.A,{mb:2,display:"flex",alignItems:"center",justifyContent:"space-between",p:2,bgcolor:"background.default",children:[(0,n.jsxs)(y.A,{variant:"body2",children:[N.length," request",1!==N.length?"s":""," selected"]}),(0,n.jsxs)(g.A,{display:"flex",style:{gap:8},children:[(0,n.jsx)(x.A,{size:"small",variant:"contained",color:"primary",startIcon:(0,n.jsx)(S.A,{}),onClick:()=>{0!==N.length&&W({open:!0,requests:N,action:"approve",processing:!1})},children:"Approve Selected"}),(0,n.jsx)(x.A,{size:"small",variant:"contained",color:"secondary",startIcon:(0,n.jsx)(P.A,{}),onClick:()=>{0!==N.length&&W({open:!0,requests:N,action:"reject",processing:!1})},children:"Reject Selected"})]})]}),0===re.data.length?(0,n.jsx)(g.A,{p:3,textAlign:"center",children:(0,n.jsxs)(y.A,{variant:"body1",color:"textSecondary",children:[0===f&&"No pending requests.",1===f&&"No approved requests.",2===f&&"No rejected requests."]})}):(0,n.jsx)(g.A,{children:se.map(e=>{var t,a,r;const i=ie.get(e)||[],s=(null===(a=i[0])||void 0===a||null===(t=a.spec.apiProductRef)||void 0===t?void 0:t.name)||e;var o;const d=null!==(o=null==J||null===(r=J.ownedApiProducts)||void 0===r?void 0:r.has(e))&&void 0!==o&&o,l=U||D&&d;return(0,n.jsxs)(C.A,{defaultExpanded:1===se.length,children:[(0,n.jsx)(q.A,{expandIcon:(0,n.jsx)(I.A,{}),children:(0,n.jsxs)(g.A,{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",children:[(0,n.jsx)(y.A,{variant:"h6",children:s}),(0,n.jsx)(j.A,{label:`${i.length} request${1!==i.length?"s":""}`,size:"small",color:"primary",style:{marginRight:16}})]})}),(0,n.jsx)(R.A,{children:(0,n.jsx)(g.A,{width:"100%",children:(0,n.jsx)(c.X,{options:{selection:l&&re.showSelection,paging:i.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,showTextRowsSelected:!1,toolbar:!0,emptyRowsWhenPaging:!1},data:i,columns:re.columns,onSelectionChange:t=>{const a=N.filter(t=>{var a;return`${t.metadata.namespace}/${(null===(a=t.spec.apiProductRef)||void 0===a?void 0:a.name)||"unknown"}`!==e});L([...a,...t])}})})})]},e)})})]}),(0,n.jsx)(T,{open:z.open,request:z.request,action:z.action,processing:z.processing,onClose:()=>_({open:!1,request:null,action:"approve",processing:!1}),onConfirm:async()=>{if(!z.request||!J)return;_(e=>({...e,processing:!0}));const e="approve"===z.action?`${m}/api/kuadrant/requests/${z.request.metadata.namespace}/${z.request.metadata.name}/approve`:`${m}/api/kuadrant/requests/${z.request.metadata.namespace}/${z.request.metadata.name}/reject`;try{if(!(await t.fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:J.reviewedBy})})).ok)throw new Error(`failed to ${z.action} request`);_({open:!1,request:null,action:"approve",processing:!1}),A(e=>e+1);const a="approve"===z.action?"approved":"rejected";h.post({message:`API key ${a}`,severity:"success",display:"transient"})}catch(e){console.error(`error ${z.action}ing request:`,e),_(e=>({...e,processing:!1})),h.post({message:`Failed to ${z.action} API key`,severity:"error",display:"transient"})}}}),(0,n.jsx)($,{open:E.open,requests:E.requests,action:E.action,processing:E.processing,onClose:()=>W({open:!1,requests:[],action:"approve",processing:!1}),onConfirm:async()=>{if(!J||0===E.requests.length)return;W(e=>({...e,processing:!0}));const e="approve"===E.action,a=e?`${m}/api/kuadrant/requests/bulk-approve`:`${m}/api/kuadrant/requests/bulk-reject`;try{if(!(await t.fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({requests:E.requests.map(e=>({namespace:e.metadata.namespace,name:e.metadata.name})),reviewedBy:J.reviewedBy})})).ok)throw new Error(`failed to bulk ${E.action} requests`);const n=E.requests.length,r=e?"approved":"rejected";W({open:!1,requests:[],action:"approve",processing:!1}),L([]),A(e=>e+1),h.post({message:`${n} API keys ${r}`,severity:"success",display:"transient"})}catch(e){console.error(`error bulk ${E.action}ing requests:`,e),W(e=>({...e,processing:!1})),h.post({message:`Failed to bulk ${E.action} API keys`,severity:"error",display:"transient"})}}})]})}},46205:(e,t,a)=>{a.d(t,{W:()=>i,l:()=>r});var n=a(87421);function r(e,t){const a="resourceType"in e?{permission:e,resourceRef:t}:{permission:e},r=(0,n.J)(a);return{allowed:r.allowed,loading:r.loading,error:r.error}}function i(e,t,a,n){return!!n||!(!a||e!==t)}},52235:(e,t,a)=>{var n=a(4293),r=a(78920);t.A=void 0;var i=r(a(95478)),s=(0,n(a(74044)).default)(i.createElement("path",{d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}),"ArrowForward");t.A=s},55429:(e,t,a)=>{var n=a(4293),r=a(78920);t.A=void 0;var i=r(a(95478)),s=(0,n(a(74044)).default)(i.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckCircle");t.A=s},96040:(e,t,a)=>{a.d(t,{n:()=>I});var n=a(31085),r=a(40703),i=a(59469),s=a(48653),o=a(45685),d=a(37197),l=a(37976),c=a(53373),p=a.n(c),u=a(10394),h=a(72501),m=a(52235),v=a(37725);const g=(0,l.makeStyles)(e=>({root:{maxWidth:"fit-content",padding:e.spacing(2,2,2,2.5)},boxTitle:{margin:0,color:e.palette.textSubtle},arrow:{color:e.palette.textSubtle}}),{name:"BackstageBottomLink"});function y(e){const{link:t,title:a,onClick:r}=e,i=g();return(0,n.jsxs)(u.A,{children:[(0,n.jsx)(d.A,{}),(0,n.jsx)(v.N_,{to:t,onClick:r,underline:"none",children:(0,n.jsxs)(u.A,{display:"flex",alignItems:"center",className:i.root,children:[(0,n.jsx)(u.A,{className:i.boxTitle,fontWeight:"fontWeightBold",m:1,children:(0,n.jsx)(h.A,{children:(0,n.jsx)("strong",{children:a})})}),(0,n.jsx)(m.A,{className:i.arrow})]})})]})}var A=a(95478),x=a(64947);const f=(0,A.forwardRef)((e,t)=>(0,n.jsx)(v.N_,{ref:t,...e,color:"initial"})),j=(0,A.forwardRef)((e,t)=>(0,n.jsx)(x.A,{ref:t,component:f,...e}));var b=a(34169),k=a(16098),w=a(67550);const C=e=>{const{slackChannel:t}=e,{t:a}=(0,w.i)(k.O);return t?"string"==typeof t?(0,n.jsx)(h.A,{children:a("errorBoundary.title",{slackChannel:t})}):t.href?(0,n.jsx)(j,{to:t.href,variant:"contained",children:t.name}):(0,n.jsx)(h.A,{children:a("errorBoundary.title",{slackChannel:t.name})}):null},q=class extends A.Component{constructor(e){super(e),this.state={error:void 0,errorInfo:void 0}}componentDidCatch(e,t){console.error(`ErrorBoundary, error: ${e}`,{error:e,errorInfo:t}),this.setState({error:e,errorInfo:t})}render(){const{slackChannel:e,children:t}=this.props,{error:a}=this.state;return a?(0,n.jsx)(b.b,{title:"Something Went Wrong",error:a,children:(0,n.jsx)(C,{slackChannel:e})}):t}},R=(0,l.makeStyles)(e=>({noPadding:{padding:0,"&:last-child":{paddingBottom:0}},contentAlignBottom:{display:"flex",alignItems:"self-end"},header:{padding:e.spacing(2,2,2,2.5)},headerTitle:{fontWeight:e.typography.fontWeightBold},headerSubheader:{paddingTop:e.spacing(1)},headerAvatar:{},headerAction:{},headerContent:{},subheader:{display:"flex"}}),{name:"BackstageInfoCard"}),S=(0,l.withStyles)(e=>({root:{display:"inline-block",padding:e.spacing(8,8,0,0),float:"right"}}),{name:"BackstageInfoCardCardActionsTopRight"})(i.A),P={card:{flex:{display:"flex",flexDirection:"column"},fullHeight:{display:"flex",flexDirection:"column",height:"100%"},gridItem:{display:"flex",flexDirection:"column",height:"calc(100% - 10px)",marginBottom:"10px",breakInside:"avoid-page","@media print":{height:"auto"}}},cardContent:{fullHeight:{flex:1},gridItem:{flex:1}}};function I(e){const{title:t,subheader:a,divider:l=!0,deepLink:c,slackChannel:u,errorBoundaryProps:h,variant:m,alignContent:v="normal",children:g,headerStyle:A,headerProps:x,icon:f,action:j,actionsClassName:b,actions:k,cardClassName:w,actionsTopRight:C,className:I,noPadding:T,titleTypographyProps:$,subheaderTypographyProps:B}=e,N=R();let L={},z={};m&&m.split(/[\s]+/g).forEach(e=>{L={...L,...P.card[e]},z={...z,...P.cardContent[e]}});const _=h||(u?{slackChannel:u}:{});return(0,n.jsx)(r.A,{style:L,className:I,children:(0,n.jsxs)(q,{..._,children:[t&&(0,n.jsx)(o.A,{classes:{root:p()(N.header),title:N.headerTitle,subheader:N.headerSubheader,avatar:N.headerAvatar,action:N.headerAction,content:N.headerContent},title:t,subheader:a||f?(0,n.jsxs)("div",{"data-testid":"info-card-subheader",children:[a&&(0,n.jsx)("div",{className:N.subheader,children:a}),f]}):null,action:j,style:{...A},titleTypographyProps:$,subheaderTypographyProps:B,...x}),C&&(0,n.jsx)(S,{children:C}),l&&(0,n.jsx)(d.A,{}),(0,n.jsx)(s.A,{className:p()(w,{[N.noPadding]:T,[N.contentAlignBottom]:"bottom"===v}),style:z,children:g}),k&&(0,n.jsx)(i.A,{className:b,children:k}),c&&(0,n.jsx)(y,{...c})]})})}}}]);
|
|
2
|
-
//# sourceMappingURL=3097.4bd6b35f.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/3097.4bd6b35f.chunk.js","mappings":"oSAyBkDA,EAAAA,EAAAA,GAAiB,CACjEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,aAGwBH,EAAAA,EAAAA,GAAiB,CAC/DC,KAAM,2BACNC,WAAY,CAAEC,OAAQ,WAG0BH,EAAAA,EAAAA,GAAiB,CACjEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,aAG0BH,EAAAA,EAAAA,GAAiB,CACjEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,YAjBjB,MAoBMC,GAAmCJ,EAAAA,EAAAA,GAAiB,CAC/DC,KAAM,2BACNC,WAAY,CAAEC,OAAQ,UASXE,GAAqCL,EAAAA,EAAAA,GAAiB,CACjEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,YAgBXG,IATsCN,EAAAA,EAAAA,GAAiB,CAClEC,KAAM,+BACNC,WAAY,CAAEC,OAAQ,WAO2BH,EAAAA,EAAAA,GAAiB,CAClEC,KAAM,+BACNC,WAAY,CAAEC,OAAQ,WAOXI,GAAwCP,EAAAA,EAAAA,GAAiB,CACpEC,KAAM,iCACNC,WAAY,CAAEC,OAAQ,YAOXK,GAAwCR,EAAAA,EAAAA,GAAiB,CACpEC,KAAM,iCACNC,WAAY,CAAEC,OAAQ,YAOXM,GAAwCT,EAAAA,EAAAA,GAAiB,CACpEC,KAAM,iCACNC,WAAY,CAAEC,OAAQ,YAOXO,GAAwCV,EAAAA,EAAAA,GAAiB,CACpEC,KAAM,iCACNC,WAAY,CAAEC,OAAQ,YAOXQ,GAAmCX,EAAAA,EAAAA,GAAiB,CAC/DC,KAAM,2BACNC,WAAY,CAAEC,OAAQ,UAcXS,GAAiCZ,EAAAA,EAAAA,GAAiB,CAC7DC,KAAM,yBACNC,WAAY,CAAEC,OAAQ,UACtBU,aAAc,eAOHC,GAAkCd,EAAAA,EAAAA,GAAiB,CAC9DC,KAAM,2BACNC,WAAY,CAAEC,OAAQ,UAgBXY,IATkCf,EAAAA,EAAAA,GAAiB,CAC9DC,KAAM,2BACNC,WAAY,CAAEC,OAAQ,WAOyBH,EAAAA,EAAAA,GAAiB,CAChEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,aAOXa,GAAoChB,EAAAA,EAAAA,GAAiB,CAChEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,YAOXc,GAAoCjB,EAAAA,EAAAA,GAAiB,CAChEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,YAOXe,GAAoClB,EAAAA,EAAAA,GAAiB,CAChEC,KAAM,6BACNC,WAAY,CAAEC,OAAQ,YAQXgB,GAAkCnB,EAAAA,EAAAA,GAAiB,CAC9DC,KAAM,0BACNC,WAAY,CAAEC,OAAQ,W,wECxMT,SAASiB,EAASC,EAAIC,QACpB,IAATA,IAAmBA,EAAO,IAC9B,IAAIC,ECDO,SAAoBF,EAAIC,EAAME,QAC5B,IAATF,IAAmBA,EAAO,SACT,IAAjBE,IAA2BA,EAAe,CAAEC,SAAS,IACzD,IAAIC,GAAa,IAAAC,QAAO,GACpBC,GAAY,EAAAC,EAAA,KACZN,GAAK,IAAAO,UAASN,GAAeO,EAAQR,EAAG,GAAIS,EAAMT,EAAG,GACrDU,GAAW,IAAAC,aAAY,WAEvB,IADA,IAAIC,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACpCD,EAAKC,GAAMC,UAAUD,GAEzB,IAAIG,IAAWb,EAAWc,QAI1B,OAHKT,EAAMN,SACPO,EAAI,SAAUS,GAAa,OAAQ,IAAAC,WAAS,IAAAA,UAAS,CAAC,EAAGD,GAAY,CAAEhB,SAAS,GAAU,GAEvFJ,EAAGsB,WAAM,EAAQR,GAAMS,KAAK,SAAUC,GAEzC,OADAjB,KAAeW,IAAWb,EAAWc,SAAWR,EAAI,CAAEa,MAAOA,EAAOpB,SAAS,IACtEoB,CACX,EAAG,SAAUC,GAET,OADAlB,KAAeW,IAAWb,EAAWc,SAAWR,EAAI,CAAEc,MAAOA,EAAOrB,SAAS,IACtEqB,CACX,EACJ,EAAGxB,GACH,MAAO,CAACS,EAAOE,EACnB,CDvBac,CAAW1B,EAAIC,EAAM,CAC1BG,SAAS,IACTM,EAAQR,EAAG,GAAIU,EAAWV,EAAG,GAIjC,OAHA,IAAAyB,WAAU,WACNf,GACJ,EAAG,CAACA,IACGF,CACX,C,+JEIA,MAAMkB,GAAY,IAAAC,YACfC,IAAU,CACTC,eAAgB,CACdC,KAAM,gBACNC,SAAU,aACVC,SAAU,SACVC,SAAU,WACVC,WAAY,OACZC,WAAY,SACZC,OAAQ,EACRC,MAAO,GAETC,aAAc,CACZL,SAAU,YAEZM,iBAAkB,CAChBC,cAAe,SACfC,WAAYb,EAAMc,QAAQ,OAG9B,CAAEhE,KAAM,SAEJiE,EAAmB,KACvB,MACMC,GADM,IAAAC,UACKC,cAAc,iBAAmB,IAC5CC,EAAUrB,IAChB,OAAuB,IAAAsB,KAAIJ,EAAM,CAAEK,UAAWF,EAAQR,oBAElDW,EAAiBC,GAAQ,gBAAgBC,KAAKD,GAC9CE,EAAwB,4HAIxBC,EAAqBC,OAAOC,KAClC,GAAIF,IAAuBA,EAAmBG,YAAa,CACzD,MAAMC,EAAU,YAAiB9C,GAC/B,MAAM+C,EAAMC,OAAOhD,EAAK,IACxB,GAAIyC,EAAsBD,KAAKO,GAC7B,MAAM,IAAIE,MACR,0EAGJ,OAAOP,EAAmBlC,MAAM0C,KAAMlD,EACxC,EACA8C,EAAQD,aAAc,EACtBF,OAAOC,KAAOE,CAChB,CACA,MAwBMK,EAAeC,GACfA,aAAgBC,MACXD,EAAKE,IAAIH,GAAaI,KAAK,KAAKC,OAErB,iBAATJ,GAAqBA,EACvBD,EAAYC,GAAMK,OAAOC,UAE9B,CAAC,SAAU,UAAUC,gBAAgBP,GAChCJ,OAAOI,GAET,GAEHQ,GAAO,IAAAC,YACX,EAAGC,UAASC,UAASpC,sBAAqB8B,GAASO,KACjD,MAAM7B,EAAUrB,IACVmD,GAAY,IAAAC,gBACZC,EA3FV,WACE,MAAOC,IAAO,IAAAC,2BAAyC,IAAAjC,KAAI,EAAAkC,MAAO,CAAEC,OAAO,EAAMC,SAAyB,IAAApC,KAAI,MAAO,CAAC,MACtH,OAAQgC,EAAIG,KACd,CAwFeE,GA1BS,CAAClC,IACvB,IAAImC,EAAe1B,OAAOT,GAC1B,MAAMoC,EARY,MAClB,MACM5B,EAVW,MACjB,IAEE,OADe,IAAA6B,QAAO,EAAAC,cACRC,kBAAkB,cAClC,CAAE,MACA,MACF,GAIYC,IAAgB,KACtB,SAAEC,GAAa,IAAIC,IAAIlC,EAFhB,qBAGb,OAAO,IAAAmC,SAAQF,EAAU,MAIRG,GACXC,EAAW9C,EAAcoC,GACzBW,EAAqBX,EAAaY,WAAWX,GAInD,OAHKS,GAAaC,IAChBX,EAAeC,EAASY,OAAOb,IAE1BA,GAkB4Bc,CAAgB/B,EAAMU,IAAMV,EAAMU,GAC7DsB,EAAWtC,EAAYM,EAAMC,WAAaS,EAC1CiB,EAAW9C,EAAc6B,GACzBuB,EAAYN,KAAc,WAAWO,KAAKxB,GAChD,GAAI1B,EAAsBD,KAAK2B,GAC7B,MAAM,IAAIlB,MACR,oEAGJ,MAAM2C,EAAeC,IACnB/B,IAAU+B,GACL9B,GACHE,EAAU6B,aAAa,QAASL,EAAU,CAAE1H,WAAY,CAAEoG,SAG9D,OAAOiB,GAEW,IAAAW,MACd,IACA,IACKL,EAAY,CAAEM,OAAQ,SAAUC,IAAK,YAAe,CAAC,KACrDxC,KACAA,EAAM,cAAgB,CAAE,aAAc,GAAGA,EAAM,wCAA2C,CAAC,EAC9FO,MACAkC,KAAM/B,EACNL,QAAS8B,EACTvD,UAAW,IAAWF,EAAQT,aAAc+B,EAAMpB,WAClDqB,SAAU,CACRD,EAAMC,SACN/B,IAAoC,IAAAS,KAAIL,EAAkB,CAAC,IAC3C,IAAAK,KAAI,IAAY,CAAE+D,UAAW,OAAQ9D,UAAWF,EAAQlB,eAAgByC,SAAU,gCAMxF,IAAAtB,KACd,IACA,IACKqB,EACHO,MACAmC,UAAW,EAAAvC,KACXO,KACAL,QAAS8B,K,sBC/IfQ,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAIC,EAAQF,EAAwB,EAAQ,QAIxCG,GAAW,EAFMJ,EAAuB,EAAQ,QAElBK,SAAuBF,EAAMG,cAAc,OAAQ,CACnFC,EAAG,uIACD,aAEJL,EAAQ,EAAUE,C,gXCiClB,MAAMI,EAAiB,EACrBhE,OACAiE,UACA7I,SACA8I,aACAC,UACAC,gB,IAsBaH,EApBb,MAAMI,EAAyB,YAAXjJ,EAAuB,UAAY,SACjDkJ,EACO,YAAXlJ,EAAuB,eAAiB,eAE1C,OACE,UAACmJ,EAAAA,EAAMA,CACLvE,KAAMA,EACNmE,QAASD,OAAaM,EAAYL,EAClCM,SAAS,KACTC,WAAS,E,WAET,UAACC,EAAAA,EAAWA,C,UAAEN,EAAY,eAC1B,SAACO,EAAAA,EAAaA,C,SACXX,IACC,sB,WACE,UAACY,IAAAA,C,WACC,SAACC,SAAAA,C,SAAO,UAAc,IAAEb,EAAQc,KAAKC,YAAYC,WAEnD,UAACJ,IAAAA,C,WACC,SAACC,SAAAA,C,SAAO,SAAc,KACK,QAA1Bb,EAAAA,EAAQc,KAAKG,qBAAbjB,IAAAA,OAAAA,EAAAA,EAA4B/I,OAAQ,cAEvC,UAAC2J,IAAAA,C,WACC,SAACC,SAAAA,C,SAAO,UAAc,IAAEb,EAAQc,KAAKI,aAEvC,UAACC,EAAAA,EAAGA,CAACC,GAAI,E,WACP,SAACC,EAAAA,EAAUA,CACTC,QAAQ,QACRhC,UAAU,OACViC,MAAO,CAAEC,WAAY,Q,SACtB,cAEa,KACd,SAACH,EAAAA,EAAUA,CACTC,QAAQ,QACRhC,UAAU,OACViC,MAAO,CAAE7G,WAAY,Y,SAEpBsF,EAAQc,KAAKW,SAAW,eAMnC,UAACC,EAAAA,EAAaA,C,WACZ,SAACC,EAAAA,EAAMA,CAAC1E,QAASiD,EAAS0B,SAAU3B,E,SAAY,YAGhD,SAAC0B,EAAAA,EAAMA,CACL1E,QAASkD,EACT0B,MAAkB,YAAX1K,EAAuB,UAAY,YAC1CmK,QAAQ,YACRM,SAAU3B,EACV6B,UACE7B,GACE,SAAC8B,EAAAA,EAAgBA,CAACC,KAAM,GAAIH,MAAM,iBAChCtB,E,SAGLN,EAAaI,EAAkBD,WAgBpC6B,EAAmB,EACvBlG,OACAmG,WACA/K,SACA8I,aACAC,UACAC,gBAEA,MAAMgC,EAAuB,YAAXhL,EACZiJ,EAAc+B,EAAY,cAAgB,aAC1C9B,EAAkB8B,EAAY,eAAiB,eAErD,OACE,UAAC7B,EAAAA,EAAMA,CACLvE,KAAMA,EACNmE,QAASD,OAAaM,EAAYL,EAClCM,SAAS,KACTC,WAAS,E,WAET,UAACC,EAAAA,EAAWA,C,UACTyB,EAAY,UAAY,SAAS,IAAED,EAAS5I,OAAO,gBAEtD,UAACqH,EAAAA,EAAaA,C,WACZ,UAACU,EAAAA,EAAUA,CAACC,QAAQ,QAAQc,WAAS,E,UAAC,oBAClBD,EAAY,UAAY,SAAS,+BAGrD,SAAChB,EAAAA,EAAGA,CAACC,GAAI,EAAGiB,UAAW,IAAK9H,SAAS,O,SAClC2H,EAASzF,IAAKuD,I,IASRA,E,OARL,SAACmB,EAAAA,EAAGA,CAEFC,GAAI,EACJR,EAAG,EACH0B,QAAQ,qB,UAER,UAACjB,EAAAA,EAAUA,CAACC,QAAQ,Q,WAClB,SAACT,SAAAA,C,SAAQb,EAAQc,KAAKC,YAAYC,SAAgB,KAAG,KAC1B,QAA1BhB,EAAAA,EAAQc,KAAKG,qBAAbjB,IAAAA,OAAAA,EAAAA,EAA4B/I,OAAQ,UAAU,KAC9C+I,EAAQc,KAAKI,SAAS,QARpB,GAAGlB,EAAQuC,SAASC,aAAaxC,EAAQuC,SAAStL,gBAc/D,UAACyK,EAAAA,EAAaA,C,WACZ,SAACC,EAAAA,EAAMA,CAAC1E,QAASiD,EAAS0B,SAAU3B,E,SAAY,YAGhD,SAAC0B,EAAAA,EAAMA,CACL1E,QAASkD,EACT0B,MAAOM,EAAY,UAAY,YAC/Bb,QAAQ,YACRM,SAAU3B,EACV6B,UACE7B,GACE,SAAC8B,EAAAA,EAAgBA,CAACC,KAAM,GAAIH,MAAM,iBAChCtB,E,SAGLN,EAAaI,EAAkBD,WAO7BqC,EAAoB,KAC/B,MAAMC,GAAS3E,EAAAA,EAAAA,QAAOC,EAAAA,cAChB2E,GAAW5E,EAAAA,EAAAA,QAAO6E,EAAAA,aAClBC,GAAc9E,EAAAA,EAAAA,QAAO+E,EAAAA,gBACrBC,GAAWhF,EAAAA,EAAAA,QAAOiF,EAAAA,aAClBC,EAAaP,EAAOQ,UAAU,oBAC7BC,EAASC,IAActK,EAAAA,EAAAA,UAAS,IAChCuK,EAAaC,IAAkBxK,EAAAA,EAAAA,UAAS,IACxCyK,EAAkBC,IAAuB1K,EAAAA,EAAAA,UAAmB,KAC5D2K,EAAaC,IAAkB5K,EAAAA,EAAAA,UAKnC,CACDiD,MAAM,EACNiE,QAAS,KACT7I,OAAQ,UACR8I,YAAY,KAEP0D,EAAiBC,IAAsB9K,EAAAA,EAAAA,UAK3C,CACDiD,MAAM,EACNmG,SAAU,GACV/K,OAAQ,UACR8I,YAAY,KAIZ4D,QAASC,EACTrL,QAASsL,EACTjK,MAAOkK,IACLC,EAAAA,EAAAA,GAAsBjM,EAAAA,KAGxB6L,QAASK,EACTzL,QAAS0L,EACTrK,MAAOsK,IACLH,EAAAA,EAAAA,GAAsBlM,EAAAA,IAEpBsM,EACJN,GAA8BI,EAC1BG,EACJN,GAA4BI,GAExB,MAAEvK,EAAK,QAAEpB,EAAO,MAAEqB,IAAU1B,EAAAA,EAAAA,GAASmM,UACzC,MACMC,SADiB3B,EAAY4B,wBACPC,cAE5BC,QAAQC,IACN,gDACA,GAAG3B,2BAIL,MAAO4B,EAAkBC,SAA6BC,QAAQC,IAAI,CAChErC,EAASsC,MAAM,GAAGhC,2BAClBN,EAASsC,MAAM,GAAGhC,gCAGpB,IAAK4B,EAAiBK,GAKpB,OAJAP,QAAQC,IACN,uDACAC,EAAiBM,QAEZ,CACLC,QAAS,GACTC,SAAU,GACVC,SAAU,GACVd,aACAe,iBAAkB,IAAIC,KAK1B,MAAMC,EAAcZ,EAAiBa,QAAQC,IAAI,gBACjD,KAAKF,aAAAA,EAAAA,EAAa3I,SAAS,qBAQzB,OAPA6H,QAAQ7K,MAAM,iDACdiJ,EAAS6C,KAAK,CACZC,QACE,4EACFC,QAAS,YACTC,SAAU,YAEL,CACLX,QAAS,GACTC,SAAU,GACVC,SAAU,GACVd,aACAe,iBAAkB,IAAIC,KAI1B,MACMQ,SADanB,EAAiBoB,QACXC,OAAS,GAG5BX,EAAmB,IAAIC,IAC7B,GAAIV,EAAoBI,GAAI,CAC1B,MAAMiB,QAAwBrB,EAAoBmB,OAClD,IAAK,MAAMG,KAAWD,EAAgBD,OAAS,GAAI,C,IACnCE,EAAAA,GAAgB,QAAhBA,EAAAA,EAAQ7D,gBAAR6D,IAAAA,GAA6B,QAA7BA,EAAAA,EAAkBC,mBAAlBD,IAAAA,OAAAA,EAAAA,EAAgC,yBAChC5B,GAEZe,EAAiBe,IACf,GAAGF,EAAQ7D,SAASC,aAAa4D,EAAQ7D,SAAStL,OAGxD,CACF,CAEA0N,QAAQC,IACN,8BACAoB,EAAY1M,OACZ,kBAEFqL,QAAQC,IACN,+BACAW,EAAiBvD,KACjB,gBAIF,MAAMoD,EAAUY,EAAYO,OAAQC,I,IACnBA,EACf,MAAiB,cADM,QAARA,EAAAA,EAAErB,cAAFqB,IAAAA,OAAAA,EAAD,EAAmBC,QAAS,aAGtCpB,EAAWW,EAAYO,OAAQC,I,IACpBA,EACf,MAAiB,cADM,QAARA,EAAAA,EAAErB,cAAFqB,IAAAA,OAAAA,EAAD,EAAmBC,SAG7BnB,EAAWU,EAAYO,OAAQC,I,IACpBA,EACf,MAAiB,cADM,QAARA,EAAAA,EAAErB,cAAFqB,IAAAA,OAAAA,EAAD,EAAmBC,SAUnC,OANA9B,QAAQC,IAAI,+BAAgC,CAC1CQ,QAASA,EAAQ9L,OACjB+L,SAAUA,EAAS/L,OACnBgM,SAAUA,EAAShM,SAGd,CAAE8L,UAASC,WAAUC,WAAUd,aAAYe,qBACjD,CAACtC,EAAYN,EAAUE,EAAaM,IA4IvC,GAAI1K,GAAW4L,EACb,OAAO,SAACqC,EAAAA,EAAQA,CAAAA,GAGlB,GAAI5M,EACF,OAAO,SAAC6M,EAAAA,EAAkBA,CAAC7M,MAAOA,IAGpC,GAAIwK,EACF,OACE,UAACnD,EAAAA,EAAGA,CAACP,EAAG,E,WACN,UAACS,EAAAA,EAAUA,CAACQ,MAAM,Q,UAAQ,gCACMyC,EAAsBuB,YAEtD,SAACxE,EAAAA,EAAUA,CAACC,QAAQ,QAAQO,MAAM,gB,SAAgB,4CAGlD,SAACR,EAAAA,EAAUA,CAACC,QAAQ,QAAQO,MAAM,gB,SAAgB,sDAOxD,MAAMuD,GAAUvL,aAAAA,EAAAA,EAAOuL,UAAW,GAC5BC,GAAWxL,aAAAA,EAAAA,EAAOwL,WAAY,GAC9BC,GAAWzL,aAAAA,EAAAA,EAAOyL,WAAY,GAE9BsB,GAAcC,GACL,IAAIC,KAAKD,GACVE,mBAAmB,QAAS,CACtCC,KAAM,UACNC,MAAO,QACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,YAINC,GAAwC,CAC5C,CACEC,MAAO,OACPC,MAAO,gBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAAStL,QAG9C,CACEqQ,MAAO,OACPC,MAAO,0BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAI3G,KAAKC,YAAYC,UAGtD,CACEsG,MAAO,MACPC,MAAO,0BACPC,OAASC,I,IAEIA,E,OADX,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UAClB,SAACT,SAAAA,C,UAA8B,QAAtB4G,EAAAA,EAAI3G,KAAKG,qBAATwG,IAAAA,OAAAA,EAAAA,EAAwBxQ,OAAQ,gBAI/C,CACEqQ,MAAO,YACPC,MAAO,qBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAASC,aAG9C,CACE8E,MAAO,OACPC,MAAO,gBACPC,OAASC,IAAQ,SAACC,EAAAA,EAAIA,CAACC,MAAOF,EAAI3G,KAAKI,SAAUc,KAAK,WAExD,CACEsF,MAAO,WACPC,MAAO,eACPC,OAASC,GACFA,EAAI3G,KAAKW,SAIZ,SAACmG,EAAAA,GAAOA,CAACN,MAAOG,EAAI3G,KAAKW,QAASoG,UAAU,M,UAC1C,SAACxG,EAAAA,EAAUA,CACTC,QAAQ,QACRC,MAAO,CACLf,SAAU,QACVjG,SAAU,SACVuN,aAAc,WACdpN,WAAY,U,SAGb+M,EAAI3G,KAAKW,aAbP,SAACJ,EAAAA,EAAUA,CAACC,QAAQ,Q,SAAQ,OAmBzC,CACEgG,MAAO,YACPC,MAAO,6BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjBmG,EAAIlF,SAASwF,kBACVnB,GAAWa,EAAIlF,SAASwF,mBACxB,OAIV,CACET,MAAO,UACPU,WAAW,EACXR,OAASC,I,IAC4CA,EAEjD5N,EAFF,MAAMoO,EAAgB,GAAGR,EAAIlF,SAASC,cAAmC,QAAtBiF,EAAAA,EAAI3G,KAAKG,qBAATwG,IAAAA,OAAAA,EAAAA,EAAwBxQ,OAAQ,Y,IAEjF4C,EADF,MAAMqO,EACyBD,QAA7BpO,EAAAA,SAAuB,QAAvBA,EAAAA,EAAO0L,wBAAP1L,IAAAA,OAAAA,EAAAA,EAAyBsO,IAAIF,UAA7BpO,IAAAA,GAAAA,EAGF,OADEiK,GAAyBI,GAAwBgE,GAGjD,UAAC/G,EAAAA,EAAGA,CAAC2E,QAAQ,OAAOvE,MAAO,CAAE6G,IAAK,G,WAChC,SAACzG,EAAAA,EAAMA,CACLK,KAAK,QACLF,WAAW,SAACuG,EAAAA,EAAeA,CAAAA,GAC3BpL,QAAS,KAtQnByG,EAAe,CACb3H,MAAM,EACNiE,QAoQqCyH,EAnQrCtQ,OAAQ,UACR8I,YAAY,KAmQJ4B,MAAM,UACNP,QAAQ,W,SACT,aAGD,SAACK,EAAAA,EAAMA,CACLK,KAAK,QACLF,WAAW,SAACwG,EAAAA,EAAUA,CAAAA,GACtBrL,QAAS,KAtQnByG,EAAe,CACb3H,MAAM,EACNiE,QAoQoCyH,EAnQpCtQ,OAAQ,SACR8I,YAAY,KAmQJ4B,MAAM,YACNP,QAAQ,W,SACT,cAlBkB,QA2BvBiH,GAAyC,CAC7C,CACEjB,MAAO,OACPC,MAAO,gBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAAStL,QAG9C,CACEqQ,MAAO,OACPC,MAAO,0BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAI3G,KAAKC,YAAYC,UAGtD,CACEsG,MAAO,MACPC,MAAO,0BACPC,OAASC,I,IAEIA,E,OADX,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UAClB,SAACT,SAAAA,C,UAA8B,QAAtB4G,EAAAA,EAAI3G,KAAKG,qBAATwG,IAAAA,OAAAA,EAAAA,EAAwBxQ,OAAQ,gBAI/C,CACEqQ,MAAO,YACPC,MAAO,qBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAASC,aAG9C,CACE8E,MAAO,OACPC,MAAO,gBACPC,OAASC,IAAQ,SAACC,EAAAA,EAAIA,CAACC,MAAOF,EAAI3G,KAAKI,SAAUc,KAAK,WAExD,CACEsF,MAAO,YACPC,MAAO,6BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjBmG,EAAIlF,SAASwF,kBACVnB,GAAWa,EAAIlF,SAASwF,mBACxB,OAIV,CACET,MAAO,WACPC,MAAO,oBACPC,OAASC,I,IAEJA,E,OADH,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UACP,QAAVmG,EAAAA,EAAItC,cAAJsC,IAAAA,OAAAA,EAAAA,EAAYe,YAAa5B,GAAWa,EAAItC,OAAOqD,YAAc,QAIpE,CACElB,MAAO,cACPC,MAAO,oBACPC,OAASC,I,IACsBA,E,OAA7B,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UAAmB,QAAVmG,EAAAA,EAAItC,cAAJsC,IAAAA,OAAAA,EAAAA,EAAYjD,aAAc,QAG3D,CACE8C,MAAO,gBACPC,MAAO,oBACPC,OAASC,I,IACaA,EAApB,MAAMgB,EAAyC,YAAjB,QAAVhB,EAAAA,EAAItC,cAAJsC,IAAAA,OAAAA,EAAAA,EAAYjD,YAChC,OACE,SAACkD,EAAAA,EAAIA,CACHC,MAAOc,EAAc,YAAc,SACnCzG,KAAK,QACLH,MAAO4G,EAAc,UAAY,eAOrCC,GAAyC,CAC7C,CACEpB,MAAO,OACPC,MAAO,gBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAAStL,QAG9C,CACEqQ,MAAO,OACPC,MAAO,0BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAI3G,KAAKC,YAAYC,UAGtD,CACEsG,MAAO,MACPC,MAAO,0BACPC,OAASC,I,IAEIA,E,OADX,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UAClB,SAACT,SAAAA,C,UAA8B,QAAtB4G,EAAAA,EAAI3G,KAAKG,qBAATwG,IAAAA,OAAAA,EAAAA,EAAwBxQ,OAAQ,gBAI/C,CACEqQ,MAAO,YACPC,MAAO,qBACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASmG,EAAIlF,SAASC,aAG9C,CACE8E,MAAO,OACPC,MAAO,gBACPC,OAASC,IAAQ,SAACC,EAAAA,EAAIA,CAACC,MAAOF,EAAI3G,KAAKI,SAAUc,KAAK,WAExD,CACEsF,MAAO,YACPC,MAAO,6BACPC,OAASC,IACP,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjBmG,EAAIlF,SAASwF,kBACVnB,GAAWa,EAAIlF,SAASwF,mBACxB,OAIV,CACET,MAAO,WACPC,MAAO,oBACPC,OAASC,I,IAEJA,E,OADH,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UACP,QAAVmG,EAAAA,EAAItC,cAAJsC,IAAAA,OAAAA,EAAAA,EAAYe,YAAa5B,GAAWa,EAAItC,OAAOqD,YAAc,QAIpE,CACElB,MAAO,cACPC,MAAO,oBACPC,OAASC,I,IACsBA,E,OAA7B,SAACpG,EAAAA,EAAUA,CAACC,QAAQ,Q,UAAmB,QAAVmG,EAAAA,EAAItC,cAAJsC,IAAAA,OAAAA,EAAAA,EAAYjD,aAAc,SAiDvDmE,GA5Ca,MACjB,MAAMC,EAAUC,GACdA,EAAKpM,IAAKqM,IAAU,IAAKA,EAAMC,GAAID,EAAKvG,SAAStL,QAEnD,OAAQoM,GACN,KAAK,EAaH,MAAO,CACLwF,KAZ2BzD,EAAQ3I,IAAKgL,IACxC,MAAMuB,EAAazF,EAAiB0F,KACjCC,GACCA,EAAS3G,SAAStL,OAASwQ,EAAIlF,SAAStL,MACxCiS,EAAS3G,SAASC,YAAciF,EAAIlF,SAASC,WAEjD,MAAO,IACFiF,EACH0B,UAAW,CAAEC,QAASJ,MAKxBK,QAAShC,GACTiC,eAAe,GAEnB,KAAK,EACH,MAAO,CACLT,KAAMD,EAAOvD,GACbgE,QAASd,GACTe,eAAe,GAEnB,KAAK,EACH,MAAO,CACLT,KAAMD,EAAOtD,GACb+D,QAASX,GACTY,eAAe,GAEnB,QACE,MAAO,CACLT,KAAMD,EAAOxD,GACbiE,QAAShC,GACTiC,eAAe,KAKPC,GAeVC,GAZoB,CAACtH,IACzB,MAAMuH,EAAU,IAAIC,IAQpB,OAPAxH,EAASyH,QAAS3J,I,IAC6BA,EAA7C,MAAM4J,EAAM,GAAG5J,EAAQuC,SAASC,cAAuC,QAA1BxC,EAAAA,EAAQc,KAAKG,qBAAbjB,IAAAA,OAAAA,EAAAA,EAA4B/I,OAAQ,YAC5EwS,EAAQtB,IAAIyB,IACfH,EAAQzQ,IAAI4Q,EAAK,IAEnBH,EAAQ9D,IAAIiE,GAAMC,KAAK7J,KAElByJ,GAGWK,CAAkBnB,GAAQE,MACxCkB,GAAiBvN,MAAMwN,KAAKR,GAAYS,QAAQC,OAEtD,OACE,sB,WACE,UAACC,EAAAA,EAAQA,CACP7C,MAAM,sBACN8C,UAAW,GAAGhF,EAAQ9L,mBAAmB+L,EAAS/L,oBAAoBgM,EAAShM,kB,WAE/E,SAAC6H,EAAAA,EAAGA,CAACC,GAAI,EAAGiJ,cAAY,sB,UACtB,UAACC,EAAAA,EAAIA,CACHzQ,MAAOwJ,EACPkH,SAAU,CAACC,EAAGC,KACZnH,EAAemH,GACfjH,EAAoB,KAEtBkH,eAAe,UACfC,UAAU,UACVN,cAAY,sB,WAEZ,SAACO,EAAAA,EAAGA,CACFjD,MAAO,YAAYvC,EAAQ9L,UAC3B+Q,cAAY,gCAEd,SAACO,EAAAA,EAAGA,CACFjD,MAAO,aAAatC,EAAS/L,UAC7B+Q,cAAY,iCAEd,SAACO,EAAAA,EAAGA,CACFjD,MAAO,aAAarC,EAAShM,UAC7B+Q,cAAY,qCAKD,IAAhBhH,GAAqBE,EAAiBjK,OAAS,IAC9C,UAAC6H,EAAAA,EAAGA,CACFC,GAAI,EACJ0E,QAAQ,OACR+E,WAAW,SACXC,eAAe,gBACflK,EAAG,EACH0B,QAAQ,qB,WAER,UAACjB,EAAAA,EAAUA,CAACC,QAAQ,Q,UACjBiC,EAAiBjK,OAAO,WACI,IAA5BiK,EAAiBjK,OAAe,IAAM,GAAG,gBAE5C,UAAC6H,EAAAA,EAAGA,CAAC2E,QAAQ,OAAOvE,MAAO,CAAE6G,IAAK,G,WAChC,SAACzG,EAAAA,EAAMA,CACLK,KAAK,QACLV,QAAQ,YACRO,MAAM,UACNC,WAAW,SAACuG,EAAAA,EAAeA,CAAAA,GAC3BpL,QA5dY,KACQ,IAA5BsG,EAAiBjK,QACrBsK,EAAmB,CACjB7H,MAAM,EACNmG,SAAUqB,EACVpM,OAAQ,UACR8I,YAAY,K,SAudH,sBAGD,SAAC0B,EAAAA,EAAMA,CACLK,KAAK,QACLV,QAAQ,YACRO,MAAM,YACNC,WAAW,SAACwG,EAAAA,EAAUA,CAAAA,GACtBrL,QA3dW,KACS,IAA5BsG,EAAiBjK,QACrBsK,EAAmB,CACjB7H,MAAM,EACNmG,SAAUqB,EACVpM,OAAQ,SACR8I,YAAY,K,SAsdH,0BAOkB,IAAxB0I,GAAQE,KAAKvP,QACZ,SAAC6H,EAAAA,EAAGA,CAACP,EAAG,EAAGmK,UAAU,S,UACnB,UAAC1J,EAAAA,EAAUA,CAACC,QAAQ,QAAQO,MAAM,gB,UACf,IAAhBwB,GAAqB,uBACL,IAAhBA,GAAqB,wBACL,IAAhBA,GAAqB,8BAI1B,SAAClC,EAAAA,EAAGA,C,SACD4I,GAAetN,IAAKwL,I,IAGjB/F,EAAAA,EAEArI,EAJF,MAAMqI,EAAWsH,GAAY7D,IAAIsC,IAAkB,GAC7C+C,GACO,QAAX9I,EAAAA,EAAS,UAATA,IAAAA,GAA+B,QAA/BA,EAAAA,EAAapB,KAAKG,qBAAlBiB,IAAAA,OAAAA,EAAAA,EAAiCjL,OAAQgR,E,IAEzCpO,EADF,MAAMoR,EACyBhD,QAA7BpO,EAAAA,SAAuB,QAAvBA,EAAAA,EAAO0L,wBAAP1L,IAAAA,OAAAA,EAAAA,EAAyBsO,IAAIF,UAA7BpO,IAAAA,GAAAA,EACIqR,EACJpH,GACCI,GAAwB+G,EAC3B,OACE,UAACE,EAAAA,EAASA,CAERC,gBAA2C,IAA1BrB,GAAezQ,O,WAEhC,SAAC+R,EAAAA,EAAgBA,CAACC,YAAY,SAACC,EAAAA,EAAcA,CAAAA,G,UAC3C,UAACpK,EAAAA,EAAGA,CACF2E,QAAQ,OACR+E,WAAW,SACXC,eAAe,gBACflQ,MAAM,O,WAEN,SAACyG,EAAAA,EAAUA,CAACC,QAAQ,K,SAAM0J,KAC1B,SAACtD,EAAAA,EAAIA,CACHC,MAAO,GAAGzF,EAAS5I,iBAAqC,IAApB4I,EAAS5I,OAAe,IAAM,KAClE0I,KAAK,QACLH,MAAM,UACNN,MAAO,CAAEiK,YAAa,YAI5B,SAACC,EAAAA,EAAgBA,C,UACf,SAACtK,EAAAA,EAAGA,CAACvG,MAAM,O,UACT,SAAC8Q,EAAAA,EAAKA,CACJC,QAAS,CACPC,UAAWV,GAAiBvC,GAAQW,cACpCuC,OAAQ3J,EAAS5I,OAAS,EAC1BwS,SAAU,GACVC,QAAQ,EACR/D,WAAW,EACXgE,iBAAkB,IAClBC,sBAAsB,EACtBC,SAAS,EACTC,qBAAqB,GAEvBtD,KAAM3G,EACNmH,QAASV,GAAQU,QACjB+C,kBAAoBC,IAElB,MAAMC,EAAkB/I,EAAiBgD,OACtCC,I,IAC4BA,E,MAA3B,GAAGA,EAAEjE,SAASC,cAAiC,QAApBgE,EAAAA,EAAE1F,KAAKG,qBAAPuF,IAAAA,OAAAA,EAAAA,EAAsBvP,OAAQ,cACzDgR,IAEJzE,EAAoB,IACf8I,KACCD,aA5CTpE,WAwDjB,SAAClI,EAAAA,CACChE,KAAM0H,EAAY1H,KAClBiE,QAASyD,EAAYzD,QACrB7I,OAAQsM,EAAYtM,OACpB8I,WAAYwD,EAAYxD,WACxBC,QAAS,IACPwD,EAAe,CACb3H,MAAM,EACNiE,QAAS,KACT7I,OAAQ,UACR8I,YAAY,IAGhBE,UAtnBgBoE,UACpB,IAAKd,EAAYzD,UAAYnG,EAAO,OAEpC6J,EAAgB6I,IAAU,IAAKA,EAAMtM,YAAY,KAEjD,MAAMuM,EACmB,YAAvB/I,EAAYtM,OACR,GAAG8L,2BAAoCQ,EAAYzD,QAAQuC,SAASC,aAAaiB,EAAYzD,QAAQuC,SAAStL,eAC9G,GAAGgM,2BAAoCQ,EAAYzD,QAAQuC,SAASC,aAAaiB,EAAYzD,QAAQuC,SAAStL,cAEpH,IASE,WARuB0L,EAASsC,MAAMuH,EAAU,CAC9CC,OAAQ,OACR/G,QAAS,CAAE,eAAgB,oBAC3BgH,KAAMC,KAAKC,UAAU,CACnBpI,WAAY3K,EAAM2K,gBAIRU,GACZ,MAAM,IAAI9I,MAAM,aAAaqH,EAAYtM,kBAG3CuM,EAAe,CACb3H,MAAM,EACNiE,QAAS,KACT7I,OAAQ,UACR8I,YAAY,IAEdmD,EAAYoD,GAAMA,EAAI,GACtB,MAAMrP,EAAgC,YAAvBsM,EAAYtM,OAAuB,WAAa,WAC/D4L,EAAS6C,KAAK,CACZC,QAAS,WAAW1O,IACpB4O,SAAU,UACVD,QAAS,aAEb,CAAE,MAAO+G,GACPlI,QAAQ7K,MAAM,SAAS2J,EAAYtM,qBAAsB0V,GACzDnJ,EAAgB6I,IAAU,IAAKA,EAAMtM,YAAY,KACjD8C,EAAS6C,KAAK,CACZC,QAAS,aAAapC,EAAYtM,iBAClC4O,SAAU,QACVD,QAAS,aAEb,MA4kBE,SAAC7D,EAAAA,CACClG,KAAM4H,EAAgB5H,KACtBmG,SAAUyB,EAAgBzB,SAC1B/K,OAAQwM,EAAgBxM,OACxB8I,WAAY0D,EAAgB1D,WAC5BC,QAAS,IACP0D,EAAmB,CACjB7H,MAAM,EACNmG,SAAU,GACV/K,OAAQ,UACR8I,YAAY,IAGhBE,UAlkBoBoE,UACxB,IAAK1K,GAA6C,IAApC8J,EAAgBzB,SAAS5I,OAAc,OAErDsK,EAAoB2I,IAAU,IAAKA,EAAMtM,YAAY,KAErD,MAAMkC,EAAuC,YAA3BwB,EAAgBxM,OAC5BqV,EAAWrK,EACb,GAAGc,uCACH,GAAGA,sCAEP,IAaE,WAZuBN,EAASsC,MAAMuH,EAAU,CAC9CC,OAAQ,OACR/G,QAAS,CAAE,eAAgB,oBAC3BgH,KAAMC,KAAKC,UAAU,CACnB1K,SAAUyB,EAAgBzB,SAASzF,IAAK+J,IAAO,CAC7ChE,UAAWgE,EAAEjE,SAASC,UACtBvL,KAAMuP,EAAEjE,SAAStL,QAEnBuN,WAAY3K,EAAM2K,gBAIRU,GACZ,MAAM,IAAI9I,MAAM,kBAAkBuH,EAAgBxM,mBAGpD,MAAM2V,EAAQnJ,EAAgBzB,SAAS5I,OACjCnC,EAASgL,EAAY,WAAa,WACxCyB,EAAmB,CACjB7H,MAAM,EACNmG,SAAU,GACV/K,OAAQ,UACR8I,YAAY,IAEduD,EAAoB,IACpBJ,EAAYoD,GAAMA,EAAI,GACtBzD,EAAS6C,KAAK,CACZC,QAAS,GAAGiH,cAAkB3V,IAC9B4O,SAAU,UACVD,QAAS,aAEb,CAAE,MAAO+G,GACPlI,QAAQ7K,MAAM,cAAc6J,EAAgBxM,sBAAuB0V,GACnEjJ,EAAoB2I,IAAU,IAAKA,EAAMtM,YAAY,KACrD8C,EAAS6C,KAAK,CACZC,QAAS,kBAAkBlC,EAAgBxM,kBAC3C4O,SAAU,QACVD,QAAS,aAEb,Q,0DCpcG,SAAS7B,EACd8I,EACAC,GAGA,MAAMC,EAAoB,iBAAkBF,EACxC,CAAEA,WAAYA,EAAkCC,eAChD,CAAED,cAEAG,GAASC,EAAAA,EAAAA,GAAcF,GAE7B,MAAO,CACLpJ,QAASqJ,EAAOrJ,QAChBpL,QAASyU,EAAOzU,QAChBqB,MAAOoT,EAAOpT,MAElB,CAWO,SAASsT,EACdC,EACAC,EACAC,EACAC,GAEA,QAAIA,MACAD,GAAgBF,IAAYC,EAElC,C,sBCnEI/N,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAIC,EAAQF,EAAwB,EAAQ,QAIxCG,GAAW,EAFMJ,EAAuB,EAAQ,QAElBK,SAAuBF,EAAMG,cAAc,OAAQ,CACnFC,EAAG,8DACD,gBAEJL,EAAQ,EAAUE,C,sBCjBdJ,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAIC,EAAQF,EAAwB,EAAQ,QAIxCG,GAAW,EAFMJ,EAAuB,EAAQ,QAElBK,SAAuBF,EAAMG,cAAc,OAAQ,CACnFC,EAAG,0HACD,eAEJL,EAAQ,EAAUE,C,oLCXlB,MAAM1F,GAAY,IAAAC,YACfC,IAAU,CACTsT,KAAM,CACJjN,SAAU,cACVkN,QAASvT,EAAMc,QAAQ,EAAG,EAAG,EAAG,MAElC0S,SAAU,CACRC,OAAQ,EACR/L,MAAO1H,EAAM0T,QAAQC,YAEvBC,MAAO,CACLlM,MAAO1H,EAAM0T,QAAQC,cAGzB,CAAE7W,KAAM,wBAEV,SAAS+W,EAAWpR,GAClB,MAAM,KAAEqR,EAAI,MAAE3G,EAAK,QAAErK,GAAYL,EAC3BtB,EAAUrB,IAChB,OAAuB,IAAAiF,MAAKiC,EAAA,EAAK,CAAEtE,SAAU,EAC3B,IAAAtB,KAAI2S,EAAA,EAAS,CAAC,IACd,IAAA3S,KAAI,KAAM,CAAE+B,GAAI2Q,EAAMhR,UAASkR,UAAW,OAAQtR,UAA0B,IAAAqC,MAAKiC,EAAA,EAAK,CAAE2E,QAAS,OAAQ+E,WAAY,SAAUrP,UAAWF,EAAQmS,KAAM5Q,SAAU,EAChK,IAAAtB,KAAI4F,EAAA,EAAK,CAAE3F,UAAWF,EAAQqS,SAAUnM,WAAY,iBAAkB4M,EAAG,EAAGvR,UAA0B,IAAAtB,KAAI8F,EAAA,EAAY,CAAExE,UAA0B,IAAAtB,KAAI,SAAU,CAAEsB,SAAUyK,SAC5K,IAAA/L,KAAI,EAAA8S,EAAW,CAAE7S,UAAWF,EAAQyS,eAG1D,C,0BC7BA,MAAMO,GAAc,IAAAtR,YAAW,CAACJ,EAAOO,KAAwB,IAAA5B,KAAI,KAAM,CAAE4B,SAAQP,EAAOiF,MAAO,aAC3F0M,GAAa,IAAAvR,YAAW,CAACJ,EAAOO,KAAwB,IAAA5B,KAAIoG,EAAA,EAAU,CAAExE,MAAKmC,UAAWgP,KAAgB1R,K,qCCE9G,MAAM4R,EAAa5R,IACjB,MAAM,aAAE6R,GAAiB7R,GACnB,EAAE8R,IAAM,OAAkB,KAChC,OAAKD,EAE8B,iBAAjBA,GACO,IAAAlT,KAAI8F,EAAA,EAAY,CAAExE,SAAU6R,EAAE,sBAAuB,CAAED,mBACpEA,EAAapP,MAKF,IAAA9D,KAAIgT,EAAY,CAAEjR,GAAImR,EAAapP,KAAMiC,QAAS,YAAazE,SAAU4R,EAAaxX,QAJpF,IAAAsE,KAAI8F,EAAA,EAAY,CAAExE,SAAU6R,EAAE,sBAAuB,CAC1ED,aAAcA,EAAaxX,SALtB,MAUL0X,EAAgB,cAA6B,EAAAC,UACjD,WAAAC,CAAYjS,GACVkS,MAAMlS,GACNP,KAAKtD,MAAQ,CACXe,WAAO,EACPiV,eAAW,EAEf,CACA,iBAAAC,CAAkBlV,EAAOiV,GACvBpK,QAAQ7K,MAAM,yBAAyBA,IAAS,CAAEA,QAAOiV,cACzD1S,KAAK4S,SAAS,CAAEnV,QAAOiV,aACzB,CACA,MAAAvH,GACE,MAAM,aAAEiH,EAAY,SAAE5R,GAAaR,KAAKO,OAClC,MAAE9C,GAAUuC,KAAKtD,MACvB,OAAKe,GAGkB,IAAAyB,KAAI,IAAY,CAAE+L,MAAO,uBAAwBxN,QAAO+C,UAA0B,IAAAtB,KAAIiT,EAAW,CAAEC,mBAFjH5R,CAGX,GC9BI,GAAY,IAAA3C,YACfC,IAAU,CACT+U,UAAW,CACTxB,QAAS,EACT,eAAgB,CACdyB,cAAe,IAGnBC,mBAAoB,CAClBtJ,QAAS,OACT+E,WAAY,YAEdwE,OAAQ,CACN3B,QAASvT,EAAMc,QAAQ,EAAG,EAAG,EAAG,MAElCqU,YAAa,CACX9N,WAAYrH,EAAMoV,WAAWC,gBAE/BC,gBAAiB,CACfC,WAAYvV,EAAMc,QAAQ,IAE5B0U,aAAc,CAAC,EACfC,aAAc,CAAC,EACfC,cAAe,CAAC,EAChBzF,UAAW,CACTtE,QAAS,UAGb,CAAE7O,KAAM,sBAEJ6Y,GAAsB,IAAAC,YACzB5V,IAAU,CACTsT,KAAM,CACJ3H,QAAS,eACT4H,QAASvT,EAAMc,QAAQ,EAAG,EAAG,EAAG,GAChC+U,MAAO,WAGX,CAAE/Y,KAAM,wCARkB,CAS1BgZ,EAAA,GACIC,EAAiB,CACrBC,KAAM,CACJC,KAAM,CACJtK,QAAS,OACTuK,cAAe,UAEjBC,WAAY,CACVxK,QAAS,OACTuK,cAAe,SACf1V,OAAQ,QAEV4V,SAAU,CACRzK,QAAS,OACTuK,cAAe,SACf1V,OAAQ,oBAER6V,aAAc,OACdC,YAAa,aACb,eAAgB,CACd9V,OAAQ,UAId+V,YAAa,CACXJ,WAAY,CACVF,KAAM,GAERG,SAAU,CACRH,KAAM,KAIZ,SAASjG,EAASvN,GAChB,MAAM,MACJ0K,EAAK,UACL8C,EAAS,QACTuG,GAAU,EAAI,SACdC,EAAQ,aACRnC,EAAY,mBACZoC,EAAkB,QAClBvP,EAAO,aACPwP,EAAe,SAAQ,SACvBjU,EAAQ,YACRkU,EAAW,YACXC,EAAW,KACXC,EAAI,OACJ9Z,EAAM,iBACN+Z,EAAgB,QAChBC,EAAO,cACPC,EAAa,gBACbC,EAAe,UACf7V,EAAS,UACT0T,EAAS,qBACToC,EAAoB,yBACpBC,GACE3U,EACEtB,EAAU,IAChB,IAAIkW,EAAkB,CAAC,EACnBC,EAAsB,CAAC,EACvBnQ,GACeA,EAAQoQ,MAAM,UACtB/H,QAAS1S,IAChBua,EAAkB,IACbA,KACAtB,EAAeC,KAAKlZ,IAEzBwa,EAAsB,IACjBA,KACAvB,EAAeQ,YAAYzZ,MAIpC,MASM0a,EAAWd,IAAuBpC,EAAe,CAAEA,gBAAiB,CAAC,GAC3E,OAAuB,IAAAlT,KAAIqW,EAAA,EAAM,CAAErQ,MAAOiQ,EAAiBhW,YAAWqB,UAA0B,IAAAqC,MAAKyP,EAAe,IAAKgD,EAAU9U,SAAU,CAC3IyK,IAAyB,IAAA/L,KACvBsW,EAAA,EACA,CACEvW,QAAS,CACPmS,KAAM,IAAWnS,EAAQ+T,QACzB/H,MAAOhM,EAAQgU,YACflF,UAAW9O,EAAQmU,gBACnBqC,OAAQxW,EAAQqU,aAChBxY,OAAQmE,EAAQsU,aAChBmC,QAASzW,EAAQuU,eAEnBvI,QACA8C,UAtBCA,GAAc6G,GAGI,IAAA/R,MAAK,MAAO,CAAE,cAAe,sBAAuBrC,SAAU,CACnFuN,IAA6B,IAAA7O,KAAI,MAAO,CAAEC,UAAWF,EAAQ8O,UAAWvN,SAAUuN,IAClF6G,KAJO,KAsBL9Z,SACAoK,MAAO,IAAKwP,GACZO,uBACAC,8BACGP,IAGPK,IAAmC,IAAA9V,KAAIuU,EAAqB,CAAEjT,SAAUwU,IACxEV,IAA2B,IAAApV,KAAI2S,EAAA,EAAS,CAAC,IACzB,IAAA3S,KACdyW,EAAA,EACA,CACExW,UAAW,IAAW4V,EAAe,CACnC,CAAC9V,EAAQ4T,WAAYA,EACrB,CAAC5T,EAAQ8T,oBAAsC,WAAjB0B,IAEhCvP,MAAOkQ,EACP5U,aAGJsU,IAA2B,IAAA5V,KAAI0U,EAAA,EAAa,CAAEzU,UAAW0V,EAAkBrU,SAAUsU,IACrFP,IAA4B,IAAArV,KAAIyS,EAAY,IAAK4C,QAErD,C","sources":["webpack://internal.plugin-kuadrant/./src/permissions.ts","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsync.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsyncFn.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/Link/Link.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/OpenInNew.js","webpack://internal.plugin-kuadrant/./src/components/ApprovalQueueCard/ApprovalQueueCard.tsx","webpack://internal.plugin-kuadrant/./src/utils/permissions.ts","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ArrowForward.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/CheckCircle.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/BottomLink/BottomLink.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/LinkButton/LinkButton.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/ErrorBoundary/ErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/InfoCard/InfoCard.esm.js"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/**\n * permission definitions for the kuadrant plugin\n *\n * these permissions control access to kuadrant resources and operations.\n * they must match the permissions defined in the backend plugin.\n *\n * permission types:\n * - BasicPermission: standard permission that applies globally\n * - ResourcePermission: permission scoped to specific resource types (e.g., apiproduct)\n *\n * permission patterns:\n * - `.create` - create new resources\n * - `.read` - read resource details\n * - `.read.own` - read only resources owned by the user\n * - `.read.all` - read all resources regardless of ownership\n * - `.update` - modify existing resources\n * - `.delete` - delete resources\n * - `.delete.own` - delete only resources owned by the user\n * - `.delete.all` - delete any resource regardless of ownership\n * - `.list` - list/view collections of resources\n */\n\n// planpolicy permissions\nexport const kuadrantPlanPolicyCreatePermission = createPermission({\n name: 'kuadrant.planpolicy.create',\n attributes: { action: 'create' },\n});\n\nexport const kuadrantPlanPolicyReadPermission = createPermission({\n name: 'kuadrant.planpolicy.read',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantPlanPolicyUpdatePermission = createPermission({\n name: 'kuadrant.planpolicy.update',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPlanPolicyDeletePermission = createPermission({\n name: 'kuadrant.planpolicy.delete',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantPlanPolicyListPermission = createPermission({\n name: 'kuadrant.planpolicy.list',\n attributes: { action: 'read' },\n});\n\n// apiproduct permissions\n\n/**\n * permission to create new API products\n * granted to api owners and admins\n */\nexport const kuadrantApiProductCreatePermission = createPermission({\n name: 'kuadrant.apiproduct.create',\n attributes: { action: 'create' },\n});\n\n/**\n * permission to read API products owned by the current user\n * for api owners to view their own products\n */\nexport const kuadrantApiProductReadOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API products regardless of ownership\n * for platform engineers/admins who need to view all products\n */\nexport const kuadrantApiProductReadAllPermission = createPermission({\n name: 'kuadrant.apiproduct.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API products owned by the current user\n * for api owners to modify their own products\n */\nexport const kuadrantApiProductUpdateOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductUpdateAllPermission = createPermission({\n name: 'kuadrant.apiproduct.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API products owned by the current user\n * for api owners to remove their own products\n */\nexport const kuadrantApiProductDeleteOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API product regardless of ownership\n * for platform engineers/admins\n */\nexport const kuadrantApiProductDeleteAllPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to list API products\n * backend filters results based on .own vs .all read permissions\n */\nexport const kuadrantApiProductListPermission = createPermission({\n name: 'kuadrant.apiproduct.list',\n attributes: { action: 'read' },\n});\n\n// apikey permissions\n\n/**\n * permission to create API keys (request API access)\n *\n * this is a ResourcePermission scoped to 'apiproduct', allowing\n * fine-grained control over which API products users can request access to.\n *\n * use in frontend: useKuadrantPermission(kuadrantApiKeyCreatePermission)\n * use in backend with resource: { permission, resourceRef: 'apiproduct:namespace/name' }\n */\nexport const kuadrantApiKeyCreatePermission = createPermission({\n name: 'kuadrant.apikey.create',\n attributes: { action: 'create' },\n resourceType: 'apiproduct',\n});\n\n/**\n * permission to read API keys owned by the current user\n * allows users to view their own API keys and request history\n */\nexport const kuadrantApiKeyReadOwnPermission = createPermission({\n name: 'kuadrant.apikey.read.own',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to read all API keys regardless of ownership\n * for platform engineers/admins who need to view the approval queue and audit keys\n */\nexport const kuadrantApiKeyReadAllPermission = createPermission({\n name: 'kuadrant.apikey.read.all',\n attributes: { action: 'read' },\n});\n\n/**\n * permission to update API keys owned by the current user\n * allows users to edit their own pending requests (change plan tier, use case)\n */\nexport const kuadrantApiKeyUpdateOwnPermission = createPermission({\n name: 'kuadrant.apikey.update.own',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to update any API key regardless of ownership\n * typically granted to API owners and platform engineers for approving/rejecting requests\n */\nexport const kuadrantApiKeyUpdateAllPermission = createPermission({\n name: 'kuadrant.apikey.update.all',\n attributes: { action: 'update' },\n});\n\n/**\n * permission to delete API keys owned by the current user\n * allows users to cancel their own requests or revoke their own access\n */\nexport const kuadrantApiKeyDeleteOwnPermission = createPermission({\n name: 'kuadrant.apikey.delete.own',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to delete any API key regardless of ownership\n * for platform engineers/admins who need to revoke access\n */\nexport const kuadrantApiKeyDeleteAllPermission = createPermission({\n name: 'kuadrant.apikey.delete.all',\n attributes: { action: 'delete' },\n});\n\n/**\n * permission to approve/reject API key requests\n * grants access to the approval queue - for API owners and admins only\n * separate from update.own which consumers use to edit their pending requests\n */\nexport const kuadrantApiKeyApprovePermission = createPermission({\n name: 'kuadrant.apikey.approve',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPermissions = [\n kuadrantPlanPolicyCreatePermission,\n kuadrantPlanPolicyReadPermission,\n kuadrantPlanPolicyUpdatePermission,\n kuadrantPlanPolicyDeletePermission,\n kuadrantPlanPolicyListPermission,\n kuadrantApiProductCreatePermission,\n kuadrantApiProductReadOwnPermission,\n kuadrantApiProductReadAllPermission,\n kuadrantApiProductUpdateOwnPermission,\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductDeleteOwnPermission,\n kuadrantApiProductDeleteAllPermission,\n kuadrantApiProductListPermission,\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyReadOwnPermission,\n kuadrantApiKeyReadAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyApprovePermission,\n];\n","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import { jsxs, jsx } from 'react/jsx-runtime';\nimport { useAnalytics, useApp, useApi, configApiRef } from '@backstage/core-plugin-api';\nimport MaterialLink from '@material-ui/core/Link';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classNames from 'classnames';\nimport { trimEnd } from 'lodash';\nimport { forwardRef } from 'react';\nimport { Link as Link$1, createRoutesFromChildren, Route } from 'react-router-dom';\nimport OpenInNew from '@material-ui/icons/OpenInNew';\n\nfunction isReactRouterBeta() {\n const [obj] = createRoutesFromChildren(/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(\"div\", {}) }));\n return !obj.index;\n}\nconst useStyles = makeStyles(\n (theme) => ({\n visuallyHidden: {\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n overflow: \"hidden\",\n position: \"absolute\",\n userSelect: \"none\",\n whiteSpace: \"nowrap\",\n height: 1,\n width: 1\n },\n externalLink: {\n position: \"relative\"\n },\n externalLinkIcon: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5)\n }\n }),\n { name: \"Link\" }\n);\nconst ExternalLinkIcon = () => {\n const app = useApp();\n const Icon = app.getSystemIcon(\"externalLink\") || OpenInNew;\n const classes = useStyles();\n return /* @__PURE__ */ jsx(Icon, { className: classes.externalLinkIcon });\n};\nconst isExternalUri = (uri) => /^([a-z+.-]+):/.test(uri);\nconst scriptProtocolPattern = (\n // eslint-disable-next-line no-control-regex\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i\n);\nconst originalWindowOpen = window.open;\nif (originalWindowOpen && !originalWindowOpen.__backstage) {\n const newOpen = function open(...args) {\n const url = String(args[0]);\n if (scriptProtocolPattern.test(url)) {\n throw new Error(\n \"Rejected window.open() with a javascript: URL as a security precaution\"\n );\n }\n return originalWindowOpen.apply(this, args);\n };\n newOpen.__backstage = true;\n window.open = newOpen;\n}\nconst useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString(\"app.baseUrl\");\n } catch {\n return void 0;\n }\n};\nconst useBasePath = () => {\n const base = \"http://sample.dev\";\n const url = useBaseUrl() ?? \"/\";\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, \"/\");\n};\nconst useResolvedPath = (uri) => {\n let resolvedPath = String(uri);\n const basePath = useBasePath();\n const external = isExternalUri(resolvedPath);\n const startsWithBasePath = resolvedPath.startsWith(basePath);\n if (!external && !startsWithBasePath) {\n resolvedPath = basePath.concat(resolvedPath);\n }\n return resolvedPath;\n};\nconst getNodeText = (node) => {\n if (node instanceof Array) {\n return node.map(getNodeText).join(\" \").trim();\n }\n if (typeof node === \"object\" && node) {\n return getNodeText(node?.props?.children);\n }\n if ([\"string\", \"number\"].includes(typeof node)) {\n return String(node);\n }\n return \"\";\n};\nconst Link = forwardRef(\n ({ onClick, noTrack, externalLinkIcon, ...props }, ref) => {\n const classes = useStyles();\n const analytics = useAnalytics();\n const to = isReactRouterBeta() ? useResolvedPath(props.to) : props.to;\n const linkText = getNodeText(props.children) || to;\n const external = isExternalUri(to);\n const newWindow = external && !!/^https?:/.exec(to);\n if (scriptProtocolPattern.test(to)) {\n throw new Error(\n \"Link component rejected javascript: URL as a security precaution\"\n );\n }\n const handleClick = (event) => {\n onClick?.(event);\n if (!noTrack) {\n analytics.captureEvent(\"click\", linkText, { attributes: { to } });\n }\n };\n return external ? (\n // External links\n /* @__PURE__ */ jsxs(\n MaterialLink,\n {\n ...newWindow ? { target: \"_blank\", rel: \"noopener\" } : {},\n ...props,\n ...props[\"aria-label\"] ? { \"aria-label\": `${props[\"aria-label\"]}, Opens in a new window` } : {},\n ref,\n href: to,\n onClick: handleClick,\n className: classNames(classes.externalLink, props.className),\n children: [\n props.children,\n externalLinkIcon && /* @__PURE__ */ jsx(ExternalLinkIcon, {}),\n /* @__PURE__ */ jsx(Typography, { component: \"span\", className: classes.visuallyHidden, children: \", Opens in a new window\" })\n ]\n }\n )\n ) : (\n // Interact with React Router for internal links\n /* @__PURE__ */ jsx(\n MaterialLink,\n {\n ...props,\n ref,\n component: Link$1,\n to,\n onClick: handleClick\n }\n )\n );\n }\n);\n\nexport { Link, isExternalUri, isReactRouterBeta, useResolvedPath };\n//# sourceMappingURL=Link.esm.js.map\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\"\n}), 'OpenInNew');\n\nexports.default = _default;","import React, { useState } from \"react\";\nimport {\n useApi,\n fetchApiRef,\n identityApiRef,\n configApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n Progress,\n ResponseErrorPanel,\n InfoCard,\n} from \"@backstage/core-components\";\nimport {\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Chip,\n Typography,\n Box,\n Tabs,\n Tab,\n Tooltip,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n CircularProgress,\n} from \"@material-ui/core\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport { APIKey } from \"../../types/api-management\";\n\ninterface ApprovalDialogProps {\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst ApprovalDialog = ({\n open,\n request,\n action,\n processing,\n onClose,\n onConfirm,\n}: ApprovalDialogProps) => {\n const actionLabel = action === \"approve\" ? \"Approve\" : \"Reject\";\n const processingLabel =\n action === \"approve\" ? \"Approving...\" : \"Rejecting...\";\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>{actionLabel} API Key</DialogTitle>\n <DialogContent>\n {request && (\n <>\n <p>\n <strong>User:</strong> {request.spec.requestedBy.userId}\n </p>\n <p>\n <strong>API:</strong>{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"}\n </p>\n <p>\n <strong>Tier:</strong> {request.spec.planTier}\n </p>\n <Box mb={2}>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ fontWeight: \"bold\" }}\n >\n Use Case:\n </Typography>{\" \"}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ whiteSpace: \"pre-wrap\" }}\n >\n {request.spec.useCase || \"-\"}\n </Typography>\n </Box>\n </>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={action === \"approve\" ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface BulkActionDialogProps {\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst BulkActionDialog = ({\n open,\n requests,\n action,\n processing,\n onClose,\n onConfirm,\n}: BulkActionDialogProps) => {\n const isApprove = action === \"approve\";\n const actionLabel = isApprove ? \"Approve All\" : \"Reject All\";\n const processingLabel = isApprove ? \"Approving...\" : \"Rejecting...\";\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n {isApprove ? \"Approve\" : \"Reject\"} {requests.length} API Keys\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\" paragraph>\n You are about to {isApprove ? \"approve\" : \"reject\"} the following API\n keys:\n </Typography>\n <Box mb={2} maxHeight={200} overflow=\"auto\">\n {requests.map((request) => (\n <Box\n key={`${request.metadata.namespace}/${request.metadata.name}`}\n mb={1}\n p={1}\n bgcolor=\"background.default\"\n >\n <Typography variant=\"body2\">\n <strong>{request.spec.requestedBy.userId}</strong> -{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"} (\n {request.spec.planTier})\n </Typography>\n </Box>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={isApprove ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ApprovalQueueCard = () => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const identityApi = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n const [refresh, setRefresh] = useState(0);\n const [selectedTab, setSelectedTab] = useState(0);\n const [selectedRequests, setSelectedRequests] = useState<APIKey[]>([]);\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n const [bulkDialogState, setBulkDialogState] = useState<{\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n\n const {\n allowed: canUpdateAllRequests,\n loading: updateAllPermissionLoading,\n error: updateAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateAllPermission);\n\n const {\n allowed: canUpdateOwnRequests,\n loading: updateOwnPermissionLoading,\n error: updateOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const updatePermissionLoading =\n updateAllPermissionLoading || updateOwnPermissionLoading;\n const updatePermissionError =\n updateAllPermissionError || updateOwnPermissionError;\n\n const { value, loading, error } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const reviewedBy = identity.userEntityRef;\n\n console.log(\n \"ApprovalQueueCard: fetching all requests from\",\n `${backendUrl}/api/kuadrant/requests`,\n );\n\n // fetch requests and api products in parallel\n const [requestsResponse, apiProductsResponse] = await Promise.all([\n fetchApi.fetch(`${backendUrl}/api/kuadrant/requests`),\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`),\n ]);\n\n if (!requestsResponse.ok) {\n console.log(\n \"ApprovalQueueCard: failed to fetch requests, status:\",\n requestsResponse.status,\n );\n return {\n pending: [] as APIKey[],\n approved: [] as APIKey[],\n rejected: [] as APIKey[],\n reviewedBy,\n ownedApiProducts: new Set<string>(),\n };\n }\n\n // check content-type before parsing json\n const contentType = requestsResponse.headers.get(\"content-type\");\n if (!contentType?.includes(\"application/json\")) {\n console.error(\"ApprovalQueueCard: received non-json response\");\n alertApi.post({\n message:\n \"Unexpected content-type from the server response. Please contact support.\",\n display: \"transient\",\n severity: \"warning\",\n });\n return {\n pending: [] as APIKey[],\n approved: [] as APIKey[],\n rejected: [] as APIKey[],\n reviewedBy,\n ownedApiProducts: new Set<string>(),\n };\n }\n\n const data = await requestsResponse.json();\n const allRequests = data.items || [];\n\n // build set of api products owned by current user\n const ownedApiProducts = new Set<string>();\n if (apiProductsResponse.ok) {\n const apiProductsData = await apiProductsResponse.json();\n for (const product of apiProductsData.items || []) {\n const owner = product.metadata?.annotations?.[\"backstage.io/owner\"];\n if (owner === reviewedBy) {\n // key is namespace/name to match against request's namespace/apiProductRef.name\n ownedApiProducts.add(\n `${product.metadata.namespace}/${product.metadata.name}`,\n );\n }\n }\n }\n\n console.log(\n \"ApprovalQueueCard: received\",\n allRequests.length,\n \"total requests\",\n );\n console.log(\n \"ApprovalQueueCard: user owns\",\n ownedApiProducts.size,\n \"api products\",\n );\n\n // group by status (field is 'phase' not 'status')\n const pending = allRequests.filter((r: APIKey) => {\n const phase = (r.status as any)?.phase || \"Pending\";\n return phase === \"Pending\";\n });\n const approved = allRequests.filter((r: APIKey) => {\n const phase = (r.status as any)?.phase;\n return phase === \"Approved\";\n });\n const rejected = allRequests.filter((r: APIKey) => {\n const phase = (r.status as any)?.phase;\n return phase === \"Rejected\";\n });\n\n console.log(\"ApprovalQueueCard: grouped -\", {\n pending: pending.length,\n approved: approved.length,\n rejected: rejected.length,\n });\n\n return { pending, approved, rejected, reviewedBy, ownedApiProducts };\n }, [backendUrl, fetchApi, identityApi, refresh]);\n\n const handleApprove = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleReject = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleConfirm = async () => {\n if (!dialogState.request || !value) return;\n\n setDialogState((prev) => ({ ...prev, processing: true }));\n\n const endpoint =\n dialogState.action === \"approve\"\n ? `${backendUrl}/api/kuadrant/requests/${dialogState.request.metadata.namespace}/${dialogState.request.metadata.name}/approve`\n : `${backendUrl}/api/kuadrant/requests/${dialogState.request.metadata.namespace}/${dialogState.request.metadata.name}/reject`;\n\n try {\n const response = await fetchApi.fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n reviewedBy: value.reviewedBy,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`failed to ${dialogState.action} request`);\n }\n\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n setRefresh((r) => r + 1);\n const action = dialogState.action === \"approve\" ? \"approved\" : \"rejected\";\n alertApi.post({\n message: `API key ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n console.error(`error ${dialogState.action}ing request:`, err);\n setDialogState((prev) => ({ ...prev, processing: false }));\n alertApi.post({\n message: `Failed to ${dialogState.action} API key`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const handleBulkApprove = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleBulkReject = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleBulkConfirm = async () => {\n if (!value || bulkDialogState.requests.length === 0) return;\n\n setBulkDialogState((prev) => ({ ...prev, processing: true }));\n\n const isApprove = bulkDialogState.action === \"approve\";\n const endpoint = isApprove\n ? `${backendUrl}/api/kuadrant/requests/bulk-approve`\n : `${backendUrl}/api/kuadrant/requests/bulk-reject`;\n\n try {\n const response = await fetchApi.fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n requests: bulkDialogState.requests.map((r) => ({\n namespace: r.metadata.namespace,\n name: r.metadata.name,\n })),\n reviewedBy: value.reviewedBy,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`failed to bulk ${bulkDialogState.action} requests`);\n }\n\n const count = bulkDialogState.requests.length;\n const action = isApprove ? \"approved\" : \"rejected\";\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n setSelectedRequests([]);\n setRefresh((r) => r + 1);\n alertApi.post({\n message: `${count} API keys ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n console.error(`error bulk ${bulkDialogState.action}ing requests:`, err);\n setBulkDialogState((prev) => ({ ...prev, processing: false }));\n alertApi.post({\n message: `Failed to bulk ${bulkDialogState.action} API keys`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n if (loading || updatePermissionLoading) {\n return <Progress />;\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (updatePermissionError) {\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {updatePermissionError.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Permission: kuadrant.apikey.update.all\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Please try again or contact your administrator\n </Typography>\n </Box>\n );\n }\n\n const pending = value?.pending || [];\n const approved = value?.approved || [];\n const rejected = value?.rejected || [];\n\n const formatDate = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-GB\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n };\n\n const pendingColumns: TableColumn<APIKey>[] = [\n {\n title: \"Name\",\n field: \"metadata.name\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.name}</Typography>\n ),\n },\n {\n title: \"User\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API\",\n field: \"spec.apiProductRef.name\",\n render: (row) => (\n <Typography variant=\"body2\">\n <strong>{row.spec.apiProductRef?.name || \"unknown\"}</strong>\n </Typography>\n ),\n },\n {\n title: \"Namespace\",\n field: \"metadata.namespace\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.namespace}</Typography>\n ),\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => <Chip label={row.spec.planTier} size=\"small\" />,\n },\n {\n title: \"Use Case\",\n field: \"spec.useCase\",\n render: (row) => {\n if (!row.spec.useCase) {\n return <Typography variant=\"body2\">-</Typography>;\n }\n return (\n <Tooltip title={row.spec.useCase} placement=\"top\">\n <Typography\n variant=\"body2\"\n style={{\n maxWidth: \"200px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {row.spec.useCase}\n </Typography>\n </Tooltip>\n );\n },\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Actions\",\n filtering: false,\n render: (row) => {\n const apiProductKey = `${row.metadata.namespace}/${row.spec.apiProductRef?.name || \"unknown\"}`;\n const ownsApiProduct =\n value?.ownedApiProducts?.has(apiProductKey) ?? false;\n const canUpdate =\n canUpdateAllRequests || (canUpdateOwnRequests && ownsApiProduct);\n if (!canUpdate) return null;\n return (\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n startIcon={<CheckCircleIcon />}\n onClick={() => handleApprove(row)}\n color=\"primary\"\n variant=\"outlined\"\n >\n Approve\n </Button>\n <Button\n size=\"small\"\n startIcon={<CancelIcon />}\n onClick={() => handleReject(row)}\n color=\"secondary\"\n variant=\"outlined\"\n >\n Reject\n </Button>\n </Box>\n );\n },\n },\n ];\n\n const approvedColumns: TableColumn<APIKey>[] = [\n {\n title: \"Name\",\n field: \"metadata.name\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.name}</Typography>\n ),\n },\n {\n title: \"User\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API\",\n field: \"spec.apiProductRef.name\",\n render: (row) => (\n <Typography variant=\"body2\">\n <strong>{row.spec.apiProductRef?.name || \"unknown\"}</strong>\n </Typography>\n ),\n },\n {\n title: \"Namespace\",\n field: \"metadata.namespace\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.namespace}</Typography>\n ),\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => <Chip label={row.spec.planTier} size=\"small\" />,\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Approved\",\n field: \"status.reviewedAt\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.status?.reviewedAt ? formatDate(row.status.reviewedAt) : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed By\",\n field: \"status.reviewedBy\",\n render: (row) => (\n <Typography variant=\"body2\">{row.status?.reviewedBy || \"-\"}</Typography>\n ),\n },\n {\n title: \"Approval Type\",\n field: \"status.reviewedBy\",\n render: (row) => {\n const isAutomatic = row.status?.reviewedBy === \"system\";\n return (\n <Chip\n label={isAutomatic ? \"Automatic\" : \"Manual\"}\n size=\"small\"\n color={isAutomatic ? \"default\" : \"primary\"}\n />\n );\n },\n },\n ];\n\n const rejectedColumns: TableColumn<APIKey>[] = [\n {\n title: \"Name\",\n field: \"metadata.name\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.name}</Typography>\n ),\n },\n {\n title: \"User\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API\",\n field: \"spec.apiProductRef.name\",\n render: (row) => (\n <Typography variant=\"body2\">\n <strong>{row.spec.apiProductRef?.name || \"unknown\"}</strong>\n </Typography>\n ),\n },\n {\n title: \"Namespace\",\n field: \"metadata.namespace\",\n render: (row) => (\n <Typography variant=\"body2\">{row.metadata.namespace}</Typography>\n ),\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => <Chip label={row.spec.planTier} size=\"small\" />,\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Rejected\",\n field: \"status.reviewedAt\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.status?.reviewedAt ? formatDate(row.status.reviewedAt) : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed By\",\n field: \"status.reviewedBy\",\n render: (row) => (\n <Typography variant=\"body2\">{row.status?.reviewedBy || \"-\"}</Typography>\n ),\n },\n ];\n\n const getTabData = () => {\n const addIds = (data: APIKey[]) =>\n data.map((item) => ({ ...item, id: item.metadata.name }));\n\n switch (selectedTab) {\n case 0:\n // pending tab - add tableData.checked to control checkbox state\n const pendingWithSelection = pending.map((row: APIKey) => {\n const isSelected = selectedRequests.some(\n (selected) =>\n selected.metadata.name === row.metadata.name &&\n selected.metadata.namespace === row.metadata.namespace,\n );\n return {\n ...row,\n tableData: { checked: isSelected },\n };\n });\n return {\n data: pendingWithSelection,\n columns: pendingColumns,\n showSelection: true,\n };\n case 1:\n return {\n data: addIds(approved),\n columns: approvedColumns,\n showSelection: false,\n };\n case 2:\n return {\n data: addIds(rejected),\n columns: rejectedColumns,\n showSelection: false,\n };\n default:\n return {\n data: addIds(pending),\n columns: pendingColumns,\n showSelection: true,\n };\n }\n };\n\n const tabData = getTabData();\n\n // group requests by api product (namespace/name)\n const groupByApiProduct = (requests: APIKey[]) => {\n const grouped = new Map<string, APIKey[]>();\n requests.forEach((request) => {\n const key = `${request.metadata.namespace}/${request.spec.apiProductRef?.name || \"unknown\"}`;\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(request);\n });\n return grouped;\n };\n\n const groupedData = groupByApiProduct(tabData.data);\n const apiProductKeys = Array.from(groupedData.keys()).sort();\n\n return (\n <>\n <InfoCard\n title=\"API Access Requests\"\n subheader={`${pending.length} pending, ${approved.length} approved, ${rejected.length} rejected`}\n >\n <Box mb={2} data-testid=\"approval-queue-card\">\n <Tabs\n value={selectedTab}\n onChange={(_, newValue) => {\n setSelectedTab(newValue);\n setSelectedRequests([]);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n data-testid=\"approval-queue-tabs\"\n >\n <Tab\n label={`Pending (${pending.length})`}\n data-testid=\"approval-queue-pending-tab\"\n />\n <Tab\n label={`Approved (${approved.length})`}\n data-testid=\"approval-queue-approved-tab\"\n />\n <Tab\n label={`Rejected (${rejected.length})`}\n data-testid=\"approval-queue-rejected-tab\"\n />\n </Tabs>\n </Box>\n\n {selectedTab === 0 && selectedRequests.length > 0 && (\n <Box\n mb={2}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n p={2}\n bgcolor=\"background.default\"\n >\n <Typography variant=\"body2\">\n {selectedRequests.length} request\n {selectedRequests.length !== 1 ? \"s\" : \"\"} selected\n </Typography>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n startIcon={<CheckCircleIcon />}\n onClick={handleBulkApprove}\n >\n Approve Selected\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<CancelIcon />}\n onClick={handleBulkReject}\n >\n Reject Selected\n </Button>\n </Box>\n </Box>\n )}\n\n {tabData.data.length === 0 ? (\n <Box p={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {selectedTab === 0 && \"No pending requests.\"}\n {selectedTab === 1 && \"No approved requests.\"}\n {selectedTab === 2 && \"No rejected requests.\"}\n </Typography>\n </Box>\n ) : (\n <Box>\n {apiProductKeys.map((apiProductKey) => {\n const requests = groupedData.get(apiProductKey) || [];\n const displayName =\n requests[0]?.spec.apiProductRef?.name || apiProductKey;\n const ownsThisApiProduct =\n value?.ownedApiProducts?.has(apiProductKey) ?? false;\n const canSelectRows =\n canUpdateAllRequests ||\n (canUpdateOwnRequests && ownsThisApiProduct);\n return (\n <Accordion\n key={apiProductKey}\n defaultExpanded={apiProductKeys.length === 1}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n width=\"100%\"\n >\n <Typography variant=\"h6\">{displayName}</Typography>\n <Chip\n label={`${requests.length} request${requests.length !== 1 ? \"s\" : \"\"}`}\n size=\"small\"\n color=\"primary\"\n style={{ marginRight: 16 }}\n />\n </Box>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <Table\n options={{\n selection: canSelectRows && tabData.showSelection,\n paging: requests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n showTextRowsSelected: false,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n data={requests}\n columns={tabData.columns}\n onSelectionChange={(rows) => {\n // merge selections from this api product with selections from other products\n const otherSelections = selectedRequests.filter(\n (r) =>\n `${r.metadata.namespace}/${r.spec.apiProductRef?.name || \"unknown\"}` !==\n apiProductKey,\n );\n setSelectedRequests([\n ...otherSelections,\n ...(rows as APIKey[]),\n ]);\n }}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n );\n })}\n </Box>\n )}\n </InfoCard>\n <ApprovalDialog\n open={dialogState.open}\n request={dialogState.request}\n action={dialogState.action}\n processing={dialogState.processing}\n onClose={() =>\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleConfirm}\n />\n <BulkActionDialog\n open={bulkDialogState.open}\n requests={bulkDialogState.requests}\n action={bulkDialogState.action}\n processing={bulkDialogState.processing}\n onClose={() =>\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleBulkConfirm}\n />\n </>\n );\n};\n","import { usePermission } from '@backstage/plugin-permission-react';\nimport { Permission, ResourcePermission } from '@backstage/plugin-permission-common';\n\n/**\n * result of a permission check including error state\n */\nexport interface PermissionCheckResult {\n allowed: boolean;\n loading: boolean;\n error?: Error;\n}\n\n/**\n * custom hook for checking kuadrant permissions that handles both\n * BasicPermission and ResourcePermission types without type bypasses\n *\n * @param permission - the permission to check\n * @param resourceRef - optional resource reference for ResourcePermissions\n * @returns permission check result with error handling\n *\n * @example\n * // basic permission\n * const { allowed, loading, error } = useKuadrantPermission(\n * kuadrantApiProductListPermission\n * );\n *\n * @example\n * // resource permission\n * const { allowed, loading, error } = useKuadrantPermission(\n * kuadrantApiKeyCreatePermission,\n * 'apiproduct:namespace/name'\n * );\n */\nexport function useKuadrantPermission(\n permission: Permission,\n resourceRef?: string,\n): PermissionCheckResult {\n // construct the permission request based on whether it's a ResourcePermission\n const permissionRequest = 'resourceType' in permission\n ? { permission: permission as ResourcePermission, resourceRef }\n : { permission };\n\n const result = usePermission(permissionRequest as any);\n\n return {\n allowed: result.allowed,\n loading: result.loading,\n error: result.error,\n };\n}\n\n/**\n * helper to determine if a user can delete a specific API key or request\n *\n * @param ownerId - the user id who owns the key/request\n * @param currentUserId - the current user's id\n * @param canDeleteOwn - whether user has permission to delete their own keys\n * @param canDeleteAll - whether user has permission to delete all keys\n * @returns true if user can delete this specific key/request\n */\nexport function canDeleteResource(\n ownerId: string,\n currentUserId: string,\n canDeleteOwn: boolean,\n canDeleteAll: boolean,\n): boolean {\n if (canDeleteAll) return true;\n if (canDeleteOwn && ownerId === currentUserId) return true;\n return false;\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckCircle');\n\nexports.default = _default;","import { jsxs, jsx } from 'react/jsx-runtime';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ArrowIcon from '@material-ui/icons/ArrowForward';\nimport { Link } from '../../components/Link/Link.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n maxWidth: \"fit-content\",\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n boxTitle: {\n margin: 0,\n color: theme.palette.textSubtle\n },\n arrow: {\n color: theme.palette.textSubtle\n }\n }),\n { name: \"BackstageBottomLink\" }\n);\nfunction BottomLink(props) {\n const { link, title, onClick } = props;\n const classes = useStyles();\n return /* @__PURE__ */ jsxs(Box, { children: [\n /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(Link, { to: link, onClick, underline: \"none\", children: /* @__PURE__ */ jsxs(Box, { display: \"flex\", alignItems: \"center\", className: classes.root, children: [\n /* @__PURE__ */ jsx(Box, { className: classes.boxTitle, fontWeight: \"fontWeightBold\", m: 1, children: /* @__PURE__ */ jsx(Typography, { children: /* @__PURE__ */ jsx(\"strong\", { children: title }) }) }),\n /* @__PURE__ */ jsx(ArrowIcon, { className: classes.arrow })\n ] }) })\n ] });\n}\n\nexport { BottomLink };\n//# sourceMappingURL=BottomLink.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Button$1 from '@material-ui/core/Button';\nimport { forwardRef } from 'react';\nimport { Link } from '../Link/Link.esm.js';\n\nconst LinkWrapper = forwardRef((props, ref) => /* @__PURE__ */ jsx(Link, { ref, ...props, color: \"initial\" }));\nconst LinkButton = forwardRef((props, ref) => /* @__PURE__ */ jsx(Button$1, { ref, component: LinkWrapper, ...props }));\nconst Button = LinkButton;\n\nexport { Button, LinkButton };\n//# sourceMappingURL=LinkButton.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Typography from '@material-ui/core/Typography';\nimport { Component } from 'react';\nimport { LinkButton } from '../../components/LinkButton/LinkButton.esm.js';\nimport { ErrorPanel } from '../../components/ErrorPanel/ErrorPanel.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst SlackLink = (props) => {\n const { slackChannel } = props;\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n if (!slackChannel) {\n return null;\n } else if (typeof slackChannel === \"string\") {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", { slackChannel }) });\n } else if (!slackChannel.href) {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", {\n slackChannel: slackChannel.name\n }) });\n }\n return /* @__PURE__ */ jsx(LinkButton, { to: slackChannel.href, variant: \"contained\", children: slackChannel.name });\n};\nconst ErrorBoundary = class ErrorBoundary2 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: void 0,\n errorInfo: void 0\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(`ErrorBoundary, error: ${error}`, { error, errorInfo });\n this.setState({ error, errorInfo });\n }\n render() {\n const { slackChannel, children } = this.props;\n const { error } = this.state;\n if (!error) {\n return children;\n }\n return /* @__PURE__ */ jsx(ErrorPanel, { title: \"Something Went Wrong\", error, children: /* @__PURE__ */ jsx(SlackLink, { slackChannel }) });\n }\n};\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { jsx, jsxs } from 'react/jsx-runtime';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { BottomLink } from '../BottomLink/BottomLink.esm.js';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n noPadding: {\n padding: 0,\n \"&:last-child\": {\n paddingBottom: 0\n }\n },\n contentAlignBottom: {\n display: \"flex\",\n alignItems: \"self-end\"\n },\n header: {\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n headerTitle: {\n fontWeight: theme.typography.fontWeightBold\n },\n headerSubheader: {\n paddingTop: theme.spacing(1)\n },\n headerAvatar: {},\n headerAction: {},\n headerContent: {},\n subheader: {\n display: \"flex\"\n }\n }),\n { name: \"BackstageInfoCard\" }\n);\nconst CardActionsTopRight = withStyles(\n (theme) => ({\n root: {\n display: \"inline-block\",\n padding: theme.spacing(8, 8, 0, 0),\n float: \"right\"\n }\n }),\n { name: \"BackstageInfoCardCardActionsTopRight\" }\n)(CardActions);\nconst VARIANT_STYLES = {\n card: {\n flex: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n fullHeight: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\"\n },\n gridItem: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 10px)\",\n // for pages without content header\n marginBottom: \"10px\",\n breakInside: \"avoid-page\",\n \"@media print\": {\n height: \"auto\"\n }\n }\n },\n cardContent: {\n fullHeight: {\n flex: 1\n },\n gridItem: {\n flex: 1\n }\n }\n};\nfunction InfoCard(props) {\n const {\n title,\n subheader,\n divider = true,\n deepLink,\n slackChannel,\n errorBoundaryProps,\n variant,\n alignContent = \"normal\",\n children,\n headerStyle,\n headerProps,\n icon,\n action,\n actionsClassName,\n actions,\n cardClassName,\n actionsTopRight,\n className,\n noPadding,\n titleTypographyProps,\n subheaderTypographyProps\n } = props;\n const classes = useStyles();\n let calculatedStyle = {};\n let calculatedCardStyle = {};\n if (variant) {\n const variants = variant.split(/[\\s]+/g);\n variants.forEach((name) => {\n calculatedStyle = {\n ...calculatedStyle,\n ...VARIANT_STYLES.card[name]\n };\n calculatedCardStyle = {\n ...calculatedCardStyle,\n ...VARIANT_STYLES.cardContent[name]\n };\n });\n }\n const cardSubTitle = () => {\n if (!subheader && !icon) {\n return null;\n }\n return /* @__PURE__ */ jsxs(\"div\", { \"data-testid\": \"info-card-subheader\", children: [\n subheader && /* @__PURE__ */ jsx(\"div\", { className: classes.subheader, children: subheader }),\n icon\n ] });\n };\n const errProps = errorBoundaryProps || (slackChannel ? { slackChannel } : {});\n return /* @__PURE__ */ jsx(Card, { style: calculatedStyle, className, children: /* @__PURE__ */ jsxs(ErrorBoundary, { ...errProps, children: [\n title && /* @__PURE__ */ jsx(\n CardHeader,\n {\n classes: {\n root: classNames(classes.header),\n title: classes.headerTitle,\n subheader: classes.headerSubheader,\n avatar: classes.headerAvatar,\n action: classes.headerAction,\n content: classes.headerContent\n },\n title,\n subheader: cardSubTitle(),\n action,\n style: { ...headerStyle },\n titleTypographyProps,\n subheaderTypographyProps,\n ...headerProps\n }\n ),\n actionsTopRight && /* @__PURE__ */ jsx(CardActionsTopRight, { children: actionsTopRight }),\n divider && /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(\n CardContent,\n {\n className: classNames(cardClassName, {\n [classes.noPadding]: noPadding,\n [classes.contentAlignBottom]: alignContent === \"bottom\"\n }),\n style: calculatedCardStyle,\n children\n }\n ),\n actions && /* @__PURE__ */ jsx(CardActions, { className: actionsClassName, children: actions }),\n deepLink && /* @__PURE__ */ jsx(BottomLink, { ...deepLink })\n ] }) });\n}\n\nexport { InfoCard };\n//# sourceMappingURL=InfoCard.esm.js.map\n"],"names":["createPermission","name","attributes","action","kuadrantPlanPolicyListPermission","kuadrantApiProductCreatePermission","kuadrantApiProductReadAllPermission","kuadrantApiProductUpdateOwnPermission","kuadrantApiProductUpdateAllPermission","kuadrantApiProductDeleteOwnPermission","kuadrantApiProductDeleteAllPermission","kuadrantApiProductListPermission","kuadrantApiKeyCreatePermission","resourceType","kuadrantApiKeyReadOwnPermission","kuadrantApiKeyUpdateOwnPermission","kuadrantApiKeyUpdateAllPermission","kuadrantApiKeyDeleteOwnPermission","kuadrantApiKeyDeleteAllPermission","kuadrantApiKeyApprovePermission","useAsync","fn","deps","_a","initialState","loading","lastCallId","useRef","isMounted","useMountedState","useState","state","set","callback","useCallback","args","_i","arguments","length","callId","current","prevState","__assign","apply","then","value","error","useAsyncFn","useEffect","useStyles","makeStyles","theme","visuallyHidden","clip","clipPath","overflow","position","userSelect","whiteSpace","height","width","externalLink","externalLinkIcon","verticalAlign","marginLeft","spacing","ExternalLinkIcon","Icon","useApp","getSystemIcon","classes","jsx","className","isExternalUri","uri","test","scriptProtocolPattern","originalWindowOpen","window","open","__backstage","newOpen","url","String","Error","this","getNodeText","node","Array","map","join","trim","props","children","includes","Link","forwardRef","onClick","noTrack","ref","analytics","useAnalytics","to","obj","createRoutesFromChildren","Route","index","element","isReactRouterBeta","resolvedPath","basePath","useApi","configApiRef","getOptionalString","useBaseUrl","pathname","URL","trimEnd","useBasePath","external","startsWithBasePath","startsWith","concat","useResolvedPath","linkText","newWindow","exec","handleClick","event","captureEvent","jsxs","target","rel","href","component","_interopRequireDefault","_interopRequireWildcard","exports","React","_default","default","createElement","d","ApprovalDialog","request","processing","onClose","onConfirm","actionLabel","processingLabel","Dialog","undefined","maxWidth","fullWidth","DialogTitle","DialogContent","p","strong","spec","requestedBy","userId","apiProductRef","planTier","Box","mb","Typography","variant","style","fontWeight","useCase","DialogActions","Button","disabled","color","startIcon","CircularProgress","size","BulkActionDialog","requests","isApprove","paragraph","maxHeight","bgcolor","metadata","namespace","ApprovalQueueCard","config","fetchApi","fetchApiRef","identityApi","identityApiRef","alertApi","alertApiRef","backendUrl","getString","refresh","setRefresh","selectedTab","setSelectedTab","selectedRequests","setSelectedRequests","dialogState","setDialogState","bulkDialogState","setBulkDialogState","allowed","canUpdateAllRequests","updateAllPermissionLoading","updateAllPermissionError","useKuadrantPermission","canUpdateOwnRequests","updateOwnPermissionLoading","updateOwnPermissionError","updatePermissionLoading","updatePermissionError","async","reviewedBy","getBackstageIdentity","userEntityRef","console","log","requestsResponse","apiProductsResponse","Promise","all","fetch","ok","status","pending","approved","rejected","ownedApiProducts","Set","contentType","headers","get","post","message","display","severity","allRequests","json","items","apiProductsData","product","annotations","add","filter","r","phase","Progress","ResponseErrorPanel","formatDate","dateString","Date","toLocaleDateString","year","month","day","hour","minute","pendingColumns","title","field","render","row","Chip","label","Tooltip","placement","textOverflow","creationTimestamp","filtering","apiProductKey","ownsApiProduct","has","gap","CheckCircleIcon","CancelIcon","approvedColumns","reviewedAt","isAutomatic","rejectedColumns","tabData","addIds","data","item","id","isSelected","some","selected","tableData","checked","columns","showSelection","getTabData","groupedData","grouped","Map","forEach","key","push","groupByApiProduct","apiProductKeys","from","keys","sort","InfoCard","subheader","data-testid","Tabs","onChange","_","newValue","indicatorColor","textColor","Tab","alignItems","justifyContent","textAlign","displayName","ownsThisApiProduct","canSelectRows","Accordion","defaultExpanded","AccordionSummary","expandIcon","ExpandMoreIcon","marginRight","AccordionDetails","Table","options","selection","paging","pageSize","search","debounceInterval","showTextRowsSelected","toolbar","emptyRowsWhenPaging","onSelectionChange","rows","otherSelections","prev","endpoint","method","body","JSON","stringify","err","count","permission","resourceRef","permissionRequest","result","usePermission","canDeleteResource","ownerId","currentUserId","canDeleteOwn","canDeleteAll","root","padding","boxTitle","margin","palette","textSubtle","arrow","BottomLink","link","Divider","underline","m","A","LinkWrapper","LinkButton","SlackLink","slackChannel","t","ErrorBoundary","Component","constructor","super","errorInfo","componentDidCatch","setState","noPadding","paddingBottom","contentAlignBottom","header","headerTitle","typography","fontWeightBold","headerSubheader","paddingTop","headerAvatar","headerAction","headerContent","CardActionsTopRight","withStyles","float","CardActions","VARIANT_STYLES","card","flex","flexDirection","fullHeight","gridItem","marginBottom","breakInside","cardContent","divider","deepLink","errorBoundaryProps","alignContent","headerStyle","headerProps","icon","actionsClassName","actions","cardClassName","actionsTopRight","titleTypographyProps","subheaderTypographyProps","calculatedStyle","calculatedCardStyle","split","errProps","Card","CardHeader","avatar","content","CardContent"],"sourceRoot":""}
|