@kuadrant/kuadrant-backstage-plugin-frontend 0.2.0 → 0.3.0-aaa46b4
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 +40 -2
- package/dist/api.esm.js.map +1 -1
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +20 -85
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
- package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPageWithPermissions.esm.js +18 -0
- package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPageWithPermissions.esm.js.map +1 -0
- package/dist/components/ApiKeyApprovalPage/index.esm.js +1 -0
- package/dist/components/ApiKeyApprovalPage/index.esm.js.map +1 -1
- package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js +19 -60
- package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js.map +1 -1
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +66 -113
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +3 -2
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
- package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js +16 -15
- package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js.map +1 -1
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +1 -7
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
- package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js +2 -3
- package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js.map +1 -1
- package/dist/components/KuadrantIcon/KuadrantIcon.esm.js +22 -0
- package/dist/components/KuadrantIcon/KuadrantIcon.esm.js.map +1 -0
- package/dist/components/KuadrantPage/ApiProductsPage.esm.js +5 -18
- package/dist/components/KuadrantPage/ApiProductsPage.esm.js.map +1 -1
- package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js +28 -138
- package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js.map +1 -1
- package/dist/components/PermissionGate/PermissionGate.esm.js +2 -2
- package/dist/components/PermissionGate/PermissionGate.esm.js.map +1 -1
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +32 -18
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -1
- package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js +13 -2
- package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js.map +1 -1
- package/dist/components/icons.esm.js +11 -0
- package/dist/components/icons.esm.js.map +1 -0
- package/dist/index.d.ts +54 -6
- package/dist/index.esm.js +3 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +2 -10
- package/dist/plugin.esm.js.map +1 -1
- package/dist/utils/apikeys.esm.js +21 -0
- package/dist/utils/apikeys.esm.js.map +1 -0
- package/dist/utils/styles.esm.js +5 -2
- package/dist/utils/styles.esm.js.map +1 -1
- package/dist-scalprum/internal.plugin-kuadrant.7f1de85661b1b848af15.js +2 -0
- package/dist-scalprum/internal.plugin-kuadrant.7f1de85661b1b848af15.js.map +1 -0
- package/dist-scalprum/plugin-manifest.json +3 -3
- package/dist-scalprum/static/{1037.58dd29ad.chunk.js → 1037.25758556.chunk.js} +1 -1
- package/dist-scalprum/static/{1037.58dd29ad.chunk.js.map → 1037.25758556.chunk.js.map} +1 -1
- package/dist-scalprum/static/1340.7c4f4722.chunk.js +3 -0
- package/dist-scalprum/static/1340.7c4f4722.chunk.js.map +1 -0
- package/dist-scalprum/static/1719.52ca7daf.chunk.js +2 -0
- package/dist-scalprum/static/1719.52ca7daf.chunk.js.map +1 -0
- package/dist-scalprum/static/{1881.8221c002.chunk.js → 1931.f6a5edbb.chunk.js} +2 -2
- package/dist-scalprum/static/1931.f6a5edbb.chunk.js.map +1 -0
- package/dist-scalprum/static/20.b3a37d1d.chunk.js +3 -0
- package/dist-scalprum/static/20.b3a37d1d.chunk.js.map +1 -0
- package/dist-scalprum/static/2251.08f3db99.chunk.js +2 -0
- package/dist-scalprum/static/2251.08f3db99.chunk.js.map +1 -0
- package/dist-scalprum/static/2769.e09b0ab0.chunk.js +2 -0
- package/dist-scalprum/static/2769.e09b0ab0.chunk.js.map +1 -0
- package/dist-scalprum/static/2821.1ac360ec.chunk.js +2 -0
- package/dist-scalprum/static/2821.1ac360ec.chunk.js.map +1 -0
- package/dist-scalprum/static/2952.b54bd390.chunk.js +2 -0
- package/dist-scalprum/static/2952.b54bd390.chunk.js.map +1 -0
- package/dist-scalprum/static/2967.004a950e.chunk.js +2 -0
- package/dist-scalprum/static/2967.004a950e.chunk.js.map +1 -0
- package/dist-scalprum/static/3015.1fe097c2.chunk.js +3 -0
- package/dist-scalprum/static/3015.1fe097c2.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/3015.1fe097c2.chunk.js.map +1 -0
- package/dist-scalprum/static/327.74ecd572.chunk.js +2 -0
- package/dist-scalprum/static/327.74ecd572.chunk.js.map +1 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
- package/dist-scalprum/static/3658.104704cc.chunk.js +2 -0
- package/dist-scalprum/static/3658.104704cc.chunk.js.map +1 -0
- package/dist-scalprum/static/{3897.ef4554b5.chunk.js → 3897.6e9c07c0.chunk.js} +1 -1
- package/dist-scalprum/static/{3897.ef4554b5.chunk.js.map → 3897.6e9c07c0.chunk.js.map} +1 -1
- package/dist-scalprum/static/3917.888fba36.chunk.js +2 -0
- package/dist-scalprum/static/3917.888fba36.chunk.js.map +1 -0
- package/dist-scalprum/static/3947.f5320e89.chunk.js +2 -0
- package/dist-scalprum/static/3947.f5320e89.chunk.js.map +1 -0
- package/dist-scalprum/static/{4083.488ff7a9.chunk.js → 4083.811c4e7a.chunk.js} +2 -2
- package/dist-scalprum/static/{4083.488ff7a9.chunk.js.map → 4083.811c4e7a.chunk.js.map} +1 -1
- package/dist-scalprum/static/438.4335b833.chunk.js +2 -0
- package/dist-scalprum/static/438.4335b833.chunk.js.map +1 -0
- package/dist-scalprum/static/4908.4f21d453.chunk.js +2 -0
- package/dist-scalprum/static/4908.4f21d453.chunk.js.map +1 -0
- package/dist-scalprum/static/{5010.6241b64f.chunk.js → 5010.4f67737b.chunk.js} +2 -2
- package/dist-scalprum/static/{5010.6241b64f.chunk.js.map → 5010.4f67737b.chunk.js.map} +1 -1
- package/dist-scalprum/static/5197.53535ff4.chunk.js +2 -0
- package/dist-scalprum/static/5197.53535ff4.chunk.js.map +1 -0
- package/dist-scalprum/static/5289.6c803140.chunk.js +2 -0
- package/dist-scalprum/static/5289.6c803140.chunk.js.map +1 -0
- package/dist-scalprum/static/5943.4e1dedc5.chunk.js +2 -0
- package/dist-scalprum/static/5943.4e1dedc5.chunk.js.map +1 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
- package/dist-scalprum/static/{6272.b5645dc2.chunk.js → 6272.3ed14ea4.chunk.js} +1 -1
- package/dist-scalprum/static/{6272.b5645dc2.chunk.js.map → 6272.3ed14ea4.chunk.js.map} +1 -1
- package/dist-scalprum/static/6311.da1849d1.chunk.js +2 -0
- package/dist-scalprum/static/6311.da1849d1.chunk.js.map +1 -0
- package/dist-scalprum/static/635.f63679a5.chunk.js +3 -0
- package/dist-scalprum/static/635.f63679a5.chunk.js.map +1 -0
- package/dist-scalprum/static/6371.02375475.chunk.js +3 -0
- package/dist-scalprum/static/6371.02375475.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/6371.02375475.chunk.js.map +1 -0
- package/dist-scalprum/static/{6386.2d20c412.chunk.js → 6386.5922f271.chunk.js} +3 -3
- package/dist-scalprum/static/{6386.2d20c412.chunk.js.map → 6386.5922f271.chunk.js.map} +1 -1
- package/dist-scalprum/static/6837.6252b97a.chunk.js +2 -0
- package/dist-scalprum/static/6837.6252b97a.chunk.js.map +1 -0
- package/dist-scalprum/static/{6972.e47ec97e.chunk.js → 6972.f22b9446.chunk.js} +1 -1
- package/dist-scalprum/static/{6972.e47ec97e.chunk.js.map → 6972.f22b9446.chunk.js.map} +1 -1
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
- package/dist-scalprum/static/{7266.e760b8c3.chunk.js → 7266.3c4174cc.chunk.js} +1 -1
- package/dist-scalprum/static/{7266.e760b8c3.chunk.js.map → 7266.3c4174cc.chunk.js.map} +1 -1
- package/dist-scalprum/static/7270.8ee9d452.chunk.js +2 -0
- package/dist-scalprum/static/7270.8ee9d452.chunk.js.map +1 -0
- package/dist-scalprum/static/{7791.8f84478d.chunk.js → 7791.ad31cf6d.chunk.js} +2 -2
- package/dist-scalprum/static/{7791.8f84478d.chunk.js.map → 7791.ad31cf6d.chunk.js.map} +1 -1
- package/dist-scalprum/static/{8563.46f1a3e1.chunk.js → 8563.6501eafb.chunk.js} +2 -2
- package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.map → 8563.6501eafb.chunk.js.map} +1 -1
- package/dist-scalprum/static/980.744a4d36.chunk.js +2 -0
- package/dist-scalprum/static/980.744a4d36.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js +3 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-KuadrantPage.f123b200.chunk.js +2 -0
- package/dist-scalprum/static/exposed-KuadrantPage.f123b200.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.3a5f9157.chunk.js +2 -0
- package/dist-scalprum/static/exposed-PluginRoot.3a5f9157.chunk.js.map +1 -0
- package/package.json +6 -3
- package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js +0 -265
- package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js.map +0 -1
- package/dist/components/EntityApiApprovalTab/index.esm.js +0 -2
- package/dist/components/EntityApiApprovalTab/index.esm.js.map +0 -1
- package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js +0 -2
- package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js.map +0 -1
- package/dist-scalprum/static/1319.ac195ac2.chunk.js +0 -2
- package/dist-scalprum/static/1319.ac195ac2.chunk.js.map +0 -1
- package/dist-scalprum/static/1584.ae3779f0.chunk.js +0 -3
- package/dist-scalprum/static/1584.ae3779f0.chunk.js.map +0 -1
- package/dist-scalprum/static/1881.8221c002.chunk.js.map +0 -1
- package/dist-scalprum/static/2967.7c6a34cd.chunk.js +0 -2
- package/dist-scalprum/static/2967.7c6a34cd.chunk.js.map +0 -1
- package/dist-scalprum/static/3118.daee3324.chunk.js +0 -3
- package/dist-scalprum/static/3118.daee3324.chunk.js.map +0 -1
- package/dist-scalprum/static/3581.b5b97f08.chunk.js +0 -2
- package/dist-scalprum/static/3581.b5b97f08.chunk.js.map +0 -1
- package/dist-scalprum/static/369.2374941c.chunk.js +0 -2
- package/dist-scalprum/static/369.2374941c.chunk.js.map +0 -1
- package/dist-scalprum/static/3947.ad129ba4.chunk.js +0 -2
- package/dist-scalprum/static/3947.ad129ba4.chunk.js.map +0 -1
- package/dist-scalprum/static/3976.e0873210.chunk.js +0 -2
- package/dist-scalprum/static/3976.e0873210.chunk.js.map +0 -1
- package/dist-scalprum/static/4434.f92f6ba4.chunk.js +0 -2
- package/dist-scalprum/static/4434.f92f6ba4.chunk.js.map +0 -1
- package/dist-scalprum/static/483.d55d6ab2.chunk.js +0 -2
- package/dist-scalprum/static/483.d55d6ab2.chunk.js.map +0 -1
- package/dist-scalprum/static/512.f1c51799.chunk.js +0 -2
- package/dist-scalprum/static/512.f1c51799.chunk.js.map +0 -1
- package/dist-scalprum/static/5203.3df62d7e.chunk.js +0 -2
- package/dist-scalprum/static/5203.3df62d7e.chunk.js.map +0 -1
- package/dist-scalprum/static/5289.2e686027.chunk.js +0 -2
- package/dist-scalprum/static/5289.2e686027.chunk.js.map +0 -1
- package/dist-scalprum/static/5453.3c20d0a6.chunk.js +0 -2
- package/dist-scalprum/static/5453.3c20d0a6.chunk.js.map +0 -1
- package/dist-scalprum/static/6371.f183dddb.chunk.js +0 -3
- package/dist-scalprum/static/6371.f183dddb.chunk.js.map +0 -1
- package/dist-scalprum/static/6426.bf20c588.chunk.js +0 -2
- package/dist-scalprum/static/6426.bf20c588.chunk.js.map +0 -1
- package/dist-scalprum/static/6800.ddabed69.chunk.js +0 -2
- package/dist-scalprum/static/6800.ddabed69.chunk.js.map +0 -1
- package/dist-scalprum/static/7005.d548f8f1.chunk.js +0 -2
- package/dist-scalprum/static/7005.d548f8f1.chunk.js.map +0 -1
- package/dist-scalprum/static/7057.fcd688c7.chunk.js +0 -2
- package/dist-scalprum/static/7057.fcd688c7.chunk.js.map +0 -1
- package/dist-scalprum/static/7270.301a3c46.chunk.js +0 -2
- package/dist-scalprum/static/7270.301a3c46.chunk.js.map +0 -1
- package/dist-scalprum/static/9051.f095a8a1.chunk.js +0 -2
- package/dist-scalprum/static/9051.f095a8a1.chunk.js.map +0 -1
- package/dist-scalprum/static/9079.b6d5c19c.chunk.js +0 -2
- package/dist-scalprum/static/9079.b6d5c19c.chunk.js.map +0 -1
- package/dist-scalprum/static/9625.b0c6610a.chunk.js +0 -2
- package/dist-scalprum/static/9625.b0c6610a.chunk.js.map +0 -1
- package/dist-scalprum/static/9838.589f2156.chunk.js +0 -2
- package/dist-scalprum/static/9838.589f2156.chunk.js.map +0 -1
- package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js +0 -2
- package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js.map +0 -1
- /package/dist-scalprum/static/{1584.ae3779f0.chunk.js.LICENSE.txt → 1340.7c4f4722.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{3118.daee3324.chunk.js.LICENSE.txt → 20.b3a37d1d.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{4083.488ff7a9.chunk.js.LICENSE.txt → 4083.811c4e7a.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{5010.6241b64f.chunk.js.LICENSE.txt → 5010.4f67737b.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6371.f183dddb.chunk.js.LICENSE.txt → 635.f63679a5.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6386.2d20c412.chunk.js.LICENSE.txt → 6386.5922f271.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.LICENSE.txt → 8563.6501eafb.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/3917.888fba36.chunk.js","mappings":"iTAeA,MAAMA,GAAYC,EAAAA,EAAAA,GAAWC,IAAU,CACrCC,KAAM,CACJC,MAAO,IACPC,SAAU,IACVC,QAASJ,EAAMK,QAAQ,GACvBC,YAAa,aAAaN,EAAMO,QAAQC,UACxCC,gBAAiBT,EAAMO,QAAQG,WAAWC,MAC1CC,OAAQ,OACRC,UAAW,QAEbC,aAAc,CACZC,WAAY,IACZC,SAAU,UACVC,cAAe,YACfC,cAAe,SACfC,MAAOnB,EAAMO,QAAQa,KAAKC,UAC1BC,aAActB,EAAMK,QAAQ,GAC5BkB,QAAS,OACTC,WAAY,SACZC,eAAgB,gBAChBC,OAAQ,UACRC,WAAY,QAEdC,cAAe,CACbN,aAActB,EAAMK,QAAQ,IAE9BwB,SAAU,CACRzB,QAASJ,EAAMK,QAAQ,KAEzByB,cAAe,CACbd,SAAU,YAEZe,YAAa,CACXC,UAAWhC,EAAMK,QAAQ,IAE3B4B,MAAO,CACLjB,SAAU,UACVG,MAAOnB,EAAMO,QAAQa,KAAKC,UAC1Ba,WAAYlC,EAAMK,QAAQ,OA4BjB8B,EAAc,EACzBC,WACAC,UACAC,WACAC,cAEA,MAAMC,EAAU1C,KACT2C,EAAmBC,GAAwBC,IAAAA,SAChD,IAAIC,IAAIR,EAASS,OAAOC,GAAKA,EAAEC,WAAWC,IAAIF,GAAKA,EAAEG,MA2BjDC,EAAmBC,OAAOC,OAAOf,GAASgB,KAC9CD,GAAUA,EAAOE,OAAS,GAY5B,OACE,UAACC,EAAAA,EAAGA,CAACC,UAAWhB,EAAQvC,K,WACtB,UAACsD,EAAAA,EAAGA,CAAChC,QAAQ,OAAOE,eAAe,gBAAgBD,WAAW,SAASiC,GAAI,E,WACzE,SAACC,EAAAA,EAAUA,CAACC,QAAQ,Y,SAAY,YAC/BT,IACC,SAACU,EAAAA,EAAMA,CACLC,KAAK,QACL1C,MAAM,UACN2C,QAjBU,KAClB,MAAMC,EAA8B,CAAC,EACrC3B,EAAS4B,QAAQC,IACfF,EAAeE,EAAQhB,IAAM,KAE/BX,EAASyB,GACTxB,SAAAA,K,SAYO,kBAML,SAAC2B,EAAAA,EAAOA,CAAAA,GAEP9B,EAASY,IAAIiB,IACZ,MAAME,EAAc1B,EAAkB2B,IAAIH,EAAQhB,IAC5CoB,GAAiBhC,EAAQ4B,EAAQhB,KAAO,IAAIK,OAElD,OACE,UAACC,EAAAA,EAAGA,CAAkBC,UAAWhB,EAAQZ,cAAe0C,GAAI,E,WAC1D,UAACf,EAAAA,EAAGA,CACFC,UAAWhB,EAAQ1B,aACnBgD,QAAS,KAAMS,OA9DJC,EA8DkBP,EAAQhB,QA7D/CP,EAAqB+B,IACnB,MAAMC,EAAO,IAAI9B,IAAI6B,GAMrB,OALIC,EAAKN,IAAII,GACXE,EAAKC,OAAOH,GAEZE,EAAKE,IAAIJ,GAEJE,IARW,IAACF,G,WAgEX,UAACjB,EAAAA,EAAGA,CAAChC,QAAQ,OAAOC,WAAW,S,WAC7B,SAACqD,OAAAA,C,SAAMZ,EAAQa,QACdT,EAAgB,IACf,UAACQ,OAAAA,CAAKrB,UAAWhB,EAAQP,M,UAAO,IAAEoC,EAAc,UAGnDF,GACC,SAACY,EAAAA,EAAcA,CAAC/D,SAAS,WAEzB,SAACgE,EAAAA,EAAcA,CAAChE,SAAS,cAI7B,SAACiE,EAAAA,EAAQA,CAACC,IAAKf,E,UACb,SAACgB,EAAAA,EAASA,C,SACPlB,EAAQmB,QAAQpC,IAAIqC,IACnB,SAACC,EAAAA,EAAgBA,CAEfC,SACE,SAACC,EAAAA,EAAQA,CACPC,SAAUpD,EAAQ4B,EAAQhB,KAAO,IAAIyC,SAASL,EAAOM,OACrDrD,SAAU,IAzEH,EAACkC,EAAmBmB,KAC/C,MAAMC,EAAgBvD,EAAQmC,IAAc,GACtCqB,EAAYD,EAAcF,SAASC,GACrCC,EAAc/C,OAAOiD,GAAKA,IAAMH,GAChC,IAAIC,EAAeD,GAEvBrD,EAAS,IACJD,EACH,CAACmC,GAAYqB,KAkEOE,CAAqB9B,EAAQhB,GAAIoC,EAAOM,OAE1C9B,KAAK,QACLL,UAAWhB,EAAQX,SACnBV,MAAM,YAGV6E,OACE,UAACzC,EAAAA,EAAGA,CAAChC,QAAQ,OAAOC,WAAW,S,WAC7B,SAACqD,OAAAA,CAAKrB,UAAWhB,EAAQV,c,SACtBuD,EAAOW,aAEQC,IAAjBZ,EAAOpD,QACN,UAAC4C,OAAAA,CAAKrB,UAAWhB,EAAQP,M,UAAO,IAAEoD,EAAOpD,MAAM,WAlBhDoD,EAAOM,cAtBZ1B,EAAQhB,S,kBCzIrB,SAASiD,EACdC,GAEA,OAAKA,GAAoC,IAAtBA,EAAW7C,OAIb6C,EAAWC,KAC1BC,GAAgB,aAAXA,EAAEC,MAAoC,SAAbD,EAAEE,QAEb,WAENJ,EAAWC,KACxBC,GAAgB,WAAXA,EAAEC,MAAkC,SAAbD,EAAEE,QAEb,SAEJJ,EAAWC,KACxBC,GAAgB,WAAXA,EAAEC,MAAkC,SAAbD,EAAEE,QAEb,SAEZ,UAlBE,SAmBX,C,sCCnCIC,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAI/D,EAAQ8D,EAAwB,EAAQ,QAIxCE,GAAW,EAFMH,EAAuB,EAAQ,QAElBI,SAAuBjE,EAAMkE,cAAc,OAAQ,CACnFC,EAAG,mDACD,cAEJJ,EAAQ,EAAUC,C,sBCjBdH,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAI/D,EAAQ8D,EAAwB,EAAQ,QAIxCE,GAAW,EAFMH,EAAuB,EAAQ,QAElBI,SAAuBjE,EAAMkE,cAAc,OAAQ,CACnFC,EAAG,gKACD,eAEJJ,EAAQ,EAAUC,C,wECjBH,SAASI,EAASC,EAAIC,QACpB,IAATA,IAAmBA,EAAO,IAC9B,IAAIC,ECDO,SAAoBF,EAAIC,EAAME,QAC5B,IAATF,IAAmBA,EAAO,SACT,IAAjBE,IAA2BA,EAAe,CAAEC,SAAS,IACzD,IAAIC,GAAa,IAAAC,QAAO,GACpBC,GAAY,EAAAC,EAAA,KACZN,GAAK,IAAAO,UAASN,GAAeO,EAAQR,EAAG,GAAIS,EAAMT,EAAG,GACrDU,GAAW,IAAAC,aAAY,WAEvB,IADA,IAAIC,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAU1E,OAAQyE,IACpCD,EAAKC,GAAMC,UAAUD,GAEzB,IAAIE,IAAWZ,EAAWa,QAI1B,OAHKR,EAAMN,SACPO,EAAI,SAAUQ,GAAa,OAAQ,IAAAC,WAAS,IAAAA,UAAS,CAAC,EAAGD,GAAY,CAAEf,SAAS,GAAU,GAEvFJ,EAAGqB,WAAM,EAAQP,GAAMQ,KAAK,SAAU3C,GAEzC,OADA4B,KAAeU,IAAWZ,EAAWa,SAAWP,EAAI,CAAEhC,MAAOA,EAAOyB,SAAS,IACtEzB,CACX,EAAG,SAAU4C,GAET,OADAhB,KAAeU,IAAWZ,EAAWa,SAAWP,EAAI,CAAEY,MAAOA,EAAOnB,SAAS,IACtEmB,CACX,EACJ,EAAGtB,GACH,MAAO,CAACS,EAAOE,EACnB,CDvBaY,CAAWxB,EAAIC,EAAM,CAC1BG,SAAS,IACTM,EAAQR,EAAG,GAAIU,EAAWV,EAAG,GAIjC,OAHA,IAAAuB,WAAU,WACNb,GACJ,EAAG,CAACA,IACGF,CACX,C,wGEEO,MAAMgB,EAAiB,EAAGC,WAAUC,aAAYC,WAAUC,mBAC/D,MAAM,QAAEC,EAAO,QAAE3B,EAAO,MAAEmB,IAAUS,EAAAA,EAAAA,GAAsBJ,GAE1D,OAAIxB,GAEA,SAAC7D,EAAAA,EAAGA,CAAC0F,EAAG,E,SACL,IAAIC,MAAM,IAAIlG,IAAI,CAACmG,EAAGC,KACrB,SAAC7F,EAAAA,EAAGA,CAAS0F,EAAG,E,UACd,SAACI,EAAAA,EAAQA,CAAC1F,QAAQ,OAAOzD,MAAM,UADvBkJ,MAQdb,GAEA,UAAChF,EAAAA,EAAGA,CAAC0F,EAAG,E,WACN,UAACvF,EAAAA,EAAUA,CAACvC,MAAM,Q,UAAQ,gCACMoH,EAAMe,YAEtC,SAAC5F,EAAAA,EAAUA,CAACC,QAAQ,QAAQxC,MAAM,gB,SAAgB,sDAOnD4H,GAkBE,qB,SAAGJ,IAjBJE,GACK,qB,SAAGA,KAGV,UAACtF,EAAAA,EAAGA,CAAC0F,EAAG,E,WACN,SAACvF,EAAAA,EAAUA,CAACvC,MAAM,gB,SACf2H,GAAgB,iDAEnB,SAACvF,EAAAA,EAAGA,CAACe,GAAI,E,UACP,UAACZ,EAAAA,EAAUA,CAACC,QAAQ,UAAUxC,MAAM,gB,UAAgB,wBAC5ByH,EAAWW,a,oPChD7C,MAAMC,EAA0B,KAC9B,MAAM,EAAEC,IAAM,OAAkB,KAChC,MAAO,CACLC,IAAK,gDACLC,MAAO,CACL,CACE7E,MAAO2E,EAAE,+BACTG,KAAM,UACNC,MAAO,CACL,CAEE/E,MAAO2E,EAAE,mCACTC,IAAK,2E,eCZjB,SAASI,EAAQC,GACf,MAAQ9G,GAAI+G,EAAG,SAAEC,EAAW,OAAuBC,GAASH,EAEtDI,GADM,IAAAC,UACKC,cAAcL,IAAQC,EACvC,OAAuB,IAAAK,KAAIH,EAAM,IAAKD,GACxC,CAyBA,SAASK,EAASR,GAChB,OAAuB,IAAAO,KAAIR,EAAS,CAAE7G,GAAI,UAAW8G,GACvD,C,eCXA,MAAMjK,GAAY,IAAAC,YAChB,CACEyK,YAAa,CACXrK,SAAU,IACVsK,SAAU,KAEZC,SAAU,CACRC,WAAY,WAGhB,CAAEpB,KAAM,2BAEJqB,EAAc,EAAGhB,WACrB,MAAMiB,GAAM,IAAAT,UACND,EAAOP,EAAOiB,EAAIR,cAAcT,IAASW,EAAWA,EAC1D,OAAuB,IAAAD,KAAIH,EAAM,CAAC,IAE9BW,EAAc,EAAGC,WAA2B,IAAAT,KAAI,KAAM,CAAEU,GAAID,EAAKrB,IAAKf,SAAUoC,EAAKjG,OAASiG,EAAKrB,MACnGuB,EAAkB,EAAGC,WACF,IAAAC,MAAKC,EAAA,EAAU,CAAEC,QAAQ,EAAO1C,SAAU,EAC/C,IAAA2B,KAAIgB,EAAA,EAAc,CAAE3C,UAA0B,IAAA2B,KAAIM,EAAa,CAAEhB,KAAMsB,EAAKtB,UAC5E,IAAAU,KACdiB,EAAA,EACA,CACEC,QAASN,EAAKpG,MACdzD,UAAW6J,EAAKrB,OAAO4B,OACrB,CAAChH,EAAMsG,EAAMW,IAAQ,IAChBjH,EACHiH,EAAM,IAAqB,IAAApB,KAAI,KAAM,CAAC,EAAGoB,IACzB,IAAApB,KAAIQ,EAAa,CAAEC,QAAQA,EAAKrB,MAElD,SAMV,SAASiC,EAAc5B,GACrB,MAAM,IAAQ,OAAkB,MAC1B,MAAEjF,EAAK,MAAE6E,EAAK,SAAEhB,GAAaoB,GAC3BJ,MAAOiC,GF1CjB,WACE,MACMC,GADY,IAAAC,gBACOC,IAAI,EAAAC,cACvBC,EAAgBJ,GAAQK,kBAAkB,eAC1CC,EAAuB3C,IAC7B,OAAKyC,EAGE,CACLvC,IAAKuC,EAAcG,UAAU,OAC7BzC,MAAOsC,EAAcI,eAAe,SAASC,QAASC,IAAa,CACjEzH,MAAOyH,EAASH,UAAU,SAC1BxC,KAAM2C,EAASC,kBAAkB,QACjC3C,OAAQ0C,EAASE,uBAAuB,UAAY,IAAIH,QACrDI,IAAa,CACZhD,IAAKgD,EAASN,UAAU,OACxBtH,MAAO4H,EAASF,kBAAkB,UAAY,UAV7CL,CAeX,CEqBiCQ,IACxBC,EAAaC,IAAkB,IAAApF,WAAS,IACxCqF,EAAUC,IAAe,IAAAtF,UAAS,MACnCjF,EAAU1C,IACVmM,GAAgB,IAAAe,QAAO,EAAAhB,cAAcE,kBAAkB,eACvDe,GAAgB,EAAAC,EAAA,GACnBlN,GAAUA,EAAMmN,YAAYC,KAAK,OAE9BC,EAAkBC,IACtBP,EAAYO,EAAMC,eAClBV,GAAe,IAEXW,EAAsB,KAC1BX,GAAe,IAEjB,OAAKZ,GAGkB,IAAAd,MAAK,EAAAsC,SAAU,CAAE9E,SAAU,EAChC,IAAA2B,KAAI/G,EAAA,EAAK,CAAEhC,QAAS,OAAQmM,GAAI,EAAG/E,SAAUsE,GAAgC,IAAA3C,KAC3FqD,EAAA,EACA,CACExM,MAAO,UACP0C,KAAM,QACNC,QAASuJ,EACT,cAAe,iBACf,aAAc,UACd1E,UAA0B,IAAA2B,KAAIC,EAAU,CAAC,MAEzB,IAAAD,KAClB1G,EAAA,EACA,CACE,cAAe,iBACf,aAAc,UACdzC,MAAO,UACP2C,QAASuJ,EACTO,WAA2B,IAAAtD,KAAIC,EAAU,CAAC,GAC1C5B,SAAUc,EAAE,4BAGA,IAAA0B,MACd0C,EAAA,GACA,CACE,cAAe,yBACfC,KAAMlB,EACNE,WACAiB,aAAc,CACZC,SAAU,SACVC,WAAY,SAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,SAEdE,QAASX,EACT7E,SAAU,EACQ,IAAAwC,MACdiD,EAAA,EACA,CACE5K,UAAWhB,EAAQgI,YACnB6D,cAAeC,QAAQxB,GACvBnE,SAAU,CACR7D,IAAyB,IAAAwF,KACvBc,EAAA,EACA,CACEC,QAAQ,EACR7J,WAAY,aACZgC,UAAWhB,EAAQkI,SACnB/B,UAA0B,IAAA2B,KAAI5G,EAAA,EAAY,CAAEC,QAAS,YAAagF,SAAU7D,MAGhF,EAAAyJ,SAASvL,IAAI2F,EAAU,CAAC6F,EAAOpF,KAAsB,IAAAkB,KACnDc,EAAA,EACA,CACEC,QAAQ,EACR7J,WAAY,aACZgC,UAAWhB,EAAQkI,SACnB/B,SAAU6F,GAEZ,SAASpF,OAEVO,GAASiC,GAAa5I,IAAI,CAACkI,EAAM9B,KAAsB,IAAAkB,KAAIW,EAAiB,CAAEC,QAAQ,QAAQ9B,UAIrF,IAAAkB,KAAImE,EAAA,EAAe,CAAE9F,UAA0B,IAAA2B,KAC7D1G,EAAA,EACA,CACEzC,MAAO,UACP2C,QAAS0J,EACT,aAAc,QACd7E,SAAUc,EAAE,iCA3Ef,IAkFX,C,sDC9JO,MAAMiF,EAA+BC,IAC1C,MAAMC,EAAO,CAAEC,OAAQ,QACvB,OAAQF,GACN,IAAK,WACH,MAAO,IAAKC,EAAMnO,gBAAiB,UAAWU,MAAO,QACvD,IAAK,SACH,MAAO,IAAKyN,EAAMnO,gBAAiB,UAAWU,MAAO,QACvD,IAAK,SACH,MAAO,IAAKyN,EAAMnO,gBAAiB,UAAWU,MAAO,QAGvD,QACE,MAAO,IAAKyN,EAAMnO,gBAAiB,UAAWU,MAAO,UAQ9C2N,EAAmCH,IAC9C,MAAMC,EAAO,CAAEC,OAAQ,QACvB,OAAQF,GACN,IAAK,WACH,MAAO,IAAKC,EAAMnO,gBAAiB,UAAWU,MAAO,QACvD,IAAK,SACH,MAAO,IAAKyN,EAAMnO,gBAAiB,UAAWU,MAAO,QAGvD,QACE,MAAO,IAAKyN,EAAMnO,gBAAiB,UAAWU,MAAO,UAQ9C4N,EAAyBC,IACpC,OAAQA,GACN,IAAK,aACH,MAAO,CAAEvO,gBAAiB,UAAWU,MAAO,QAC9C,IAAK,eACH,MAAO,CAAEV,gBAAiB,UAAWU,MAAO,QAC9C,IAAK,aACH,MAAO,CAAEV,gBAAiB,UAAWU,MAAO,QAC9C,IAAK,UACH,MAAO,CAAEV,gBAAiB,UAAWU,MAAO,QAC9C,QACE,MAAO,CAAC,G,sBCpDVqF,EAAyB,EAAQ,MAEjCC,EAA0B,EAAQ,OAKtCC,EAAQ,OAAU,EAElB,IAAI/D,EAAQ8D,EAAwB,EAAQ,QAIxCE,GAAW,EAFMH,EAAuB,EAAQ,QAElBI,SAAuBjE,EAAMkE,cAAc,OAAQ,CACnFC,EAAG,0HACD,eAEJJ,EAAQ,EAAUC,C,kcCqBlB,MAAM7G,GAAYC,EAAAA,EAAAA,GAAYC,IAAW,CACvCiP,UAAW,CACT1N,QAAS,OACTX,OAAQ,OACRsO,UAAW,KAEbC,eAAgB,CACdC,KAAM,EACNC,SAAU,OACVjP,QAAS,IAEXkP,aAAc,CACZlP,QAASJ,EAAMK,QAAQ,GACvBI,gBAAiBT,EAAMO,QAAQG,WAAWkG,SAE5C2I,aAAc,CACZxO,WAAY,IACZO,aAActB,EAAMK,QAAQ,GAC5Bc,MAAOnB,EAAMO,QAAQa,KAAKC,UAC1BJ,cAAe,YACfD,SAAU,WAEZwO,YAAa,CACXpP,QAASJ,EAAMK,QAAQ,GACvBI,gBAAiBT,EAAMO,QAAQG,WAAWkG,QAC1C6I,aAAc,aAAazP,EAAMO,QAAQC,UACzCe,QAAS,OACTC,WAAY,SACZC,eAAgB,oBAadiO,EAAiB,EACrB5B,OACA6B,UACAC,SACAC,aACA1B,UACA2B,gB,IAQoBH,EAmCPA,EAzCb,MAAOI,EAAcC,GAAmBrN,IAAAA,SAAe,IACjDsN,EAAyB,YAAXL,EAAuB,UAAY,SACjDM,EACO,YAAXN,EAAuB,eAAiB,eAEpCO,EAAsB,WAAXP,EACXQ,GAAcT,SAAyB,QAAzBA,EAAAA,EAASU,KAAKC,mBAAdX,IAAAA,OAAAA,EAAAA,EAA2BY,SAAU,GACnDC,GAAaL,GAAWJ,IAAiBK,EAS/C,OANAzN,IAAAA,UAAgB,KACTmL,GACHkC,EAAgB,KAEjB,CAAClC,KAGF,UAAC2C,EAAAA,EAAMA,CACL3C,KAAMA,EACNK,QAAS0B,OAAa5J,EAAYkI,EAClC1D,SAAS,KACTiG,WAAS,E,WAET,SAACC,EAAAA,EAAWA,C,SACTR,GACC,UAAC5M,EAAAA,EAAGA,CAAChC,QAAQ,OAAOC,WAAW,SAASoP,MAAO,CAAEC,IAAK,G,WACpD,SAACC,EAAAA,EAAUA,CAAC3P,MAAM,WAClB,UAAC0D,OAAAA,C,UAAMoL,EAAY,kBAGrB,UAACpL,OAAAA,C,UAAMoL,EAAY,iBAGvB,SAACc,EAAAA,EAAaA,C,SACXpB,IACC,sB,WACE,UAAC1G,IAAAA,C,WACC,SAAC+H,SAAAA,C,SAAO,UAAc,IAAErB,EAAQU,KAAKC,YAAYC,WAEnD,UAACtH,IAAAA,C,WACC,SAAC+H,SAAAA,C,SAAO,SAAc,KACK,QAA1BrB,EAAAA,EAAQU,KAAKY,qBAAbtB,IAAAA,OAAAA,EAAAA,EAA4BpG,OAAQ,cAEvC,UAACN,IAAAA,C,WACC,SAAC+H,SAAAA,C,SAAO,UAAc,IAAErB,EAAQU,KAAKa,aAEvC,UAAC3N,EAAAA,EAAGA,CAACE,GAAI,E,WACP,SAACC,EAAAA,EAAUA,CACTC,QAAQ,QACRwN,UAAU,OACVP,MAAO,CAAE7P,WAAY,Q,SACtB,cAEa,KACd,SAAC2C,EAAAA,EAAUA,CACTC,QAAQ,QACRwN,UAAU,OACVP,MAAO,CAAEjG,WAAY,Y,SAEpBgF,EAAQU,KAAKe,SAAW,SAG5BjB,IACC,UAAC5M,EAAAA,EAAGA,CAACe,GAAI,E,WACP,UAACZ,EAAAA,EAAUA,CAACC,QAAQ,QAAQxC,MAAM,gBAAgBkQ,cAAY,E,UAAC,SACxD,SAACL,SAAAA,C,SAAQZ,IAAqB,6BAErC,SAACkB,EAAAA,EAASA,CACRZ,WAAS,EACT/M,QAAQ,WACRE,KAAK,QACL8B,MAAOoK,EACPzN,SAAWiP,GAAMvB,EAAgBuB,EAAEC,OAAO7L,OAC1C8L,SAAU5B,EACV6B,WAAS,EACTC,YAAavB,aAOzB,UAAC3B,EAAAA,EAAaA,C,WACZ,SAAC7K,EAAAA,EAAMA,CAACE,QAASqK,EAASsD,SAAU5B,E,SAAY,YAGhD,SAACjM,EAAAA,EAAMA,CACLE,QAASgM,EACT3O,MAAkB,YAAXyO,EAAuB,UAAY,YAC1CjM,QAAQ,YACR8N,SAAU5B,IAAeW,EACzB5C,UACEiC,GACE,SAAC+B,EAAAA,EAAgBA,CAAC/N,KAAM,GAAI1C,MAAM,iBAChC8E,E,SAGL4J,EAAaK,EAAkBD,WAgBpC4B,EAAmB,EACvB/D,OACAgE,WACAlC,SACAC,aACA1B,UACA2B,gBAEA,MAAMiC,EAAuB,YAAXnC,EACZK,EAAc8B,EAAY,cAAgB,aAC1C7B,EAAkB6B,EAAY,eAAiB,eAErD,OACE,UAACtB,EAAAA,EAAMA,CACL3C,KAAMA,EACNK,QAAS0B,OAAa5J,EAAYkI,EAClC1D,SAAS,KACTiG,WAAS,E,WAET,UAACC,EAAAA,EAAWA,C,UACToB,EAAY,UAAY,SAAS,IAAED,EAASxO,OAAO,gBAEtD,UAACyN,EAAAA,EAAaA,C,WACZ,UAACrN,EAAAA,EAAUA,CAACC,QAAQ,QAAQqO,WAAS,E,UAAC,oBAClBD,EAAY,UAAY,SAAS,+BAGrD,SAACxO,EAAAA,EAAGA,CAACE,GAAI,EAAGwO,UAAW,IAAK5C,SAAS,O,SAClCyC,EAAS9O,IAAK2M,I,IASRA,E,OARL,SAACpM,EAAAA,EAAGA,CAEFE,GAAI,EACJwF,EAAG,EACHiJ,QAAQ,qB,UAER,UAACxO,EAAAA,EAAUA,CAACC,QAAQ,Q,WAClB,SAACqN,SAAAA,C,SAAQrB,EAAQU,KAAKC,YAAYC,SAAgB,KAAG,KAC1B,QAA1BZ,EAAAA,EAAQU,KAAKY,qBAAbtB,IAAAA,OAAAA,EAAAA,EAA4BpG,OAAQ,UAAU,KAC9CoG,EAAQU,KAAKa,SAAS,QARpB,GAAGvB,EAAQwC,SAASC,aAAazC,EAAQwC,SAAS5I,gBAc/D,UAACkF,EAAAA,EAAaA,C,WACZ,SAAC7K,EAAAA,EAAMA,CAACE,QAASqK,EAASsD,SAAU5B,E,SAAY,YAGhD,SAACjM,EAAAA,EAAMA,CACLE,QAASgM,EACT3O,MAAO4Q,EAAY,UAAY,YAC/BpO,QAAQ,YACR8N,SAAU5B,EACVjC,UACEiC,GACE,SAAC+B,EAAAA,EAAgBA,CAAC/N,KAAM,GAAI1C,MAAM,iBAChC8E,E,SAGL4J,EAAaK,EAAkBD,WAWpCoC,EAAqB,EAAG1C,cAC5B,MAAMnN,EAAU1C,IAEhB,OACE,UAACyD,EAAAA,EAAGA,CAACC,UAAWhB,EAAQ8M,aAAcxL,QAAUyN,GAAMA,EAAEe,kB,WACtD,SAAC5O,EAAAA,EAAUA,CAACF,UAAWhB,EAAQ+M,a,SAAc,cAC7C,SAAC7L,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjBgM,EAAQU,KAAKe,SAAW,6BAa3BmB,GAAqBxS,EAAAA,EAAAA,GAAYC,IAAW,CAChDwS,eAAgB,CACdpS,QAASJ,EAAMK,QAAQ,GACvBI,gBAAiBT,EAAMO,QAAQkS,QAAQC,KAAO,KAC9CC,aAAc3S,EAAM4S,MAAMD,aAC1BrR,aAActB,EAAMK,QAAQ,GAC5BwO,OAAQ,aAAa7O,EAAMO,QAAQkS,QAAQC,UAE7CG,eAAgB,CACdzS,QAASJ,EAAMK,QAAQ,GACvBI,gBAAiBT,EAAMO,QAAQgI,MAAMmK,KAAO,KAC5CC,aAAc3S,EAAM4S,MAAMD,aAC1BrR,aAActB,EAAMK,QAAQ,GAC5BwO,OAAQ,aAAa7O,EAAMO,QAAQgI,MAAMmK,UAE3CI,eAAgB,CACd1S,QAASJ,EAAMK,QAAQ,GACvBI,gBAAiBT,EAAMO,QAAQwS,QAAQL,KAAO,KAC9CC,aAAc3S,EAAM4S,MAAMD,aAC1BrR,aAActB,EAAMK,QAAQ,GAC5BwO,OAAQ,aAAa7O,EAAMO,QAAQwS,QAAQL,UAE7CM,QAAS,CACPzR,QAAS,OACTC,WAAY,SACZqP,IAAK7Q,EAAMK,QAAQ,IAErB4S,UAAW,CACTjR,UAAWhC,EAAMK,QAAQ,GACzBD,QAAS,EACT8S,UAAW,QAEbC,UAAW,CACT/S,QAASJ,EAAMK,QAAQ,KACvBiB,aAActB,EAAMK,QAAQ,GAC5BI,gBAAiBT,EAAMO,QAAQG,WAAWC,MAC1CgS,aAAc3S,EAAM4S,MAAMD,aAC1B9D,OAAQ,aAAa7O,EAAMO,QAAQC,WAErC4S,UAAW,CACTrS,WAAY,IACZC,SAAU,WACVM,aAActB,EAAMK,QAAQ,KAE9ByI,aAAc,CACZ9H,SAAU,WACVG,MAAOnB,EAAMO,QAAQgI,MAAMmK,KAC3BW,WAAY,YACZC,UAAW,cAEbC,aAAc,CACZvR,UAAWhC,EAAMK,QAAQ,GACzBD,QAASJ,EAAMK,QAAQ,QAIrBmT,EAAkB,EACtB1F,OACA2F,UACA1B,YACA5D,cAEA,MAAM3L,EAAU+P,KACTmB,EAAYC,IAAiBlM,EAAAA,EAAAA,WAAS,GACvCmM,EAAiBH,EAAQ5Q,OAAQgR,GAAaA,EAAIpB,SAClDqB,EAAgBL,EAAQ5Q,OAAQgR,IAAcA,EAAIpB,SAClDsB,EAAoBH,EAAetQ,OAAS,EAElD,OACE,UAACmN,EAAAA,EAAMA,CACL3C,KAAMA,EACNK,QAASA,EACT1D,SAAS,KACTiG,WAAS,E,WAET,SAACC,EAAAA,EAAWA,C,UACV,SAACpN,EAAAA,EAAGA,CAAChC,QAAQ,OAAOC,WAAW,SAASoP,MAAO,CAAEC,IAAK,G,SACnDkD,GACC,sB,WACE,SAACjD,EAAAA,EAAUA,CAACF,MAAO,CAAEzP,MAAO,cAC5B,UAAC0D,OAAAA,C,UAAK,QAAMkN,EAAY,UAAY,SAAS,gCAG/C,sB,WACE,SAACjB,EAAAA,EAAUA,CAAC3P,MAAM,WAClB,UAAC0D,OAAAA,C,UAAK,QAAMkN,EAAY,UAAY,SAAS,qBAKrD,UAAChB,EAAAA,EAAaA,C,UACXgD,IACC,SAACxQ,EAAAA,EAAGA,CAACC,UAAWhB,EAAQgQ,e,UACtB,UAACjP,EAAAA,EAAGA,CAACC,UAAWhB,EAAQwQ,Q,WACtB,SAACgB,EAAAA,EAAeA,CAACpD,MAAO,CAAEzP,MAAO,cACjC,UAACuC,EAAAA,EAAUA,CAACC,QAAQ,Q,WAClB,SAACqN,SAAAA,C,SAAQ4C,EAAetQ,SAAgB,WAAmC,IAA1BsQ,EAAetQ,OAAe,IAAM,GAAG,IAAEyO,EAAY,WAAa,SAAS,yBAMpI,UAACxO,EAAAA,EAAGA,CAACC,UAAWuQ,EAAoBvR,EAAQsQ,eAAiBtQ,EAAQqQ,e,WACnE,UAACtP,EAAAA,EAAGA,CAACC,UAAWhB,EAAQwQ,Q,WACtB,SAAClC,EAAAA,EAAUA,CAAC3P,MAAM,WAClB,UAACuC,EAAAA,EAAUA,CAACC,QAAQ,Q,WAClB,SAACqN,SAAAA,C,SAAQ8C,EAAcxQ,SAAgB,WAAkC,IAAzBwQ,EAAcxQ,OAAe,IAAM,GAAG,iBAI1F,UAACM,EAAAA,EAAMA,CACLC,KAAK,QACLL,UAAWhB,EAAQ+Q,aACnBzP,QAAS,IAAM6P,GAAeD,G,UAE7BA,EAAa,OAAS,OAAO,oBAG/BA,IACC,SAACO,KAAAA,CAAGzQ,UAAWhB,EAAQyQ,U,SACpBa,EAAc9Q,IAAI,CAACkR,EAAQC,KAC1B,UAACC,KAAAA,CAA8B5Q,UAAWhB,EAAQ2Q,U,WAChD,UAACkB,MAAAA,CAAI7Q,UAAWhB,EAAQ4Q,U,UACrBc,EAAO9B,UAAU,IAAE8B,EAAO3K,SAE7B,SAAC8K,MAAAA,CAAI7Q,UAAWhB,EAAQsG,a,SACrBoL,EAAO3L,OAAS,oBALZ2L,EAAO3K,MAAQ4K,aAalC,SAAC1F,EAAAA,EAAaA,C,UACZ,SAAC7K,EAAAA,EAAMA,CAACE,QAASqK,EAAShN,MAAM,UAAUwC,QAAQ,Y,SAAY,gBAQzD2Q,EAAqB,K,IAihBjB3O,EAhhBf,MAAMnD,EAAU1C,IACVyU,GAAcvH,EAAAA,EAAAA,QAAOwH,EAAAA,gBACrBC,GAAWzH,EAAAA,EAAAA,QAAO0H,EAAAA,aAClBC,GAAc3H,EAAAA,EAAAA,QAAO4H,EAAAA,IACpBC,EAASC,IAAcrN,EAAAA,EAAAA,UAAS,IAChCsN,EAAkBC,IAAuBvN,EAAAA,EAAAA,UAAmB,KAC5DwN,EAAaC,IAAkBzN,EAAAA,EAAAA,UAKnC,CACDqG,MAAM,EACN6B,QAAS,KACTC,OAAQ,UACRC,YAAY,KAEPsF,EAAiBC,IAAsB3N,EAAAA,EAAAA,UAK3C,CACDqG,MAAM,EACNgE,SAAU,GACVlC,OAAQ,UACRC,YAAY,KAEPwF,EAAsBC,IAA2B7N,EAAAA,EAAAA,UAIrD,CACDqG,MAAM,EACN2F,QAAS,GACT1B,WAAW,KAEN1P,EAASkT,IAAc9N,EAAAA,EAAAA,UAAsB,CAClDlB,OAAQ,GACRiP,WAAY,GACZC,KAAM,MAIN1M,QAAS2M,EACTtO,QAASuO,EACTpN,MAAOqN,IACL5M,EAAAA,EAAAA,GAAsB6M,EAAAA,KAGxB9M,QAAS+M,EACT1O,QAAS2O,EACTxN,MAAOyN,IACLhN,EAAAA,EAAAA,GAAsBiN,EAAAA,IAEpBC,EACJP,GAA8BI,EAC1BI,EACJP,GAA4BI,GAExB,MAAErQ,EAAK,QAAEyB,EAAO,MAAEmB,IAAUxB,EAAAA,EAAAA,GAASqP,UACzC,MACMC,SADiB9B,EAAY+B,wBACPC,cAE5B,IACE,MAAOC,EAAgBC,SAAqBC,QAAQC,IAAI,CACtDhC,EAAYiC,iBACZjC,EAAYkC,mBAGRC,EAAcN,EAAe7M,OAAS,GACtCoN,EAAmB,IAAInU,IAE7B,IAAK,MAAMoU,KAAWP,EAAY9M,OAAS,GAAI,C,IAC/BqN,EAAAA,GAAgB,QAAhBA,EAAAA,EAAQ7E,gBAAR6E,IAAAA,GAA6B,QAA7BA,EAAAA,EAAkBC,mBAAlBD,IAAAA,OAAAA,EAAAA,EAAgC,yBAChCX,GACZU,EAAiBnS,IACf,GAAGoS,EAAQ7E,SAASC,aAAa4E,EAAQ7E,SAAS5I,OAGxD,CAEA,MAAO,CAAEuN,cAAaT,aAAYU,mBAEpC,CAAE,MAAMG,GACN,MAAMpO,EAAeoO,aAAeC,MAAQD,EAAI5N,QAAU,yBAM1D,OALAmL,EAAS2C,KAAK,CACZ9N,QAAS,4BAA4BR,IACrCvH,QAAS,YACT8V,SAAU,UAEL,CACLP,YAAa,GACbT,aACAU,iBAAkB,IAAInU,IAE1B,GACC,CAAC+R,EAAaJ,EAAaM,IAExByC,GAAkCC,EAAAA,EAAAA,SAAQ,KAC9C,KAAK5R,aAAAA,EAAAA,EAAOmR,aAAa,MAAO,GAEhC,MAAMU,EAAe,CAAEC,SAAU,EAAGC,QAAS,EAAGC,OAAQ,GAClDC,EAAmB,IAAIC,IACvBC,EAAa,IAAID,IAgBvB,OAdAlS,EAAMmR,YAAY9S,QAAS+T,I,IACKA,EAGXA,EAHnB,MAAMxR,GAASL,EAAAA,EAAAA,GAAuB,QAAR6R,EAAAA,EAAExR,cAAFwR,IAAAA,OAAAA,EAAAA,EAAU5R,YACxCqR,EAAajR,KAEb,MAAMiP,GAAiC,QAApBuC,EAAAA,EAAE1H,KAAKY,qBAAP8G,IAAAA,OAAAA,EAAAA,EAAsBxO,OAAQ,UACjDqO,EAAiBjQ,IACf6N,GACCoC,EAAiB7L,IAAIyJ,IAAe,GAAK,GAG5C,MAAMC,EAAOsC,EAAE1H,KAAKa,UAAY,UAChC4G,EAAWnQ,IAAI8N,GAAOqC,EAAW/L,IAAI0J,IAAS,GAAK,KAG9C,CACL,CACExS,GAAI,SACJ6B,MAAO,SACPM,QAAS,CACP,CAAEO,MAAO,UAAWK,MAAO,UAAW/D,MAAOuV,EAAaE,SAC1D,CACE/R,MAAO,WACPK,MAAO,WACP/D,MAAOuV,EAAaC,UAEtB,CACE9R,MAAO,SACPK,MAAO,SACP/D,MAAOuV,EAAaG,UAI1B,CACE1U,GAAI,aACJ6B,MAAO,cACPM,QAAS8D,MAAM8O,KAAKJ,EAAiBK,WAAWjV,IAC9C,EAAEuG,EAAMtH,MAAY,CAClB0D,MAAO4D,EACPvD,MAAOuD,EACPtH,WAGJc,UAAW6U,EAAiB/T,KAAO,GAErC,CACEZ,GAAI,OACJ6B,MAAO,OACPM,QAAS8D,MAAM8O,KAAKF,EAAWG,WAAWjV,IAAI,EAAEyS,EAAMxT,MAAY,CAChE0D,MAAO8P,EACPzP,MAAOyP,EAAKyC,OAAO,GAAGC,cAAgB1C,EAAK2C,MAAM,GACjDnW,cAIL,CAAC0D,aAAAA,EAAAA,EAAOmR,cAELuB,IAAmBd,EAAAA,EAAAA,SAAQ,KAC1B5R,aAAAA,EAAAA,EAAOmR,aAELnR,EAAMmR,YAAYjU,OAAQkV,IAC/B,GAAI1V,EAAQkE,OAAOjD,OAAS,EAAG,C,IACCyU,EAA9B,MAAMxR,GAASL,EAAAA,EAAAA,GAAuB,QAAR6R,EAAAA,EAAExR,cAAFwR,IAAAA,OAAAA,EAAAA,EAAU5R,YACxC,IAAK9D,EAAQkE,OAAOb,SAASa,GAAS,OAAO,CAC/C,CACA,GAAIlE,EAAQmT,WAAWlS,OAAS,EAAG,C,IACdyU,EAAnB,MAAMvC,GAAiC,QAApBuC,EAAAA,EAAE1H,KAAKY,qBAAP8G,IAAAA,OAAAA,EAAAA,EAAsBxO,OAAQ,UACjD,IAAKlH,EAAQmT,WAAW9P,SAAS8P,GAAa,OAAO,CACvD,CACA,GAAInT,EAAQoT,KAAKnS,OAAS,EAAG,CAC3B,MAAMmS,EAAOsC,EAAE1H,KAAKa,UAAY,UAChC,IAAK7O,EAAQoT,KAAK/P,SAAS+P,GAAO,OAAO,CAC3C,CACA,OAAO,IAfuB,GAiB/B,CAAC9P,aAAAA,EAAAA,EAAOmR,YAAazU,IA6IlBiW,GAAcC,GACL,IAAIC,KAAKD,GACVE,mBAAmB,QAAS,CACtCC,KAAM,UACNC,MAAO,QACPC,IAAK,YAIHC,GAAiC,CACrC,CACE/T,MAAO,YACPgU,MAAO,0BACPC,OAASC,IACP,SAACtV,EAAAA,EAAUA,CAACC,QAAQ,Q,SAASqV,EAAI3I,KAAKC,YAAYC,UAGtD,CACEzL,MAAO,cACPgU,MAAO,0BACPC,OAASC,I,IACMA,EAAb,MAAMzP,GAA6B,QAAtByP,EAAAA,EAAI3I,KAAKY,qBAAT+H,IAAAA,OAAAA,EAAAA,EAAwBzP,OAAQ,UAC7C,OACE,SAAC0P,EAAAA,GAAIA,CAACjO,GAAI,wBAAwBzB,I,UAChC,SAACyH,SAAAA,C,SAAQzH,QAKjB,CACEzE,MAAO,SACPgU,MAAO,oBACPC,OAASC,I,IACsBA,EAA7B,MAAMrK,GAAQzI,EAAAA,EAAAA,GAAyB,QAAV8S,EAAAA,EAAIzS,cAAJyS,IAAAA,OAAAA,EAAAA,EAAY7S,YACzC,OACE,SAAC+S,EAAAA,EAAIA,CAAClT,MAAO2I,EAAO9K,KAAK,QAAQ+M,OAAO9B,EAAAA,EAAAA,IAAgCH,OAI9E,CACE7J,MAAO,OACPgU,MAAO,gBACPC,OAASC,IACP,SAACE,EAAAA,EAAIA,CAAClT,MAAOgT,EAAI3I,KAAKa,SAAUrN,KAAK,QAAQF,QAAQ,cAGzD,CACEmB,MAAO,YACPgU,MAAO,6BACPC,OAASC,IACP,SAACtV,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjBqV,EAAI7G,SAASgH,kBACVb,GAAWU,EAAI7G,SAASgH,mBACxB,OAIV,CACErU,MAAO,cACPgU,MAAO,oBACPC,OAASC,I,IACFA,EAAL,KAAe,QAAVA,EAAAA,EAAIzS,cAAJyS,IAAAA,OAAAA,EAAAA,EAAY3C,YACf,OACE,SAAC3S,EAAAA,EAAUA,CAACC,QAAQ,QAAQxC,MAAM,gB,SAAgB,MAItD,MAAMiY,EAAWJ,EAAIzS,OAAO8P,WAAWgD,QAAQ,kBAAmB,IAC5DC,EAA2B,WAAbF,EACpB,OACE,UAAC7V,EAAAA,EAAGA,C,WACF,SAACG,EAAAA,EAAUA,CAACC,QAAQ,Q,SACjB2V,EAAc,YAAcF,IAE9BJ,EAAIzS,OAAOgT,aACV,SAAC7V,EAAAA,EAAUA,CAACC,QAAQ,UAAUxC,MAAM,gB,SACjCmX,GAAWU,EAAIzS,OAAOgT,mBAOnC,CACEzU,MAAO,UACP0U,WAAW,EACXT,OAASC,I,IACsBA,EAGsBA,EAEjDrT,EAJF,GAAc,aADAO,EAAAA,EAAAA,GAAyB,QAAV8S,EAAAA,EAAIzS,cAAJyS,IAAAA,OAAAA,EAAAA,EAAY7S,YAChB,OAAO,KAEhC,MAAMsT,EAAgB,GAAGT,EAAI7G,SAASC,cAAmC,QAAtB4G,EAAAA,EAAI3I,KAAKY,qBAAT+H,IAAAA,OAAAA,EAAAA,EAAwBzP,OAAQ,Y,IAEjF5D,EADF,MAAM+T,EACyBD,QAA7B9T,EAAAA,SAAuB,QAAvBA,EAAAA,EAAOoR,wBAAPpR,IAAAA,OAAAA,EAAAA,EAAyBvB,IAAIqV,UAA7B9T,IAAAA,GAAAA,EAGF,OADE+P,GAAyBI,GAAwB4D,GAIjD,UAACnW,EAAAA,EAAGA,CAAChC,QAAQ,OAAOqP,MAAO,CAAEC,IAAK,G,WAChC,SAACjN,EAAAA,EAAMA,CACLC,KAAK,QACL+J,WAAW,SAACoG,EAAAA,EAAeA,CAAAA,GAC3BlQ,QAAS,KAhPnBoR,EAAe,CACbpH,MAAM,EACN6B,QA8OqCqJ,EA7OrCpJ,OAAQ,UACRC,YAAY,KA6OJ1O,MAAM,UACNwC,QAAQ,W,SACT,aAGD,SAACC,EAAAA,EAAMA,CACLC,KAAK,QACL+J,WAAW,SAACkD,EAAAA,EAAUA,CAAAA,GACtBhN,QAAS,KAhPnBoR,EAAe,CACbpH,MAAM,EACN6B,QA8OoCqJ,EA7OpCpJ,OAAQ,SACRC,YAAY,KA6OJ1O,MAAM,YACNwC,QAAQ,W,SACT,cAnBkB,QA4BvBgW,IAAoBpC,EAAAA,EAAAA,SACxB,IAAM,CACJ,CACEwB,OAASa,I,IAEFjK,EADL,MAAMA,EAAUiK,EAAKC,QACrB,OAAKlK,SAAiB,QAAjBA,EAAAA,EAASwC,gBAATxC,IAAAA,OAAAA,EAAAA,EAAmBpG,OAGjB,SAAC8I,EAAAA,CAAmB1C,QAASA,KAF3B,SAACpM,EAAAA,EAAGA,CAAAA,MAMnB,IAGF,GAAI6D,GAAW8O,EACb,OACE,SAAC3S,EAAAA,EAAGA,CAAC0F,EAAG,E,SACL,IAAIC,MAAM,IAAIlG,IAAI,CAACmG,EAAGC,KACrB,SAAC7F,EAAAA,EAAGA,CAAS0F,EAAG,E,UACd,SAACI,EAAAA,EAAQA,CAAC1F,QAAQ,OAAOzD,MAAM,UADvBkJ,MAQlB,GAAIb,EACF,OAAO,SAACuR,EAAAA,EAAkBA,CAACvR,MAAOA,IAGpC,GAAI4N,EACF,OACE,SAAC5S,EAAAA,EAAGA,CAAC0F,EAAG,E,UACN,UAACvF,EAAAA,EAAUA,CAACvC,MAAM,Q,UAAQ,gCACMgV,EAAsB7M,aAM5D,MAAMyQ,GAAgBrE,GAAwBI,EAE9C,OACE,sB,WACE,UAACvS,EAAAA,EAAGA,CAACC,UAAWhB,EAAQyM,U,WACtB,SAAC9M,EAAAA,EAAWA,CACVC,SAAUkV,EACVjV,QAASA,EACTC,SAAUiT,KAEZ,UAAChS,EAAAA,EAAGA,CAACC,UAAWhB,EAAQ2M,e,UACrB4F,EAAiBzR,OAAS,IACzB,UAACC,EAAAA,EAAGA,CAACC,UAAWhB,EAAQgN,Y,WACtB,UAAC9L,EAAAA,EAAUA,CAACC,QAAQ,Q,UACjBoR,EAAiBzR,OAAO,WACI,IAA5ByR,EAAiBzR,OAAe,IAAM,GAAG,gBAE5C,UAACC,EAAAA,EAAGA,CAAChC,QAAQ,OAAOqP,MAAO,CAAEC,IAAK,G,WAChC,SAACjN,EAAAA,EAAMA,CACLC,KAAK,QACLF,QAAQ,YACRxC,MAAM,UACNyM,WAAW,SAACoG,EAAAA,EAAeA,CAAAA,GAC3BlQ,QAxQU,KACQ,IAA5BiR,EAAiBzR,QACrB8R,EAAmB,CACjBtH,MAAM,EACNgE,SAAUiD,EACVnF,OAAQ,UACRC,YAAY,K,SAmQD,sBAGD,SAACjM,EAAAA,EAAMA,CACLC,KAAK,QACLF,QAAQ,YACRxC,MAAM,YACNyM,WAAW,SAACkD,EAAAA,EAAUA,CAAAA,GACtBhN,QAvQS,KACS,IAA5BiR,EAAiBzR,QACrB8R,EAAmB,CACjBtH,MAAM,EACNgE,SAAUiD,EACVnF,OAAQ,SACRC,YAAY,K,SAkQD,0BAOsB,IAA5BwI,GAAiB/U,QAChB,SAACC,EAAAA,EAAGA,CAAC0F,EAAG,EAAG+Q,UAAU,S,UACnB,SAACtW,EAAAA,EAAUA,CAACC,QAAQ,QAAQxC,MAAM,gB,SACA,KAA/BwE,SAAkB,QAAlBA,EAAAA,EAAOmR,mBAAPnR,IAAAA,OAAAA,EAAAA,EAAoBrC,QACjB,qBACA,+CAIR,SAAC2W,EAAAA,EAAKA,CACJ7U,QAAS,CACP8U,UAAWH,GACXI,sBAAuB9B,GAAiBhV,KACrC0U,I,IACgBA,E,MAA0B,aAAzC7R,EAAAA,EAAAA,GAAuB,QAAR6R,EAAAA,EAAExR,cAAFwR,IAAAA,OAAAA,EAAAA,EAAU5R,cAE7BiU,eAAiBpB,I,IAEEA,E,MAFe,CAChCvH,SAC6C,aAA3CvL,EAAAA,EAAAA,GAAyB,QAAV8S,EAAAA,EAAIzS,cAAJyS,IAAAA,OAAAA,EAAAA,EAAY7S,cAE/BkU,OAAQhC,GAAiB/U,OAAS,GAClCgX,SAAU,GACVC,QAAQ,EACRf,WAAW,EACXgB,iBAAkB,IAClBC,sBAAsB,EACtBC,SAAS,EACTC,qBAAqB,GAEvB9B,QAASA,GACTe,KAAMvB,GAAiBrV,IAAKkI,IAC1B,MAAM0P,EAAa7F,EAAiB1R,KACjCwX,GACCA,EAAS1I,SAAS5I,OAAS2B,EAAKiH,SAAS5I,MACzCsR,EAAS1I,SAASC,YAAclH,EAAKiH,SAASC,WAElD,MAAO,IACFlH,EACHjI,GAAIiI,EAAKiH,SAAS5I,KAClBuR,UAAW,CAAErV,QAASmV,MAG1BG,kBAAoBC,IAElB,MAAMC,EAAc,EAAmBpY,OACpCkV,I,IAAqBA,E,MAA0B,aAAzC7R,EAAAA,EAAAA,GAAuB,QAAR6R,EAAAA,EAAExR,cAAFwR,IAAAA,OAAAA,EAAAA,EAAU5R,cAElC6O,EAAoBiG,IAEtBC,YAAavB,YAMrB,SAACjK,EAAAA,CACC5B,KAAMmH,EAAYnH,KAClB6B,QAASsF,EAAYtF,QACrBC,OAAQqF,EAAYrF,OACpBC,WAAYoF,EAAYpF,WACxB1B,QAAS,IACP+G,EAAe,CACbpH,MAAM,EACN6B,QAAS,KACTC,OAAQ,UACRC,YAAY,IAGhBC,UAzYgBsG,UACpB,IAAKnB,EAAYtF,UAAYhK,EAAO,OAEpCuP,EAAgBzQ,IAAU,IAAKA,EAAMoL,YAAY,KAEjD,MAAMsL,EAAyC,YAAvBlG,EAAYrF,OAChC,CAACwL,EAAYC,EAAWtD,IAAcpD,EAAY2G,eAAeF,EAAIC,EAAGtD,GACxE,CAACqD,EAAYC,EAAWtD,IAAcpD,EAAY4G,cAAcH,EAAIC,EAAGtD,GAC3E,UACQoD,EAAgBlG,EAAYtF,QAAQwC,SAASC,UAAW6C,EAAYtF,QAAQwC,SAAS5I,KAAM5D,EAAM0Q,YAEvGnB,EAAe,CACbpH,MAAM,EACN6B,QAAS,KACTC,OAAQ,UACRC,YAAY,IAGdmF,EAAqBvQ,GACnBA,EAAK5B,OACFkV,I,IACqB9C,EACKA,E,OADzB8C,EAAE5F,SAAS5I,QAA4B,QAAnB0L,EAAAA,EAAYtF,eAAZsF,IAAAA,OAAAA,EAAAA,EAAqB9C,SAAS5I,OAClDwO,EAAE5F,SAASC,aAAiC,QAAnB6C,EAAAA,EAAYtF,eAAZsF,IAAAA,OAAAA,EAAAA,EAAqB9C,SAASC,cAG7D0C,EAAYiD,GAAMA,EAAI,GACtB,MAAMnI,EAAgC,YAAvBqF,EAAYrF,OAAuB,WAAa,SAC/D6E,EAAS2C,KAAK,CACZ9N,QAAS,WAAWsG,IACpByH,SAAU,UACV9V,QAAS,aAEb,CAAE,MAAO2V,GACPsE,QAAQjT,MAAM,SAAS0M,EAAYrF,qBAAsBsH,GACzDhC,EAAgBzQ,IAAU,IAAKA,EAAMoL,YAAY,KACjD,MAAM/G,EAAeoO,aAAeC,MAAQD,EAAI5N,QAAU,yBAC1DmL,EAAS2C,KAAK,CACZ9N,QAAS,aAAa2L,EAAYrF,mBAAmB9G,IACrDuO,SAAU,QACV9V,QAAS,aAEb,MAkWE,SAACsQ,EAAAA,CACC/D,KAAMqH,EAAgBrH,KACtBgE,SAAUqD,EAAgBrD,SAC1BlC,OAAQuF,EAAgBvF,OACxBC,WAAYsF,EAAgBtF,WAC5B1B,QAAS,IACPiH,EAAmB,CACjBtH,MAAM,EACNgE,SAAU,GACVlC,OAAQ,UACRC,YAAY,IAGhBC,UAxVoBsG,UACxB,IAAKzQ,GAA6C,IAApCwP,EAAgBrD,SAASxO,OAAc,OAErD8R,EAAoB3Q,IAAU,IAAKA,EAAMoL,YAAY,KACrDyF,EAAwB,CAAExH,MAAM,EAAO2F,QAAS,GAAI1B,WAAW,IAE/D,MAAMA,EAAuC,YAA3BoD,EAAgBvF,OAC5B6L,EAAmB1J,EACrB,CAAC2J,EAA4CC,IAAehH,EAAYiH,oBAAoBF,EAAKC,GACjG,CAACD,EAA4CC,IAAehH,EAAYkH,mBAAmBH,EAAKC,GAEpG,IACE,MAAM7J,EAAWqD,EAAgBrD,SAAS9O,IAAK+U,IAAO,CACpD3F,UAAW2F,EAAE5F,SAASC,UACtB7I,KAAMwO,EAAE5F,SAAS5I,QAEbuS,QAAqBL,EAAiB3J,EAAUnM,EAAM0Q,aAAe,GAErE0F,EAAkBD,EAAajZ,OAAQgR,GAAaA,EAAIpB,SAExDuJ,EAAsC,IADxBF,EAAajZ,OAAQgR,IAAcA,EAAIpB,SAC1BnP,OAE3BsM,EAASmC,EAAY,WAAa,SAExCqD,EAAmB,CACjBtH,MAAM,EACNgE,SAAU,GACVlC,OAAQ,UACRC,YAAY,IAEdyF,EAAwB,CACtBxH,MAAOkO,EACPvI,QAASqI,EACT/J,cAEFiD,EAAoB,IACpBF,EAAYiD,GAAMA,EAAI,GAElBiE,GACFvH,EAAS2C,KAAK,CACZ9N,QAAS,GAAGyS,EAAgBzY,mBAAmBsM,IAC/CyH,SAAU,UACV9V,QAAS,aAGf,CAAE,MAAO2V,GACPsE,QAAQjT,MAAM,cAAc4M,EAAgBvF,sBAAuBsH,GACnE9B,EAAoB3Q,IAAU,IAAKA,EAAMoL,YAAY,KACrD,MAAM/G,EAAeoO,aAAeC,MAAQD,EAAI5N,QAAU,yBAC1DmL,EAAS2C,KAAK,CACZ9N,QAAS,kBAAkB6L,EAAgBvF,oBAAoB9G,IAC/DuO,SAAU,QACV9V,QAAS,aAEb,MAoSE,SAACiS,EAAAA,CACC1F,KAAMuH,EAAqBvH,KAC3B2F,QAAS4B,EAAqB5B,QAC9B1B,UAAWsD,EAAqBtD,UAChC5D,QAAS,IACPmH,EAAwB,CACtBxH,MAAM,EACN2F,QAAS,GACT1B,WAAW,UCrhCVkK,EAAqB,KAE9B,UAACC,EAAAA,EAAIA,CAACC,QAAQ,O,WACZ,SAACC,EAAAA,EAAMA,CAACtX,MAAM,mBAAmBuX,SAAS,sC,UACxC,SAAC1Q,EAAAA,EAAaA,C,SAAC,iDAEjB,SAAC2Q,EAAAA,EAAOA,C,UACN,SAAChI,EAAkBA,CAAAA,Q,eCXpB,MAAMiI,EAAoC,KAE7C,SAAC7T,EAAAA,EAAcA,CACbE,WAAY4T,EAAAA,GACZ1T,aAAa,gD,UAEb,SAACmT,EAAkBA,CAAAA,I","sources":["webpack://internal.plugin-kuadrant/./src/components/FilterPanel/FilterPanel.tsx","webpack://internal.plugin-kuadrant/./src/utils/apikeys.ts","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ExpandLess.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/BrokenImage.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsync.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsyncFn.js","webpack://internal.plugin-kuadrant/./src/components/PermissionGate/PermissionGate.tsx","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/hooks/useSupportConfig.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/icons/icons.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/SupportButton/SupportButton.esm.js","webpack://internal.plugin-kuadrant/./src/utils/styles.ts","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/CheckCircle.js","webpack://internal.plugin-kuadrant/./src/components/ApprovalQueueTable/ApprovalQueueTable.tsx","webpack://internal.plugin-kuadrant/./src/components/ApiKeyApprovalPage/ApiKeyApprovalPage.tsx","webpack://internal.plugin-kuadrant/./src/components/ApiKeyApprovalPage/ApiKeyApprovalPageWithPermissions.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 { StatusCondition } from '../types/api-management';\n\n/**\n * Derives the APIKey approval phase from Kubernetes conditions.\n *\n * Maps conditions to phases:\n * - Empty conditions array → Pending\n * - Approved condition (status: True) → Approved\n * - Denied condition (status: True) → Denied\n * - Failed condition (status: True) → Failed\n *\n * @param conditions - Array of Kubernetes status conditions\n * @returns Current approval phase\n */\nexport function getAPIKeyPhase(\n conditions?: StatusCondition[]\n): 'Pending' | 'Approved' | 'Denied' | 'Failed' {\n if (!conditions || conditions.length === 0) {\n return 'Pending';\n }\n\n const approved = conditions.find(\n c => c.type === 'Approved' && c.status === 'True'\n );\n if (approved) return 'Approved';\n\n const denied = conditions.find(\n c => c.type === 'Denied' && c.status === 'True'\n );\n if (denied) return 'Denied';\n\n const failed = conditions.find(\n c => c.type === 'Failed' && c.status === 'True'\n );\n if (failed) return 'Failed';\n\n return 'Pending';\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z\"\n}), 'BrokenImage');\n\nexports.default = _default;","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import React from 'react';\nimport { Typography, Box } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\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 (\n <Box p={2}>\n {[...Array(5)].map((_, i) => (\n <Box key={i} p={2}>\n <Skeleton variant=\"text\" width=\"100%\" />\n </Box>\n ))}\n </Box>\n );\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 { useApiHolder, configApiRef } from '@backstage/core-plugin-api';\nimport { coreComponentsTranslationRef } from '../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useDefaultSupportConfig = () => {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n return {\n url: \"https://github.com/backstage/backstage/issues\",\n items: [\n {\n title: t(\"supportConfig.default.title\"),\n icon: \"warning\",\n links: [\n {\n // TODO: Update to dedicated support page on backstage.io/docs\n title: t(\"supportConfig.default.linkTitle\"),\n url: \"https://github.com/backstage/backstage/blob/master/app-config.yaml\"\n }\n ]\n }\n ]\n };\n};\nfunction useSupportConfig() {\n const apiHolder = useApiHolder();\n const config = apiHolder.get(configApiRef);\n const supportConfig = config?.getOptionalConfig(\"app.support\");\n const defaultSupportConfig = useDefaultSupportConfig();\n if (!supportConfig) {\n return defaultSupportConfig;\n }\n return {\n url: supportConfig.getString(\"url\"),\n items: supportConfig.getConfigArray(\"items\").flatMap((itemConf) => ({\n title: itemConf.getString(\"title\"),\n icon: itemConf.getOptionalString(\"icon\"),\n links: (itemConf.getOptionalConfigArray(\"links\") ?? []).flatMap(\n (linkConf) => ({\n url: linkConf.getString(\"url\"),\n title: linkConf.getOptionalString(\"title\") ?? \"\"\n })\n )\n }))\n };\n}\n\nexport { useSupportConfig };\n//# sourceMappingURL=useSupportConfig.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useApp } from '@backstage/core-plugin-api';\nimport MuiBrokenImageIcon from '@material-ui/icons/BrokenImage';\n\nfunction AppIcon(props) {\n const { id: key, Fallback = MuiBrokenImageIcon, ...rest } = props;\n const app = useApp();\n const Icon = app.getSystemIcon(key) ?? Fallback;\n return /* @__PURE__ */ jsx(Icon, { ...rest });\n}\nfunction BrokenImageIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"brokenImage\", ...props });\n}\nfunction CatalogIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"catalog\", ...props });\n}\nfunction ChatIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"chat\", ...props });\n}\nfunction DashboardIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"dashboard\", ...props });\n}\nfunction DocsIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"docs\", ...props });\n}\nfunction EmailIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"email\", ...props });\n}\nfunction GitHubIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"github\", ...props });\n}\nfunction GroupIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"group\", ...props });\n}\nfunction HelpIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"help\", ...props });\n}\nfunction UserIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"user\", ...props });\n}\nfunction WarningIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"warning\", ...props });\n}\nfunction StarIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"star\", ...props });\n}\nfunction UnstarredIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"unstarred\", ...props });\n}\n\nexport { AppIcon, BrokenImageIcon, CatalogIcon, ChatIcon, DashboardIcon, DocsIcon, EmailIcon, GitHubIcon, GroupIcon, HelpIcon, StarIcon, UnstarredIcon, UserIcon, WarningIcon };\n//# sourceMappingURL=icons.esm.js.map\n","import { jsxs, Fragment, jsx } from 'react/jsx-runtime';\nimport { useApi, configApiRef, useApp } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { useState, Children } from 'react';\nimport 'lodash';\nimport 'qs';\nimport 'react-router-dom';\nimport '@react-hookz/web';\nimport { useSupportConfig } from '../../hooks/useSupportConfig.esm.js';\nimport { HelpIcon } from '../../icons/icons.esm.js';\nimport { Link } from '../Link/Link.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles(\n {\n popoverList: {\n minWidth: 260,\n maxWidth: 400\n },\n menuItem: {\n whiteSpace: \"normal\"\n }\n },\n { name: \"BackstageSupportButton\" }\n);\nconst SupportIcon = ({ icon }) => {\n const app = useApp();\n const Icon = icon ? app.getSystemIcon(icon) ?? HelpIcon : HelpIcon;\n return /* @__PURE__ */ jsx(Icon, {});\n};\nconst SupportLink = ({ link }) => /* @__PURE__ */ jsx(Link, { to: link.url, children: link.title ?? link.url });\nconst SupportListItem = ({ item }) => {\n return /* @__PURE__ */ jsxs(MenuItem, { button: false, children: [\n /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(SupportIcon, { icon: item.icon }) }),\n /* @__PURE__ */ jsx(\n ListItemText,\n {\n primary: item.title,\n secondary: item.links?.reduce(\n (prev, link, idx) => [\n ...prev,\n idx > 0 && /* @__PURE__ */ jsx(\"br\", {}, idx),\n /* @__PURE__ */ jsx(SupportLink, { link }, link.url)\n ],\n []\n )\n }\n )\n ] });\n};\nfunction SupportButton(props) {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n const { title, items, children } = props;\n const { items: configItems } = useSupportConfig();\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState(null);\n const classes = useStyles();\n const supportConfig = useApi(configApiRef).getOptionalConfig(\"app.support\");\n const isSmallScreen = useMediaQuery(\n (theme) => theme.breakpoints.down(\"sm\")\n );\n const onClickHandler = (event) => {\n setAnchorEl(event.currentTarget);\n setPopoverOpen(true);\n };\n const popoverCloseHandler = () => {\n setPopoverOpen(false);\n };\n if (!supportConfig) {\n return null;\n }\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Box, { display: \"flex\", ml: 1, children: isSmallScreen ? /* @__PURE__ */ jsx(\n IconButton,\n {\n color: \"primary\",\n size: \"small\",\n onClick: onClickHandler,\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n children: /* @__PURE__ */ jsx(HelpIcon, {})\n }\n ) : /* @__PURE__ */ jsx(\n Button,\n {\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n color: \"primary\",\n onClick: onClickHandler,\n startIcon: /* @__PURE__ */ jsx(HelpIcon, {}),\n children: t(\"supportButton.title\")\n }\n ) }),\n /* @__PURE__ */ jsxs(\n Popover,\n {\n \"data-testid\": \"support-button-popover\",\n open: popoverOpen,\n anchorEl,\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"right\"\n },\n transformOrigin: {\n vertical: \"top\",\n horizontal: \"right\"\n },\n onClose: popoverCloseHandler,\n children: [\n /* @__PURE__ */ jsxs(\n MenuList,\n {\n className: classes.popoverList,\n autoFocusItem: Boolean(anchorEl),\n children: [\n title && /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: /* @__PURE__ */ jsx(Typography, { variant: \"subtitle1\", children: title })\n }\n ),\n Children.map(children, (child, i) => /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: child\n },\n `child-${i}`\n )),\n (items ?? configItems).map((item, i) => /* @__PURE__ */ jsx(SupportListItem, { item }, `item-${i}`))\n ]\n }\n ),\n /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(\n Button,\n {\n color: \"primary\",\n onClick: popoverCloseHandler,\n \"aria-label\": \"Close\",\n children: t(\"supportButton.close\")\n }\n ) })\n ]\n }\n )\n ] });\n}\n\nexport { SupportButton };\n//# sourceMappingURL=SupportButton.esm.js.map\n","import { CSSProperties } from \"react\";\n\n/**\n * Returns inline styles for API key status chips on the My API Keys page.\n */\nexport const getMyApiKeysStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"Denied\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Failed\":\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange\n case \"Pending\":\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n default:\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for API key status chips on the Approval Queue page.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getApprovalQueueStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#2e7d32\", color: \"#fff\" }; // Green\n case \"Denied\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Pending\":\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange\n default:\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for lifecycle chips.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getLifecycleChipStyle = (lifecycle: string): CSSProperties => {\n switch (lifecycle) {\n case \"production\":\n return { backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"experimental\":\n return { backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n case \"deprecated\":\n return { backgroundColor: \"#ff9800\", color: \"#fff\" }; // Orange\n case \"retired\":\n return { backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n default:\n return {};\n }\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckCircle');\n\nexports.default = _default;","import React, { useState, useMemo } from \"react\";\nimport {\n useApi,\n identityApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { kuadrantApiRef } from '../../api';\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n ResponseErrorPanel,\n Link,\n} from \"@backstage/core-components\";\nimport {\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Chip,\n Typography,\n Box,\n CircularProgress,\n TextField,\n makeStyles,\n} from \"@material-ui/core\";\nimport { Skeleton } from \"@material-ui/lab\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport {APIKey, BulkOperationResult} from \"../../types/api-management\";\nimport { getApprovalQueueStatusChipStyle } from \"../../utils/styles\";\nimport { getAPIKeyPhase } from \"../../utils/apikeys\";\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 useCasePanel: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n },\n useCaseLabel: {\n fontWeight: 600,\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n textTransform: \"uppercase\",\n fontSize: \"0.75rem\",\n },\n bulkActions: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n borderBottom: `1px solid ${theme.palette.divider}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n}));\n\ninterface ApprovalDialogProps {\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst ApprovalDialog = ({\n open,\n request,\n action,\n processing,\n onClose,\n onConfirm,\n}: ApprovalDialogProps) => {\n const [confirmInput, setConfirmInput] = React.useState(\"\");\n const actionLabel = action === \"approve\" ? \"Approve\" : \"Reject\";\n const processingLabel =\n action === \"approve\" ? \"Approving...\" : \"Rejecting...\";\n\n const isReject = action === \"reject\";\n const confirmText = request?.spec.requestedBy?.userId || \"\";\n const canConfirm = isReject ? confirmInput === confirmText : true;\n\n // reset input when dialog closes\n React.useEffect(() => {\n if (!open) {\n setConfirmInput(\"\");\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {isReject ? (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <CancelIcon color=\"error\" />\n <span>{actionLabel} API Key</span>\n </Box>\n ) : (\n <span>{actionLabel} API Key</span>\n )}\n </DialogTitle>\n <DialogContent>\n {request && (\n <>\n <p>\n <strong>User:</strong> {request.spec.requestedBy.userId}\n </p>\n <p>\n <strong>API:</strong>{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"}\n </p>\n <p>\n <strong>Tier:</strong> {request.spec.planTier}\n </p>\n <Box mb={2}>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ fontWeight: \"bold\" }}\n >\n Use Case:\n </Typography>{\" \"}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ whiteSpace: \"pre-wrap\" }}\n >\n {request.spec.useCase || \"-\"}\n </Typography>\n </Box>\n {isReject && (\n <Box mt={2}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Type <strong>{confirmText}</strong> to confirm rejection:\n </Typography>\n <TextField\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={confirmInput}\n onChange={(e) => setConfirmInput(e.target.value)}\n disabled={processing}\n autoFocus\n placeholder={confirmText}\n />\n </Box>\n )}\n </>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={action === \"approve\" ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing || !canConfirm}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface BulkActionDialogProps {\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst BulkActionDialog = ({\n open,\n requests,\n action,\n processing,\n onClose,\n onConfirm,\n}: BulkActionDialogProps) => {\n const isApprove = action === \"approve\";\n const actionLabel = isApprove ? \"Approve All\" : \"Reject All\";\n const processingLabel = isApprove ? \"Approving...\" : \"Rejecting...\";\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n {isApprove ? \"Approve\" : \"Reject\"} {requests.length} API Keys\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\" paragraph>\n You are about to {isApprove ? \"approve\" : \"reject\"} the following API\n keys:\n </Typography>\n <Box mb={2} maxHeight={200} overflow=\"auto\">\n {requests.map((request) => (\n <Box\n key={`${request.metadata.namespace}/${request.metadata.name}`}\n mb={1}\n p={1}\n bgcolor=\"background.default\"\n >\n <Typography variant=\"body2\">\n <strong>{request.spec.requestedBy.userId}</strong> -{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"} (\n {request.spec.planTier})\n </Typography>\n </Box>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={isApprove ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface ExpandedRowProps {\n request: APIKey;\n}\n\nconst ExpandedRowContent = ({ request }: ExpandedRowProps) => {\n const classes = useStyles();\n\n return (\n <Box className={classes.useCasePanel} onClick={(e) => e.stopPropagation()}>\n <Typography className={classes.useCaseLabel}>Use Case</Typography>\n <Typography variant=\"body2\">\n {request.spec.useCase || \"No use case provided\"}\n </Typography>\n </Box>\n );\n};\n\ninterface AlertDialogProps {\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n onClose: () => void;\n}\n\nconst useBulkAlertStyles = makeStyles((theme) => ({\n successSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.success.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.success.main}40`,\n },\n failureSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.error.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.error.main}40`,\n },\n warningSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.warning.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.warning.main}40`,\n },\n statRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n errorList: {\n marginTop: theme.spacing(2),\n padding: 0,\n listStyle: 'none',\n },\n errorItem: {\n padding: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n },\n errorName: {\n fontWeight: 600,\n fontSize: '0.875rem',\n marginBottom: theme.spacing(0.5),\n },\n errorMessage: {\n fontSize: '0.813rem',\n color: theme.palette.error.main,\n fontFamily: 'monospace',\n wordBreak: 'break-word',\n },\n expandButton: {\n marginTop: theme.spacing(1),\n padding: theme.spacing(0.5),\n },\n}));\n\nconst BulkAlertDialog = ({\n open,\n results,\n isApprove,\n onClose,\n}: AlertDialogProps) => {\n const classes = useBulkAlertStyles();\n const [showErrors, setShowErrors] = useState(true);\n const successResults = results.filter((res: any) => res.success);\n const failedResults = results.filter((res: any) => !res.success);\n const hasPartialSuccess = successResults.length > 0;\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n {hasPartialSuccess ? (\n <>\n <CancelIcon style={{ color: '#ff9800' }} />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Completed with Issues</span>\n </>\n ) : (\n <>\n <CancelIcon color=\"error\" />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Failed</span>\n </>\n )}\n </Box>\n </DialogTitle>\n <DialogContent>\n {hasPartialSuccess && (\n <Box className={classes.successSection}>\n <Box className={classes.statRow}>\n <CheckCircleIcon style={{ color: '#4caf50' }} />\n <Typography variant=\"body1\">\n <strong>{successResults.length}</strong> API key{successResults.length !== 1 ? 's' : ''} {isApprove ? 'approved' : 'denied'} successfully\n </Typography>\n </Box>\n </Box>\n )}\n\n <Box className={hasPartialSuccess ? classes.warningSection : classes.failureSection}>\n <Box className={classes.statRow}>\n <CancelIcon color=\"error\" />\n <Typography variant=\"body1\">\n <strong>{failedResults.length}</strong> request{failedResults.length !== 1 ? 's' : ''} failed\n </Typography>\n </Box>\n\n <Button\n size=\"small\"\n className={classes.expandButton}\n onClick={() => setShowErrors(!showErrors)}\n >\n {showErrors ? 'Hide' : 'Show'} Error Details\n </Button>\n\n {showErrors && (\n <ul className={classes.errorList}>\n {failedResults.map((result, index) => (\n <li key={result.name || index} className={classes.errorItem}>\n <div className={classes.errorName}>\n {result.namespace}/{result.name}\n </div>\n <div className={classes.errorMessage}>\n {result.error || 'Unknown error'}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" variant=\"contained\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ApprovalQueueTable = () => {\n const classes = useStyles();\n const identityApi = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const kuadrantApi = useApi(kuadrantApiRef);\n const [refresh, setRefresh] = useState(0);\n const [selectedRequests, setSelectedRequests] = useState<APIKey[]>([]);\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n const [bulkDialogState, setBulkDialogState] = useState<{\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n const [bulkAlertDialogState, setBulkAlertDialogState] = useState<{\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n }>({\n open: false,\n results: [],\n isApprove: true,\n });\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n apiProduct: [],\n tier: [],\n });\n\n const {\n allowed: canUpdateAllRequests,\n loading: updateAllPermissionLoading,\n error: updateAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateAllPermission);\n\n const {\n allowed: canUpdateOwnRequests,\n loading: updateOwnPermissionLoading,\n error: updateOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const updatePermissionLoading =\n updateAllPermissionLoading || updateOwnPermissionLoading;\n const updatePermissionError =\n updateAllPermissionError || updateOwnPermissionError;\n\n const { value, loading, error } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const reviewedBy = identity.userEntityRef;\n\n try {\n const [apiKeyRequests, apiProducts] = await Promise.all([\n kuadrantApi.getAllRequests(),\n kuadrantApi.getApiProducts(),\n ]);\n\n const allRequests = apiKeyRequests.items || [];\n const ownedApiProducts = new Set<string>();\n\n for (const product of apiProducts.items || []) {\n const owner = product.metadata?.annotations?.[\"backstage.io/owner\"];\n if (owner === reviewedBy) {\n ownedApiProducts.add(\n `${product.metadata.namespace}/${product.metadata.name}`,\n );\n }\n }\n\n return { allRequests, reviewedBy, ownedApiProducts };\n\n } catch(err) {\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to get resources. ${errorMessage}`,\n display: \"transient\",\n severity: \"error\",\n });\n return {\n allRequests: [] as APIKey[],\n reviewedBy,\n ownedApiProducts: new Set<string>(),\n };\n }\n }, [kuadrantApi, identityApi, refresh]);\n\n const filterSections: FilterSection[] = useMemo(() => {\n if (!value?.allRequests) return [];\n\n const statusCounts = { Approved: 0, Pending: 0, Denied: 0 };\n const apiProductCounts = new Map<string, number>();\n const tierCounts = new Map<string, number>();\n\n value.allRequests.forEach((r: APIKey) => {\n const status = getAPIKeyPhase(r.status?.conditions);\n statusCounts[status as keyof typeof statusCounts]++;\n\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n apiProductCounts.set(\n apiProduct,\n (apiProductCounts.get(apiProduct) || 0) + 1,\n );\n\n const tier = r.spec.planTier || \"unknown\";\n tierCounts.set(tier, (tierCounts.get(tier) || 0) + 1);\n });\n\n return [\n {\n id: \"status\",\n title: \"Status\",\n options: [\n { value: \"Pending\", label: \"Pending\", count: statusCounts.Pending },\n {\n value: \"Approved\",\n label: \"Approved\",\n count: statusCounts.Approved,\n },\n {\n value: \"Denied\",\n label: \"Denied\",\n count: statusCounts.Denied,\n },\n ],\n },\n {\n id: \"apiProduct\",\n title: \"API Product\",\n options: Array.from(apiProductCounts.entries()).map(\n ([name, count]) => ({\n value: name,\n label: name,\n count,\n }),\n ),\n collapsed: apiProductCounts.size > 5,\n },\n {\n id: \"tier\",\n title: \"Tier\",\n options: Array.from(tierCounts.entries()).map(([tier, count]) => ({\n value: tier,\n label: tier.charAt(0).toUpperCase() + tier.slice(1),\n count,\n })),\n },\n ];\n }, [value?.allRequests]);\n\n const filteredRequests = useMemo(() => {\n if (!value?.allRequests) return [];\n\n return value.allRequests.filter((r: APIKey) => {\n if (filters.status.length > 0) {\n const status = getAPIKeyPhase(r.status?.conditions);\n if (!filters.status.includes(status)) return false;\n }\n if (filters.apiProduct.length > 0) {\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n if (!filters.apiProduct.includes(apiProduct)) return false;\n }\n if (filters.tier.length > 0) {\n const tier = r.spec.planTier || \"unknown\";\n if (!filters.tier.includes(tier)) return false;\n }\n return true;\n });\n }, [value?.allRequests, filters]);\n\n const handleApprove = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleReject = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleConfirm = async () => {\n if (!dialogState.request || !value) return;\n\n setDialogState((prev) => ({ ...prev, processing: true }));\n\n const apikeyRequestFn = dialogState.action === \"approve\"\n ? (ns: string, n: string, r: string) => kuadrantApi.approveRequest(ns, n, r)\n : (ns: string, n: string, r: string) => kuadrantApi.rejectRequest(ns, n, r)\n try {\n await apikeyRequestFn(dialogState.request.metadata.namespace, dialogState.request.metadata.name, value.reviewedBy);\n\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n // remove the processed request from selection\n setSelectedRequests((prev) =>\n prev.filter(\n (r) =>\n r.metadata.name !== dialogState.request?.metadata.name ||\n r.metadata.namespace !== dialogState.request?.metadata.namespace,\n ),\n );\n setRefresh((r) => r + 1);\n const action = dialogState.action === \"approve\" ? \"approved\" : \"denied\";\n alertApi.post({\n message: `API key ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n console.error(`error ${dialogState.action}ing request:`, err);\n setDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to ${dialogState.action} API key. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const handleBulkApprove = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleBulkReject = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleBulkConfirm = async () => {\n if (!value || bulkDialogState.requests.length === 0) return;\n\n setBulkDialogState((prev) => ({ ...prev, processing: true }));\n setBulkAlertDialogState({ open: false, results: [], isApprove: true, });\n\n const isApprove = bulkDialogState.action === \"approve\";\n const apiKeyRequestsFn = isApprove\n ? (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkApproveRequests(req, rb)\n : (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkRejectRequests(req, rb)\n\n try {\n const requests = bulkDialogState.requests.map((r) => ({\n namespace: r.metadata.namespace,\n name: r.metadata.name,\n }))\n const bulkResponse = await apiKeyRequestsFn(requests, value.reviewedBy) || [];\n\n const successfulItems = bulkResponse.filter((res: any) => res.success);\n const failedItems = bulkResponse.filter((res: any) => !res.success);\n const totalSuccess = failedItems.length === 0;\n\n const action = isApprove ? \"approved\" : \"denied\";\n\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n setBulkAlertDialogState({\n open: !totalSuccess,\n results: bulkResponse,\n isApprove,\n });\n setSelectedRequests([]);\n setRefresh((r) => r + 1);\n\n if (totalSuccess) {\n alertApi.post({\n message: `${successfulItems.length} API keys ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n }\n } catch (err) {\n console.error(`error bulk ${bulkDialogState.action}ing requests:`, err);\n setBulkDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to bulk ${bulkDialogState.action} API keys. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const formatDate = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-GB\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n };\n\n const columns: TableColumn<APIKey>[] = [\n {\n title: \"Requester\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API Product\",\n field: \"spec.apiProductRef.name\",\n render: (row) => {\n const name = row.spec.apiProductRef?.name || \"unknown\";\n return (\n <Link to={`/catalog/default/api/${name}`}>\n <strong>{name}</strong>\n </Link>\n );\n },\n },\n {\n title: \"Status\",\n field: \"status.conditions\",\n render: (row) => {\n const phase = getAPIKeyPhase(row.status?.conditions);\n return (\n <Chip label={phase} size=\"small\" style={getApprovalQueueStatusChipStyle(phase)} />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => (\n <Chip label={row.spec.planTier} size=\"small\" variant=\"outlined\" />\n ),\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed By\",\n field: \"status.reviewedBy\",\n render: (row) => {\n if (!row.status?.reviewedBy)\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n -\n </Typography>\n );\n const reviewer = row.status.reviewedBy.replace(/^user:default\\//, \"\");\n const isAutomatic = reviewer === \"system\";\n return (\n <Box>\n <Typography variant=\"body2\">\n {isAutomatic ? \"Automatic\" : reviewer}\n </Typography>\n {row.status.reviewedAt && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {formatDate(row.status.reviewedAt)}\n </Typography>\n )}\n </Box>\n );\n },\n },\n {\n title: \"Actions\",\n filtering: false,\n render: (row) => {\n const phase = getAPIKeyPhase(row.status?.conditions);\n if (phase !== \"Pending\") return null;\n\n const apiProductKey = `${row.metadata.namespace}/${row.spec.apiProductRef?.name || \"unknown\"}`;\n const ownsApiProduct =\n value?.ownedApiProducts?.has(apiProductKey) ?? false;\n const canUpdate =\n canUpdateAllRequests || (canUpdateOwnRequests && ownsApiProduct);\n if (!canUpdate) return null;\n\n return (\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n startIcon={<CheckCircleIcon />}\n onClick={() => handleApprove(row)}\n color=\"primary\"\n variant=\"outlined\"\n >\n Approve\n </Button>\n <Button\n size=\"small\"\n startIcon={<CancelIcon />}\n onClick={() => handleReject(row)}\n color=\"secondary\"\n variant=\"outlined\"\n >\n Reject\n </Button>\n </Box>\n );\n },\n },\n ];\n\n const detailPanelConfig = useMemo(\n () => [\n {\n render: (data: any) => {\n const request = data.rowData as APIKey;\n if (!request?.metadata?.name) {\n return <Box />;\n }\n return <ExpandedRowContent request={request} />;\n },\n },\n ],\n [],\n );\n\n if (loading || updatePermissionLoading) {\n return (\n <Box p={2}>\n {[...Array(5)].map((_, i) => (\n <Box key={i} p={2}>\n <Skeleton variant=\"text\" width=\"100%\" />\n </Box>\n ))}\n </Box>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (updatePermissionError) {\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {updatePermissionError.message}\n </Typography>\n </Box>\n );\n }\n\n const canSelectRows = canUpdateAllRequests || canUpdateOwnRequests;\n\n return (\n <>\n <Box className={classes.container}>\n <FilterPanel\n sections={filterSections}\n filters={filters}\n onChange={setFilters}\n />\n <Box className={classes.tableContainer}>\n {selectedRequests.length > 0 && (\n <Box className={classes.bulkActions}>\n <Typography variant=\"body2\">\n {selectedRequests.length} request\n {selectedRequests.length !== 1 ? \"s\" : \"\"} selected\n </Typography>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n startIcon={<CheckCircleIcon />}\n onClick={handleBulkApprove}\n >\n Approve Selected\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<CancelIcon />}\n onClick={handleBulkReject}\n >\n Reject Selected\n </Button>\n </Box>\n </Box>\n )}\n\n {filteredRequests.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {value?.allRequests?.length === 0\n ? \"No API keys found.\"\n : \"No API keys match the selected filters.\"}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n selection: canSelectRows,\n showSelectAllCheckbox: filteredRequests.some(\n (r: APIKey) =>\n getAPIKeyPhase(r.status?.conditions) === \"Pending\",\n ),\n selectionProps: (row: APIKey) => ({\n disabled:\n getAPIKeyPhase(row.status?.conditions) !== \"Pending\",\n }),\n paging: filteredRequests.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n showTextRowsSelected: false,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredRequests.map((item: APIKey) => {\n const isSelected = selectedRequests.some(\n (selected) =>\n selected.metadata.name === item.metadata.name &&\n selected.metadata.namespace === item.metadata.namespace,\n );\n return {\n ...item,\n id: item.metadata.name,\n tableData: { checked: isSelected },\n };\n })}\n onSelectionChange={(rows) => {\n // only allow selecting pending requests\n const pendingOnly = (rows as APIKey[]).filter(\n (r) => getAPIKeyPhase(r.status?.conditions) === \"Pending\",\n );\n setSelectedRequests(pendingOnly);\n }}\n detailPanel={detailPanelConfig}\n />\n )}\n </Box>\n </Box>\n\n <ApprovalDialog\n open={dialogState.open}\n request={dialogState.request}\n action={dialogState.action}\n processing={dialogState.processing}\n onClose={() =>\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleConfirm}\n />\n <BulkActionDialog\n open={bulkDialogState.open}\n requests={bulkDialogState.requests}\n action={bulkDialogState.action}\n processing={bulkDialogState.processing}\n onClose={() =>\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleBulkConfirm}\n />\n <BulkAlertDialog\n open={bulkAlertDialogState.open}\n results={bulkAlertDialogState.results}\n isApprove={bulkAlertDialogState.isApprove}\n onClose={() =>\n setBulkAlertDialogState({\n open: false,\n results: [],\n isApprove: true,\n })\n }\n />\n </>\n );\n};\n","import React from 'react';\nimport {\n Header,\n Page,\n Content,\n SupportButton,\n} from '@backstage/core-components';\nimport { ApprovalQueueTable } from '../ApprovalQueueTable';\n\nexport const ApiKeyApprovalPage = () => {\n return (\n <Page themeId=\"tool\">\n <Header title=\"API Key Approval\" subtitle=\"Review and approve API key requests\">\n <SupportButton>Approve or reject API key access requests</SupportButton>\n </Header>\n <Content>\n <ApprovalQueueTable />\n </Content>\n </Page>\n );\n};\n","import React from 'react';\nimport { ApiKeyApprovalPage } from './ApiKeyApprovalPage';\nimport { PermissionGate } from '../PermissionGate';\nimport { kuadrantApiKeyApprovePermission } from '../../permissions';\n\nexport const ApiKeyApprovalPageWithPermissions = () => {\n return (\n <PermissionGate\n permission={kuadrantApiKeyApprovePermission}\n errorMessage=\"You don't have permission to approve API keys\"\n >\n <ApiKeyApprovalPage />\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","getAPIKeyPhase","conditions","find","c","type","status","_interopRequireDefault","_interopRequireWildcard","exports","_default","default","createElement","d","useAsync","fn","deps","_a","initialState","loading","lastCallId","useRef","isMounted","useMountedState","useState","state","set","callback","useCallback","args","_i","arguments","callId","current","prevState","__assign","apply","then","error","useAsyncFn","useEffect","PermissionGate","children","permission","fallback","errorMessage","allowed","useKuadrantPermission","p","Array","_","i","Skeleton","message","name","useDefaultSupportConfig","t","url","items","icon","links","AppIcon","props","key","Fallback","rest","Icon","useApp","getSystemIcon","jsx","HelpIcon","popoverList","maxWidth","menuItem","whiteSpace","SupportIcon","app","SupportLink","link","to","SupportListItem","item","jsxs","MenuItem","button","ListItemIcon","ListItemText","primary","reduce","idx","SupportButton","configItems","config","useApiHolder","get","configApiRef","supportConfig","getOptionalConfig","defaultSupportConfig","getString","getConfigArray","flatMap","itemConf","getOptionalString","getOptionalConfigArray","linkConf","useSupportConfig","popoverOpen","setPopoverOpen","anchorEl","setAnchorEl","useApi","isSmallScreen","useMediaQuery","breakpoints","down","onClickHandler","event","currentTarget","popoverCloseHandler","Fragment","ml","IconButton","startIcon","Popover","open","anchorOrigin","vertical","horizontal","transformOrigin","onClose","MenuList","autoFocusItem","Boolean","Children","child","DialogActions","getMyApiKeysStatusChipStyle","phase","base","border","getApprovalQueueStatusChipStyle","getLifecycleChipStyle","lifecycle","container","minHeight","tableContainer","flex","overflow","useCasePanel","useCaseLabel","bulkActions","borderBottom","ApprovalDialog","request","action","processing","onConfirm","confirmInput","setConfirmInput","actionLabel","processingLabel","isReject","confirmText","spec","requestedBy","userId","canConfirm","Dialog","fullWidth","DialogTitle","style","gap","CancelIcon","DialogContent","strong","apiProductRef","planTier","component","useCase","gutterBottom","TextField","e","target","disabled","autoFocus","placeholder","CircularProgress","BulkActionDialog","requests","isApprove","paragraph","maxHeight","bgcolor","metadata","namespace","ExpandedRowContent","stopPropagation","useBulkAlertStyles","successSection","success","main","borderRadius","shape","failureSection","warningSection","warning","statRow","errorList","listStyle","errorItem","errorName","fontFamily","wordBreak","expandButton","BulkAlertDialog","results","showErrors","setShowErrors","successResults","res","failedResults","hasPartialSuccess","CheckCircleIcon","ul","result","index","li","div","ApprovalQueueTable","identityApi","identityApiRef","alertApi","alertApiRef","kuadrantApi","kuadrantApiRef","refresh","setRefresh","selectedRequests","setSelectedRequests","dialogState","setDialogState","bulkDialogState","setBulkDialogState","bulkAlertDialogState","setBulkAlertDialogState","setFilters","apiProduct","tier","canUpdateAllRequests","updateAllPermissionLoading","updateAllPermissionError","kuadrantApiKeyUpdateAllPermission","canUpdateOwnRequests","updateOwnPermissionLoading","updateOwnPermissionError","kuadrantApiKeyUpdateOwnPermission","updatePermissionLoading","updatePermissionError","async","reviewedBy","getBackstageIdentity","userEntityRef","apiKeyRequests","apiProducts","Promise","all","getAllRequests","getApiProducts","allRequests","ownedApiProducts","product","annotations","err","Error","post","severity","filterSections","useMemo","statusCounts","Approved","Pending","Denied","apiProductCounts","Map","tierCounts","r","from","entries","charAt","toUpperCase","slice","filteredRequests","formatDate","dateString","Date","toLocaleDateString","year","month","day","columns","field","render","row","Link","Chip","creationTimestamp","reviewer","replace","isAutomatic","reviewedAt","filtering","apiProductKey","ownsApiProduct","detailPanelConfig","data","rowData","ResponseErrorPanel","canSelectRows","textAlign","Table","selection","showSelectAllCheckbox","selectionProps","paging","pageSize","search","debounceInterval","showTextRowsSelected","toolbar","emptyRowsWhenPaging","isSelected","selected","tableData","onSelectionChange","rows","pendingOnly","detailPanel","apikeyRequestFn","ns","n","approveRequest","rejectRequest","console","apiKeyRequestsFn","req","rb","bulkApproveRequests","bulkRejectRequests","bulkResponse","successfulItems","totalSuccess","ApiKeyApprovalPage","Page","themeId","Header","subtitle","Content","ApiKeyApprovalPageWithPermissions","kuadrantApiKeyApprovePermission"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[3947],{46299:(e,a,n)=>{n.d(a,{ee:()=>t,g9:()=>i,uU:()=>s});const i=e=>{const a={border:"none"};switch(e){case"Approved":return{...a,backgroundColor:"#1976d2",color:"#fff"};case"Denied":return{...a,backgroundColor:"#d32f2f",color:"#fff"};case"Failed":return{...a,backgroundColor:"#ed6c02",color:"#fff"};default:return{...a,backgroundColor:"#9c27b0",color:"#fff"}}},s=e=>{const a={border:"none"};switch(e){case"Approved":return{...a,backgroundColor:"#2e7d32",color:"#fff"};case"Denied":return{...a,backgroundColor:"#d32f2f",color:"#fff"};default:return{...a,backgroundColor:"#ed6c02",color:"#fff"}}},t=e=>{switch(e){case"production":return{backgroundColor:"#1976d2",color:"#fff"};case"experimental":return{backgroundColor:"#9c27b0",color:"#fff"};case"deprecated":return{backgroundColor:"#ff9800",color:"#fff"};case"retired":return{backgroundColor:"#d32f2f",color:"#fff"};default:return{}}}},71255:(e,a,n)=>{n.d(a,{n:()=>d});var i=n(31085),s=(n(95478),n(82300)),t=n(37725),l=n(96040),r=n(10394),c=n(42899),o=n(72501);const d=({issuerUrl:e,tokenEndpoint:a})=>{const n=a||e;return(0,i.jsx)(l.n,{title:"OIDC Provider Discovery",children:(0,i.jsx)(r.A,{p:2,children:(0,i.jsxs)(c.A,{container:!0,spacing:2,children:[(0,i.jsx)(c.A,{item:!0,xs:12,children:(0,i.jsx)(o.A,{variant:"body2",children:"This API uses OIDC authentication. Obtain a token from the identity provider below."})}),(0,i.jsx)(c.A,{item:!0,xs:12,children:(0,i.jsxs)(o.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"Identity Provider: "}),(0,i.jsx)(t.N_,{to:e,target:"_blank",children:e})]})}),a&&(0,i.jsx)(c.A,{item:!0,xs:12,children:(0,i.jsxs)(o.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"Token Endpoint: "}),(0,i.jsx)(t.N_,{to:a,target:"_blank",children:a})]})}),(0,i.jsx)(c.A,{item:!0,xs:12,children:(0,i.jsx)(s.z,{text:`# Example (Client Credentials Flow):\ncurl -X POST \\\n -d "grant_type=client_credentials" \\\n -d "client_id=YOUR_CLIENT_ID" \\\n -d "client_secret=YOUR_CLIENT_SECRET" \\\n ${n}`,language:"bash",showCopyCodeButton:!0})})]})})})}},89509:(e,a,n)=>{n.d(a,{O:()=>A});var i=n(31085),s=(n(95478),n(10394)),t=n(72501),l=n(67720),r=n(61009),c=n(47625),o=n(9719),d=n(54801),m=n(13677),h=n(42899),p=n(58837),u=n(37725),x=n(46299);const j=(0,p.A)(e=>({label:{fontWeight:600,color:e.palette.text.secondary,marginBottom:e.spacing(.5),fontSize:"0.75rem",textTransform:"uppercase"},tierChip:{marginRight:e.spacing(.5),marginBottom:e.spacing(.5)},statusChipPublished:{backgroundColor:e.palette.primary.main,color:e.palette.primary.contrastText},statusChipDraft:{backgroundColor:e.palette.grey[600],color:e.palette.common.white},infoGrid:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(180px, 1fr))",gap:e.spacing(3),marginBottom:e.spacing(3)},infoItem:{minWidth:0},apiLink:{color:e.palette.primary.main,textDecoration:"none","&:hover":{textDecoration:"underline"}}})),A=({product:e,showStatus:a=!0,showCatalogLink:n=!0,httpRouteHostnames:p})=>{var A,v,f,b,g,N,y,C,k,I,_,P,D,w,R,L,S,T,O;const U=j(),E=(null===(A=e.spec)||void 0===A?void 0:A.publishStatus)||"Draft",z="Published"===E,B=(null===(v=e.status)||void 0===v?void 0:v.discoveredPlans)||[],F=(null===(b=e.status)||void 0===b||null===(f=b.discoveredAuthScheme)||void 0===f?void 0:f.authentication)||{},G=Object.values(F).some(e=>e.hasOwnProperty("apiKey"));return(0,i.jsxs)(i.Fragment,{children:[(null===(g=e.spec)||void 0===g?void 0:g.description)&&(0,i.jsxs)(s.A,{mb:3,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Description"}),(0,i.jsx)(t.A,{variant:"body1",children:e.spec.description})]}),(0,i.jsxs)(s.A,{className:U.infoGrid,children:[a&&(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Publish Status"}),(0,i.jsx)(s.A,{children:(0,i.jsx)(l.A,{label:E,size:"small",className:z?U.statusChipPublished:U.statusChipDraft,"data-testid":"publish-status-chip"})})]}),(null===(N=e.metadata.labels)||void 0===N?void 0:N.lifecycle)&&(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Lifecycle"}),(0,i.jsx)(s.A,{children:(0,i.jsx)(l.A,{label:e.metadata.labels.lifecycle,size:"small",style:(0,x.ee)(e.metadata.labels.lifecycle),"data-testid":"lifecycle-chip"})})]}),(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Version"}),(0,i.jsx)(t.A,{variant:"body2",children:(null===(y=e.spec)||void 0===y?void 0:y.version)||"v1"})]}),(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Namespace"}),(0,i.jsx)(t.A,{variant:"body2",children:e.metadata.namespace})]}),G&&(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"API Key Approval"}),(0,i.jsx)(t.A,{variant:"body2",children:"automatic"===(null===(C=e.spec)||void 0===C?void 0:C.approvalMode)?"Automatic":"Need manual approval"})]}),(null===(k=e.spec)||void 0===k?void 0:k.tags)&&e.spec.tags.length>0&&(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Tags"}),(0,i.jsx)(s.A,{children:e.spec.tags.map(e=>(0,i.jsx)(l.A,{label:e,size:"small",variant:"outlined",className:U.tierChip},e))})]})]}),(0,i.jsxs)(s.A,{className:U.infoGrid,children:[(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"API"}),(0,i.jsx)("br",{}),n?(0,i.jsx)(u.N_,{to:`/catalog/default/api/${e.metadata.name}`,className:U.apiLink,children:e.metadata.name}):(0,i.jsx)(t.A,{variant:"body2",children:e.metadata.name})]}),(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Route"}),(0,i.jsx)(t.A,{variant:"body2",children:(null===(_=e.spec)||void 0===_||null===(I=_.targetRef)||void 0===I?void 0:I.name)||"-"})]}),p&&p.length>0&&(0,i.jsxs)(s.A,{className:U.infoItem,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:p.length>1?"Hostnames":"Hostname"}),p.map((e,a)=>(0,i.jsx)(t.A,{variant:"body2",children:e},a))]})]}),B.length>0&&(0,i.jsxs)(s.A,{mb:3,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Available Tiers"}),(0,i.jsxs)(r.A,{size:"small",children:[(0,i.jsx)(c.A,{children:(0,i.jsxs)(o.A,{children:[(0,i.jsx)(d.A,{children:"Tier"}),(0,i.jsx)(d.A,{children:"Rate Limits"})]})}),(0,i.jsx)(m.A,{children:B.map(e=>(0,i.jsxs)(o.A,{children:[(0,i.jsx)(d.A,{children:(0,i.jsx)(l.A,{label:e.tier,size:"small"})}),(0,i.jsx)(d.A,{children:e.limits&&Object.entries(e.limits).map(([e,a])=>(0,i.jsxs)(t.A,{variant:"body2",children:[String(a)," per ",e]},e))})]},e.tier))})]})]}),(0,i.jsxs)(h.A,{container:!0,spacing:3,children:[((null===(D=e.spec)||void 0===D||null===(P=D.contact)||void 0===P?void 0:P.email)||(null===(R=e.spec)||void 0===R||null===(w=R.contact)||void 0===w?void 0:w.team))&&(0,i.jsxs)(h.A,{item:!0,xs:12,md:6,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Contact Information"}),(0,i.jsxs)(s.A,{mt:1,children:[e.spec.contact.team&&(0,i.jsxs)(t.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"Team:"})," ",e.spec.contact.team]}),e.spec.contact.email&&(0,i.jsxs)(t.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"Email:"})," ",(0,i.jsx)(u.N_,{to:`mailto:${e.spec.contact.email}`,children:e.spec.contact.email})]})]})]}),((null===(S=e.spec)||void 0===S||null===(L=S.documentation)||void 0===L?void 0:L.docsURL)||(null===(O=e.spec)||void 0===O||null===(T=O.documentation)||void 0===T?void 0:T.openAPISpecURL))&&(0,i.jsxs)(h.A,{item:!0,xs:12,md:6,children:[(0,i.jsx)(t.A,{variant:"caption",className:U.label,children:"Documentation"}),(0,i.jsxs)(s.A,{mt:1,children:[e.spec.documentation.docsURL&&(0,i.jsxs)(t.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"Docs:"})," ",(0,i.jsx)(u.N_,{to:e.spec.documentation.docsURL,target:"_blank",children:"View Documentation"})]}),e.spec.documentation.openAPISpecURL&&(0,i.jsxs)(t.A,{variant:"body2",children:[(0,i.jsx)("strong",{children:"OpenAPI Spec:"})," ",(0,i.jsx)(u.N_,{to:e.spec.documentation.openAPISpecURL,target:"_blank",children:"View Spec"})]})]})]})]})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=3947.f5320e89.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/3947.f5320e89.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/utils/styles.ts","webpack://internal.plugin-kuadrant/./src/components/OidcProviderCard/OidcProviderCard.tsx","webpack://internal.plugin-kuadrant/./src/components/ApiProductDetails/ApiProductDetails.tsx"],"sourcesContent":["import { CSSProperties } from \"react\";\n\n/**\n * Returns inline styles for API key status chips on the My API Keys page.\n */\nexport const getMyApiKeysStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"Denied\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Failed\":\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange\n case \"Pending\":\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n default:\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for API key status chips on the Approval Queue page.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getApprovalQueueStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#2e7d32\", color: \"#fff\" }; // Green\n case \"Denied\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Pending\":\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange\n default:\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for lifecycle chips.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getLifecycleChipStyle = (lifecycle: string): CSSProperties => {\n switch (lifecycle) {\n case \"production\":\n return { backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"experimental\":\n return { backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n case \"deprecated\":\n return { backgroundColor: \"#ff9800\", color: \"#fff\" }; // Orange\n case \"retired\":\n return { backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n default:\n return {};\n }\n};\n","import React from 'react';\nimport { InfoCard, CodeSnippet, Link } from '@backstage/core-components';\nimport { Typography, Box, Grid } from '@material-ui/core';\n\ninterface OidcProviderCardProps {\n issuerUrl: string;\n tokenEndpoint?: string;\n}\n\nexport const OidcProviderCard = ({ issuerUrl, tokenEndpoint }: OidcProviderCardProps) => {\n const effectiveTokenEndpoint = tokenEndpoint || issuerUrl;\n\n return (\n <InfoCard title=\"OIDC Provider Discovery\">\n <Box p={2}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n This API uses OIDC authentication. Obtain a token from the identity provider below.\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Identity Provider: </strong>\n <Link to={issuerUrl} target=\"_blank\">\n {issuerUrl}\n </Link>\n </Typography>\n </Grid>\n {tokenEndpoint && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Token Endpoint: </strong>\n <Link to={tokenEndpoint} target=\"_blank\">\n {tokenEndpoint}\n </Link>\n </Typography>\n </Grid>\n )}\n <Grid item xs={12}>\n <CodeSnippet\n text={`# Example (Client Credentials Flow):\ncurl -X POST \\\\\n -d \"grant_type=client_credentials\" \\\\\n -d \"client_id=YOUR_CLIENT_ID\" \\\\\n -d \"client_secret=YOUR_CLIENT_SECRET\" \\\\\n ${effectiveTokenEndpoint}`}\n language=\"bash\"\n showCopyCodeButton\n />\n </Grid>\n </Grid>\n </Box>\n </InfoCard>\n );\n};\n","import React from \"react\";\nimport {\n Box,\n Typography,\n Chip,\n makeStyles,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Grid,\n} from \"@material-ui/core\";\nimport { Link } from \"@backstage/core-components\";\nimport { APIProduct, Plan } from \"../../types/api-management\";\nimport { getLifecycleChipStyle } from \"../../utils/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n fontWeight: 600,\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(0.5),\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n },\n tierChip: {\n marginRight: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n },\n statusChipPublished: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n },\n statusChipDraft: {\n backgroundColor: theme.palette.grey[600],\n color: theme.palette.common.white,\n },\n infoGrid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(180px, 1fr))\",\n gap: theme.spacing(3),\n marginBottom: theme.spacing(3),\n },\n infoItem: {\n minWidth: 0,\n },\n apiLink: {\n color: theme.palette.primary.main,\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n}));\n\ninterface ApiProductDetailsProps {\n product: APIProduct;\n showStatus?: boolean;\n showCatalogLink?: boolean;\n httpRouteHostnames?: string[] | null;\n}\n\nexport const ApiProductDetails = ({\n product,\n showStatus = true,\n showCatalogLink = true,\n httpRouteHostnames,\n}: ApiProductDetailsProps) => {\n const classes = useStyles();\n\n const publishStatus = product.spec?.publishStatus || \"Draft\";\n const isPublished = publishStatus === \"Published\";\n const tiers = product.status?.discoveredPlans || [];\n\n // check if product has API key auth\n const authSchemes = product.status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n const hasApiKey = schemeObjects.some(\n (scheme: any) => scheme.hasOwnProperty(\"apiKey\"),\n );\n\n return (\n <>\n {product.spec?.description && (\n <Box mb={3}>\n <Typography variant=\"caption\" className={classes.label}>\n Description\n </Typography>\n <Typography variant=\"body1\">{product.spec.description}</Typography>\n </Box>\n )}\n\n <Box className={classes.infoGrid}>\n {showStatus && (\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Publish Status\n </Typography>\n <Box>\n <Chip\n label={publishStatus}\n size=\"small\"\n className={\n isPublished\n ? classes.statusChipPublished\n : classes.statusChipDraft\n }\n data-testid=\"publish-status-chip\"\n />\n </Box>\n </Box>\n )}\n {product.metadata.labels?.lifecycle && (\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Lifecycle\n </Typography>\n <Box>\n <Chip\n label={product.metadata.labels.lifecycle}\n size=\"small\"\n style={getLifecycleChipStyle(product.metadata.labels.lifecycle)}\n data-testid=\"lifecycle-chip\"\n />\n </Box>\n </Box>\n )}\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Version\n </Typography>\n <Typography variant=\"body2\">\n {product.spec?.version || \"v1\"}\n </Typography>\n </Box>\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Namespace\n </Typography>\n <Typography variant=\"body2\">{product.metadata.namespace}</Typography>\n </Box>\n {hasApiKey && (\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n API Key Approval\n </Typography>\n <Typography variant=\"body2\">\n {product.spec?.approvalMode === \"automatic\"\n ? \"Automatic\"\n : \"Need manual approval\"}\n </Typography>\n </Box>\n )}\n {product.spec?.tags && product.spec.tags.length > 0 && (\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Tags\n </Typography>\n <Box>\n {product.spec.tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n variant=\"outlined\"\n className={classes.tierChip}\n />\n ))}\n </Box>\n </Box>\n )}\n </Box>\n\n <Box className={classes.infoGrid}>\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n API\n </Typography>\n <br />\n {showCatalogLink ? (\n <Link\n to={`/catalog/default/api/${product.metadata.name}`}\n className={classes.apiLink}\n >\n {product.metadata.name}\n </Link>\n ) : (\n <Typography variant=\"body2\">{product.metadata.name}</Typography>\n )}\n </Box>\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n Route\n </Typography>\n <Typography variant=\"body2\">\n {product.spec?.targetRef?.name || \"-\"}\n </Typography>\n </Box>\n {httpRouteHostnames && httpRouteHostnames.length > 0 && (\n <Box className={classes.infoItem}>\n <Typography variant=\"caption\" className={classes.label}>\n {httpRouteHostnames.length > 1 ? \"Hostnames\" : \"Hostname\"}\n </Typography>\n {httpRouteHostnames.map((hostname, index) => (\n <Typography key={index} variant=\"body2\">\n {hostname}\n </Typography>\n ))}\n </Box>\n )}\n </Box>\n\n {tiers.length > 0 && (\n <Box mb={3}>\n <Typography variant=\"caption\" className={classes.label}>\n Available Tiers\n </Typography>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Tier</TableCell>\n <TableCell>Rate Limits</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {tiers.map((plan: Plan) => (\n <TableRow key={plan.tier}>\n <TableCell>\n <Chip label={plan.tier} size=\"small\" />\n </TableCell>\n <TableCell>\n {plan.limits &&\n Object.entries(plan.limits).map(([key, value]) => (\n <Typography key={key} variant=\"body2\">\n {String(value)} per {key}\n </Typography>\n ))}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n )}\n\n <Grid container spacing={3}>\n {(product.spec?.contact?.email || product.spec?.contact?.team) && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"caption\" className={classes.label}>\n Contact Information\n </Typography>\n <Box mt={1}>\n {product.spec.contact.team && (\n <Typography variant=\"body2\">\n <strong>Team:</strong> {product.spec.contact.team}\n </Typography>\n )}\n {product.spec.contact.email && (\n <Typography variant=\"body2\">\n <strong>Email:</strong>{\" \"}\n <Link to={`mailto:${product.spec.contact.email}`}>\n {product.spec.contact.email}\n </Link>\n </Typography>\n )}\n </Box>\n </Grid>\n )}\n\n {(product.spec?.documentation?.docsURL ||\n product.spec?.documentation?.openAPISpecURL) && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"caption\" className={classes.label}>\n Documentation\n </Typography>\n <Box mt={1}>\n {product.spec.documentation.docsURL && (\n <Typography variant=\"body2\">\n <strong>Docs:</strong>{\" \"}\n <Link to={product.spec.documentation.docsURL} target=\"_blank\">\n View Documentation\n </Link>\n </Typography>\n )}\n {product.spec.documentation.openAPISpecURL && (\n <Typography variant=\"body2\">\n <strong>OpenAPI Spec:</strong>{\" \"}\n <Link\n to={product.spec.documentation.openAPISpecURL}\n target=\"_blank\"\n >\n View Spec\n </Link>\n </Typography>\n )}\n </Box>\n </Grid>\n )}\n </Grid>\n </>\n );\n};\n"],"names":["getMyApiKeysStatusChipStyle","phase","base","border","backgroundColor","color","getApprovalQueueStatusChipStyle","getLifecycleChipStyle","lifecycle","OidcProviderCard","issuerUrl","tokenEndpoint","effectiveTokenEndpoint","InfoCard","title","Box","p","Grid","container","spacing","item","xs","Typography","variant","strong","Link","to","target","CodeSnippet","text","language","showCopyCodeButton","useStyles","makeStyles","theme","label","fontWeight","palette","secondary","marginBottom","fontSize","textTransform","tierChip","marginRight","statusChipPublished","primary","main","contrastText","statusChipDraft","grey","common","white","infoGrid","display","gridTemplateColumns","gap","infoItem","minWidth","apiLink","textDecoration","ApiProductDetails","product","showStatus","showCatalogLink","httpRouteHostnames","classes","publishStatus","spec","isPublished","tiers","status","discoveredPlans","authSchemes","discoveredAuthScheme","authentication","hasApiKey","Object","values","some","scheme","hasOwnProperty","description","mb","className","Chip","size","data-testid","metadata","labels","style","version","namespace","approvalMode","tags","length","map","tag","br","name","targetRef","hostname","index","Table","TableHead","TableRow","TableCell","TableBody","plan","tier","limits","entries","key","value","String","contact","email","team","md","mt","documentation","docsURL","openAPISpecURL"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 4083.
|
|
1
|
+
/*! For license information please see 4083.811c4e7a.chunk.js.LICENSE.txt */
|
|
2
2
|
(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[4083],{1048:(t,e,r)=>{"use strict";const n=r(7991),o=r(39318),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.hp=u,e.IS=50;const f=2147483647;function s(t){if(t>f)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,u.prototype),e}function u(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return h(t,e,r)}function h(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!u.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=s(r);const o=n.write(t,e);return o!==r&&(n=n.slice(0,o)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(W(t,Uint8Array)){const e=new Uint8Array(t);return l(e.buffer,e.byteOffset,e.byteLength)}return p(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(W(t,ArrayBuffer)||t&&W(t.buffer,ArrayBuffer))return l(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(W(t,SharedArrayBuffer)||t&&W(t.buffer,SharedArrayBuffer)))return l(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return u.from(n,e,r);const o=function(t){if(u.isBuffer(t)){const e=0|y(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||K(t.length)?s(0):p(t):"Buffer"===t.type&&Array.isArray(t.data)?p(t.data):void 0}(t);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return u.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function a(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return a(t),s(t<0?0:0|y(t))}function p(t){const e=t.length<0?0:0|y(t.length),r=s(e);for(let n=0;n<e;n+=1)r[n]=255&t[n];return r}function l(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');let n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,u.prototype),n}function y(t){if(t>=f)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|t}function g(t,e){if(u.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||W(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(t).length;default:if(o)return n?-1:H(t).length;e=(""+e).toLowerCase(),o=!0}}function d(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return S(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return _(this,e,r);case"latin1":case"binary":return T(this,e,r);case"base64":return U(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function b(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),K(r=+r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,o){let i,f=1,s=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;f=2,s/=2,u/=2,r/=2}function h(t,e){return 1===f?t[e]:t.readUInt16BE(e*f)}if(o){let n=-1;for(i=r;i<s;i++)if(h(t,i)===h(e,-1===n?0:i-n)){if(-1===n&&(n=i),i-n+1===u)return n*f}else-1!==n&&(i-=i-n),n=-1}else for(r+u>s&&(r=s-u),i=r;i>=0;i--){let r=!0;for(let n=0;n<u;n++)if(h(t,i+n)!==h(e,n)){r=!1;break}if(r)return i}return-1}function E(t,e,r,n){r=Number(r)||0;const o=t.length-r;n?(n=Number(n))>o&&(n=o):n=o;const i=e.length;let f;for(n>i/2&&(n=i/2),f=0;f<n;++f){const n=parseInt(e.substr(2*f,2),16);if(K(n))return f;t[r+f]=n}return f}function B(t,e,r,n){return q(H(e,t.length-r),t,r,n)}function I(t,e,r,n){return q(function(t){const e=[];for(let r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function A(t,e,r,n){return q(J(e),t,r,n)}function v(t,e,r,n){return q(function(t,e){let r,n,o;const i=[];for(let f=0;f<t.length&&!((e-=2)<0);++f)r=t.charCodeAt(f),n=r>>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function U(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);const n=[];let o=e;for(;o<r;){const e=t[o];let i=null,f=e>239?4:e>223?3:e>191?2:1;if(o+f<=r){let r,n,s,u;switch(f){case 1:e<128&&(i=e);break;case 2:r=t[o+1],128==(192&r)&&(u=(31&e)<<6|63&r,u>127&&(i=u));break;case 3:r=t[o+1],n=t[o+2],128==(192&r)&&128==(192&n)&&(u=(15&e)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:r=t[o+1],n=t[o+2],s=t[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(i=u))}}null===i?(i=65533,f=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=f}return function(t){const e=t.length;if(e<=R)return String.fromCharCode.apply(String,t);let r="",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=R));return r}(n)}u.TYPED_ARRAY_SUPPORT=function(){try{const t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),u.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(u.prototype,"parent",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.buffer}}),Object.defineProperty(u.prototype,"offset",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.byteOffset}}),u.poolSize=8192,u.from=function(t,e,r){return h(t,e,r)},Object.setPrototypeOf(u.prototype,Uint8Array.prototype),Object.setPrototypeOf(u,Uint8Array),u.alloc=function(t,e,r){return function(t,e,r){return a(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},u.allocUnsafe=function(t){return c(t)},u.allocUnsafeSlow=function(t){return c(t)},u.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==u.prototype},u.compare=function(t,e){if(W(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),W(e,Uint8Array)&&(e=u.from(e,e.offset,e.byteLength)),!u.isBuffer(t)||!u.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;let r=t.length,n=e.length;for(let o=0,i=Math.min(r,n);o<i;++o)if(t[o]!==e[o]){r=t[o],n=e[o];break}return r<n?-1:n<r?1:0},u.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},u.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return u.alloc(0);let r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;const n=u.allocUnsafe(e);let o=0;for(r=0;r<t.length;++r){let e=t[r];if(W(e,Uint8Array))o+e.length>n.length?(u.isBuffer(e)||(e=u.from(e)),e.copy(n,o)):Uint8Array.prototype.set.call(n,e,o);else{if(!u.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,o)}o+=e.length}return n},u.byteLength=g,u.prototype._isBuffer=!0,u.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;e<t;e+=2)w(this,e,e+1);return this},u.prototype.swap32=function(){const t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},u.prototype.swap64=function(){const t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},u.prototype.toString=function(){const t=this.length;return 0===t?"":0===arguments.length?O(this,0,t):d.apply(this,arguments)},u.prototype.toLocaleString=u.prototype.toString,u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){let t="";const r=e.IS;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"},i&&(u.prototype[i]=u.prototype.inspect),u.prototype.compare=function(t,e,r,n,o){if(W(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),!u.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(this===t)return 0;let i=(o>>>=0)-(n>>>=0),f=(r>>>=0)-(e>>>=0);const s=Math.min(i,f),h=this.slice(n,o),a=t.slice(e,r);for(let t=0;t<s;++t)if(h[t]!==a[t]){i=h[t],f=a[t];break}return i<f?-1:f<i?1:0},u.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},u.prototype.indexOf=function(t,e,r){return b(this,t,e,r,!0)},u.prototype.lastIndexOf=function(t,e,r){return b(this,t,e,r,!1)},u.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-e;if((void 0===r||r>o)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return E(this,t,e,r);case"utf8":case"utf-8":return B(this,t,e,r);case"ascii":case"latin1":case"binary":return I(this,t,e,r);case"base64":return A(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const R=4096;function _(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;o<r;++o)n+=String.fromCharCode(127&t[o]);return n}function T(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;o<r;++o)n+=String.fromCharCode(t[o]);return n}function S(t,e,r){const n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);let o="";for(let n=e;n<r;++n)o+=Q[t[n]];return o}function x(t,e,r){const n=t.slice(e,r);let o="";for(let t=0;t<n.length-1;t+=2)o+=String.fromCharCode(n[t]+256*n[t+1]);return o}function L(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function $(t,e,r,n,o,i){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||e<i)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function N(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i;let f=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f,r}function C(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r+7]=i,i>>=8,t[r+6]=i,i>>=8,t[r+5]=i,i>>=8,t[r+4]=i;let f=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=f,f>>=8,t[r+2]=f,f>>=8,t[r+1]=f,f>>=8,t[r]=f,r+8}function k(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function P(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,4),o.write(t,e,r,n,23,4),r+4}function j(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,8),o.write(t,e,r,n,52,8),r+8}u.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);const n=this.subarray(t,e);return Object.setPrototypeOf(n,u.prototype),n},u.prototype.readUintLE=u.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],o=1,i=0;for(;++i<e&&(o*=256);)n+=this[t+i]*o;return n},u.prototype.readUintBE=u.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t+--e],o=1;for(;e>0&&(o*=256);)n+=this[t+--e]*o;return n},u.prototype.readUint8=u.prototype.readUInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),this[t]},u.prototype.readUint16LE=u.prototype.readUInt16LE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUint16BE=u.prototype.readUInt16BE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUint32LE=u.prototype.readUInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUint32BE=u.prototype.readUInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readBigUInt64LE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,o=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(o)<<BigInt(32))}),u.prototype.readBigUInt64BE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],o=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<<BigInt(32))+BigInt(o)}),u.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],o=1,i=0;for(;++i<e&&(o*=256);)n+=this[t+i]*o;return o*=128,n>=o&&(n-=Math.pow(2,8*e)),n},u.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=e,o=1,i=this[t+--n];for(;n>0&&(o*=256);)i+=this[t+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},u.prototype.readInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readBigInt64LE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+256*this[++t]+65536*this[++t]+this[++t]*2**24)}),u.prototype.readBigInt64BE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*2**24+65536*this[++t]+256*this[++t]+r)}),u.prototype.readFloatLE=function(t,e){return t>>>=0,e||L(t,4,this.length),o.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return t>>>=0,e||L(t,4,this.length),o.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return t>>>=0,e||L(t,8,this.length),o.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return t>>>=0,e||L(t,8,this.length),o.read(this,t,!1,52,8)},u.prototype.writeUintLE=u.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||$(this,t,e,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[e]=255&t;++i<r&&(o*=256);)this[e+i]=t/o&255;return e+r},u.prototype.writeUintBE=u.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||$(this,t,e,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+r},u.prototype.writeUint8=u.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,1,255,0),this[e]=255&t,e+1},u.prototype.writeUint16LE=u.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeUint16BE=u.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeUint32LE=u.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},u.prototype.writeUint32BE=u.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigUInt64LE=Z(function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeBigUInt64BE=Z(function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);$(this,t,e,r,n-1,-n)}let o=0,i=1,f=0;for(this[e]=255&t;++o<r&&(i*=256);)t<0&&0===f&&0!==this[e+o-1]&&(f=1),this[e+o]=(t/i|0)-f&255;return e+r},u.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);$(this,t,e,r,n-1,-n)}let o=r-1,i=1,f=0;for(this[e+o]=255&t;--o>=0&&(i*=256);)t<0&&0===f&&0!==this[e+o+1]&&(f=1),this[e+o]=(t/i|0)-f&255;return e+r},u.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},u.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigInt64LE=Z(function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeBigInt64BE=Z(function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeFloatLE=function(t,e,r){return P(this,t,e,!0,r)},u.prototype.writeFloatBE=function(t,e,r){return P(this,t,e,!1,r)},u.prototype.writeDoubleLE=function(t,e,r){return j(this,t,e,!0,r)},u.prototype.writeDoubleBE=function(t,e,r){return j(this,t,e,!1,r)},u.prototype.copy=function(t,e,r,n){if(!u.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);const o=n-r;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),o},u.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!u.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){const e=t.charCodeAt(0);("utf8"===n&&e<128||"latin1"===n)&&(t=e)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;let o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{const i=u.isBuffer(t)?t:u.from(t,n),f=i.length;if(0===f)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(o=0;o<r-e;++o)this[o+e]=i[o%f]}return this};const M={};function F(t,e,r){M[t]=class extends r{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${t}]`,this.stack,delete this.name}get code(){return t}set code(t){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:t,writable:!0})}toString(){return`${this.name} [${t}]: ${this.message}`}}}function D(t){let e="",r=t.length;const n="-"===t[0]?1:0;for(;r>=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function z(t,e,r,n,o,i){if(t>r||t<e){const n="bigint"==typeof e?"n":"";let o;throw o=i>3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new M.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){V(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||Y(e,t.length-(r+1))}(n,o,i)}function V(t,e){if("number"!=typeof t)throw new M.ERR_INVALID_ARG_TYPE(e,"number",t)}function Y(t,e,r){if(Math.floor(t)!==t)throw V(t,r),new M.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new M.ERR_BUFFER_OUT_OF_BOUNDS;throw new M.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}F("ERR_BUFFER_OUT_OF_BOUNDS",function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),F("ERR_INVALID_ARG_TYPE",function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`},TypeError),F("ERR_OUT_OF_RANGE",function(t,e,r){let n=`The value of "${t}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=D(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=D(o)),o+="n"),n+=` It must be ${e}. Received ${o}`,n},RangeError);const G=/[^+/0-9A-Za-z-_]/g;function H(t,e){let r;e=e||1/0;const n=t.length;let o=null;const i=[];for(let f=0;f<n;++f){if(r=t.charCodeAt(f),r>55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(f+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function J(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,e,r,n){let o;for(o=0;o<n&&!(o+r>=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function W(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function K(t){return t!=t}const Q=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)e[n+o]=t[r]+t[o]}return e}();function Z(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},7991:(t,e)=>{"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,i=s(t),f=i[0],u=i[1],h=new o(function(t,e,r){return 3*(e+r)/4-r}(0,f,u)),a=0,c=u>0?f-4:f;for(r=0;r<c;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],h[a++]=e>>16&255,h[a++]=e>>8&255,h[a++]=255&e;return 2===u&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,h[a++]=255&e),1===u&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,h[a++]=e>>8&255,h[a++]=255&e),h},e.fromByteArray=function(t){for(var e,n=t.length,o=n%3,i=[],f=16383,s=0,u=n-o;s<u;s+=f)i.push(h(t,s,s+f>u?u:s+f));return 1===o?(e=t[n-1],i.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],i.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0;f<64;++f)r[f]=i[f],n[i.charCodeAt(f)]=f;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function h(t,e,r){for(var n,o=[],i=e;i<r;i+=3)n=(t[i]<<16&16711680)+(t[i+1]<<8&65280)+(255&t[i+2]),o.push(u(n));return o.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},31085:(t,e,r)=>{"use strict";t.exports=r(73335)},39318:(t,e)=>{e.read=function(t,e,r,n,o){var i,f,s=8*o-n-1,u=(1<<s)-1,h=u>>1,a=-7,c=r?o-1:0,p=r?-1:1,l=t[e+c];for(c+=p,i=l&(1<<-a)-1,l>>=-a,a+=s;a>0;i=256*i+t[e+c],c+=p,a-=8);for(f=i&(1<<-a)-1,i>>=-a,a+=n;a>0;f=256*f+t[e+c],c+=p,a-=8);if(0===i)i=1-h;else{if(i===u)return f?NaN:1/0*(l?-1:1);f+=Math.pow(2,n),i-=h}return(l?-1:1)*f*Math.pow(2,i-n)},e.write=function(t,e,r,n,o,i){var f,s,u,h=8*i-o-1,a=(1<<h)-1,c=a>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:i-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,f=a):(f=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-f))<1&&(f--,u*=2),(e+=f+c>=1?p/u:p*Math.pow(2,1-c))*u>=2&&(f++,u/=2),f+c>=a?(s=0,f=a):f+c>=1?(s=(e*u-1)*Math.pow(2,o),f+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,o),f=0));o>=8;t[r+l]=255&s,l+=y,s/=256,o-=8);for(f=f<<o|s,h+=o;h>0;t[r+l]=255&f,l+=y,f/=256,h-=8);t[r+l-y]|=128*g}},50884:(t,e,r)=>{"use strict";r.d(e,{m:()=>n}),r(31085),r(15427);const n=(0,r(89940).y)({id:"core.error"})},57556:(t,e,r)=>{"use strict";function n(t){if("object"!=typeof t||null===t||Array.isArray(t))return!1;const e=t;return"string"==typeof e.name&&""!==e.name&&"string"==typeof e.message}r.d(e,{HK:()=>f,EH:()=>i}),r(69655);class o extends Error{cause;constructor(t,e){let r=t;if(void 0!==e){const t=function(t){if(n(t)){const e=String(t);return"[object Object]"!==e?e:`${t.name}: ${t.message}`}return`unknown error '${t}'`}(e);r?r+=`; caused by ${t}`:r=`caused by ${t}`}super(r),Error.captureStackTrace?.(this,this.constructor),this.name&&"Error"!==this.name||"Error"!==this.constructor.name&&(this.name=this.constructor.name),this.cause=n(e)?e:void 0}}class i extends o{name="NotImplementedError"}class f extends o{constructor(t,e){super(t,e),this.name=n(e)?e.name:"Error"}}},69655:(t,e,r)=>{"use strict";var n=r(1048).hp;class o extends Error{constructor(t){super(o._prepareSuperMessage(t)),Object.defineProperty(this,"name",{value:"NonError",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,o)}static _prepareSuperMessage(t){try{return JSON.stringify(t)}catch{return String(t)}}}const i=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0}],f=Symbol(".toJSON called"),s=({from:t,seen:e,to_:r,forceEnumerable:o,maxDepth:u,depth:h})=>{const a=r||(Array.isArray(t)?[]:{});if(e.push(t),h>=u)return a;if("function"==typeof t.toJSON&&!0!==t[f])return(t=>{t[f]=!0;const e=t.toJSON();return delete t[f],e})(t);for(const[r,i]of Object.entries(t))"function"==typeof n&&n.isBuffer(i)?a[r]="[object Buffer]":"function"!=typeof i&&(i&&"object"==typeof i?e.includes(t[r])?a[r]="[Circular]":(h++,a[r]=s({from:t[r],seen:e.slice(),forceEnumerable:o,maxDepth:u,depth:h})):a[r]=i);for(const{property:e,enumerable:r}of i)"string"==typeof t[e]&&Object.defineProperty(a,e,{value:t[e],enumerable:!!o||r,configurable:!0,writable:!0});return a};t.exports={serializeError:(t,e={})=>{const{maxDepth:r=Number.POSITIVE_INFINITY}=e;return"object"==typeof t&&null!==t?s({from:t,seen:[],forceEnumerable:!0,maxDepth:r,depth:0}):"function"==typeof t?`[Function: ${t.name||"anonymous"}]`:t},deserializeError:(t,e={})=>{const{maxDepth:r=Number.POSITIVE_INFINITY}=e;if(t instanceof Error)return t;if("object"==typeof t&&null!==t&&!Array.isArray(t)){const e=new Error;return s({from:t,seen:[],to_:e,maxDepth:r,depth:0}),e}return new o(t)}}},73335:(t,e,r)=>{"use strict";var n=r(95478),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),f=Object.prototype.hasOwnProperty,s=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,u={key:!0,ref:!0,__self:!0,__source:!0};function h(t,e,r){var n,i={},h=null,a=null;for(n in void 0!==r&&(h=""+r),void 0!==e.key&&(h=""+e.key),void 0!==e.ref&&(a=e.ref),e)f.call(e,n)&&!u.hasOwnProperty(n)&&(i[n]=e[n]);if(t&&t.defaultProps)for(n in e=t.defaultProps)void 0===i[n]&&(i[n]=e[n]);return{$$typeof:o,type:t,key:h,ref:a,props:i,_owner:s.current}}e.Fragment=i,e.jsx=h,e.jsxs=h},87092:(t,e,r)=>{"use strict";r.d(e,{Q2:()=>f,gf:()=>s,wV:()=>u});var n=r(31085),o=r(15427),i=r(57556);function f(){const t=(0,o.useVersionedContext)("api-context");if(!t)throw new i.EH("API context is not available");const e=t.atVersion(1);if(!e)throw new i.EH("ApiContext v1 not available");return e}function s(t){const e=f().get(t);if(!e)throw new i.EH(`No implementation available for ${t}`);return e}function u(t){return function(e){const r=r=>{const o=f(),s={};for(const e in t)if(t.hasOwnProperty(e)){const r=t[e],n=o.get(r);if(!n)throw new i.EH(`No implementation available for ${r}`);s[e]=n}return(0,n.jsx)(e,{...r,...s})},o=e.displayName||e.name||"Component";return r.displayName=`withApis(${o})`,r}}},89940:(t,e,r)=>{"use strict";r.d(e,{y:()=>o});class n{constructor(t){if(this.config=t,!t.id.split(".").flatMap(t=>t.split("-")).every(t=>t.match(/^[a-z][a-z0-9]*$/)))throw new Error(`API id must only contain period separated lowercase alphanum tokens with dashes, got '${t.id}'`)}get id(){return this.config.id}get T(){throw new Error(`tried to read ApiRef.T of ${this}`)}toString(){return`apiRef{${this.config.id}}`}}function o(t){return new n(t)}}}]);
|
|
3
|
-
//# sourceMappingURL=4083.
|
|
3
|
+
//# sourceMappingURL=4083.811c4e7a.chunk.js.map
|