@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-0b744dd → 0.0.2-dev-9be93a3
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/api.esm.js +220 -0
- package/dist/api.esm.js.map +1 -0
- package/dist/apis.esm.js +15 -0
- package/dist/apis.esm.js.map +1 -0
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +27 -37
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
- package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPage.esm.js +10 -0
- package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPage.esm.js.map +1 -0
- package/dist/components/ApiKeyApprovalPage/index.esm.js +2 -0
- package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js +28 -40
- package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js.map +1 -1
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +20 -46
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +27 -35
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js +13 -3
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +5 -13
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
- package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js +7 -10
- package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js.map +1 -1
- package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js +34 -66
- package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js.map +1 -1
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +143 -58
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
- package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js +8 -18
- package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js.map +1 -1
- package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js +52 -30
- package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js.map +1 -1
- package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js +11 -27
- package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js.map +1 -1
- package/dist/components/KuadrantPage/ApiProductsPage.esm.js +71 -55
- package/dist/components/KuadrantPage/ApiProductsPage.esm.js.map +1 -1
- package/dist/components/MyApiKeysPage/MyApiKeysPage.esm.js +10 -0
- package/dist/components/MyApiKeysPage/MyApiKeysPage.esm.js.map +1 -0
- package/dist/components/MyApiKeysPage/index.esm.js +2 -0
- package/dist/components/MyApiKeysPage/index.esm.js.map +1 -0
- package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js +51 -57
- package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js.map +1 -1
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +10 -25
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -1
- package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js +206 -0
- package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js.map +1 -0
- package/dist/index.d.ts +461 -2
- package/dist/index.esm.js +3 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +11 -4
- package/dist/plugin.esm.js.map +1 -1
- package/dist/utils/styles.esm.js +44 -5
- package/dist/utils/styles.esm.js.map +1 -1
- package/dist-scalprum/internal.plugin-kuadrant.8bf02d5482a5a3ed6337.js +2 -0
- package/dist-scalprum/internal.plugin-kuadrant.8bf02d5482a5a3ed6337.js.map +1 -0
- package/dist-scalprum/plugin-manifest.json +3 -3
- package/dist-scalprum/static/2118.82433765.chunk.js +2 -0
- package/dist-scalprum/static/2118.82433765.chunk.js.map +1 -0
- package/dist-scalprum/static/2967.28e7c7f8.chunk.js +2 -0
- package/dist-scalprum/static/2967.28e7c7f8.chunk.js.map +1 -0
- package/dist-scalprum/static/369.2374941c.chunk.js +2 -0
- package/dist-scalprum/static/369.2374941c.chunk.js.map +1 -0
- package/dist-scalprum/static/3947.ff1c25cf.chunk.js +2 -0
- package/dist-scalprum/static/3947.ff1c25cf.chunk.js.map +1 -0
- package/dist-scalprum/static/3976.cf3ec7be.chunk.js +2 -0
- package/dist-scalprum/static/3976.cf3ec7be.chunk.js.map +1 -0
- package/dist-scalprum/static/4447.222bb58d.chunk.js +2 -0
- package/dist-scalprum/static/4447.222bb58d.chunk.js.map +1 -0
- package/dist-scalprum/static/5010.4ef96c87.chunk.js +3 -0
- package/dist-scalprum/static/5010.4ef96c87.chunk.js.map +1 -0
- package/dist-scalprum/static/5203.e92a3353.chunk.js +2 -0
- package/dist-scalprum/static/5203.e92a3353.chunk.js.map +1 -0
- package/dist-scalprum/static/6371.6ee1f11d.chunk.js +2 -0
- package/dist-scalprum/static/6371.6ee1f11d.chunk.js.map +1 -0
- package/dist-scalprum/static/6422.969d9b8c.chunk.js +2 -0
- package/dist-scalprum/static/6422.969d9b8c.chunk.js.map +1 -0
- package/dist-scalprum/static/6800.a7645f4c.chunk.js +2 -0
- package/dist-scalprum/static/6800.a7645f4c.chunk.js.map +1 -0
- package/dist-scalprum/static/69.1decc5e8.chunk.js +2 -0
- package/dist-scalprum/static/69.1decc5e8.chunk.js.map +1 -0
- package/dist-scalprum/static/7005.a9f73153.chunk.js +2 -0
- package/dist-scalprum/static/7005.a9f73153.chunk.js.map +1 -0
- package/dist-scalprum/static/7270.b0e185f1.chunk.js +2 -0
- package/dist-scalprum/static/7270.b0e185f1.chunk.js.map +1 -0
- package/dist-scalprum/static/7791.5c1eea8a.chunk.js +2 -0
- package/dist-scalprum/static/7791.5c1eea8a.chunk.js.map +1 -0
- package/dist-scalprum/static/{6763.d6cd937f.chunk.js → 8563.46f1a3e1.chunk.js} +3 -3
- package/dist-scalprum/static/8563.46f1a3e1.chunk.js.map +1 -0
- package/dist-scalprum/static/8789.84963cbc.chunk.js +2 -0
- package/dist-scalprum/static/8789.84963cbc.chunk.js.map +1 -0
- package/dist-scalprum/static/8804.63919453.chunk.js +2 -0
- package/dist-scalprum/static/8804.63919453.chunk.js.map +1 -0
- package/dist-scalprum/static/9051.db875198.chunk.js +2 -0
- package/dist-scalprum/static/9051.db875198.chunk.js.map +1 -0
- package/dist-scalprum/static/{2946.a35243f1.chunk.js → 9370.2e9fe34b.chunk.js} +3 -3
- package/dist-scalprum/static/9370.2e9fe34b.chunk.js.map +1 -0
- package/dist-scalprum/static/9838.5df9b1de.chunk.js +2 -0
- package/dist-scalprum/static/9838.5df9b1de.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.8a8dd91f.chunk.js +2 -0
- package/dist-scalprum/static/exposed-PluginRoot.8a8dd91f.chunk.js.map +1 -0
- package/package.json +3 -1
- package/dist/components/ApiKeysPage/ApiKeysPage.esm.js +0 -43
- package/dist/components/ApiKeysPage/ApiKeysPage.esm.js.map +0 -1
- package/dist/components/ApiKeysPage/index.esm.js +0 -2
- package/dist-scalprum/internal.plugin-kuadrant.114cbbe1d3ddb939d776.js +0 -2
- package/dist-scalprum/internal.plugin-kuadrant.114cbbe1d3ddb939d776.js.map +0 -1
- package/dist-scalprum/static/2821.0829f14d.chunk.js +0 -2
- package/dist-scalprum/static/2821.0829f14d.chunk.js.map +0 -1
- package/dist-scalprum/static/2946.a35243f1.chunk.js.map +0 -1
- package/dist-scalprum/static/2967.65c51af8.chunk.js +0 -2
- package/dist-scalprum/static/2967.65c51af8.chunk.js.map +0 -1
- package/dist-scalprum/static/3650.ee76eba9.chunk.js +0 -2
- package/dist-scalprum/static/3650.ee76eba9.chunk.js.map +0 -1
- package/dist-scalprum/static/3947.7458971d.chunk.js +0 -2
- package/dist-scalprum/static/3947.7458971d.chunk.js.map +0 -1
- package/dist-scalprum/static/3984.647ef00c.chunk.js +0 -2
- package/dist-scalprum/static/3984.647ef00c.chunk.js.map +0 -1
- package/dist-scalprum/static/4651.c85cecc4.chunk.js +0 -2
- package/dist-scalprum/static/4651.c85cecc4.chunk.js.map +0 -1
- package/dist-scalprum/static/4682.75f17114.chunk.js +0 -2
- package/dist-scalprum/static/4682.75f17114.chunk.js.map +0 -1
- package/dist-scalprum/static/5010.0cd6c959.chunk.js +0 -3
- package/dist-scalprum/static/5010.0cd6c959.chunk.js.map +0 -1
- package/dist-scalprum/static/5203.b654e8e0.chunk.js +0 -2
- package/dist-scalprum/static/5203.b654e8e0.chunk.js.map +0 -1
- package/dist-scalprum/static/5453.ecdee66d.chunk.js +0 -2
- package/dist-scalprum/static/5453.ecdee66d.chunk.js.map +0 -1
- package/dist-scalprum/static/6371.d45f37cc.chunk.js +0 -2
- package/dist-scalprum/static/6371.d45f37cc.chunk.js.map +0 -1
- package/dist-scalprum/static/6763.d6cd937f.chunk.js.map +0 -1
- package/dist-scalprum/static/6800.20f46859.chunk.js +0 -2
- package/dist-scalprum/static/6800.20f46859.chunk.js.map +0 -1
- package/dist-scalprum/static/6840.1653e6b0.chunk.js +0 -2
- package/dist-scalprum/static/6840.1653e6b0.chunk.js.map +0 -1
- package/dist-scalprum/static/7236.f3886d59.chunk.js +0 -2
- package/dist-scalprum/static/7236.f3886d59.chunk.js.map +0 -1
- package/dist-scalprum/static/7791.ac1ac509.chunk.js +0 -2
- package/dist-scalprum/static/7791.ac1ac509.chunk.js.map +0 -1
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js +0 -2
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js.map +0 -1
- package/dist-scalprum/static/8799.939d14f9.chunk.js +0 -2
- package/dist-scalprum/static/8799.939d14f9.chunk.js.map +0 -1
- package/dist-scalprum/static/exposed-PluginRoot.ed95fa78.chunk.js +0 -2
- package/dist-scalprum/static/exposed-PluginRoot.ed95fa78.chunk.js.map +0 -1
- /package/dist/components/{ApiKeysPage → ApiKeyApprovalPage}/index.esm.js.map +0 -0
- /package/dist-scalprum/static/{5010.0cd6c959.chunk.js.LICENSE.txt → 5010.4ef96c87.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6763.d6cd937f.chunk.js.LICENSE.txt → 8563.46f1a3e1.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2946.a35243f1.chunk.js.LICENSE.txt → 9370.2e9fe34b.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal.plugin-kuadrant.114cbbe1d3ddb939d776.js","mappings":"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WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,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","sources":["webpack://internal.plugin-kuadrant/webpack/runtime/create fake namespace object","webpack://internal.plugin-kuadrant/webpack/runtime/load script","webpack://internal.plugin-kuadrant/webpack/runtime/consumes","webpack://internal.plugin-kuadrant/webpack/container-entry","webpack://internal.plugin-kuadrant/webpack/bootstrap","webpack://internal.plugin-kuadrant/webpack/runtime/compat get default export","webpack://internal.plugin-kuadrant/webpack/runtime/define property getters","webpack://internal.plugin-kuadrant/webpack/runtime/ensure chunk","webpack://internal.plugin-kuadrant/webpack/runtime/get javascript chunk filename","webpack://internal.plugin-kuadrant/webpack/runtime/get mini-css chunk filename","webpack://internal.plugin-kuadrant/webpack/runtime/global","webpack://internal.plugin-kuadrant/webpack/runtime/hasOwnProperty shorthand","webpack://internal.plugin-kuadrant/webpack/runtime/make namespace object","webpack://internal.plugin-kuadrant/webpack/runtime/node module decorator","webpack://internal.plugin-kuadrant/webpack/runtime/sharing","webpack://internal.plugin-kuadrant/webpack/runtime/publicPath","webpack://internal.plugin-kuadrant/webpack/runtime/css loading","webpack://internal.plugin-kuadrant/webpack/runtime/jsonp chunk loading","webpack://internal.plugin-kuadrant/webpack/startup"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"internal.plugin-kuadrant:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var parseVersion = (str) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar p=p=>{return p.split(\".\").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;\n}\nvar versionLt = (a, b) => {\n\t// see webpack/lib/util/semver.js for original code\n\ta=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&\"u\"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return\"u\"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return\"o\"==n&&\"n\"==f||(\"s\"==f||\"u\"==n);if(\"o\"!=n&&\"u\"!=n&&e!=t)return e<t;r++}\n}\nvar rangeToString = (range) => {\n\t// see webpack/lib/util/semver.js for original code\n\tvar r=range[0],n=\"\";if(1===range.length)return\"*\";if(r+.5){n+=0==r?\">=\":-1==r?\"<\":1==r?\"^\":2==r?\"~\":r>0?\"=\":\"!=\";for(var e=1,a=1;a<range.length;a++){e--,n+=\"u\"==(typeof(t=range[a]))[0]?\"-\":(e>0?\".\":\"\")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?\"not(\"+o()+\")\":1===t?\"(\"+o()+\" || \"+o()+\")\":2===t?g.pop()+\" \"+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\\((.+)\\)$/,\"$1\")}\n}\nvar satisfy = (range, version) => {\n\t// see webpack/lib/util/semver.js for original code\n\tif(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:\"\";if(n>=version.length||\"o\"==(s=(typeof(f=version[n]))[0]))return!a||(\"u\"==g?i>e&&!r:\"\"==g!=r);if(\"u\"==s){if(!a||\"u\"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if(\"s\"!=g&&\"n\"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else\"s\"!=g&&\"n\"!=g&&(a=!1,i--)}}var t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();\n}\nvar exists = (scope, key) => {\n\treturn scope && __webpack_require__.o(scope, key);\n}\nvar get = (entry) => {\n\tentry.loaded = 1;\n\treturn entry.get()\n};\nvar eagerOnly = (versions) => {\n\treturn Object.keys(versions).reduce((filtered, version) => {\n\t\t\tif (versions[version].eager) {\n\t\t\t\tfiltered[version] = versions[version];\n\t\t\t}\n\t\t\treturn filtered;\n\t}, {});\n};\nvar findLatestVersion = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key];\n};\nvar findSatisfyingVersion = (scope, key, requiredVersion, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\tvar key = Object.keys(versions).reduce((a, b) => {\n\t\tif (!satisfy(requiredVersion, b)) return a;\n\t\treturn !a || versionLt(a, b) ? b : a;\n\t}, 0);\n\treturn key && versions[key]\n};\nvar findSingletonVersionKey = (scope, key, eager) => {\n\tvar versions = eager ? eagerOnly(scope[key]) : scope[key];\n\treturn Object.keys(versions).reduce((a, b) => {\n\t\treturn !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;\n\t}, 0);\n};\nvar getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => {\n\treturn \"Unsatisfied version \" + version + \" from \" + (version && scope[key][version].from) + \" of shared singleton module \" + key + \" (required \" + rangeToString(requiredVersion) + \")\"\n};\nvar getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => {\n\tvar versions = scope[key];\n\treturn \"No satisfying version (\" + rangeToString(requiredVersion) + \")\" + (eager ? \" for eager consumption\" : \"\") + \" of shared module \" + key + \" found in shared scope \" + scopeName + \".\\n\" +\n\t\t\"Available versions: \" + Object.keys(versions).map((key) => {\n\t\treturn key + \" from \" + versions[key].from;\n\t}).join(\", \");\n};\nvar fail = (msg) => {\n\tthrow new Error(msg);\n}\nvar failAsNotExist = (scopeName, key) => {\n\treturn fail(\"Shared module \" + key + \" doesn't exist in shared scope \" + scopeName);\n}\nvar warn = /*#__PURE__*/ (msg) => {\n\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n};\nvar init = (fn) => (function(scopeName, key, eager, c, d) {\n\tvar promise = __webpack_require__.I(scopeName);\n\tif (promise && promise.then && !eager) {\n\t\treturn promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d));\n\t}\n\treturn fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d);\n});\n\nvar useFallback = (scopeName, key, fallback) => {\n\treturn fallback ? fallback() : failAsNotExist(scopeName, key);\n}\nvar load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\twarn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))\n\treturn get(findLatestVersion(scope, key, eager));\n});\nvar loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);\n\tif (satisfyingVersion) return get(satisfyingVersion);\n\tif (fallback) return fallback();\n\tfail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));\n});\nvar loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\treturn get(scope[key][version]);\n});\nvar loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\twarn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {\n\tif (!exists(scope, key)) return useFallback(scopeName, key, fallback);\n\tvar version = findSingletonVersionKey(scope, key, eager);\n\tif (!satisfy(requiredVersion, version)) {\n\t\tfail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));\n\t}\n\treturn get(scope[key][version]);\n});\nvar installedModules = {};\nvar moduleToHandlerMapping = {\n\t22097: () => (loadSingletonVersion(\"default\", \"@backstage/core-plugin-api\", false, [0], () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(3504), __webpack_require__.e(5478), __webpack_require__.e(9634), __webpack_require__.e(5427), __webpack_require__.e(5501)]).then(() => (() => (__webpack_require__(23504))))))),\n\t95478: () => (loadSingletonVersion(\"default\", \"react\", false, [0], () => (__webpack_require__.e(4041).then(() => (() => (__webpack_require__(14041))))))),\n\t49634: () => (loadSingletonVersion(\"default\", \"react-router-dom\", false, [0], () => (Promise.all([__webpack_require__.e(501), __webpack_require__.e(484), __webpack_require__.e(9829)]).then(() => (() => (__webpack_require__(62882))))))),\n\t15427: () => (loadSingletonVersion(\"default\", \"@backstage/version-bridge\", false, [0], () => (__webpack_require__.e(441).then(() => (() => (__webpack_require__(12822))))))),\n\t75501: () => (loadSingletonVersion(\"default\", \"@backstage/frontend-plugin-api\", false, [0], () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(9316), __webpack_require__.e(9738), __webpack_require__.e(9634), __webpack_require__.e(5427)]).then(() => (() => (__webpack_require__(19738))))))),\n\t51723: () => (loadSingletonVersion(\"default\", \"@backstage/core-plugin-api\", false, [0], () => (__webpack_require__.e(4614).then(() => (() => (__webpack_require__(4614))))))),\n\t76322: () => (loadSingletonVersion(\"default\", \"@emotion/cache\", false, [0], () => (__webpack_require__.e(7164).then(() => (() => (__webpack_require__(67164))))))),\n\t11942: () => (loadSingletonVersion(\"default\", \"@material-ui/styles\", false, [0], () => (__webpack_require__.e(4570).then(() => (() => (__webpack_require__(94570))))))),\n\t40484: () => (loadSingletonVersion(\"default\", \"react-dom\", false, [0], () => (__webpack_require__.e(3144).then(() => (() => (__webpack_require__(43144))))))),\n\t79096: () => (loadSingletonVersion(\"default\", \"@mui/styled-engine\", false, [0], () => (Promise.all([__webpack_require__.e(2952), __webpack_require__.e(6322), __webpack_require__.e(5277)]).then(() => (() => (__webpack_require__(92952))))))),\n\t54994: () => (loadSingletonVersion(\"default\", \"@mui/system\", false, [0], () => (Promise.all([__webpack_require__.e(9710), __webpack_require__.e(2464)]).then(() => (() => (__webpack_require__(29710))))))),\n\t5277: () => (loadSingletonVersion(\"default\", \"@emotion/react\", false, [0], () => (__webpack_require__.e(6038).then(() => (() => (__webpack_require__(53657))))))),\n\t22464: () => (loadSingletonVersion(\"default\", \"@mui/private-theming\", false, [0], () => (__webpack_require__.e(4026).then(() => (() => (__webpack_require__(51645))))))),\n\t9829: () => (loadSingletonVersion(\"default\", \"react-router\", false, [0], () => (__webpack_require__.e(7367).then(() => (() => (__webpack_require__(97367))))))),\n\t37976: () => (loadSingletonVersion(\"default\", \"@material-ui/core/styles\", false, [0], () => (__webpack_require__.e(6872).then(() => (() => (__webpack_require__(64491)))))))\n};\n// no consumes in initial chunks\nvar chunkMapping = {\n\t\"484\": [\n\t\t40484\n\t],\n\t\"879\": [\n\t\t22097\n\t],\n\t\"1723\": [\n\t\t51723\n\t],\n\t\"1942\": [\n\t\t11942\n\t],\n\t\"2464\": [\n\t\t22464\n\t],\n\t\"4994\": [\n\t\t54994\n\t],\n\t\"5277\": [\n\t\t5277\n\t],\n\t\"5427\": [\n\t\t15427\n\t],\n\t\"5478\": [\n\t\t95478\n\t],\n\t\"5501\": [\n\t\t75501\n\t],\n\t\"6322\": [\n\t\t76322\n\t],\n\t\"7976\": [\n\t\t37976\n\t],\n\t\"9096\": [\n\t\t79096\n\t],\n\t\"9634\": [\n\t\t49634\n\t],\n\t\"9829\": [\n\t\t9829\n\t]\n};\nvar startedInstallModules = {};\n__webpack_require__.f.consumes = (chunkId, promises) => {\n\tif(__webpack_require__.o(chunkMapping, chunkId)) {\n\t\tchunkMapping[chunkId].forEach((id) => {\n\t\t\tif(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]);\n\t\t\tif(!startedInstallModules[id]) {\n\t\t\tvar onFactory = (factory) => {\n\t\t\t\tinstalledModules[id] = 0;\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tmodule.exports = factory();\n\t\t\t\t}\n\t\t\t};\n\t\t\tstartedInstallModules[id] = true;\n\t\t\tvar onError = (error) => {\n\t\t\t\tdelete installedModules[id];\n\t\t\t\t__webpack_require__.m[id] = (module) => {\n\t\t\t\t\tdelete __webpack_require__.c[id];\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tvar promise = moduleToHandlerMapping[id]();\n\t\t\t\tif(promise.then) {\n\t\t\t\t\tpromises.push(installedModules[id] = promise.then(onFactory)['catch'](onError));\n\t\t\t\t} else onFactory(promise);\n\t\t\t} catch(e) { onError(e); }\n\t\t\t}\n\t\t});\n\t}\n}","var moduleMap = {\n\t\"PluginRoot\": () => {\n\t\treturn __webpack_require__.e(/* exposed-PluginRoot */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t},\n\t\"KuadrantPage\": () => {\n\t\treturn __webpack_require__.e(/* exposed-KuadrantPage */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t},\n\t\"EntityKuadrantApiAccessCard\": () => {\n\t\treturn __webpack_require__.e(/* exposed-EntityKuadrantApiAccessCard */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t},\n\t\"EntityKuadrantApiKeyManagementTab\": () => {\n\t\treturn __webpack_require__.e(/* exposed-EntityKuadrantApiKeyManagementTab */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t},\n\t\"EntityKuadrantApiKeysContent\": () => {\n\t\treturn __webpack_require__.e(/* exposed-EntityKuadrantApiKeysContent */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t},\n\t\"EntityKuadrantApiProductInfoContent\": () => {\n\t\treturn __webpack_require__.e(/* exposed-EntityKuadrantApiProductInfoContent */ 879).then(() => (() => ((__webpack_require__(72627)))));\n\t}\n};\nvar get = (module, getScope) => {\n\t__webpack_require__.R = getScope;\n\tgetScope = (\n\t\t__webpack_require__.o(moduleMap, module)\n\t\t\t? moduleMap[module]()\n\t\t\t: Promise.resolve().then(() => {\n\t\t\t\tthrow new Error('Module \"' + module + '\" does not exist in container.');\n\t\t\t})\n\t);\n\t__webpack_require__.R = undefined;\n\treturn getScope;\n};\nvar init = (shareScope, initScope) => {\n\tif (!__webpack_require__.S) return;\n\tvar name = \"default\"\n\tvar oldScope = __webpack_require__.S[name];\n\tif(oldScope && oldScope !== shareScope) throw new Error(\"Container initialization failed as it has already been initialized with a different share scope\");\n\t__webpack_require__.S[name] = shareScope;\n\treturn __webpack_require__.I(name, initScope);\n};\n\n// This exports getters to disallow modifications\n__webpack_require__.d(exports, {\n\tget: () => (get),\n\tinit: () => (init)\n});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/\" + ({\"51\":\"react-syntax-highlighter_languages_highlight_prolog\",\"200\":\"react-syntax-highlighter_languages_highlight_mel\",\"206\":\"react-syntax-highlighter_languages_highlight_gml\",\"371\":\"react-syntax-highlighter_languages_highlight_excel\",\"456\":\"react-syntax-highlighter_languages_highlight_roboconf\",\"460\":\"react-syntax-highlighter_languages_highlight_avrasm\",\"464\":\"react-syntax-highlighter_languages_highlight_shell\",\"557\":\"react-syntax-highlighter_languages_highlight_oneC\",\"579\":\"react-syntax-highlighter_languages_highlight_vbnet\",\"634\":\"react-syntax-highlighter_languages_highlight_scilab\",\"879\":\"exposed-PluginRoot\",\"927\":\"react-syntax-highlighter_languages_highlight_javascript\",\"946\":\"react-syntax-highlighter_languages_highlight_clojure\",\"985\":\"react-syntax-highlighter_languages_highlight_monkey\",\"1062\":\"react-syntax-highlighter_languages_highlight_nim\",\"1084\":\"react-syntax-highlighter_languages_highlight_aspectj\",\"1099\":\"react-syntax-highlighter_languages_highlight_ebnf\",\"1173\":\"react-syntax-highlighter_languages_highlight_autohotkey\",\"1177\":\"react-syntax-highlighter_languages_highlight_profile\",\"1214\":\"react-syntax-highlighter_languages_highlight_properties\",\"1276\":\"react-syntax-highlighter_languages_highlight_phpTemplate\",\"1325\":\"react-syntax-highlighter_languages_highlight_actionscript\",\"1352\":\"react-syntax-highlighter_languages_highlight_fortran\",\"1362\":\"react-syntax-highlighter_languages_highlight_mathematica\",\"1418\":\"react-syntax-highlighter_languages_highlight_pony\",\"1441\":\"react-syntax-highlighter_languages_highlight_coq\",\"1461\":\"react-syntax-highlighter_languages_highlight_livescript\",\"1489\":\"react-syntax-highlighter_languages_highlight_reasonml\",\"1496\":\"react-syntax-highlighter_languages_highlight_lua\",\"1522\":\"react-syntax-highlighter_languages_highlight_dust\",\"1679\":\"react-syntax-highlighter_languages_highlight_scheme\",\"1694\":\"react-syntax-highlighter_languages_highlight_accesslog\",\"1727\":\"react-syntax-highlighter_languages_highlight_oxygene\",\"1750\":\"react-syntax-highlighter_languages_highlight_makefile\",\"1828\":\"react-syntax-highlighter_languages_highlight_dockerfile\",\"1895\":\"react-syntax-highlighter_languages_highlight_pythonRepl\",\"1956\":\"react-syntax-highlighter_languages_highlight_puppet\",\"1961\":\"react-syntax-highlighter_languages_highlight_stan\",\"1972\":\"react-syntax-highlighter_languages_highlight_fsharp\",\"2007\":\"react-syntax-highlighter_languages_highlight_css\",\"2064\":\"react-syntax-highlighter_languages_highlight_vhdl\",\"2108\":\"react-syntax-highlighter_languages_highlight_cLike\",\"2180\":\"react-syntax-highlighter_languages_highlight_sqf\",\"2234\":\"react-syntax-highlighter_languages_highlight_lisp\",\"2267\":\"react-syntax-highlighter_languages_highlight_maxima\",\"2346\":\"react-syntax-highlighter_languages_highlight_d\",\"2362\":\"react-syntax-highlighter_languages_highlight_xquery\",\"2378\":\"react-syntax-highlighter_languages_highlight_parser3\",\"2383\":\"react-syntax-highlighter_languages_highlight_crmsh\",\"2438\":\"react-syntax-highlighter_languages_highlight_haxe\",\"2488\":\"react-syntax-highlighter_languages_highlight_verilog\",\"2496\":\"react-syntax-highlighter_languages_highlight_erlangRepl\",\"2512\":\"react-syntax-highlighter_languages_highlight_stylus\",\"2516\":\"react-syntax-highlighter_languages_highlight_apache\",\"2665\":\"react-syntax-highlighter_languages_highlight_powershell\",\"2693\":\"react-syntax-highlighter_languages_highlight_tap\",\"2727\":\"react-syntax-highlighter_languages_highlight_q\",\"2743\":\"react-syntax-highlighter_languages_highlight_asciidoc\",\"2762\":\"react-syntax-highlighter_languages_highlight_haskell\",\"2795\":\"react-syntax-highlighter_languages_highlight_dns\",\"2871\":\"react-syntax-highlighter_languages_highlight_typescript\",\"2882\":\"react-syntax-highlighter_languages_highlight_sml\",\"2979\":\"react-syntax-highlighter_languages_highlight_plaintext\",\"2981\":\"react-syntax-highlighter_languages_highlight_ruleslanguage\",\"2983\":\"react-syntax-highlighter_languages_highlight_golo\",\"3146\":\"react-syntax-highlighter_languages_highlight_purebasic\",\"3193\":\"react-syntax-highlighter_languages_highlight_xml\",\"3299\":\"react-syntax-highlighter_languages_highlight_fix\",\"3357\":\"react-syntax-highlighter_languages_highlight_x86asm\",\"3384\":\"react-syntax-highlighter_languages_highlight_ini\",\"3418\":\"react-syntax-highlighter_languages_highlight_ruby\",\"3419\":\"react-syntax-highlighter_languages_highlight_nix\",\"3487\":\"react-syntax-highlighter_languages_highlight_mipsasm\",\"3500\":\"react-syntax-highlighter_languages_highlight_autoit\",\"3540\":\"react-syntax-highlighter_languages_highlight_moonscript\",\"3562\":\"react-syntax-highlighter_languages_highlight_gams\",\"3580\":\"react-syntax-highlighter_languages_highlight_csp\",\"3607\":\"react-syntax-highlighter_languages_highlight_abnf\",\"3623\":\"react-syntax-highlighter_languages_highlight_yaml\",\"3722\":\"react-syntax-highlighter_languages_highlight_latex\",\"3736\":\"react-syntax-highlighter_languages_highlight_json\",\"3811\":\"react-syntax-highlighter_languages_highlight_erb\",\"3885\":\"react-syntax-highlighter_languages_highlight_stata\",\"3923\":\"react-syntax-highlighter_languages_highlight_applescript\",\"3988\":\"react-syntax-highlighter_languages_highlight_vala\",\"4014\":\"react-syntax-highlighter_languages_highlight_scss\",\"4075\":\"react-syntax-highlighter_languages_highlight_hsp\",\"4110\":\"react-syntax-highlighter_languages_highlight_tp\",\"4135\":\"react-syntax-highlighter_languages_highlight_mizar\",\"4282\":\"react-syntax-highlighter_languages_highlight_livecodeserver\",\"4300\":\"react-syntax-highlighter_languages_highlight_r\",\"4342\":\"react-syntax-highlighter_languages_highlight_php\",\"4383\":\"react-syntax-highlighter_languages_highlight_dsconfig\",\"4436\":\"react-syntax-highlighter_languages_highlight_zephir\",\"4446\":\"react-syntax-highlighter_languages_highlight_leaf\",\"4493\":\"react-syntax-highlighter_languages_highlight_gauss\",\"4575\":\"react-syntax-highlighter_languages_highlight_processing\",\"4635\":\"react-syntax-highlighter_languages_highlight_jbossCli\",\"4733\":\"react-syntax-highlighter_languages_highlight_llvm\",\"4835\":\"react-syntax-highlighter_languages_highlight_cos\",\"4931\":\"react-syntax-highlighter_languages_highlight_step21\",\"4956\":\"react-syntax-highlighter_languages_highlight_angelscript\",\"4971\":\"react-syntax-highlighter_languages_highlight_lsl\",\"5034\":\"react-syntax-highlighter_languages_highlight_ada\",\"5051\":\"react-syntax-highlighter_languages_highlight_coffeescript\",\"5099\":\"react-syntax-highlighter_languages_highlight_nsis\",\"5123\":\"react-syntax-highlighter_languages_highlight_erlang\",\"5189\":\"react-syntax-highlighter_languages_highlight_dts\",\"5251\":\"react-syntax-highlighter_languages_highlight_pgsql\",\"5253\":\"react-syntax-highlighter_languages_highlight_clojureRepl\",\"5286\":\"react-syntax-highlighter_languages_highlight_nginx\",\"5446\":\"react-syntax-highlighter_languages_highlight_ocaml\",\"5565\":\"react-syntax-highlighter_languages_highlight_kotlin\",\"5613\":\"react-syntax-highlighter_languages_highlight_rib\",\"5664\":\"react-syntax-highlighter_languages_highlight_dos\",\"5773\":\"react-syntax-highlighter_languages_highlight_mojolicious\",\"5813\":\"react-syntax-highlighter_languages_highlight_less\",\"5819\":\"react-syntax-highlighter_languages_highlight_gradle\",\"5868\":\"react-syntax-highlighter_languages_highlight_inform7\",\"5900\":\"react-syntax-highlighter_languages_highlight_lasso\",\"6057\":\"react-syntax-highlighter_languages_highlight_sqlMore\",\"6152\":\"react-syntax-highlighter_languages_highlight_vbscriptHtml\",\"6161\":\"react-syntax-highlighter_languages_highlight_clean\",\"6177\":\"react-syntax-highlighter_languages_highlight_taggerscript\",\"6195\":\"react-syntax-highlighter_languages_highlight_ldif\",\"6228\":\"react-syntax-highlighter_languages_highlight_rust\",\"6267\":\"react-syntax-highlighter_languages_highlight_swift\",\"6354\":\"react-syntax-highlighter_languages_highlight_java\",\"6501\":\"react-syntax-highlighter_languages_highlight_armasm\",\"6512\":\"react-syntax-highlighter_languages_highlight_scala\",\"6542\":\"react-syntax-highlighter_languages_highlight_vim\",\"6555\":\"react-syntax-highlighter_languages_highlight_openscad\",\"6573\":\"react-syntax-highlighter_languages_highlight_cpp\",\"6780\":\"react-syntax-highlighter_languages_highlight_qml\",\"6835\":\"react-syntax-highlighter_languages_highlight_brainfuck\",\"6848\":\"react-syntax-highlighter_languages_highlight_crystal\",\"6924\":\"react-syntax-highlighter_languages_highlight_isbl\",\"6977\":\"react-syntax-highlighter_languages_highlight_rsl\",\"6986\":\"react-syntax-highlighter_languages_highlight_capnproto\",\"7048\":\"react-syntax-highlighter_languages_highlight_gherkin\",\"7079\":\"react-syntax-highlighter_languages_highlight_diff\",\"7131\":\"react-syntax-highlighter_languages_highlight_protobuf\",\"7209\":\"react-syntax-highlighter_languages_highlight_perl\",\"7247\":\"react-syntax-highlighter_languages_highlight_cmake\",\"7254\":\"react-syntax-highlighter_languages_highlight_subunit\",\"7351\":\"react-syntax-highlighter_languages_highlight_elixir\",\"7401\":\"react-syntax-highlighter_languages_highlight_sas\",\"7406\":\"react-syntax-highlighter_languages_highlight_sql\",\"7439\":\"react-syntax-highlighter_languages_highlight_flix\",\"7533\":\"react-syntax-highlighter_languages_highlight_awk\",\"7572\":\"react-syntax-highlighter_languages_highlight_basic\",\"7764\":\"react-syntax-highlighter_languages_highlight_go\",\"7776\":\"react-syntax-highlighter_languages_highlight_haml\",\"7794\":\"react-syntax-highlighter_languages_highlight_http\",\"7818\":\"react-syntax-highlighter_languages_highlight_arduino\",\"7879\":\"react-syntax-highlighter_languages_highlight_csharp\",\"7934\":\"react-syntax-highlighter_languages_highlight_glsl\",\"7959\":\"react-syntax-highlighter_languages_highlight_htmlbars\",\"8001\":\"react-syntax-highlighter_languages_highlight_matlab\",\"8030\":\"react-syntax-highlighter_languages_highlight_handlebars\",\"8058\":\"react-syntax-highlighter_languages_highlight_n1ql\",\"8078\":\"react-syntax-highlighter_languages_highlight_delphi\",\"8138\":\"react-syntax-highlighter_languages_highlight_elm\",\"8140\":\"react-syntax-highlighter_languages_highlight_pf\",\"8216\":\"react-syntax-highlighter_languages_highlight_bnf\",\"8217\":\"react-syntax-highlighter_languages_highlight_twig\",\"8331\":\"react-syntax-highlighter_languages_highlight_thrift\",\"8338\":\"react-syntax-highlighter_languages_highlight_objectivec\",\"8549\":\"react-syntax-highlighter_languages_highlight_c\",\"8595\":\"react-syntax-highlighter_languages_highlight_hy\",\"8705\":\"react-syntax-highlighter_languages_highlight_nodeRepl\",\"8725\":\"react-syntax-highlighter_languages_highlight_smalltalk\",\"8727\":\"react-syntax-highlighter/lowlight-import\",\"8753\":\"react-syntax-highlighter_languages_highlight_mercury\",\"8755\":\"react-syntax-highlighter_languages_highlight_tcl\",\"8763\":\"react-syntax-highlighter_languages_highlight_routeros\",\"8833\":\"react-syntax-highlighter_languages_highlight_markdown\",\"8874\":\"react-syntax-highlighter_languages_highlight_smali\",\"8903\":\"react-syntax-highlighter_languages_highlight_axapta\",\"8904\":\"react-syntax-highlighter_languages_highlight_python\",\"8948\":\"react-syntax-highlighter_languages_highlight_groovy\",\"9078\":\"react-syntax-highlighter_languages_highlight_irpf90\",\"9118\":\"react-syntax-highlighter_languages_highlight_juliaRepl\",\"9139\":\"react-syntax-highlighter_languages_highlight_django\",\"9162\":\"react-syntax-highlighter_languages_highlight_ceylon\",\"9175\":\"react-syntax-highlighter_languages_highlight_vbscript\",\"9229\":\"react-syntax-highlighter_languages_highlight_julia\",\"9265\":\"react-syntax-highlighter_languages_highlight_dart\",\"9406\":\"react-syntax-highlighter_languages_highlight_cal\",\"9612\":\"react-syntax-highlighter_languages_highlight_bash\",\"9702\":\"react-syntax-highlighter_languages_highlight_gcode\",\"9726\":\"react-syntax-highlighter_languages_highlight_xl\",\"9882\":\"react-syntax-highlighter_languages_highlight_arcade\"}[chunkId] || chunkId) + \".\" + {\"51\":\"be0fdf0c\",\"200\":\"5251fe1a\",\"206\":\"2347c999\",\"327\":\"a9a99299\",\"371\":\"2f5c76b9\",\"441\":\"f708f1e0\",\"456\":\"47518214\",\"460\":\"6381890e\",\"464\":\"9bbc16eb\",\"501\":\"87de76da\",\"557\":\"362a3b0a\",\"579\":\"21c190ed\",\"634\":\"bb9cc730\",\"635\":\"e030b18a\",\"879\":\"ed95fa78\",\"927\":\"b0ad82d3\",\"946\":\"e3fcc98c\",\"985\":\"5f60f06d\",\"1062\":\"17afaed1\",\"1084\":\"35f221e8\",\"1085\":\"d17e689a\",\"1099\":\"a34b6944\",\"1173\":\"614c5248\",\"1177\":\"615fa721\",\"1214\":\"60f97895\",\"1276\":\"2bd36dc7\",\"1325\":\"78db0238\",\"1352\":\"38ec3d00\",\"1362\":\"d8631b37\",\"1418\":\"1961f69f\",\"1441\":\"6b156852\",\"1461\":\"3ece3068\",\"1489\":\"a5a73a29\",\"1496\":\"52f73c98\",\"1522\":\"b30d0c38\",\"1645\":\"db086648\",\"1679\":\"508b5846\",\"1694\":\"bd112f1a\",\"1727\":\"ea742315\",\"1750\":\"cad796c9\",\"1828\":\"2c5fdf55\",\"1895\":\"feb72aed\",\"1956\":\"ee3f80da\",\"1961\":\"17155e77\",\"1972\":\"2ba37c00\",\"2007\":\"2cc312ae\",\"2064\":\"dea9db6c\",\"2108\":\"f884fdc0\",\"2180\":\"43421810\",\"2233\":\"bf0c10d7\",\"2234\":\"1cb2f675\",\"2267\":\"f1f17544\",\"2346\":\"bf4f2b44\",\"2362\":\"353780d4\",\"2378\":\"706a4bd6\",\"2383\":\"58c4cb07\",\"2438\":\"e2543cc2\",\"2488\":\"e32adbeb\",\"2496\":\"0d7f4890\",\"2512\":\"cde06cf5\",\"2516\":\"aa86d495\",\"2628\":\"20156dc1\",\"2665\":\"7bd31b3a\",\"2693\":\"402e473f\",\"2727\":\"989943de\",\"2743\":\"4b40a3f9\",\"2762\":\"bbd3c104\",\"2795\":\"6d79126a\",\"2821\":\"0829f14d\",\"2822\":\"27a4ac5b\",\"2871\":\"cf576f17\",\"2882\":\"0e45c1cf\",\"2946\":\"a35243f1\",\"2952\":\"b3c7e41c\",\"2967\":\"65c51af8\",\"2979\":\"25f8d292\",\"2981\":\"038504d0\",\"2983\":\"eaa5e2bf\",\"3007\":\"bffc9924\",\"3144\":\"6f99ccee\",\"3146\":\"08443005\",\"3193\":\"ee14d6a4\",\"3299\":\"5ee62733\",\"3357\":\"217c56f0\",\"3384\":\"d9d4ed7e\",\"3418\":\"d84064e5\",\"3419\":\"245f31b6\",\"3487\":\"f5bc5b04\",\"3500\":\"a06c1c62\",\"3504\":\"1c2f2e54\",\"3540\":\"443301b3\",\"3562\":\"a45eb030\",\"3580\":\"7fc6f9a3\",\"3607\":\"bb6a8626\",\"3623\":\"2aae489e\",\"3650\":\"ee76eba9\",\"3657\":\"882640ca\",\"3722\":\"b4bb9102\",\"3736\":\"d934b52b\",\"3811\":\"4ac917b8\",\"3885\":\"fe81a7fc\",\"3923\":\"ddf703d6\",\"3947\":\"7458971d\",\"3954\":\"12dd8006\",\"3984\":\"647ef00c\",\"3988\":\"843d9bc4\",\"4014\":\"bec19089\",\"4026\":\"d652a7a1\",\"4041\":\"29923ad9\",\"4075\":\"5d714528\",\"4093\":\"ee6f0452\",\"4110\":\"0f4ff415\",\"4135\":\"9b39cf3b\",\"4282\":\"f624f22d\",\"4300\":\"8540ccea\",\"4342\":\"ade4c6c4\",\"4382\":\"a7363415\",\"4383\":\"c3457b50\",\"4436\":\"fc94a148\",\"4446\":\"92519810\",\"4491\":\"83052809\",\"4493\":\"cceeafb0\",\"4570\":\"8b9f98d7\",\"4575\":\"8d1f48c5\",\"4611\":\"0d064cdf\",\"4614\":\"23f2a85b\",\"4635\":\"1ff533ef\",\"4651\":\"c85cecc4\",\"4682\":\"75f17114\",\"4733\":\"f32d41e6\",\"4835\":\"78d69dee\",\"4931\":\"a431b2db\",\"4935\":\"e14465ff\",\"4956\":\"f9816c44\",\"4971\":\"b6519e02\",\"5010\":\"0cd6c959\",\"5034\":\"b0d90871\",\"5051\":\"3bc87b5b\",\"5099\":\"4934a8e8\",\"5123\":\"501777c7\",\"5189\":\"8fd3703c\",\"5203\":\"b654e8e0\",\"5235\":\"2a59dc45\",\"5251\":\"5b0d21b9\",\"5253\":\"e6dbc3b4\",\"5286\":\"630147e0\",\"5446\":\"0e42541e\",\"5453\":\"ecdee66d\",\"5565\":\"c5eaa6f5\",\"5613\":\"dc8afdf1\",\"5664\":\"1ede6e37\",\"5773\":\"0cf721ff\",\"5813\":\"cc574d49\",\"5819\":\"72fdf84d\",\"5868\":\"78be038f\",\"5900\":\"8d4054e7\",\"6038\":\"63d1f832\",\"6057\":\"d69b1825\",\"6152\":\"42eb54af\",\"6161\":\"97b48014\",\"6177\":\"695a2547\",\"6195\":\"74045e43\",\"6228\":\"7e26e901\",\"6267\":\"7d33a4a9\",\"6354\":\"e04d1c07\",\"6371\":\"d45f37cc\",\"6501\":\"4bfb8996\",\"6512\":\"a4629d0a\",\"6542\":\"e82f126f\",\"6555\":\"4a460eaf\",\"6573\":\"ff6a8f78\",\"6763\":\"d6cd937f\",\"6780\":\"8f3a0af6\",\"6800\":\"20f46859\",\"6835\":\"31bde7c5\",\"6840\":\"1653e6b0\",\"6848\":\"3a36e63f\",\"6872\":\"7ef4ed23\",\"6924\":\"abe269c1\",\"6977\":\"909f2a27\",\"6986\":\"79dfc31f\",\"7048\":\"e740620a\",\"7076\":\"8745d395\",\"7079\":\"a8373241\",\"7131\":\"0cd375bc\",\"7164\":\"5dc4bc72\",\"7209\":\"ae8475a2\",\"7236\":\"f3886d59\",\"7247\":\"cb9028b5\",\"7254\":\"c5ac3a0a\",\"7351\":\"1e79c9b9\",\"7367\":\"62c9669e\",\"7401\":\"94075d6a\",\"7406\":\"651dcc8d\",\"7439\":\"972cc801\",\"7533\":\"dfc9b0b0\",\"7572\":\"ec232b8a\",\"7764\":\"abc0a144\",\"7776\":\"d698757b\",\"7791\":\"ac1ac509\",\"7794\":\"a55e168b\",\"7818\":\"9b9ce313\",\"7879\":\"ea98c6fb\",\"7934\":\"bb5b0086\",\"7959\":\"e57e3c89\",\"8001\":\"114e44eb\",\"8030\":\"75c0a89b\",\"8058\":\"c54b2c4a\",\"8078\":\"588e191d\",\"8083\":\"4763f88b\",\"8138\":\"8a488b19\",\"8140\":\"5052a768\",\"8172\":\"cbe1f2c4\",\"8216\":\"84e0a497\",\"8217\":\"5cb0fdfc\",\"8331\":\"ecb04f2a\",\"8338\":\"2d204375\",\"8549\":\"b43ce116\",\"8595\":\"c60db034\",\"8705\":\"5b05cdf2\",\"8725\":\"53da57ca\",\"8727\":\"2bd53873\",\"8753\":\"fa8fdac0\",\"8755\":\"79af288c\",\"8763\":\"c0bcd6ce\",\"8799\":\"939d14f9\",\"8833\":\"1489792c\",\"8874\":\"4fa5afdd\",\"8903\":\"80d14346\",\"8904\":\"9e4100ae\",\"8948\":\"ecd68b19\",\"9078\":\"25afcc29\",\"9118\":\"e3bfcde8\",\"9139\":\"8fb85401\",\"9162\":\"ab3b1c28\",\"9175\":\"4703f4c5\",\"9229\":\"f43a39d0\",\"9265\":\"0a0b12af\",\"9316\":\"d9f2fe18\",\"9400\":\"df4a7fb5\",\"9406\":\"781cc6c6\",\"9612\":\"53f7c730\",\"9655\":\"db0c82b2\",\"9702\":\"378d3296\",\"9710\":\"7ec34777\",\"9726\":\"7cff3cbb\",\"9738\":\"b037daf3\",\"9882\":\"70910623\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/\" + chunkId + \".\" + chunkId + \".\" + \"3597955d\" + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = (name, initScope) => {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = (msg) => {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"internal.plugin-kuadrant\";\n\tvar register = (name, version, factory, eager) => {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = (id) => {\n\t\tvar handleError = (err) => (warn(\"Initialization of sharing external failed: \" + err));\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t\tcase \"default\": {\n\t\t\tregister(\"@backstage/core-plugin-api\", \"1.11.0\", () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(5478), __webpack_require__.e(9634), __webpack_require__.e(5427), __webpack_require__.e(2233)]).then(() => (() => (__webpack_require__(4614))))));\n\t\t\tregister(\"@backstage/core-plugin-api\", \"1.12.1\", () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(3504), __webpack_require__.e(5478), __webpack_require__.e(9634), __webpack_require__.e(5427), __webpack_require__.e(5501)]).then(() => (() => (__webpack_require__(23504))))));\n\t\t\tregister(\"@backstage/frontend-plugin-api\", \"0.12.0\", () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(9316), __webpack_require__.e(4935), __webpack_require__.e(5478), __webpack_require__.e(9634), __webpack_require__.e(5427), __webpack_require__.e(1723)]).then(() => (() => (__webpack_require__(64935))))));\n\t\t\tregister(\"@backstage/frontend-plugin-api\", \"0.13.3\", () => (Promise.all([__webpack_require__.e(9655), __webpack_require__.e(9316), __webpack_require__.e(9738), __webpack_require__.e(5478), __webpack_require__.e(9634), __webpack_require__.e(5427), __webpack_require__.e(5501), __webpack_require__.e(1085)]).then(() => (() => (__webpack_require__(19738))))));\n\t\t\tregister(\"@backstage/version-bridge\", \"1.0.11\", () => (Promise.all([__webpack_require__.e(5478), __webpack_require__.e(2822)]).then(() => (() => (__webpack_require__(12822))))));\n\t\t\tregister(\"@emotion/cache\", \"11.14.0\", () => (__webpack_require__.e(7164).then(() => (() => (__webpack_require__(67164))))));\n\t\t\tregister(\"@emotion/react\", \"11.14.0\", () => (Promise.all([__webpack_require__.e(5478), __webpack_require__.e(6322), __webpack_require__.e(3657)]).then(() => (() => (__webpack_require__(53657))))));\n\t\t\tregister(\"@material-ui/core/styles\", \"4.12.4\", () => (Promise.all([__webpack_require__.e(9400), __webpack_require__.e(5478), __webpack_require__.e(1942), __webpack_require__.e(4491)]).then(() => (() => (__webpack_require__(64491))))));\n\t\t\tregister(\"@material-ui/styles\", \"4.11.5\", () => (Promise.all([__webpack_require__.e(4570), __webpack_require__.e(5478), __webpack_require__.e(3007)]).then(() => (() => (__webpack_require__(94570))))));\n\t\t\tregister(\"@mui/material\", \"5.18.0\", () => (Promise.all([__webpack_require__.e(3954), __webpack_require__.e(8083), __webpack_require__.e(5478), __webpack_require__.e(484), __webpack_require__.e(9096), __webpack_require__.e(4994)]).then(() => (() => (__webpack_require__(10464))))));\n\t\t\tregister(\"@mui/private-theming\", \"5.17.1\", () => (Promise.all([__webpack_require__.e(5478), __webpack_require__.e(1645)]).then(() => (() => (__webpack_require__(51645))))));\n\t\t\tregister(\"@mui/styled-engine\", \"5.18.0\", () => (Promise.all([__webpack_require__.e(2952), __webpack_require__.e(5478), __webpack_require__.e(6322), __webpack_require__.e(5277), __webpack_require__.e(635)]).then(() => (() => (__webpack_require__(92952))))));\n\t\t\tregister(\"@mui/system\", \"5.18.0\", () => (Promise.all([__webpack_require__.e(9710), __webpack_require__.e(3954), __webpack_require__.e(5478), __webpack_require__.e(9096), __webpack_require__.e(2464)]).then(() => (() => (__webpack_require__(29710))))));\n\t\t\tregister(\"react-dom\", \"18.3.1\", () => (Promise.all([__webpack_require__.e(3144), __webpack_require__.e(5478)]).then(() => (() => (__webpack_require__(43144))))));\n\t\t\tregister(\"react-router-dom\", \"6.30.3\", () => (Promise.all([__webpack_require__.e(501), __webpack_require__.e(5478), __webpack_require__.e(484), __webpack_require__.e(9829)]).then(() => (() => (__webpack_require__(62882))))));\n\t\t\tregister(\"react-router\", \"6.30.3\", () => (Promise.all([__webpack_require__.e(7367), __webpack_require__.e(5478)]).then(() => (() => (__webpack_require__(97367))))));\n\t\t\tregister(\"react\", \"18.3.1\", () => (__webpack_require__.e(4041).then(() => (() => (__webpack_require__(14041))))));\n\t\t}\n\t\tbreak;\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\t(function insertBeforeJssStyles(element) {\n\t const head = document.head;\n\t const firstJssNode = head.querySelector(\"style[data-jss]\");\n\t if (!firstJssNode) {\n\t head.appendChild(element);\n\t } else {\n\t head.insertBefore(element, firstJssNode);\n\t }\n\t })(linkTag)\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2310: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"4093\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2310: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(5(277|427|478|501)|9(096|634|829)|(246|48|499)4|1723|1942|6322|7976)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkinternal_plugin_kuadrant\"] = self[\"webpackChunkinternal_plugin_kuadrant\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(63198);\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","parseVersion","versionLt","rangeToString","satisfy","exists","get","eagerOnly","findSingletonVersionKey","getInvalidSingletonVersionMessage","fail","warn","useFallback","loadSingletonVersion","installedModules","moduleToHandlerMapping","chunkMapping","startedInstallModules","moduleMap","__webpack_require__","e","then","module","getScope","R","o","Promise","resolve","Error","undefined","init","shareScope","initScope","S","name","oldScope","I","d","exports","__webpack_module_cache__","moduleId","cachedModule","id","loaded","__webpack_modules__","call","m","c","n","getter","__esModule","a","Object","getPrototypeOf","obj","t","value","mode","this","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","definition","defineProperty","enumerable","f","chunkId","all","keys","reduce","promises","u","miniCssF","g","globalThis","Function","window","prop","prototype","hasOwnProperty","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","children","initPromises","initTokens","initToken","scope","uniqueName","register","version","factory","eager","versions","activeVersion","from","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","replace","p","str","split","map","exec","apply","b","range","pop","entry","filtered","requiredVersion","msg","console","scopeName","fallback","failAsNotExist","promise","consumes","onFactory","onError","error","installedCssChunks","miniCss","reject","href","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","err","code","request","element","firstJssNode","querySelector","insertBefore","createStylesheet","loadStylesheet","installedChunks","j","installedChunkData","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[2821],{12229:(e,t,a)=>{a.d(t,{Z:()=>A});var s=a(31085),n=a(95478),i=a.n(n),l=a(10394),r=a(72501),o=a(64947),c=a(37197),d=a(69621),u=a(12981),p=a(86901),m=a(69076),h=a(58837),g=a(6924),x=a(23164);const v=(0,h.A)(e=>({root:{width:240,minWidth:240,padding:e.spacing(2),borderRight:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,height:"100%",overflowY:"auto"},sectionTitle:{fontWeight:600,fontSize:"0.75rem",textTransform:"uppercase",letterSpacing:"0.05em",color:e.palette.text.secondary,marginBottom:e.spacing(1),display:"flex",alignItems:"center",justifyContent:"space-between",cursor:"pointer",userSelect:"none"},filterSection:{marginBottom:e.spacing(2)},checkbox:{padding:e.spacing(.5)},checkboxLabel:{fontSize:"0.875rem"},clearButton:{marginTop:e.spacing(2)},count:{fontSize:"0.75rem",color:e.palette.text.secondary,marginLeft:e.spacing(1)}})),A=({sections:e,filters:t,onChange:a,onClear:n})=>{const h=v(),[A,f]=i().useState(new Set(e.filter(e=>e.collapsed).map(e=>e.id))),y=Object.values(t).some(e=>e.length>0);return(0,s.jsxs)(l.A,{className:h.root,children:[(0,s.jsxs)(l.A,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,children:[(0,s.jsx)(r.A,{variant:"subtitle2",children:"Filters"}),y&&(0,s.jsx)(o.A,{size:"small",color:"primary",onClick:()=>{const t={};e.forEach(e=>{t[e.id]=[]}),a(t),null==n||n()},children:"Clear all"})]}),(0,s.jsx)(c.A,{}),e.map(e=>{const n=A.has(e.id),i=(t[e.id]||[]).length;return(0,s.jsxs)(l.A,{className:h.filterSection,mt:2,children:[(0,s.jsxs)(l.A,{className:h.sectionTitle,onClick:()=>{return t=e.id,void f(e=>{const a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a});var t},children:[(0,s.jsxs)(l.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{children:e.title}),i>0&&(0,s.jsxs)("span",{className:h.count,children:["(",i,")"]})]}),n?(0,s.jsx)(g.A,{fontSize:"small"}):(0,s.jsx)(x.A,{fontSize:"small"})]}),(0,s.jsx)(d.A,{in:!n,children:(0,s.jsx)(u.A,{children:e.options.map(n=>(0,s.jsx)(p.A,{control:(0,s.jsx)(m.A,{checked:(t[e.id]||[]).includes(n.value),onChange:()=>((e,s)=>{const n=t[e]||[],i=n.includes(s)?n.filter(e=>e!==s):[...n,s];a({...t,[e]:i})})(e.id,n.value),size:"small",className:h.checkbox,color:"primary"}),label:(0,s.jsxs)(l.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{className:h.checkboxLabel,children:n.label}),void 0!==n.count&&(0,s.jsxs)("span",{className:h.count,children:["(",n.count,")"]})]})},n.value))})})]},e.id)})]})}},38599:(e,t,a)=>{a.d(t,{B:()=>o});var s=a(31085),n=(a(95478),a(10394)),i=a(72501),l=a(86687),r=a(46205);const o=({children:e,permission:t,fallback:a,errorMessage:o})=>{const{allowed:c,loading:d,error:u}=(0,r.l)(t);return d?(0,s.jsx)(l.k,{}):u?(0,s.jsxs)(n.A,{p:4,children:[(0,s.jsxs)(i.A,{color:"error",children:["Unable to check permissions: ",u.message]}),(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]}):c?(0,s.jsx)(s.Fragment,{children:e}):a?(0,s.jsx)(s.Fragment,{children:a}):(0,s.jsxs)(n.A,{p:4,children:[(0,s.jsx)(i.A,{color:"textSecondary",children:o||"You don't have permission to view this page"}),(0,s.jsx)(n.A,{mt:1,children:(0,s.jsxs)(i.A,{variant:"caption",color:"textSecondary",children:["Required permission: ",t.name]})})]})}},80243:(e,t,a)=>{a.r(t),a.d(t,{ApiProductsPage:()=>te});var s=a(31085),n=a(95478),i=a(58837),l=a(10394),r=a(67720),o=a(72501),c=a(64947),d=a(29365),u=a(78467),p=a(18466),m=a(39590),h=a(75625),g=a(21702),x=a(85142),v=a(12229),A=a(37725),f=a(289),y=a(15831),j=a(45210),b=a(46681),P=a(42367),S=a(25010),w=a(91638),k=a(22097),I=a(38599),T=a(76891),C=a(61477),N=a(46805),R=a(42899),$=a(16249),z=a(34839),E=a(71677),D=a(26343),H=a(95061),L=a(29635),q=a(86901),M=a(30285),W=a(93453),K=a(89031),O=a(84441),B=a(65867),U=a(24170),F=a(77318);const _=(0,i.A)(e=>({asterisk:{color:"#f44336"},sectionHeader:{display:"flex",alignItems:"center",gap:e.spacing(.5),marginTop:e.spacing(2),marginBottom:e.spacing(1)},infoIcon:{fontSize:18,color:e.palette.text.secondary},tagChip:{marginRight:e.spacing(.5),marginBottom:e.spacing(.5)}})),Y=({open:e,onClose:t,onSuccess:a})=>{const i=_(),m=(0,k.useApi)(k.configApiRef),h=(0,k.useApi)(k.fetchApiRef),g=m.getString("backend.baseUrl"),[x,v]=(0,n.useState)(""),[A,f]=(0,n.useState)(""),[y,j]=(0,n.useState)(""),[b,P]=(0,n.useState)("v1"),[S,I]=(0,n.useState)("manual"),[Y,J]=(0,n.useState)("Published"),[V,G]=(0,n.useState)([]),[Z,X]=(0,n.useState)(""),[Q,ee]=(0,n.useState)(""),[te,ae]=(0,n.useState)(""),[se,ne]=(0,n.useState)(""),[ie,le]=(0,n.useState)(""),[re,oe]=(0,n.useState)(""),[ce,de]=(0,n.useState)(""),[ue,pe]=(0,n.useState)(!1),[me,he]=(0,n.useState)(0),[ge,xe]=(0,n.useState)(null),[ve,Ae]=(0,n.useState)(null),{value:fe,loading:ye,error:je}=(0,w.A)(async()=>{const e=await h.fetch(`${g}/api/kuadrant/httproutes`);if(!e.ok){const t=await(0,F.T)(e);throw new Error(`failed to fetch routes. ${t}`)}return(await e.json()).items||[]},[g,h,e,me]),{value:be,error:Pe}=(0,w.A)(async()=>{const e=await h.fetch(`${g}/api/kuadrant/planpolicies`);if(!e.ok){const t=await(0,F.T)(e);throw new Error(`failed to fetch PlanPolicies. ${t}`)}return await e.json()},[g,h,e]),Se=(e,t)=>(null==be?void 0:be.items)?be.items.find(a=>{const s=a.targetRef;return"HTTPRoute"===(null==s?void 0:s.kind)&&(null==s?void 0:s.name)===t&&(!(null==s?void 0:s.namespace)||(null==s?void 0:s.namespace)===e)}):null,we=Q?Q.split("/"):null,ke=we?Se(we[0],we[1]):null;(0,n.useEffect)(()=>{e&&(xe(null),Ae(null))},[e]);const Ie=()=>{Z.trim()&&!V.includes(Z.trim())&&(G([...V,Z.trim()]),X(""))},Te=()=>{v(""),f(""),j(""),P("v1"),I("manual"),J("Published"),G([]),X(""),ee(""),ae(""),ne(""),le(""),oe(""),de(""),xe(null),Ae(null),t()},Ce=!!ge||!!ve;return(0,s.jsxs)(T.A,{open:e,onClose:Te,maxWidth:"md",fullWidth:!0,children:[(0,s.jsx)(C.A,{children:"Create API Product"}),(0,s.jsxs)(N.A,{children:[ce&&(0,s.jsx)(O.A,{severity:"error",style:{marginBottom:16},children:ce}),je&&(0,s.jsxs)(O.A,{severity:"error",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load HTTPRoutes:"})," ",je.message,(0,s.jsx)(l.A,{mt:1,children:(0,s.jsx)(c.A,{size:"small",variant:"outlined",onClick:()=>he(e=>e+1),children:"Retry"})})]}),Pe&&(0,s.jsxs)(O.A,{severity:"warning",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load PlanPolicies:"})," ",Pe.message,(0,s.jsx)(o.A,{variant:"body2",style:{marginTop:8},children:"You can still create the API Product, but plan information may be incomplete."})]}),(0,s.jsx)(l.A,{className:i.sectionHeader,children:(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"API product info"})})}),(0,s.jsxs)(R.A,{container:!0,spacing:2,children:[(0,s.jsx)(R.A,{item:!0,xs:6,children:(0,s.jsx)($.A,{fullWidth:!0,label:"API product name",value:A,onChange:e=>f(e.target.value),placeholder:"My API",helperText:"Give a unique name for your API product",margin:"normal",required:!0,disabled:ue,InputLabelProps:{classes:{asterisk:i.asterisk}}})}),(0,s.jsx)(R.A,{item:!0,xs:6,children:(0,s.jsx)($.A,{fullWidth:!0,label:"Resource name",value:x,onChange:e=>{return t=e.target.value,v(t),void xe((0,U.o)(t));var t},placeholder:"my-api",helperText:ge||"Kubernetes resource name with lowercase, hyphens. Eg.flight_API",error:!!ge,margin:"normal",required:!0,disabled:ue,InputLabelProps:{classes:{asterisk:i.asterisk}}})}),(0,s.jsx)(R.A,{item:!0,xs:6,children:(0,s.jsx)($.A,{fullWidth:!0,label:"Version",value:b,onChange:e=>P(e.target.value),placeholder:"v1",helperText:"Give a version to your API product",margin:"normal",required:!0,disabled:ue,InputLabelProps:{classes:{asterisk:i.asterisk}}})}),(0,s.jsx)(R.A,{item:!0,xs:6,children:(0,s.jsx)($.A,{fullWidth:!0,label:"Tag",value:Z,onChange:e=>X(e.target.value),onKeyPress:e=>{"Enter"===e.key&&(e.preventDefault(),Ie())},placeholder:"Add tag",helperText:"Add a tag to your API product",margin:"normal",disabled:ue,InputProps:{endAdornment:Z?(0,s.jsx)(z.A,{position:"end",children:(0,s.jsx)(d.A,{size:"small",onClick:Ie,disabled:ue,children:(0,s.jsx)(p.A,{fontSize:"small"})})}):void 0}})}),V.length>0&&(0,s.jsx)(R.A,{item:!0,xs:12,children:(0,s.jsx)(l.A,{display:"flex",flexWrap:"wrap",children:V.map(e=>(0,s.jsx)(r.A,{label:e,onDelete:ue?void 0:()=>{return t=e,void G(V.filter(e=>e!==t));var t},size:"small",className:i.tagChip,disabled:ue},e))})}),(0,s.jsx)(R.A,{item:!0,xs:12,children:(0,s.jsx)($.A,{fullWidth:!0,label:"Description",value:y,onChange:e=>j(e.target.value),placeholder:"API description",margin:"normal",multiline:!0,rows:2,required:!0,disabled:ue,InputLabelProps:{classes:{asterisk:i.asterisk}}})})]}),(0,s.jsxs)(l.A,{className:i.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"Add API and Associate route"})}),(0,s.jsx)(E.Ay,{title:"Register an existing API and associate HTTPRoute for your API product",children:(0,s.jsx)(K.A,{className:i.infoIcon})})]}),(0,s.jsxs)(R.A,{container:!0,spacing:2,children:[(0,s.jsx)(R.A,{item:!0,xs:12,children:(0,s.jsx)($.A,{fullWidth:!0,label:"OpenAPI Spec URL",value:re,onChange:e=>{return t=e.target.value,oe(t),void Ae((0,U.q)(t));var t},placeholder:"https://api.example.com/openapi.json",helperText:ve||"Enter the full path to your API spec file",error:!!ve,margin:"normal",required:!0,disabled:ue,InputLabelProps:{classes:{asterisk:i.asterisk}}})}),(0,s.jsx)(R.A,{item:!0,xs:12,children:(0,s.jsx)($.A,{fullWidth:!0,label:"Documentation URL",value:ie,onChange:e=>le(e.target.value),placeholder:"https://docs.example.com/api",helperText:"Link to external documentation for this API",margin:"normal",disabled:ue})}),(0,s.jsx)(R.A,{item:!0,xs:12,children:(0,s.jsxs)($.A,{fullWidth:!0,select:!0,label:"HTTPRoute",value:Q,onChange:e=>ee(e.target.value),margin:"normal",required:!0,helperText:je?"Unable to load HTTPRoutes. Please retry.":"Select an HTTPRoute. APIProduct will be created in the same namespace.",error:!!je,disabled:ye||ue||!!je,InputLabelProps:{classes:{asterisk:i.asterisk}},SelectProps:{"data-testid":"httproute-select"},children:[ye&&(0,s.jsx)(D.A,{value:"",children:"Loading..."}),je&&(0,s.jsx)(D.A,{value:"",children:"Error loading routes"}),!ye&&!je&&fe&&0===fe.length&&(0,s.jsx)(D.A,{value:"",children:"No HTTPRoutes available"}),!ye&&!je&&fe&&fe.map(e=>{const t=e.metadata.namespace,a=e.metadata.name,n=((e,t)=>{const a=Se(e,t);return a?`${a.metadata.name}${(e=>{var t;if(!(null==e||null===(t=e.spec)||void 0===t?void 0:t.plans))return"";const a=Object.entries(e.spec.plans).map(([e,t])=>{var a;const s=null==t||null===(a=t.limits)||void 0===a?void 0:a.requests;return s?`${e}: ${s.count}/${s.period}`:e}).join("; ");return a?` (${a})`:""})(a)}`:"N/A"})(t,a);return(0,s.jsx)(D.A,{value:`${t}/${a}`,children:(0,s.jsxs)(l.A,{children:[(0,s.jsx)(o.A,{variant:"body1",children:a}),(0,s.jsxs)(o.A,{variant:"caption",color:"textSecondary",children:["Associated PlanPolicy: ",n]})]})},`${t}/${a}`)})]})})]}),Q&&ke&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(l.A,{className:i.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"HTTPRoute policies"})}),(0,s.jsx)(E.Ay,{title:"Shows the associated policies and rate limit tiers for the selected HTTPRoute",children:(0,s.jsx)(K.A,{className:i.infoIcon})})]}),(0,s.jsx)(B.g,{discoveredPlans:ke.plans,alertSeverity:"warning",alertMessage:"No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.",includeTopMargin:!1})]}),(0,s.jsxs)(l.A,{className:i.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"API Key approval"})}),(0,s.jsx)(E.Ay,{title:"Choose how API key requests are handled for this product",children:(0,s.jsx)(K.A,{className:i.infoIcon})})]}),(0,s.jsx)(H.A,{component:"fieldset",disabled:ue,children:(0,s.jsxs)(L.A,{row:!0,value:S,onChange:e=>I(e.target.value),children:[(0,s.jsx)(q.A,{value:"manual",control:(0,s.jsx)(M.A,{color:"primary"}),label:(0,s.jsxs)(l.A,{children:[(0,s.jsx)(o.A,{variant:"body2",children:"Need manual approval"}),(0,s.jsx)(o.A,{variant:"caption",color:"textSecondary",children:"Requires approval for requesting this API"})]})}),(0,s.jsx)(q.A,{value:"automatic",control:(0,s.jsx)(M.A,{color:"primary"}),label:(0,s.jsxs)(l.A,{children:[(0,s.jsx)(o.A,{variant:"body2",children:"Automatic"}),(0,s.jsx)(o.A,{variant:"caption",color:"textSecondary",children:"Keys are created without need to be approved"})]})})]})})]}),(0,s.jsxs)(W.A,{children:[(0,s.jsx)(c.A,{onClick:Te,disabled:ue,children:"Cancel"}),(0,s.jsx)(c.A,{onClick:async()=>{de(""),pe(!0);try{if(!Q)throw new Error("Please select an HTTPRoute");const[e,t]=Q.split("/"),s=e,n={apiVersion:"devportal.kuadrant.io/v1alpha1",kind:"APIProduct",metadata:{name:x,namespace:s},spec:{displayName:A,description:y,version:b,approvalMode:S,publishStatus:Y,tags:V,targetRef:{group:"gateway.networking.k8s.io",kind:"HTTPRoute",name:t,namespace:e},...te||se?{contact:{...te&&{email:te},...se&&{team:se}}}:{},...ie||re?{documentation:{...ie&&{docsURL:ie},...re&&{openAPISpecURL:re}}}:{}}},i=await h.fetch(`${g}/api/kuadrant/apiproducts`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){const e=await(0,F.T)(i);throw new Error(`failed to create APIProduct. ${e}`)}a({namespace:s,name:x,displayName:A}),Te()}catch(e){de(e instanceof Error?e.message:String(e))}finally{pe(!1)}},color:"primary",variant:"contained",disabled:ue||!x||!A||!y||!Q||Ce,startIcon:ue?(0,s.jsx)(u.A,{size:16,color:"inherit"}):void 0,children:ue?"Creating...":"Create"})]})]})};var J=a(34955),V=a(46205),G=a(26997),Z=a(63221);const X=a.p+"static/empty-state-illustration.7e3ad5a9..png",Q=(0,i.A)(e=>({container:{display:"flex",height:"100%",minHeight:400},tableContainer:{flex:1,overflow:"auto",padding:10},emptyState:{display:"flex",alignItems:"center",justifyContent:"center",padding:e.spacing(6),minHeight:400},emptyStateContent:{display:"flex",alignItems:"center",gap:e.spacing(6),maxWidth:900},emptyStateText:{flex:1},emptyStateTitle:{marginBottom:e.spacing(2)},emptyStateDescription:{marginBottom:e.spacing(3),color:e.palette.text.secondary},emptyStateImage:{maxWidth:400,height:"auto"}})),ee=()=>{const e=Q(),t=(0,k.useApi)(k.configApiRef),a=(0,k.useApi)(k.fetchApiRef),i=(0,k.useApi)(k.alertApiRef),I=(0,k.useApi)(k.identityApiRef),T=t.getString("backend.baseUrl"),[C,N]=(0,n.useState)(""),[R,$]=(0,n.useState)(!1),[z,E]=(0,n.useState)(!1),[D,H]=(0,n.useState)(0),[L,q]=(0,n.useState)(!1),[M,W]=(0,n.useState)(null),[K,O]=(0,n.useState)(null),[B,U]=(0,n.useState)(!1),[_,ee]=(0,n.useState)(null),[te,ae]=(0,n.useState)({status:[],policy:[],route:[],namespace:[],tags:[],authentication:[]}),{allowed:se,loading:ne,error:ie}=(0,V.l)(J.FL),{allowed:le,loading:re}=(0,V.l)(J.EM),{allowed:oe,loading:ce,error:de}=(0,V.l)(J.R_),{allowed:ue}=(0,V.l)(J.U3),{allowed:pe}=(0,V.l)(J.v_),me=re||ce,{allowed:he,loading:ge,error:xe}=(0,V.l)(J.J);(0,w.A)(async()=>{const e=await I.getBackstageIdentity();N(e.userEntityRef)},[I]);const{value:ve,loading:Ae,error:fe}=(0,w.A)(async()=>{const e=await a.fetch(`${T}/api/kuadrant/apiproducts`);if(!e.ok){const t=await(0,F.T)(e);throw new Error(`failed to fetch APIProducts. ${t}`)}return await e.json()},[T,a,D]),{value:ye,loading:je,error:be}=(0,w.A)(async()=>{if(!he)return{items:[]};const e=await a.fetch(`${T}/api/kuadrant/planpolicies`);if(!e.ok){const t=await(0,F.T)(e);throw new Error(`failed to fetch PlanPolicies: ${t}`)}return await e.json()},[T,a,D,he]),Pe=(0,n.useCallback)(e=>{var t;if(!(null==ye?void 0:ye.items))return null;const a=null===(t=e.spec)||void 0===t?void 0:t.targetRef;if(!a)return null;const s=ye.items.find(t=>{const s=t.targetRef;return"HTTPRoute"===(null==s?void 0:s.kind)&&(null==s?void 0:s.name)===a.name&&(!(null==s?void 0:s.namespace)||(null==s?void 0:s.namespace)===(a.namespace||e.metadata.namespace))});return(null==s?void 0:s.metadata.name)||null},[ye]),Se=(0,n.useCallback)(e=>{var t,a;const s=(null===(a=e.status)||void 0===a||null===(t=a.discoveredAuthScheme)||void 0===t?void 0:t.authentication)||{},n=Object.values(s),i=[];return n.some(e=>e.hasOwnProperty("apiKey"))&&i.push("API Key"),n.some(e=>e.hasOwnProperty("jwt"))&&i.push("OIDC"),0===i.length&&i.push("Unknown"),i},[]),we=Ae||je||ne||me||ge,ke=fe||be,Ie=ie||de||xe,Te=(0,n.useMemo)(()=>(null==ve?void 0:ve.items)||[],[ve]),Ce=(0,n.useMemo)(()=>{const e={Draft:0,Published:0},t=new Map,a=new Map,s=new Map,n=new Map,i=new Map;Te.forEach(l=>{var r,o,c,d;const u=(null===(r=l.spec)||void 0===r?void 0:r.publishStatus)||"Draft";e[u]++;const p=Pe(l)||"N/A";t.set(p,(t.get(p)||0)+1);const m=(null===(c=l.spec)||void 0===c||null===(o=c.targetRef)||void 0===o?void 0:o.name)||"unknown";a.set(m,(a.get(m)||0)+1);const h=l.metadata.namespace;s.set(h,(s.get(h)||0)+1),((null===(d=l.spec)||void 0===d?void 0:d.tags)||[]).forEach(e=>{n.set(e,(n.get(e)||0)+1)}),Se(l).forEach(e=>{i.set(e,(i.get(e)||0)+1)})});const l=[{id:"status",title:"Status",options:[{value:"Draft",label:"Draft",count:e.Draft},{value:"Published",label:"Published",count:e.Published}]},{id:"authentication",title:"Authentication",options:Array.from(i.entries()).map(([e,t])=>({value:e,label:e,count:t}))},{id:"route",title:"Route",options:Array.from(a.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:a.size>5},{id:"namespace",title:"Namespace",options:Array.from(s.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:s.size>5},{id:"tags",title:"Tags",options:Array.from(n.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:n.size>5}];return he&&l.splice(2,0,{id:"policy",title:"Policy",options:Array.from(t.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:t.size>5}),l},[Te,Pe,Se,he]),Ne=(0,n.useMemo)(()=>Te.filter(e=>{if(te.status.length>0){var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.publishStatus)||"Draft";if(!te.status.includes(a))return!1}if(te.authentication.length>0){const t=Se(e);if(!te.authentication.some(e=>t.includes(e)))return!1}if(te.policy.length>0){const t=Pe(e)||"N/A";if(!te.policy.includes(t))return!1}if(te.route.length>0){var a,s;const t=(null===(s=e.spec)||void 0===s||null===(a=s.targetRef)||void 0===a?void 0:a.name)||"unknown";if(!te.route.includes(t))return!1}if(te.namespace.length>0&&!te.namespace.includes(e.metadata.namespace))return!1;if(te.tags.length>0){var n;const t=(null===(n=e.spec)||void 0===n?void 0:n.tags)||[];if(!te.tags.some(e=>t.includes(e)))return!1}return!0}),[Te,te,Pe,Se]),Re=[{title:"Name",field:"spec.displayName",render:e=>{var t,a;const n=null!==(a=null===(t=e.spec)||void 0===t?void 0:t.displayName)&&void 0!==a?a:e.metadata.name;return(0,s.jsx)(A.N_,{to:`/kuadrant/api-products/${e.metadata.namespace}/${e.metadata.name}`,children:(0,s.jsx)("strong",{children:n})})},customFilterAndSearch:(e,t)=>{var a;return((null===(a=t.spec)||void 0===a?void 0:a.displayName)||t.metadata.name||"").toLowerCase().includes(e.toLowerCase())}},{title:"Version",field:"spec.version",render:e=>{var t;return(null===(t=e.spec)||void 0===t?void 0:t.version)||"-"}},{title:"Route",field:"spec.targetRef.name",render:e=>{var t,a;return(null===(a=e.spec)||void 0===a||null===(t=a.targetRef)||void 0===t?void 0:t.name)||"-"}},...he?[{title:"Policy",field:"policy",render:e=>Pe(e)||"N/A"}]:[],{title:"Tags",field:"spec.tags",render:e=>{var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.tags)||[];return 0===a.length?"-":(0,s.jsx)(l.A,{display:"flex",style:{gap:4,flexWrap:"wrap"},children:a.map(e=>(0,s.jsx)(r.A,{label:e,size:"small",variant:"outlined"},e))})}},{title:"Status",field:"spec.publishStatus",render:e=>{var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.publishStatus)||"Draft";return(0,s.jsx)(r.A,{label:a,size:"small",color:"Published"===a?"primary":"default"})}},{title:"Authentication",field:"status.discoveredAuthScheme",render:e=>{var t,a;const n=(null===(a=e.status)||void 0===a||null===(t=a.discoveredAuthScheme)||void 0===t?void 0:t.authentication)||{},i=Object.values(n),c=i.some(e=>e.hasOwnProperty("apiKey")),d=i.some(e=>e.hasOwnProperty("jwt"));return c||d?(0,s.jsxs)(l.A,{display:"flex",style:{gap:4},children:[c&&(0,s.jsx)(r.A,{icon:(0,s.jsx)(g.A,{}),label:"API Key",size:"small",color:"primary"}),d&&(0,s.jsx)(r.A,{icon:(0,s.jsx)(x.A,{}),label:"OIDC",size:"small",color:"secondary"})]}):(0,s.jsx)(o.A,{variant:"body2",style:{fontStyle:"italic"},children:"unknown"})}},{title:"Namespace",field:"metadata.namespace"},{title:"Actions",field:"actions",filtering:!1,render:e=>{var t,n,r;const o=(null===(n=e.metadata)||void 0===n||null===(t=n.annotations)||void 0===t?void 0:t["backstage.io/owner"])===C,u=pe||ue&&o,p=oe||le&&o,g="Published"===(null===(r=e.spec)||void 0===r?void 0:r.publishStatus);return(0,s.jsxs)(l.A,{display:"flex",alignItems:"center",style:{gap:4},children:[u&&(0,s.jsx)(c.A,{size:"small",color:"primary",onClick:()=>(async e=>{var t,s;const n=e.metadata.namespace,l=e.metadata.name,r=(null===(t=e.spec)||void 0===t?void 0:t.displayName)||l,o="Published"===((null===(s=e.spec)||void 0===s?void 0:s.publishStatus)||"Draft")?"Draft":"Published";try{const e=await a.fetch(`${T}/api/kuadrant/apiproducts/${n}/${l}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:{publishStatus:o}})});if(!e.ok){const t=await(0,F.T)(e);throw new Error(t)}H(e=>e+1),i.post({message:`"${r}" ${"Published"===o?"published":"unpublished"} successfully`,severity:"success",display:"transient"})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";i.post({message:`Failed to update publish status: ${t}`,severity:"error",display:"transient"})}})(e),style:{marginRight:4,textTransform:"none"},children:g?"Unpublish":"Publish"}),u&&(0,s.jsx)(d.A,{size:"small",onClick:()=>{return t=e.metadata.namespace,a=e.metadata.name,O({namespace:t,name:a}),void E(!0);var t,a},title:"Edit API Product",children:(0,s.jsx)(h.A,{fontSize:"small"})}),p&&(0,s.jsx)(d.A,{size:"small",onClick:()=>(async(e,t)=>{W({namespace:e,name:t}),ee(null);try{const s=await a.fetch(`${T}/api/kuadrant/requests?namespace=${e}`);if(!s.ok){const e=await(0,F.T)(s);throw new Error(e)}const n=((await s.json()).items||[]).filter(a=>a.spec.apiName===t&&a.spec.apiNamespace===e),i=n.filter(e=>{var t;return"Approved"===(null===(t=e.status)||void 0===t?void 0:t.phase)}).length;ee({requests:n.length,secrets:i})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";i.post({message:`Failed to delete access request: ${t}`,severity:"error",display:"transient"})}finally{q(!0)}})(e.metadata.namespace,e.metadata.name),title:"Delete API Product",children:(0,s.jsx)(m.A,{fontSize:"small"})})]})}}];return(0,s.jsxs)(f.Y,{themeId:"tool",children:[(0,s.jsx)(y.Y,{title:"API Products",subtitle:"Manage API products for Kubernetes",children:(0,s.jsx)(j.Y,{children:"Manage API products and plan policies"})}),(0,s.jsxs)(b.U,{children:[we&&(0,s.jsxs)(l.A,{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:300,children:[(0,s.jsx)(u.A,{}),(0,s.jsx)(o.A,{variant:"h6",style:{marginTop:16},children:"Loading data..."}),(0,s.jsx)(o.A,{variant:"body2",color:"textSecondary",children:"Preparing your data... This should only take a moment."})]}),ke&&(0,s.jsx)(P._,{error:ke}),Ie&&(0,s.jsxs)(l.A,{p:2,children:[(0,s.jsxs)(o.A,{color:"error",children:["unable to check permissions: ",Ie.message]}),(0,s.jsxs)(o.A,{variant:"body2",color:"textSecondary",children:["permission:"," ",ie?"kuadrant.apiproduct.create":de?"kuadrant.apiproduct.delete":xe?"kuadrant.planpolicy.list":"unknown"]}),(0,s.jsx)(o.A,{variant:"body2",color:"textSecondary",children:"please try again or contact your administrator"})]}),!we&&!ke&&!Ie&&0===Te.length&&(0,s.jsx)(l.A,{className:e.emptyState,children:(0,s.jsxs)(l.A,{className:e.emptyStateContent,children:[(0,s.jsxs)(l.A,{className:e.emptyStateText,children:[(0,s.jsx)(o.A,{variant:"h4",className:e.emptyStateTitle,children:"API Product"}),(0,s.jsx)(o.A,{variant:"body1",className:e.emptyStateDescription,children:"Create API product by registering existing API, associate route and policy"}),se&&(0,s.jsx)(c.A,{variant:"contained",color:"primary",startIcon:(0,s.jsx)(p.A,{}),onClick:()=>$(!0),children:"Create API Product"})]}),(0,s.jsx)("img",{src:X,alt:"API Product illustration",className:e.emptyStateImage})]})}),!we&&!ke&&!Ie&&Te.length>0&&(0,s.jsxs)(l.A,{className:e.container,children:[(0,s.jsx)(v.Z,{sections:Ce,filters:te,onChange:ae}),(0,s.jsxs)(l.A,{className:e.tableContainer,children:[(0,s.jsx)(l.A,{display:"flex",justifyContent:"flex-end",mb:2,children:se&&(0,s.jsx)(c.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,s.jsx)(p.A,{}),onClick:()=>$(!0),children:"Create API Product"})}),0===Ne.length?(0,s.jsx)(l.A,{p:4,textAlign:"center",children:(0,s.jsx)(o.A,{variant:"body1",color:"textSecondary",children:"No API products match the selected filters."})}):(0,s.jsx)(S.X,{options:{paging:Ne.length>10,pageSize:20,search:!0,filtering:!1,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:Re,data:Ne})]})]}),(0,s.jsx)(Y,{open:R,onClose:()=>$(!1),onSuccess:e=>{H(e=>e+1),i.post({message:`"${e.displayName}" created successfully`,severity:"success",display:"transient"})}}),(0,s.jsx)(G.C,{open:z,onClose:()=>E(!1),onSuccess:()=>{H(e=>e+1);const e=(null==K?void 0:K.name)||"API Product";i.post({message:`"${e}" updated successfully`,severity:"success",display:"transient"})},namespace:(null==K?void 0:K.namespace)||"",name:(null==K?void 0:K.name)||""}),(0,s.jsx)(Z.K,{open:L,title:"Delete API Product",description:_?`Deleting "${null==M?void 0:M.name}" will also remove:\n\n• ${_.requests} API Key(s)\n• ${_.secrets} API Key Secret(s)\n\nThis action cannot be undone.`:`Deleting "${null==M?void 0:M.name}" will also remove all associated API Keys and Secrets.\nThis action cannot be undone.`,confirmText:null==M?void 0:M.name,severity:"high",deleting:B,onConfirm:async()=>{if(M){U(!0);try{const e=await a.fetch(`${T}/api/kuadrant/apiproducts/${M.namespace}/${M.name}`,{method:"DELETE"});if(!e.ok){const t=await(0,F.T)(e);throw new Error(t)}const t=(null==M?void 0:M.name)||"API Product";H(e=>e+1),i.post({message:`"${t}" deleted successfully`,severity:"success",display:"transient"})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";i.post({message:`Failed to delete API Product: ${t}`,severity:"error",display:"transient"})}finally{U(!1),q(!1),W(null)}}},onCancel:()=>{q(!1),W(null)}})]})]})},te=()=>(0,s.jsx)(I.B,{permission:J.vs,errorMessage:"you don't have permission to view the Kuadrant page",children:(0,s.jsx)(ee,{})})}}]);
|
|
2
|
-
//# sourceMappingURL=2821.0829f14d.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/2821.0829f14d.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/FilterPanel/FilterPanel.tsx","webpack://internal.plugin-kuadrant/./src/components/PermissionGate/PermissionGate.tsx","webpack://internal.plugin-kuadrant/./src/components/CreateAPIProductDialog/CreateAPIProductDialog.tsx","webpack://internal.plugin-kuadrant/./src/components/KuadrantPage/ApiProductsPage.tsx"],"sourcesContent":["import React from 'react';\nimport {\n Box,\n Typography,\n Checkbox,\n FormControlLabel,\n FormGroup,\n Divider,\n Button,\n Collapse,\n makeStyles,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: 240,\n minWidth: 240,\n padding: theme.spacing(2),\n borderRight: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n height: '100%',\n overflowY: 'auto',\n },\n sectionTitle: {\n fontWeight: 600,\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n userSelect: 'none',\n },\n filterSection: {\n marginBottom: theme.spacing(2),\n },\n checkbox: {\n padding: theme.spacing(0.5),\n },\n checkboxLabel: {\n fontSize: '0.875rem',\n },\n clearButton: {\n marginTop: theme.spacing(2),\n },\n count: {\n fontSize: '0.75rem',\n color: theme.palette.text.secondary,\n marginLeft: theme.spacing(1),\n },\n}));\n\nexport interface FilterOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface FilterSection {\n id: string;\n title: string;\n options: FilterOption[];\n collapsed?: boolean;\n}\n\nexport interface FilterState {\n [sectionId: string]: string[];\n}\n\ninterface FilterPanelProps {\n sections: FilterSection[];\n filters: FilterState;\n onChange: (filters: FilterState) => void;\n onClear?: () => void;\n}\n\nexport const FilterPanel = ({\n sections,\n filters,\n onChange,\n onClear,\n}: FilterPanelProps) => {\n const classes = useStyles();\n const [collapsedSections, setCollapsedSections] = React.useState<Set<string>>(\n new Set(sections.filter(s => s.collapsed).map(s => s.id)),\n );\n\n const toggleSection = (sectionId: string) => {\n setCollapsedSections(prev => {\n const next = new Set(prev);\n if (next.has(sectionId)) {\n next.delete(sectionId);\n } else {\n next.add(sectionId);\n }\n return next;\n });\n };\n\n const handleCheckboxChange = (sectionId: string, value: string) => {\n const currentValues = filters[sectionId] || [];\n const newValues = currentValues.includes(value)\n ? currentValues.filter(v => v !== value)\n : [...currentValues, value];\n\n onChange({\n ...filters,\n [sectionId]: newValues,\n });\n };\n\n const hasActiveFilters = Object.values(filters).some(\n values => values.length > 0,\n );\n\n const handleClear = () => {\n const clearedFilters: FilterState = {};\n sections.forEach(section => {\n clearedFilters[section.id] = [];\n });\n onChange(clearedFilters);\n onClear?.();\n };\n\n return (\n <Box className={classes.root}>\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mb={2}>\n <Typography variant=\"subtitle2\">Filters</Typography>\n {hasActiveFilters && (\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={handleClear}\n >\n Clear all\n </Button>\n )}\n </Box>\n\n <Divider />\n\n {sections.map(section => {\n const isCollapsed = collapsedSections.has(section.id);\n const selectedCount = (filters[section.id] || []).length;\n\n return (\n <Box key={section.id} className={classes.filterSection} mt={2}>\n <Box\n className={classes.sectionTitle}\n onClick={() => toggleSection(section.id)}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <span>{section.title}</span>\n {selectedCount > 0 && (\n <span className={classes.count}>({selectedCount})</span>\n )}\n </Box>\n {isCollapsed ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ExpandLessIcon fontSize=\"small\" />\n )}\n </Box>\n\n <Collapse in={!isCollapsed}>\n <FormGroup>\n {section.options.map(option => (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n checked={(filters[section.id] || []).includes(option.value)}\n onChange={() =>\n handleCheckboxChange(section.id, option.value)\n }\n size=\"small\"\n className={classes.checkbox}\n color=\"primary\"\n />\n }\n label={\n <Box display=\"flex\" alignItems=\"center\">\n <span className={classes.checkboxLabel}>\n {option.label}\n </span>\n {option.count !== undefined && (\n <span className={classes.count}>({option.count})</span>\n )}\n </Box>\n }\n />\n ))}\n </FormGroup>\n </Collapse>\n </Box>\n );\n })}\n </Box>\n );\n};\n","import React from 'react';\nimport { Typography, Box } from '@material-ui/core';\nimport { Progress } from '@backstage/core-components';\nimport { Permission } from '@backstage/plugin-permission-common';\nimport { useKuadrantPermission } from '../../utils/permissions';\n\ninterface PermissionGateProps {\n children: React.ReactNode;\n permission: Permission;\n fallback?: React.ReactNode;\n errorMessage?: string;\n}\n\nexport const PermissionGate = ({ children, permission, fallback, errorMessage }: PermissionGateProps) => {\n const { allowed, loading, error } = useKuadrantPermission(permission);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <Box p={4}>\n <Typography color=\"error\">\n Unable to check permissions: {error.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Please try again or contact your administrator\n </Typography>\n </Box>\n );\n }\n\n if (!allowed) {\n if (fallback) {\n return <>{fallback}</>;\n }\n return (\n <Box p={4}>\n <Typography color=\"textSecondary\">\n {errorMessage || 'You don\\'t have permission to view this page'}\n </Typography>\n <Box mt={1}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Required permission: {permission.name}\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return <>{children}</>;\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box,\n Typography,\n Chip,\n Grid,\n MenuItem,\n CircularProgress,\n makeStyles,\n FormControl,\n RadioGroup,\n FormControlLabel,\n Radio,\n Tooltip,\n IconButton,\n InputAdornment,\n} from '@material-ui/core';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport AddIcon from '@material-ui/icons/Add';\nimport { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport { Alert } from '@material-ui/lab';\nimport useAsync from 'react-use/lib/useAsync';\nimport { PlanPolicyDetails } from '../PlanPolicyDetailsCard';\nimport { validateKubernetesName, validateURL } from '../../utils/validation';\nimport { handleFetchError } from \"../../utils/errors\";\n\nconst useStyles = makeStyles((theme) => ({\n asterisk: {\n color: '#f44336',\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n },\n infoIcon: {\n fontSize: 18,\n color: theme.palette.text.secondary,\n },\n tagChip: {\n marginRight: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n },\n}));\n\ninterface CreateAPIProductDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: (productInfo: { namespace: string; name: string; displayName: string }) => void;\n}\n\nexport const CreateAPIProductDialog = ({ open, onClose, onSuccess }: CreateAPIProductDialogProps) => {\n const classes = useStyles();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const [name, setName] = useState('');\n const [displayName, setDisplayName] = useState('');\n const [description, setDescription] = useState('');\n const [version, setVersion] = useState('v1');\n const [approvalMode, setApprovalMode] = useState<'automatic' | 'manual'>('manual');\n const [publishStatus, setPublishStatus] = useState<'Draft' | 'Published'>('Published');\n const [tags, setTags] = useState<string[]>([]);\n const [tagInput, setTagInput] = useState('');\n const [selectedHTTPRoute, setSelectedHTTPRoute] = useState('');\n const [contactEmail, setContactEmail] = useState('');\n const [contactTeam, setContactTeam] = useState('');\n const [docsURL, setDocsURL] = useState('');\n const [openAPISpec, setOpenAPISpec] = useState('');\n const [error, setError] = useState('');\n const [creating, setCreating] = useState(false);\n const [httpRoutesRetry, setHttpRoutesRetry] = useState(0);\n const [nameError, setNameError] = useState<string | null>(null);\n const [openAPISpecError, setOpenAPISpecError] = useState<string | null>(null);\n const {\n value: httpRoutes,\n loading: httpRoutesLoading,\n error: httpRoutesError\n } = useAsync(async () => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/httproutes`);\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(`failed to fetch routes. ${error}`);\n }\n\n const data = await response.json();\n return data.items || [];\n }, [backendUrl, fetchApi, open, httpRoutesRetry]);\n\n // load planpolicies with full details to show associated plans\n const {\n value: planPolicies,\n error: planPoliciesError\n } = useAsync(async () => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/planpolicies`);\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(`failed to fetch PlanPolicies. ${error}`);\n }\n\n return await response.json();\n }, [backendUrl, fetchApi, open]);\n\n // find planpolicy associated with selected httproute\n const getPlanPolicyForRoute = (routeNamespace: string, routeName: string) => {\n if (!planPolicies?.items) return null;\n\n return planPolicies.items.find((pp: any) => {\n const ref = pp.targetRef;\n return (\n ref?.kind === 'HTTPRoute' &&\n ref?.name === routeName &&\n (!ref?.namespace || ref?.namespace === routeNamespace)\n );\n });\n };\n\n const selectedRouteInfo = selectedHTTPRoute ? selectedHTTPRoute.split('/') : null;\n const selectedPolicy = selectedRouteInfo\n ? getPlanPolicyForRoute(selectedRouteInfo[0], selectedRouteInfo[1])\n : null;\n\n // format tier info for dropdown display\n const formatTierInfo = (policy: any): string => {\n if (!policy?.spec?.plans) return '';\n const tiers = Object.entries(policy.spec.plans)\n .map(([name, plan]: [string, any]) => {\n const limit = plan?.limits?.requests;\n if (!limit) return name;\n return `${name}: ${limit.count}/${limit.period}`;\n })\n .join('; ');\n return tiers ? ` (${tiers})` : '';\n };\n\n // get policy info for a route (for dropdown display)\n const getPolicyInfoForRoute = (routeNamespace: string, routeName: string): string => {\n const policy = getPlanPolicyForRoute(routeNamespace, routeName);\n if (!policy) return 'N/A';\n return `${policy.metadata.name}${formatTierInfo(policy)}`;\n };\n\n useEffect(() => {\n if (open) {\n setNameError(null);\n setOpenAPISpecError(null);\n }\n }, [open]);\n\n // validate handlers\n const handleNameChange = (value: string) => {\n setName(value);\n setNameError(validateKubernetesName(value));\n };\n\n const handleOpenAPISpecChange = (value: string) => {\n setOpenAPISpec(value);\n setOpenAPISpecError(validateURL(value));\n };\n\n const handleAddTag = () => {\n if (tagInput.trim() && !tags.includes(tagInput.trim())) {\n setTags([...tags, tagInput.trim()]);\n setTagInput('');\n }\n };\n\n const handleDeleteTag = (tagToDelete: string) => {\n setTags(tags.filter(tag => tag !== tagToDelete));\n };\n\n const handleCreate = async () => {\n setError('');\n setCreating(true);\n\n try {\n if (!selectedHTTPRoute) {\n throw new Error('Please select an HTTPRoute');\n }\n\n const [selectedRouteNamespace, selectedRouteName] = selectedHTTPRoute.split('/');\n\n // derive namespace from selected httproute\n const namespace = selectedRouteNamespace;\n\n const apiProduct = {\n apiVersion: 'devportal.kuadrant.io/v1alpha1',\n kind: 'APIProduct',\n metadata: {\n name,\n namespace,\n },\n spec: {\n displayName,\n description,\n version,\n approvalMode,\n publishStatus,\n tags,\n targetRef: {\n group: 'gateway.networking.k8s.io',\n kind: 'HTTPRoute',\n name: selectedRouteName,\n namespace: selectedRouteNamespace,\n },\n ...(contactEmail || contactTeam ? {\n contact: {\n ...(contactEmail && { email: contactEmail }),\n ...(contactTeam && { team: contactTeam }),\n },\n } : {}),\n ...(docsURL || openAPISpec ? {\n documentation: {\n ...(docsURL && { docsURL }),\n ...(openAPISpec && { openAPISpecURL: openAPISpec }),\n },\n } : {}),\n },\n };\n\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(apiProduct),\n });\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(`failed to create APIProduct. ${error}`);\n }\n\n onSuccess({ namespace, name, displayName });\n handleClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setCreating(false);\n }\n };\n\n const handleClose = () => {\n setName('');\n setDisplayName('');\n setDescription('');\n setVersion('v1');\n setApprovalMode('manual');\n setPublishStatus('Published');\n setTags([]);\n setTagInput('');\n setSelectedHTTPRoute('');\n setContactEmail('');\n setContactTeam('');\n setDocsURL('');\n setOpenAPISpec('');\n setError('');\n setNameError(null);\n setOpenAPISpecError(null);\n onClose();\n };\n\n const hasValidationErrors = !!nameError || !!openAPISpecError;\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Create API Product</DialogTitle>\n <DialogContent>\n {error && (\n <Alert severity=\"error\" style={{ marginBottom: 16 }}>\n {error}\n </Alert>\n )}\n {httpRoutesError && (\n <Alert severity=\"error\" style={{ marginBottom: 16 }}>\n <strong>Failed to load HTTPRoutes:</strong> {httpRoutesError.message}\n <Box mt={1}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => setHttpRoutesRetry(prev => prev + 1)}\n >\n Retry\n </Button>\n </Box>\n </Alert>\n )}\n\n {planPoliciesError && (\n <Alert severity=\"warning\" style={{ marginBottom: 16 }}>\n <strong>Failed to load PlanPolicies:</strong> {planPoliciesError.message}\n <Typography variant=\"body2\" style={{ marginTop: 8 }}>\n You can still create the API Product, but plan information may be incomplete.\n </Typography>\n </Alert>\n )}\n {/* API product info section */}\n <Box className={classes.sectionHeader}>\n <Typography variant=\"subtitle1\"><strong>API product info</strong></Typography>\n </Box>\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"API product name\"\n value={displayName}\n onChange={e => setDisplayName(e.target.value)}\n placeholder=\"My API\"\n helperText=\"Give a unique name for your API product\"\n margin=\"normal\"\n required\n disabled={creating}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Resource name\"\n value={name}\n onChange={e => handleNameChange(e.target.value)}\n placeholder=\"my-api\"\n helperText={nameError || \"Kubernetes resource name with lowercase, hyphens. Eg.flight_API\"}\n error={!!nameError}\n margin=\"normal\"\n required\n disabled={creating}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Version\"\n value={version}\n onChange={e => setVersion(e.target.value)}\n placeholder=\"v1\"\n helperText=\"Give a version to your API product\"\n margin=\"normal\"\n required\n disabled={creating}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Tag\"\n value={tagInput}\n onChange={e => setTagInput(e.target.value)}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAddTag();\n }\n }}\n placeholder=\"Add tag\"\n helperText=\"Add a tag to your API product\"\n margin=\"normal\"\n disabled={creating}\n InputProps={{\n endAdornment: tagInput ? (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={handleAddTag} disabled={creating}>\n <AddIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n }}\n />\n </Grid>\n {tags.length > 0 && (\n <Grid item xs={12}>\n <Box display=\"flex\" flexWrap=\"wrap\">\n {tags.map(tag => (\n <Chip\n key={tag}\n label={tag}\n onDelete={creating ? undefined : () => handleDeleteTag(tag)}\n size=\"small\"\n className={classes.tagChip}\n disabled={creating}\n />\n ))}\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"Description\"\n value={description}\n onChange={e => setDescription(e.target.value)}\n placeholder=\"API description\"\n margin=\"normal\"\n multiline\n rows={2}\n required\n disabled={creating}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n </Grid>\n\n {/* Add API and Associate route section */}\n <Box className={classes.sectionHeader}>\n <Typography variant=\"subtitle1\"><strong>Add API and Associate route</strong></Typography>\n <Tooltip title=\"Register an existing API and associate HTTPRoute for your API product\">\n <InfoOutlinedIcon className={classes.infoIcon} />\n </Tooltip>\n </Box>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"OpenAPI Spec URL\"\n value={openAPISpec}\n onChange={e => handleOpenAPISpecChange(e.target.value)}\n placeholder=\"https://api.example.com/openapi.json\"\n helperText={openAPISpecError || \"Enter the full path to your API spec file\"}\n error={!!openAPISpecError}\n margin=\"normal\"\n required\n disabled={creating}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"Documentation URL\"\n value={docsURL}\n onChange={e => setDocsURL(e.target.value)}\n placeholder=\"https://docs.example.com/api\"\n helperText=\"Link to external documentation for this API\"\n margin=\"normal\"\n disabled={creating}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n select\n label=\"HTTPRoute\"\n value={selectedHTTPRoute}\n onChange={e => setSelectedHTTPRoute(e.target.value)}\n margin=\"normal\"\n required\n helperText={\n httpRoutesError\n ? \"Unable to load HTTPRoutes. Please retry.\"\n : \"Select an HTTPRoute. APIProduct will be created in the same namespace.\"\n }\n error={!!httpRoutesError}\n disabled={httpRoutesLoading || creating || !!httpRoutesError}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n SelectProps={{\n 'data-testid': 'httproute-select',\n } as any}\n >\n {httpRoutesLoading && (\n <MenuItem value=\"\">Loading...</MenuItem>\n )}\n {httpRoutesError && (\n <MenuItem value=\"\">Error loading routes</MenuItem>\n )}\n {!httpRoutesLoading && !httpRoutesError && httpRoutes && httpRoutes.length === 0 && (\n <MenuItem value=\"\">No HTTPRoutes available</MenuItem>\n )}\n {!httpRoutesLoading && !httpRoutesError && httpRoutes && httpRoutes.map((route: any) => {\n const routeNs = route.metadata.namespace;\n const routeName = route.metadata.name;\n const policyInfo = getPolicyInfoForRoute(routeNs, routeName);\n return (\n <MenuItem\n key={`${routeNs}/${routeName}`}\n value={`${routeNs}/${routeName}`}\n >\n <Box>\n <Typography variant=\"body1\">{routeName}</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Associated PlanPolicy: {policyInfo}\n </Typography>\n </Box>\n </MenuItem>\n );\n })}\n </TextField>\n </Grid>\n </Grid>\n\n {/* HTTPRoute policies section */}\n {selectedHTTPRoute && selectedPolicy && (\n <>\n <Box className={classes.sectionHeader}>\n <Typography variant=\"subtitle1\"><strong>HTTPRoute policies</strong></Typography>\n <Tooltip title=\"Shows the associated policies and rate limit tiers for the selected HTTPRoute\">\n <InfoOutlinedIcon className={classes.infoIcon} />\n </Tooltip>\n </Box>\n <PlanPolicyDetails\n discoveredPlans={selectedPolicy.plans}\n alertSeverity=\"warning\"\n alertMessage=\"No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.\"\n includeTopMargin={false}\n />\n </>\n )}\n\n {/* API Key approval section */}\n <Box className={classes.sectionHeader}>\n <Typography variant=\"subtitle1\"><strong>API Key approval</strong></Typography>\n <Tooltip title=\"Choose how API key requests are handled for this product\">\n <InfoOutlinedIcon className={classes.infoIcon} />\n </Tooltip>\n </Box>\n <FormControl component=\"fieldset\" disabled={creating}>\n <RadioGroup\n row\n value={approvalMode}\n onChange={e => setApprovalMode(e.target.value as 'automatic' | 'manual')}\n >\n <FormControlLabel\n value=\"manual\"\n control={<Radio color=\"primary\" />}\n label={\n <Box>\n <Typography variant=\"body2\">Need manual approval</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Requires approval for requesting this API\n </Typography>\n </Box>\n }\n />\n <FormControlLabel\n value=\"automatic\"\n control={<Radio color=\"primary\" />}\n label={\n <Box>\n <Typography variant=\"body2\">Automatic</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Keys are created without need to be approved\n </Typography>\n </Box>\n }\n />\n </RadioGroup>\n </FormControl>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={creating}>Cancel</Button>\n <Button\n onClick={handleCreate}\n color=\"primary\"\n variant=\"contained\"\n disabled={creating || !name || !displayName || !description || !selectedHTTPRoute || hasValidationErrors}\n startIcon={creating ? <CircularProgress size={16} color=\"inherit\" /> : undefined}\n >\n {creating ? 'Creating...' : 'Create'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport {\n Typography,\n Box,\n Chip,\n Button,\n IconButton,\n CircularProgress,\n makeStyles,\n} from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport VpnKeyIcon from \"@material-ui/icons/VpnKey\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport {\n Header,\n Page,\n Content,\n SupportButton,\n ResponseErrorPanel,\n Link,\n Table,\n TableColumn,\n} from \"@backstage/core-components\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n identityApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { PermissionGate } from \"../PermissionGate\";\nimport { CreateAPIProductDialog } from \"../CreateAPIProductDialog\";\nimport {\n kuadrantApiProductCreatePermission,\n kuadrantApiProductDeleteOwnPermission,\n kuadrantApiProductDeleteAllPermission,\n kuadrantApiProductUpdateOwnPermission,\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductListPermission,\n kuadrantPlanPolicyListPermission,\n} from \"../../permissions\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport { handleFetchError } from \"../../utils/errors\";\nimport { EditAPIProductDialog } from \"../EditAPIProductDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport emptyStateIllustration from \"../../assets/empty-state-illustration.png\";\n\ntype KuadrantResource = {\n metadata: {\n name: string;\n namespace: string;\n creationTimestamp: string;\n annotations?: Record<string, string>;\n };\n spec?: any;\n status?: any;\n};\n\ntype KuadrantList = {\n items: KuadrantResource[];\n};\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n height: \"100%\",\n minHeight: 400,\n },\n tableContainer: {\n flex: 1,\n overflow: \"auto\",\n padding: 10,\n },\n emptyState: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: theme.spacing(6),\n minHeight: 400,\n },\n emptyStateContent: {\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(6),\n maxWidth: 900,\n },\n emptyStateText: {\n flex: 1,\n },\n emptyStateTitle: {\n marginBottom: theme.spacing(2),\n },\n emptyStateDescription: {\n marginBottom: theme.spacing(3),\n color: theme.palette.text.secondary,\n },\n emptyStateImage: {\n maxWidth: 400,\n height: \"auto\",\n },\n}));\n\nconst ResourceList = () => {\n const classes = useStyles();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n const [userEntityRef, setUserEntityRef] = useState<string>(\"\");\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [refreshTrigger, setRefreshTrigger] = useState(0);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [apiProductToDelete, setApiProductToDelete] = useState<{\n namespace: string;\n name: string;\n } | null>(null);\n const [apiProductToEdit, setApiProductToEdit] = useState<{\n namespace: string;\n name: string;\n } | null>(null);\n const [deleting, setDeleting] = useState(false);\n const [deleteStats, setDeleteStats] = useState<{\n requests: number;\n secrets: number;\n } | null>(null);\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n policy: [],\n route: [],\n namespace: [],\n tags: [],\n authentication: [],\n });\n\n const {\n allowed: canCreateApiProduct,\n loading: createPermissionLoading,\n error: createPermissionError,\n } = useKuadrantPermission(kuadrantApiProductCreatePermission);\n\n const {\n allowed: canDeleteOwnApiProduct,\n loading: deleteOwnPermissionLoading,\n } = useKuadrantPermission(kuadrantApiProductDeleteOwnPermission);\n\n const {\n allowed: canDeleteAllApiProducts,\n loading: deleteAllPermissionLoading,\n error: deletePermissionError,\n } = useKuadrantPermission(kuadrantApiProductDeleteAllPermission);\n\n const { allowed: canUpdateOwnApiProduct } = useKuadrantPermission(\n kuadrantApiProductUpdateOwnPermission,\n );\n\n const { allowed: canUpdateAllApiProducts } = useKuadrantPermission(\n kuadrantApiProductUpdateAllPermission,\n );\n\n const deletePermissionLoading =\n deleteOwnPermissionLoading || deleteAllPermissionLoading;\n\n const {\n allowed: canListPlanPolicies,\n loading: planPolicyPermissionLoading,\n error: planPolicyPermissionError,\n } = useKuadrantPermission(kuadrantPlanPolicyListPermission);\n\n useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n setUserEntityRef(identity.userEntityRef);\n }, [identityApi]);\n\n const {\n value: apiProducts,\n loading: apiProductsLoading,\n error: apiProductsError,\n } = useAsync(async (): Promise<KuadrantList> => {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts`,\n );\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(`failed to fetch APIProducts. ${error}`);\n }\n return await response.json();\n }, [backendUrl, fetchApi, refreshTrigger]);\n\n const {\n value: planPolicies,\n loading: planPoliciesLoading,\n error: planPoliciesError,\n } = useAsync(async (): Promise<KuadrantList> => {\n // skip fetch if user doesn't have permission\n if (!canListPlanPolicies) {\n return { items: [] };\n }\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/planpolicies`,\n );\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(`failed to fetch PlanPolicies: ${error}`);\n }\n return await response.json();\n }, [backendUrl, fetchApi, refreshTrigger, canListPlanPolicies]);\n\n // helper to find policy for a given route\n const getPolicyForProduct = useCallback((product: KuadrantResource): string | null => {\n if (!planPolicies?.items) return null;\n const targetRef = product.spec?.targetRef;\n if (!targetRef) return null;\n\n const policy = planPolicies.items.find((pp: KuadrantResource) => {\n const ref = (pp as any).targetRef;\n return (\n ref?.kind === \"HTTPRoute\" &&\n ref?.name === targetRef.name &&\n (!ref?.namespace || ref?.namespace === (targetRef.namespace || product.metadata.namespace))\n );\n });\n return policy?.metadata.name || null;\n }, [planPolicies]);\n\n // helper to get auth schemes for a product\n const getAuthSchemes = useCallback((product: KuadrantResource): string[] => {\n const authSchemes = product.status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n const schemes: string[] = [];\n\n if (schemeObjects.some((scheme: any) => scheme.hasOwnProperty(\"apiKey\"))) {\n schemes.push(\"API Key\");\n }\n if (schemeObjects.some((scheme: any) => scheme.hasOwnProperty(\"jwt\"))) {\n schemes.push(\"OIDC\");\n }\n if (schemes.length === 0) {\n schemes.push(\"Unknown\");\n }\n return schemes;\n }, []);\n\n const loading =\n apiProductsLoading ||\n planPoliciesLoading ||\n createPermissionLoading ||\n deletePermissionLoading ||\n planPolicyPermissionLoading;\n const error = apiProductsError || planPoliciesError;\n const permissionError =\n createPermissionError || deletePermissionError || planPolicyPermissionError;\n\n const allProducts = useMemo(() => {\n return apiProducts?.items || [];\n }, [apiProducts]);\n\n const filterSections: FilterSection[] = useMemo(() => {\n const statusCounts = { Draft: 0, Published: 0 };\n const policyCounts = new Map<string, number>();\n const routeCounts = new Map<string, number>();\n const namespaceCounts = new Map<string, number>();\n const tagCounts = new Map<string, number>();\n const authCounts = new Map<string, number>();\n\n allProducts.forEach((p: KuadrantResource) => {\n const status = p.spec?.publishStatus || \"Draft\";\n statusCounts[status as keyof typeof statusCounts]++;\n\n const policy = getPolicyForProduct(p) || \"N/A\";\n policyCounts.set(policy, (policyCounts.get(policy) || 0) + 1);\n\n const route = p.spec?.targetRef?.name || \"unknown\";\n routeCounts.set(route, (routeCounts.get(route) || 0) + 1);\n\n const ns = p.metadata.namespace;\n namespaceCounts.set(ns, (namespaceCounts.get(ns) || 0) + 1);\n\n const tags = p.spec?.tags || [];\n tags.forEach((tag: string) => {\n tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);\n });\n\n const authSchemes = getAuthSchemes(p);\n authSchemes.forEach((scheme: string) => {\n authCounts.set(scheme, (authCounts.get(scheme) || 0) + 1);\n });\n });\n\n const sections: FilterSection[] = [\n {\n id: \"status\",\n title: \"Status\",\n options: [\n { value: \"Draft\", label: \"Draft\", count: statusCounts.Draft },\n { value: \"Published\", label: \"Published\", count: statusCounts.Published },\n ],\n },\n {\n id: \"authentication\",\n title: \"Authentication\",\n options: Array.from(authCounts.entries()).map(([scheme, count]) => ({\n value: scheme,\n label: scheme,\n count,\n })),\n },\n {\n id: \"route\",\n title: \"Route\",\n options: Array.from(routeCounts.entries()).map(([name, count]) => ({\n value: name,\n label: name,\n count,\n })),\n collapsed: routeCounts.size > 5,\n },\n {\n id: \"namespace\",\n title: \"Namespace\",\n options: Array.from(namespaceCounts.entries()).map(([ns, count]) => ({\n value: ns,\n label: ns,\n count,\n })),\n collapsed: namespaceCounts.size > 5,\n },\n {\n id: \"tags\",\n title: \"Tags\",\n options: Array.from(tagCounts.entries()).map(([tag, count]) => ({\n value: tag,\n label: tag,\n count,\n })),\n collapsed: tagCounts.size > 5,\n },\n ];\n\n // only show policy filter if user can list planpolicies\n if (canListPlanPolicies) {\n sections.splice(2, 0, {\n id: \"policy\",\n title: \"Policy\",\n options: Array.from(policyCounts.entries()).map(([name, count]) => ({\n value: name,\n label: name,\n count,\n })),\n collapsed: policyCounts.size > 5,\n });\n }\n\n return sections;\n }, [allProducts, getPolicyForProduct, getAuthSchemes, canListPlanPolicies]);\n\n const filteredProducts = useMemo(() => {\n return allProducts.filter((p: KuadrantResource) => {\n if (filters.status.length > 0) {\n const status = p.spec?.publishStatus || \"Draft\";\n if (!filters.status.includes(status)) return false;\n }\n\n if (filters.authentication.length > 0) {\n const authSchemes = getAuthSchemes(p);\n if (!filters.authentication.some((a: string) => authSchemes.includes(a))) return false;\n }\n\n if (filters.policy.length > 0) {\n const policy = getPolicyForProduct(p) || \"N/A\";\n if (!filters.policy.includes(policy)) return false;\n }\n\n if (filters.route.length > 0) {\n const route = p.spec?.targetRef?.name || \"unknown\";\n if (!filters.route.includes(route)) return false;\n }\n\n if (filters.namespace.length > 0) {\n if (!filters.namespace.includes(p.metadata.namespace)) return false;\n }\n\n if (filters.tags.length > 0) {\n const tags = p.spec?.tags || [];\n if (!filters.tags.some((t: string) => tags.includes(t))) return false;\n }\n\n return true;\n });\n }, [allProducts, filters, getPolicyForProduct, getAuthSchemes]);\n\n const handleCreateSuccess = (productInfo: { namespace: string; name: string; displayName: string }) => {\n setRefreshTrigger((prev) => prev + 1);\n alertApi.post({\n message: `\"${productInfo.displayName}\" created successfully`,\n severity: \"success\",\n display: \"transient\",\n });\n };\n\n const handleEditClick = (namespace: string, name: string) => {\n setApiProductToEdit({ namespace, name });\n setEditDialogOpen(true);\n };\n\n const handleEditSuccess = () => {\n setRefreshTrigger((prev) => prev + 1);\n const productName = apiProductToEdit?.name || \"API Product\";\n alertApi.post({\n message: `\"${productName}\" updated successfully`,\n severity: \"success\",\n display: \"transient\",\n });\n };\n\n const handleDeleteClick = async (namespace: string, name: string) => {\n setApiProductToDelete({ namespace, name });\n setDeleteStats(null);\n\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests?namespace=${namespace}`,\n );\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(error);\n }\n\n const data = await response.json();\n const related = (data.items || []).filter(\n (r: any) =>\n r.spec.apiName === name && r.spec.apiNamespace === namespace,\n );\n const approved = related.filter(\n (r: any) => r.status?.phase === \"Approved\",\n ).length;\n setDeleteStats({ requests: related.length, secrets: approved });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to delete access request: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleteDialogOpen(true);\n }\n\n };\n\n const handleDeleteConfirm = async () => {\n if (!apiProductToDelete) return;\n\n setDeleting(true);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${apiProductToDelete.namespace}/${apiProductToDelete.name}`,\n { method: \"DELETE\" },\n );\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(error);\n }\n\n const deletedName = apiProductToDelete?.name || \"API Product\";\n setRefreshTrigger((prev) => prev + 1);\n alertApi.post({\n message: `\"${deletedName}\" deleted successfully`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to delete API Product: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleting(false);\n setDeleteDialogOpen(false);\n setApiProductToDelete(null);\n }\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogOpen(false);\n setApiProductToDelete(null);\n };\n\n const handlePublishToggle = async (row: any) => {\n const namespace = row.metadata.namespace;\n const name = row.metadata.name;\n const displayName = row.spec?.displayName || name;\n const currentStatus = row.spec?.publishStatus || \"Draft\";\n const newStatus = currentStatus === \"Published\" ? \"Draft\" : \"Published\";\n\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n spec: { publishStatus: newStatus },\n }),\n },\n );\n\n if (!response.ok) {\n const error = await handleFetchError(response);\n throw new Error(error);\n }\n\n setRefreshTrigger((prev) => prev + 1);\n alertApi.post({\n message: `\"${displayName}\" ${newStatus === \"Published\" ? \"published\" : \"unpublished\"} successfully`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to update publish status: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const columns: TableColumn[] = [\n {\n title: \"Name\",\n field: \"spec.displayName\",\n render: (row: any) => {\n const displayName = row.spec?.displayName ?? row.metadata.name;\n return (\n <Link to={`/kuadrant/api-products/${row.metadata.namespace}/${row.metadata.name}`}>\n <strong>{displayName}</strong>\n </Link>\n );\n },\n customFilterAndSearch: (term, row: any) => {\n const displayName = row.spec?.displayName || row.metadata.name || \"\";\n return displayName.toLowerCase().includes(term.toLowerCase());\n },\n },\n {\n title: \"Version\",\n field: \"spec.version\",\n render: (row: any) => row.spec?.version || \"-\",\n },\n {\n title: \"Route\",\n field: \"spec.targetRef.name\",\n render: (row: any) => row.spec?.targetRef?.name || \"-\",\n },\n // only show policy column if user can list planpolicies\n ...(canListPlanPolicies\n ? [\n {\n title: \"Policy\",\n field: \"policy\",\n render: (row: any) => getPolicyForProduct(row) || \"N/A\",\n },\n ]\n : []),\n {\n title: \"Tags\",\n field: \"spec.tags\",\n render: (row: any) => {\n const tags = row.spec?.tags || [];\n if (tags.length === 0) return \"-\";\n return (\n <Box display=\"flex\" style={{ gap: 4, flexWrap: \"wrap\" }}>\n {tags.map((tag: string) => (\n <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\" />\n ))}\n </Box>\n );\n },\n },\n {\n title: \"Status\",\n field: \"spec.publishStatus\",\n render: (row: any) => {\n const status = row.spec?.publishStatus || \"Draft\";\n return (\n <Chip\n label={status}\n size=\"small\"\n color={status === \"Published\" ? \"primary\" : \"default\"}\n />\n );\n },\n },\n {\n title: \"Authentication\",\n field: \"status.discoveredAuthScheme\",\n render: (row: any) => {\n const authSchemes =\n row.status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n\n const hasApiKey = schemeObjects.some((scheme: any) =>\n scheme.hasOwnProperty(\"apiKey\"),\n );\n const hasJwt = schemeObjects.some((scheme: any) =>\n scheme.hasOwnProperty(\"jwt\"),\n );\n\n if (!hasApiKey && !hasJwt) {\n return (\n <Typography variant=\"body2\" style={{ fontStyle: \"italic\" }}>\n unknown\n </Typography>\n );\n }\n\n return (\n <Box display=\"flex\" style={{ gap: 4 }}>\n {hasApiKey && (\n <Chip\n icon={<VpnKeyIcon />}\n label=\"API Key\"\n size=\"small\"\n color=\"primary\"\n />\n )}\n {hasJwt && (\n <Chip\n icon={<LockIcon />}\n label=\"OIDC\"\n size=\"small\"\n color=\"secondary\"\n />\n )}\n </Box>\n );\n },\n },\n {\n title: \"Namespace\",\n field: \"metadata.namespace\",\n },\n {\n title: \"Actions\",\n field: \"actions\",\n filtering: false,\n render: (row: any) => {\n const owner = row.metadata?.annotations?.[\"backstage.io/owner\"];\n const isOwner = owner === userEntityRef;\n const canEdit =\n canUpdateAllApiProducts || (canUpdateOwnApiProduct && isOwner);\n const canDelete =\n canDeleteAllApiProducts || (canDeleteOwnApiProduct && isOwner);\n const isPublished = row.spec?.publishStatus === \"Published\";\n\n return (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 4 }}>\n {canEdit && (\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={() => handlePublishToggle(row)}\n style={{ marginRight: 4, textTransform: \"none\" }}\n >\n {isPublished ? \"Unpublish\" : \"Publish\"}\n </Button>\n )}\n {canEdit && (\n <IconButton\n size=\"small\"\n onClick={() =>\n handleEditClick(row.metadata.namespace, row.metadata.name)\n }\n title=\"Edit API Product\"\n >\n <EditIcon fontSize=\"small\" />\n </IconButton>\n )}\n {canDelete && (\n <IconButton\n size=\"small\"\n onClick={() =>\n handleDeleteClick(row.metadata.namespace, row.metadata.name)\n }\n title=\"Delete API Product\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n );\n },\n },\n ];\n\n return (\n <Page themeId=\"tool\">\n <Header\n title=\"API Products\"\n subtitle=\"Manage API products for Kubernetes\"\n >\n <SupportButton>Manage API products and plan policies</SupportButton>\n </Header>\n <Content>\n {loading && (\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n minHeight={300}\n >\n <CircularProgress />\n <Typography variant=\"h6\" style={{ marginTop: 16 }}>\n Loading data...\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Preparing your data... This should only take a moment.\n </Typography>\n </Box>\n )}\n {error && <ResponseErrorPanel error={error} />}\n {permissionError && (\n <Box p={2}>\n <Typography color=\"error\">\n unable to check permissions: {permissionError.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n permission:{\" \"}\n {createPermissionError\n ? \"kuadrant.apiproduct.create\"\n : deletePermissionError\n ? \"kuadrant.apiproduct.delete\"\n : planPolicyPermissionError\n ? \"kuadrant.planpolicy.list\"\n : \"unknown\"}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n please try again or contact your administrator\n </Typography>\n </Box>\n )}\n {!loading && !error && !permissionError && allProducts.length === 0 && (\n <Box className={classes.emptyState}>\n <Box className={classes.emptyStateContent}>\n <Box className={classes.emptyStateText}>\n <Typography variant=\"h4\" className={classes.emptyStateTitle}>\n API Product\n </Typography>\n <Typography\n variant=\"body1\"\n className={classes.emptyStateDescription}\n >\n Create API product by registering existing API, associate\n route and policy\n </Typography>\n {canCreateApiProduct && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<AddIcon />}\n onClick={() => setCreateDialogOpen(true)}\n >\n Create API Product\n </Button>\n )}\n </Box>\n <img\n src={emptyStateIllustration}\n alt=\"API Product illustration\"\n className={classes.emptyStateImage}\n />\n </Box>\n </Box>\n )}\n {!loading && !error && !permissionError && allProducts.length > 0 && (\n <Box className={classes.container}>\n <FilterPanel\n sections={filterSections}\n filters={filters}\n onChange={setFilters}\n />\n <Box className={classes.tableContainer}>\n <Box display=\"flex\" justifyContent=\"flex-end\" mb={2}>\n {canCreateApiProduct && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<AddIcon />}\n onClick={() => setCreateDialogOpen(true)}\n >\n Create API Product\n </Button>\n )}\n </Box>\n {filteredProducts.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n No API products match the selected filters.\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n paging: filteredProducts.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredProducts}\n />\n )}\n </Box>\n </Box>\n )}\n <CreateAPIProductDialog\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n onSuccess={handleCreateSuccess}\n />\n <EditAPIProductDialog\n open={editDialogOpen}\n onClose={() => setEditDialogOpen(false)}\n onSuccess={handleEditSuccess}\n namespace={apiProductToEdit?.namespace || \"\"}\n name={apiProductToEdit?.name || \"\"}\n />\n <ConfirmDeleteDialog\n open={deleteDialogOpen}\n title=\"Delete API Product\"\n description={\n deleteStats\n ? `Deleting \"${apiProductToDelete?.name}\" will also remove:\n\n• ${deleteStats.requests} API Key(s)\n• ${deleteStats.secrets} API Key Secret(s)\n\nThis action cannot be undone.`\n : `Deleting \"${apiProductToDelete?.name}\" will also remove all associated API Keys and Secrets.\nThis action cannot be undone.`\n }\n confirmText={apiProductToDelete?.name}\n severity=\"high\"\n deleting={deleting}\n onConfirm={handleDeleteConfirm}\n onCancel={handleDeleteCancel}\n />\n </Content>\n </Page>\n );\n};\n\nexport const ApiProductsPage = () => {\n return (\n <PermissionGate\n permission={kuadrantApiProductListPermission}\n errorMessage=\"you don't have permission to view the Kuadrant page\"\n >\n <ResourceList />\n </PermissionGate>\n );\n};\n"],"names":["useStyles","makeStyles","theme","root","width","minWidth","padding","spacing","borderRight","palette","divider","backgroundColor","background","paper","height","overflowY","sectionTitle","fontWeight","fontSize","textTransform","letterSpacing","color","text","secondary","marginBottom","display","alignItems","justifyContent","cursor","userSelect","filterSection","checkbox","checkboxLabel","clearButton","marginTop","count","marginLeft","FilterPanel","sections","filters","onChange","onClear","classes","collapsedSections","setCollapsedSections","React","Set","filter","s","collapsed","map","id","hasActiveFilters","Object","values","some","length","Box","className","mb","Typography","variant","Button","size","onClick","clearedFilters","forEach","section","Divider","isCollapsed","has","selectedCount","mt","toggleSection","sectionId","prev","next","delete","add","span","title","ExpandMoreIcon","ExpandLessIcon","Collapse","in","FormGroup","options","option","FormControlLabel","control","Checkbox","checked","includes","value","currentValues","newValues","v","handleCheckboxChange","label","undefined","PermissionGate","children","permission","fallback","errorMessage","allowed","loading","error","useKuadrantPermission","Progress","p","message","name","asterisk","sectionHeader","gap","infoIcon","tagChip","marginRight","CreateAPIProductDialog","open","onClose","onSuccess","config","useApi","configApiRef","fetchApi","fetchApiRef","backendUrl","getString","setName","useState","displayName","setDisplayName","description","setDescription","version","setVersion","approvalMode","setApprovalMode","publishStatus","setPublishStatus","tags","setTags","tagInput","setTagInput","selectedHTTPRoute","setSelectedHTTPRoute","contactEmail","setContactEmail","contactTeam","setContactTeam","docsURL","setDocsURL","openAPISpec","setOpenAPISpec","setError","creating","setCreating","httpRoutesRetry","setHttpRoutesRetry","nameError","setNameError","openAPISpecError","setOpenAPISpecError","httpRoutes","httpRoutesLoading","httpRoutesError","useAsync","async","response","fetch","ok","handleFetchError","Error","json","items","planPolicies","planPoliciesError","getPlanPolicyForRoute","routeNamespace","routeName","find","pp","ref","targetRef","kind","namespace","selectedRouteInfo","split","selectedPolicy","useEffect","handleAddTag","trim","handleClose","hasValidationErrors","Dialog","maxWidth","fullWidth","DialogTitle","DialogContent","Alert","severity","style","strong","Grid","container","item","xs","TextField","e","target","placeholder","helperText","margin","required","disabled","InputLabelProps","handleNameChange","validateKubernetesName","onKeyPress","key","preventDefault","InputProps","endAdornment","InputAdornment","position","IconButton","AddIcon","flexWrap","tag","Chip","onDelete","handleDeleteTag","tagToDelete","multiline","rows","Tooltip","InfoOutlinedIcon","handleOpenAPISpecChange","validateURL","select","SelectProps","MenuItem","route","routeNs","metadata","policyInfo","policy","spec","plans","tiers","entries","plan","limit","limits","requests","period","join","formatTierInfo","getPolicyInfoForRoute","PlanPolicyDetails","discoveredPlans","alertSeverity","alertMessage","includeTopMargin","FormControl","component","RadioGroup","row","Radio","DialogActions","selectedRouteNamespace","selectedRouteName","apiProduct","apiVersion","group","contact","email","team","documentation","openAPISpecURL","method","headers","body","JSON","stringify","err","String","startIcon","CircularProgress","minHeight","tableContainer","flex","overflow","emptyState","emptyStateContent","emptyStateText","emptyStateTitle","emptyStateDescription","emptyStateImage","ResourceList","alertApi","alertApiRef","identityApi","identityApiRef","userEntityRef","setUserEntityRef","createDialogOpen","setCreateDialogOpen","editDialogOpen","setEditDialogOpen","refreshTrigger","setRefreshTrigger","deleteDialogOpen","setDeleteDialogOpen","apiProductToDelete","setApiProductToDelete","apiProductToEdit","setApiProductToEdit","deleting","setDeleting","deleteStats","setDeleteStats","setFilters","status","authentication","canCreateApiProduct","createPermissionLoading","createPermissionError","kuadrantApiProductCreatePermission","canDeleteOwnApiProduct","deleteOwnPermissionLoading","kuadrantApiProductDeleteOwnPermission","canDeleteAllApiProducts","deleteAllPermissionLoading","deletePermissionError","kuadrantApiProductDeleteAllPermission","canUpdateOwnApiProduct","kuadrantApiProductUpdateOwnPermission","canUpdateAllApiProducts","kuadrantApiProductUpdateAllPermission","deletePermissionLoading","canListPlanPolicies","planPolicyPermissionLoading","planPolicyPermissionError","kuadrantPlanPolicyListPermission","identity","getBackstageIdentity","apiProducts","apiProductsLoading","apiProductsError","planPoliciesLoading","getPolicyForProduct","useCallback","product","getAuthSchemes","authSchemes","discoveredAuthScheme","schemeObjects","schemes","scheme","hasOwnProperty","push","permissionError","allProducts","useMemo","filterSections","statusCounts","Draft","Published","policyCounts","Map","routeCounts","namespaceCounts","tagCounts","authCounts","set","get","ns","Array","from","splice","filteredProducts","a","t","columns","field","render","Link","to","customFilterAndSearch","term","toLowerCase","hasApiKey","hasJwt","icon","VpnKeyIcon","LockIcon","fontStyle","filtering","isOwner","annotations","canEdit","canDelete","isPublished","newStatus","post","handlePublishToggle","handleEditClick","EditIcon","related","r","apiName","apiNamespace","approved","phase","secrets","handleDeleteClick","DeleteIcon","Page","themeId","Header","subtitle","SupportButton","Content","flexDirection","ResponseErrorPanel","img","src","emptyStateIllustration","alt","textAlign","Table","paging","pageSize","search","debounceInterval","toolbar","emptyRowsWhenPaging","data","productInfo","EditAPIProductDialog","productName","ConfirmDeleteDialog","confirmText","onConfirm","deletedName","onCancel","ApiProductsPage","kuadrantApiProductListPermission"],"sourceRoot":""}
|