@cobaltcore-dev/aurora 1.3.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/client/DeleteFlavorModal-C2MqUgGR.mjs +801 -0
  2. package/dist/client/DeleteFlavorModal-C2MqUgGR.mjs.map +1 -0
  3. package/dist/client/{FiltersInput-CKI6zWnm.mjs → FiltersInput-Becwxo_J.mjs} +36 -33
  4. package/dist/client/FiltersInput-Becwxo_J.mjs.map +1 -0
  5. package/dist/client/{FloatingIpActionModals-Ch8uozH9.mjs → FloatingIpActionModals-Cq10WljB.mjs} +2 -2
  6. package/dist/client/{FloatingIpActionModals-Ch8uozH9.mjs.map → FloatingIpActionModals-Cq10WljB.mjs.map} +1 -1
  7. package/dist/client/ImageToastNotifications-BWfzOUMc.mjs +1135 -0
  8. package/dist/client/ImageToastNotifications-BWfzOUMc.mjs.map +1 -0
  9. package/dist/client/RouteIdLevelDefaultError-CSseJ1yG.mjs +26 -0
  10. package/dist/client/RouteIdLevelDefaultError-CSseJ1yG.mjs.map +1 -0
  11. package/dist/client/{_flavorId-Dg7MS0Af.mjs → _flavorId-CaA4-Pnf.mjs} +4 -3
  12. package/dist/client/_flavorId-CaA4-Pnf.mjs.map +1 -0
  13. package/dist/client/_flavorId-DYv_StX22.mjs +276 -0
  14. package/dist/client/_flavorId-DYv_StX22.mjs.map +1 -0
  15. package/dist/client/_flavorId-YV3jCS5g.mjs +22 -0
  16. package/dist/client/_flavorId-YV3jCS5g.mjs.map +1 -0
  17. package/dist/client/{_floatingIpId-C9xfRWot.mjs → _floatingIpId-BeYElanB.mjs} +2 -2
  18. package/dist/client/{_floatingIpId-C9xfRWot.mjs.map → _floatingIpId-BeYElanB.mjs.map} +1 -1
  19. package/dist/client/{_floatingIpId-DNn6ABCB.mjs → _floatingIpId-Dpsc7GU4.mjs} +5 -5
  20. package/dist/client/{_floatingIpId-DNn6ABCB.mjs.map → _floatingIpId-Dpsc7GU4.mjs.map} +1 -1
  21. package/dist/client/_imageId-mfKp3JHn.mjs +558 -0
  22. package/dist/client/_imageId-mfKp3JHn.mjs.map +1 -0
  23. package/dist/client/_imageId-mpXUMCh_.mjs +22 -0
  24. package/dist/client/_imageId-mpXUMCh_.mjs.map +1 -0
  25. package/dist/client/{_imageId-8JIbFmGB.mjs → _imageId-pBSS0YcC.mjs} +4 -3
  26. package/dist/client/_imageId-pBSS0YcC.mjs.map +1 -0
  27. package/dist/client/{_projectId-B3wmSala.mjs → _projectId-AjgJX6Gl.mjs} +2 -2
  28. package/dist/client/_projectId-AjgJX6Gl.mjs.map +1 -0
  29. package/dist/client/{_projectId-DPzv0CCp.mjs → _projectId-BnTBxKfp.mjs} +4 -4
  30. package/dist/client/_projectId-BnTBxKfp.mjs.map +1 -0
  31. package/dist/client/{_projectId-DfeVJy0G.mjs → _projectId-CVrdJ52s.mjs} +2 -2
  32. package/dist/client/_projectId-CVrdJ52s.mjs.map +1 -0
  33. package/dist/client/_projectId-DgciZslU.mjs +92 -0
  34. package/dist/client/_projectId-DgciZslU.mjs.map +1 -0
  35. package/dist/client/{_securityGroupId-C6eHmrx_.mjs → _securityGroupId-AO3wnH8g.mjs} +2 -2
  36. package/dist/client/_securityGroupId-AO3wnH8g.mjs.map +1 -0
  37. package/dist/client/{_securityGroupId-DmplhDgt.mjs → _securityGroupId-Bq0ZyG6z.mjs} +750 -741
  38. package/dist/client/_securityGroupId-Bq0ZyG6z.mjs.map +1 -0
  39. package/dist/client/_storageType-c-DAu8qr.mjs +858 -0
  40. package/dist/client/_storageType-c-DAu8qr.mjs.map +1 -0
  41. package/dist/client/components/{Error → Errors}/RouteError.d.ts +5 -0
  42. package/dist/client/components/Errors/RouteIdLevelDefaultError.d.ts +17 -0
  43. package/dist/client/components/Errors/ServiceLevelDefaultError.d.ts +9 -0
  44. package/dist/client/components/ListToolbar/SelectedFilters.d.ts +7 -2
  45. package/dist/client/components/ListToolbar/types.d.ts +6 -0
  46. package/dist/client/components/ListToolbar/valueLabels.d.ts +11 -0
  47. package/dist/client/flavors-Bgq3KZmx.mjs +659 -0
  48. package/dist/client/flavors-Bgq3KZmx.mjs.map +1 -0
  49. package/dist/client/{flavors-B1SDOPDu.mjs → flavors-ZudiAiTU.mjs} +2 -2
  50. package/dist/client/{flavors-B1SDOPDu.mjs.map → flavors-ZudiAiTU.mjs.map} +1 -1
  51. package/dist/client/{floatingips-DrCvtXtT.mjs → floatingips-B1oLH8z6.mjs} +6 -6
  52. package/dist/client/{floatingips-DrCvtXtT.mjs.map → floatingips-B1oLH8z6.mjs.map} +1 -1
  53. package/dist/client/floatingips-BeQEkVH8.mjs +14 -0
  54. package/dist/client/floatingips-BeQEkVH8.mjs.map +1 -0
  55. package/dist/client/floatingips-BtLg3yEQ.mjs +22 -0
  56. package/dist/client/floatingips-BtLg3yEQ.mjs.map +1 -0
  57. package/dist/client/floatingips-Cz9k80cc.mjs.map +1 -1
  58. package/dist/client/{images-BGQv9kKT.mjs → images-CnTW3bpy.mjs} +810 -770
  59. package/dist/client/images-CnTW3bpy.mjs.map +1 -0
  60. package/dist/client/{images-CPmMa4SQ.mjs → images-DZHDYDQu.mjs} +2 -2
  61. package/dist/client/{images-CPmMa4SQ.mjs.map → images-DZHDYDQu.mjs.map} +1 -1
  62. package/dist/client/index.js +412 -409
  63. package/dist/client/index.js.map +1 -1
  64. package/dist/client/{objects-DVccbrL1.mjs → objects-25xsh4Ia.mjs} +2 -2
  65. package/dist/client/objects-25xsh4Ia.mjs.map +1 -0
  66. package/dist/client/objects-KXY6dgwq.mjs +82 -0
  67. package/dist/client/objects-KXY6dgwq.mjs.map +1 -0
  68. package/dist/client/objects-QryuClU3.mjs +82 -0
  69. package/dist/client/objects-QryuClU3.mjs.map +1 -0
  70. package/dist/client/{objects-BR3eeSNH.mjs → objects-jYQBFzwg.mjs} +4668 -4699
  71. package/dist/client/objects-jYQBFzwg.mjs.map +1 -0
  72. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  73. package/dist/client/securitygroups--0PS2wbM.mjs +580 -0
  74. package/dist/client/securitygroups--0PS2wbM.mjs.map +1 -0
  75. package/dist/client/{securitygroups-DEJQBcxm.mjs → securitygroups-BRndk7wh.mjs} +2 -2
  76. package/dist/client/{securitygroups-DEJQBcxm.mjs.map → securitygroups-BRndk7wh.mjs.map} +1 -1
  77. package/dist/client/securitygroups-CdN4yAAw.mjs +14 -0
  78. package/dist/client/securitygroups-CdN4yAAw.mjs.map +1 -0
  79. package/dist/client/securitygroups-Cs2Op-tu.mjs +22 -0
  80. package/dist/client/securitygroups-Cs2Op-tu.mjs.map +1 -0
  81. package/dist/client/securitygroups-CtKne8UQ.mjs.map +1 -1
  82. package/dist/client/trpcClient.d.ts +6 -1
  83. package/dist/client/useModalTracking-BYd37pXm.mjs +37 -0
  84. package/dist/client/useModalTracking-BYd37pXm.mjs.map +1 -0
  85. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs +294 -0
  86. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs.map +1 -0
  87. package/dist/server/index.d.ts +6 -1
  88. package/dist/server/index.js +96 -30
  89. package/package.json +4 -4
  90. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs +0 -773
  91. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs.map +0 -1
  92. package/dist/client/FiltersInput-CKI6zWnm.mjs.map +0 -1
  93. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs +0 -1152
  94. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs.map +0 -1
  95. package/dist/client/_flavorId-Dg7MS0Af.mjs.map +0 -1
  96. package/dist/client/_flavorId-kHl-b8rI.mjs +0 -232
  97. package/dist/client/_flavorId-kHl-b8rI.mjs.map +0 -1
  98. package/dist/client/_imageId-8JIbFmGB.mjs.map +0 -1
  99. package/dist/client/_imageId-BBAlRioC.mjs +0 -574
  100. package/dist/client/_imageId-BBAlRioC.mjs.map +0 -1
  101. package/dist/client/_projectId-7Nl1MQTJ.mjs +0 -99
  102. package/dist/client/_projectId-7Nl1MQTJ.mjs.map +0 -1
  103. package/dist/client/_projectId-B3wmSala.mjs.map +0 -1
  104. package/dist/client/_projectId-DPzv0CCp.mjs.map +0 -1
  105. package/dist/client/_projectId-DfeVJy0G.mjs.map +0 -1
  106. package/dist/client/_securityGroupId-C6eHmrx_.mjs.map +0 -1
  107. package/dist/client/_securityGroupId-DmplhDgt.mjs.map +0 -1
  108. package/dist/client/_storageType-C5gS9eut.mjs +0 -845
  109. package/dist/client/_storageType-C5gS9eut.mjs.map +0 -1
  110. package/dist/client/flavors-D8_PzQUB.mjs +0 -628
  111. package/dist/client/flavors-D8_PzQUB.mjs.map +0 -1
  112. package/dist/client/images-BGQv9kKT.mjs.map +0 -1
  113. package/dist/client/objects-AERkhfiM.mjs +0 -66
  114. package/dist/client/objects-AERkhfiM.mjs.map +0 -1
  115. package/dist/client/objects-BR3eeSNH.mjs.map +0 -1
  116. package/dist/client/objects-DVccbrL1.mjs.map +0 -1
  117. package/dist/client/securitygroups-BjhgLBHm.mjs +0 -620
  118. package/dist/client/securitygroups-BjhgLBHm.mjs.map +0 -1
  119. package/dist/client/useModalTracking-BcOKTYRN.mjs +0 -33
  120. package/dist/client/useModalTracking-BcOKTYRN.mjs.map +0 -1
  121. package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs +0 -227
  122. package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { C as e, S as t, b as n, n as r, t as i, v as a, x as o } from "./objects-BR3eeSNH.mjs";
1
+ import { C as e, S as t, b as n, n as r, t as i, v as a, x as o } from "./objects-jYQBFzwg.mjs";
2
2
  import { t as s } from "./useSetBreadcrumb-tn7lBaQV.mjs";
3
3
  import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
4
4
  import { useParams as d } from "@tanstack/react-router";
@@ -63,4 +63,4 @@ var h = () => /*#__PURE__*/ l(m, {});
63
63
  //#endregion
64
64
  export { m as ObjectsDashboard, h as component };
65
65
 
66
- //# sourceMappingURL=objects-DVccbrL1.mjs.map
66
+ //# sourceMappingURL=objects-25xsh4Ia.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects-25xsh4Ia.mjs","names":["useParams","ErrorBoundary","Trans","SwiftObjects","CephObjects","CephCorsRules","CephLifecycleRules","BucketHeader","ContainerHeader","useSetBreadcrumb","Route","ObjectsDashboard","projectId","provider","containerName","from","select","params","id","prefix","sortBy","sortDirection","search","view","useSearch","undefined","SplitComponent","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/index.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute, useNavigate, useParams } from \"@tanstack/react-router\"\nimport { Button } from \"@cloudoperators/juno-ui-components\"\nimport { checkServiceAvailability } from \"../../../../-components/utils/serviceAvailability\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { SwiftObjects } from \"../../../../-components/Swift/Objects\"\nimport { CephObjects } from \"../../../../-components/Ceph/Objects\"\nimport { CephCorsRules, CephLifecycleRules } from \"../../../../-components/Ceph/Buckets\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteIdLevelDefaultError } from \"@/client/components/Errors/RouteIdLevelDefaultError\"\nimport { BucketHeader } from \"../../../../-components/Ceph/Buckets/BucketHeader\"\nimport { ContainerHeader } from \"../../../../-components/Swift/Containers/ContainerHeader\"\nimport { useSetBreadcrumb } from \"@/client/hooks/useSetBreadcrumb\"\n\nfunction ObjectStorageErrorComponent() {\n const { t } = useLingui()\n const navigate = useNavigate()\n const { projectId, provider, storageType } = Route.useParams()\n const isCeph = provider === \"ceph\"\n\n return (\n <RouteIdLevelDefaultError\n action={\n <Button\n variant=\"primary\"\n onClick={() =>\n navigate({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { projectId, provider, storageType },\n })\n }\n >\n {isCeph ? t`Back to Buckets` : t`Back to Containers`}\n </Button>\n }\n />\n )\n}\n\n// Search params schema\n// - prefix: base64-encoded current folder path, safe to carry \"/\" chars in the URL\n// - sortBy: active sort column key — persisted so deep links and back navigation restore sort state\n// Accepts both Swift keys (last_modified, bytes) and Ceph keys (lastModified, size) for compatibility\n// - sortDirection: \"asc\" | \"desc\" — persisted alongside sortBy\n// - view: tab selection for Ceph bucket details page (overview shows objects, cors-rules shows CORS config, lifecycle-rules shows lifecycle config)\n// - corsSortBy: active sort column for CORS rules tab (ID, AllowedOrigins, etc.) — separate from objects sortBy\n// - corsSortDirection: \"asc\" | \"desc\" for CORS rules — separate from objects sortDirection\n// - corsSearch: search term for filtering CORS rules by Rule ID — separate from objects search\n// - lifecycleSortBy: active sort column for lifecycle rules tab (ID, Status, Expiration) — separate from objects sortBy\n// - lifecycleSortDirection: \"asc\" | \"desc\" for lifecycle rules — separate from objects sortDirection\n// - lifecycleSearch: search term for filtering lifecycle rules by Rule ID — separate from objects search\nconst objectsSearchSchema = z.object({\n prefix: z.string().optional(),\n sortBy: z.enum([\"name\", \"last_modified\", \"bytes\", \"lastModified\", \"size\"]).optional().default(\"name\"),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n search: z.string().optional(),\n tab: z.enum([\"all\", \"deleted\"]).optional().default(\"all\"),\n view: z.enum([\"overview\", \"cors-rules\", \"lifecycle-rules\"]).optional().default(\"overview\"),\n corsSortBy: z\n .enum([\"ID\", \"AllowedOrigins\", \"AllowedMethods\", \"AllowedHeaders\", \"ExposeHeaders\", \"MaxAgeSeconds\"])\n .optional()\n .default(\"ID\"),\n corsSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n corsSearch: z.string().optional(),\n lifecycleSortBy: z.enum([\"ID\", \"Status\", \"Expiration\"]).optional().default(\"ID\"),\n lifecycleSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n lifecycleSearch: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\n \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\"\n)({\n staticData: {\n section: \"storage\",\n service: \"containers\",\n analytics: {\n name: \"storage.objectstore.detail\",\n },\n } satisfies RouteInfo,\n validateSearch: objectsSearchSchema,\n head: ({ match }) => ({\n meta: [{ title: match.params.containerName }],\n }),\n component: () => {\n return <ObjectsDashboard />\n },\n notFoundComponent: ObjectStorageErrorComponent,\n errorComponent: ObjectStorageErrorComponent,\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n\n return {\n client: trpcClient,\n availableServices,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n checkServiceAvailability(availableServices!, params)\n },\n})\n\nexport function ObjectsDashboard() {\n const { projectId, provider, containerName } = useParams({\n from: \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\",\n select: (params) => ({\n projectId: params.projectId,\n provider: params.provider,\n containerName: params.containerName,\n }),\n })\n\n useSetBreadcrumb(Route.id, containerName)\n\n const { prefix, sortBy, sortDirection, search, view } = Route.useSearch()\n\n return (\n <>\n {provider === \"ceph\" && <BucketHeader bucketName={containerName} />}\n {provider === \"swift\" && <ContainerHeader containerName={containerName} />}\n {/* Ceph gets extra breathing room below its header from BucketHeader's own\n tabs block; Swift has no such block, so pad the content wrapper directly\n to avoid the overflow menu sitting too close to the toolbar below it. */}\n <div className={provider === \"swift\" ? \"pt-4\" : undefined}>\n {projectId ? (\n <ErrorBoundary\n resetKeys={[projectId, provider, containerName, prefix, sortBy, sortDirection, search, view]}\n fallback={\n <div className=\"p-4 text-center\">\n <Trans>Error loading component</Trans>\n </div>\n }\n >\n {(() => {\n switch (provider) {\n case \"swift\":\n return <SwiftObjects provider={provider} containerName={containerName} />\n case \"ceph\":\n if (view === \"lifecycle-rules\") {\n return <CephLifecycleRules bucketName={containerName} />\n }\n if (view === \"cors-rules\") {\n return <CephCorsRules bucketName={containerName} />\n }\n return <CephObjects bucketName={containerName} />\n default:\n return (\n <div className=\"p-4\">\n <Trans>Objects: {containerName}</Trans>\n </div>\n )\n }\n })()}\n </ErrorBoundary>\n ) : (\n <div className=\"p-4 text-center\">\n <Trans>No project selected</Trans>\n </div>\n )}\n </div>\n </>\n )\n}\n"],"mappings":";;;;;;;AAyGA,SAAgBW,IAAAA;CACd,IAAM,EAAEC,cAAWC,aAAUC,qBAAkBd,EAAU;EACvDe,MAAM;EACNC,SAASC,OAAY;GACnBL,WAAWK,EAAOL;GAClBC,UAAUI,EAAOJ;GACjBC,eAAeG,EAAOH;EACxB;CACF,CAAA;CAEAL,EAAiBC,EAAMQ,IAAIJ,CAAAA;CAE3B,IAAM,EAAEK,WAAQC,WAAQC,kBAAeC,WAAQC,YAASb,EAAMc,UAAS;CAEvE,OACE,gBAAA,GAAA,EAAA,UAAA;EACGX,MAAa,UAAU,gBAAC,GAAA,EAAa,YAAYC,EAAAA,CAAAA;EACjDD,MAAa,WAAW,gBAAC,GAAA,EAA+BC,iBAAAA,CAAAA;EAIzD,gBAAC,OAAA;GAAI,WAAWD,MAAa,UAAU,SAASY,KAAAA;GAC7Cb,UAAAA,IACC,gBAAC,GAAA;IACC,WAAW;KAACA;KAAWC;KAAUC;KAAeK;KAAQC;KAAQC;KAAeC;KAAQC;IAAK;IAC5F,UACE,gBAAC,OAAA;KAAI,WAAU;KACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;IAIH,iBAAC;KACA,QAAQV,GAAR;MACE,KAAK,SACH,OAAO,gBAAC,GAAA;OAAuBA;OAAyBC;;MAC1D,KAAK,QAOH,OALS,EADLS,MAAS,oBACH,IAENA,MAAS,eACH,IAEF,GALE,EAAmB,YAAYT,EAAAA,CAAAA;MAM3C,SACE,OACE,gBAAC,OAAA;OAAI,WAAU;OACb,UAAA,gBAAA,GAAA;;QAAiBA,QAAAA,EAAAA,iBAAAA;;;KAGzB;IACF,EAAA,CAAA;GAGF,CAAA,IAAA,gBAAC,OAAA;IAAI,WAAU;IACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;;AAMZ;AAAC,IAAAY,UAhFU,gBAAC,GAAA,CAAA,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { i as e } from "./build-WuxXRAqf.mjs";
2
+ import { C as t, S as n, b as r, n as i, t as a, v as o, x as s } from "./objects-jYQBFzwg.mjs";
3
+ import { t as c } from "./useSetBreadcrumb-tn7lBaQV.mjs";
4
+ import { t as l } from "./RouteIdLevelDefaultError-CSseJ1yG.mjs";
5
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
6
+ import { useNavigate as p, useParams as m } from "@tanstack/react-router";
7
+ import { Trans as h, useLingui as g } from "@lingui/react";
8
+ import { ErrorBoundary as _ } from "react-error-boundary";
9
+ //#region src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/index.tsx?tsr-split=notFoundComponent
10
+ function v() {
11
+ let { i18n: t, _: n } = g(), r = p(), { projectId: i, provider: o, storageType: s } = a.useParams();
12
+ return /*#__PURE__*/ d(l, { action: /*#__PURE__*/ d(e, {
13
+ variant: "primary",
14
+ onClick: () => r({
15
+ to: "/projects/$projectId/storage/$provider/$storageType",
16
+ params: {
17
+ projectId: i,
18
+ provider: o,
19
+ storageType: s
20
+ }
21
+ }),
22
+ children: o === "ceph" ? t._({ id: "Rzahyj" }) : t._({ id: "6nrGLS" })
23
+ }) });
24
+ }
25
+ function y() {
26
+ let { projectId: e, provider: l, containerName: p } = m({
27
+ from: "/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/",
28
+ select: (e) => ({
29
+ projectId: e.projectId,
30
+ provider: e.provider,
31
+ containerName: e.containerName
32
+ })
33
+ });
34
+ c(a.id, p);
35
+ let { prefix: g, sortBy: v, sortDirection: y, search: b, view: x } = a.useSearch();
36
+ return /*#__PURE__*/ f(u, { children: [
37
+ l === "ceph" && /*#__PURE__*/ d(o, { bucketName: p }),
38
+ l === "swift" && /*#__PURE__*/ d(i, { containerName: p }),
39
+ /*#__PURE__*/ d("div", {
40
+ className: l === "swift" ? "pt-4" : void 0,
41
+ children: e ? /*#__PURE__*/ d(_, {
42
+ resetKeys: [
43
+ e,
44
+ l,
45
+ p,
46
+ g,
47
+ v,
48
+ y,
49
+ b,
50
+ x
51
+ ],
52
+ fallback: /*#__PURE__*/ d("div", {
53
+ className: "p-4 text-center",
54
+ children: /*#__PURE__*/ d(h, { id: "diFNkW" })
55
+ }),
56
+ children: (() => {
57
+ switch (l) {
58
+ case "swift": return /*#__PURE__*/ d(t, {
59
+ provider: l,
60
+ containerName: p
61
+ });
62
+ case "ceph": return d(x === "lifecycle-rules" ? r : x === "cors-rules" ? s : n, { bucketName: p });
63
+ default: return /*#__PURE__*/ d("div", {
64
+ className: "p-4",
65
+ children: /*#__PURE__*/ d(h, {
66
+ id: "ubUrot",
67
+ values: { containerName: p }
68
+ })
69
+ });
70
+ }
71
+ })()
72
+ }) : /*#__PURE__*/ d("div", {
73
+ className: "p-4 text-center",
74
+ children: /*#__PURE__*/ d(h, { id: "Z2fZGD" })
75
+ })
76
+ })
77
+ ] });
78
+ }
79
+ //#endregion
80
+ export { y as ObjectsDashboard, v as notFoundComponent };
81
+
82
+ //# sourceMappingURL=objects-KXY6dgwq.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects-KXY6dgwq.mjs","names":["useNavigate","useParams","Button","ErrorBoundary","Trans","useLingui","SwiftObjects","CephObjects","CephCorsRules","CephLifecycleRules","RouteIdLevelDefaultError","BucketHeader","ContainerHeader","useSetBreadcrumb","ObjectStorageErrorComponent","t","navigate","projectId","provider","storageType","Route","isCeph","to","params","ObjectsDashboard","containerName","from","select","id","prefix","sortBy","sortDirection","search","view","useSearch","undefined","notFoundComponent"],"sources":["../../src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/index.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { createFileRoute, useNavigate, useParams } from \"@tanstack/react-router\"\nimport { Button } from \"@cloudoperators/juno-ui-components\"\nimport { checkServiceAvailability } from \"../../../../-components/utils/serviceAvailability\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { SwiftObjects } from \"../../../../-components/Swift/Objects\"\nimport { CephObjects } from \"../../../../-components/Ceph/Objects\"\nimport { CephCorsRules, CephLifecycleRules } from \"../../../../-components/Ceph/Buckets\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteIdLevelDefaultError } from \"@/client/components/Errors/RouteIdLevelDefaultError\"\nimport { BucketHeader } from \"../../../../-components/Ceph/Buckets/BucketHeader\"\nimport { ContainerHeader } from \"../../../../-components/Swift/Containers/ContainerHeader\"\nimport { useSetBreadcrumb } from \"@/client/hooks/useSetBreadcrumb\"\n\nfunction ObjectStorageErrorComponent() {\n const { t } = useLingui()\n const navigate = useNavigate()\n const { projectId, provider, storageType } = Route.useParams()\n const isCeph = provider === \"ceph\"\n\n return (\n <RouteIdLevelDefaultError\n action={\n <Button\n variant=\"primary\"\n onClick={() =>\n navigate({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { projectId, provider, storageType },\n })\n }\n >\n {isCeph ? t`Back to Buckets` : t`Back to Containers`}\n </Button>\n }\n />\n )\n}\n\n// Search params schema\n// - prefix: base64-encoded current folder path, safe to carry \"/\" chars in the URL\n// - sortBy: active sort column key — persisted so deep links and back navigation restore sort state\n// Accepts both Swift keys (last_modified, bytes) and Ceph keys (lastModified, size) for compatibility\n// - sortDirection: \"asc\" | \"desc\" — persisted alongside sortBy\n// - view: tab selection for Ceph bucket details page (overview shows objects, cors-rules shows CORS config, lifecycle-rules shows lifecycle config)\n// - corsSortBy: active sort column for CORS rules tab (ID, AllowedOrigins, etc.) — separate from objects sortBy\n// - corsSortDirection: \"asc\" | \"desc\" for CORS rules — separate from objects sortDirection\n// - corsSearch: search term for filtering CORS rules by Rule ID — separate from objects search\n// - lifecycleSortBy: active sort column for lifecycle rules tab (ID, Status, Expiration) — separate from objects sortBy\n// - lifecycleSortDirection: \"asc\" | \"desc\" for lifecycle rules — separate from objects sortDirection\n// - lifecycleSearch: search term for filtering lifecycle rules by Rule ID — separate from objects search\nconst objectsSearchSchema = z.object({\n prefix: z.string().optional(),\n sortBy: z.enum([\"name\", \"last_modified\", \"bytes\", \"lastModified\", \"size\"]).optional().default(\"name\"),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n search: z.string().optional(),\n tab: z.enum([\"all\", \"deleted\"]).optional().default(\"all\"),\n view: z.enum([\"overview\", \"cors-rules\", \"lifecycle-rules\"]).optional().default(\"overview\"),\n corsSortBy: z\n .enum([\"ID\", \"AllowedOrigins\", \"AllowedMethods\", \"AllowedHeaders\", \"ExposeHeaders\", \"MaxAgeSeconds\"])\n .optional()\n .default(\"ID\"),\n corsSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n corsSearch: z.string().optional(),\n lifecycleSortBy: z.enum([\"ID\", \"Status\", \"Expiration\"]).optional().default(\"ID\"),\n lifecycleSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n lifecycleSearch: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\n \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\"\n)({\n staticData: {\n section: \"storage\",\n service: \"containers\",\n analytics: {\n name: \"storage.objectstore.detail\",\n },\n } satisfies RouteInfo,\n validateSearch: objectsSearchSchema,\n head: ({ match }) => ({\n meta: [{ title: match.params.containerName }],\n }),\n component: () => {\n return <ObjectsDashboard />\n },\n notFoundComponent: ObjectStorageErrorComponent,\n errorComponent: ObjectStorageErrorComponent,\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n\n return {\n client: trpcClient,\n availableServices,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n checkServiceAvailability(availableServices!, params)\n },\n})\n\nexport function ObjectsDashboard() {\n const { projectId, provider, containerName } = useParams({\n from: \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\",\n select: (params) => ({\n projectId: params.projectId,\n provider: params.provider,\n containerName: params.containerName,\n }),\n })\n\n useSetBreadcrumb(Route.id, containerName)\n\n const { prefix, sortBy, sortDirection, search, view } = Route.useSearch()\n\n return (\n <>\n {provider === \"ceph\" && <BucketHeader bucketName={containerName} />}\n {provider === \"swift\" && <ContainerHeader containerName={containerName} />}\n {/* Ceph gets extra breathing room below its header from BucketHeader's own\n tabs block; Swift has no such block, so pad the content wrapper directly\n to avoid the overflow menu sitting too close to the toolbar below it. */}\n <div className={provider === \"swift\" ? \"pt-4\" : undefined}>\n {projectId ? (\n <ErrorBoundary\n resetKeys={[projectId, provider, containerName, prefix, sortBy, sortDirection, search, view]}\n fallback={\n <div className=\"p-4 text-center\">\n <Trans>Error loading component</Trans>\n </div>\n }\n >\n {(() => {\n switch (provider) {\n case \"swift\":\n return <SwiftObjects provider={provider} containerName={containerName} />\n case \"ceph\":\n if (view === \"lifecycle-rules\") {\n return <CephLifecycleRules bucketName={containerName} />\n }\n if (view === \"cors-rules\") {\n return <CephCorsRules bucketName={containerName} />\n }\n return <CephObjects bucketName={containerName} />\n default:\n return (\n <div className=\"p-4\">\n <Trans>Objects: {containerName}</Trans>\n </div>\n )\n }\n })()}\n </ErrorBoundary>\n ) : (\n <div className=\"p-4 text-center\">\n <Trans>No project selected</Trans>\n </div>\n )}\n </div>\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAeA,SAASc,IAAAA;CACP,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQT,EAAAA,GACRW,IAAWhB,EAAAA,GACX,EAAEiB,cAAWC,aAAUC,mBAAgBC,EAAMnB,UAAS;CAG5D,OACE,gBAAC,GAAA,EACC,QACE,gBAAC,GAAA;EACC,SAAQ;EACR,eACEe,EAAS;GACPM,IAAI;GACJC,QAAQ;IAAEN;IAAWC;IAAUC;GAAY;EAC7C,CAAA;EAGDE,UAdMH,MAAa,SAcVH,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA,IAAoBA,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA;;AAK1C;AAmEA,SAAgBS,IAAAA;CACd,IAAM,EAAEP,cAAWC,aAAUO,qBAAkBxB,EAAU;EACvDyB,MAAM;EACNC,SAASJ,OAAY;GACnBN,WAAWM,EAAON;GAClBC,UAAUK,EAAOL;GACjBO,eAAeF,EAAOE;EACxB;CACF,CAAA;CAEAZ,EAAiBO,EAAMQ,IAAIH,CAAAA;CAE3B,IAAM,EAAEI,WAAQC,WAAQC,kBAAeC,WAAQC,YAASb,EAAMc,UAAS;CAEvE,OACE,gBAAA,GAAA,EAAA,UAAA;EACGhB,MAAa,UAAU,gBAAC,GAAA,EAAa,YAAYO,EAAAA,CAAAA;EACjDP,MAAa,WAAW,gBAAC,GAAA,EAA+BO,iBAAAA,CAAAA;EAIzD,gBAAC,OAAA;GAAI,WAAWP,MAAa,UAAU,SAASiB,KAAAA;GAC7ClB,UAAAA,IACC,gBAAC,GAAA;IACC,WAAW;KAACA;KAAWC;KAAUO;KAAeI;KAAQC;KAAQC;KAAeC;KAAQC;IAAK;IAC5F,UACE,gBAAC,OAAA;KAAI,WAAU;KACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;IAIH,iBAAC;KACA,QAAQf,GAAR;MACE,KAAK,SACH,OAAO,gBAAC,GAAA;OAAuBA;OAAyBO;;MAC1D,KAAK,QAOH,OALS,EADLQ,MAAS,oBACH,IAENA,MAAS,eACH,IAEF,GALE,EAAmB,YAAYR,EAAAA,CAAAA;MAM3C,SACE,OACE,gBAAC,OAAA;OAAI,WAAU;OACb,UAAA,gBAAA,GAAA;;QAAiBA,QAAAA,EAAAA,iBAAAA;;;KAGzB;IACF,EAAA,CAAA;GAGF,CAAA,IAAA,gBAAC,OAAA;IAAI,WAAU;IACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;;AAMZ"}
@@ -0,0 +1,82 @@
1
+ import { i as e } from "./build-WuxXRAqf.mjs";
2
+ import { C as t, S as n, b as r, n as i, t as a, v as o, x as s } from "./objects-jYQBFzwg.mjs";
3
+ import { t as c } from "./useSetBreadcrumb-tn7lBaQV.mjs";
4
+ import { t as l } from "./RouteIdLevelDefaultError-CSseJ1yG.mjs";
5
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
6
+ import { useNavigate as p, useParams as m } from "@tanstack/react-router";
7
+ import { Trans as h, useLingui as g } from "@lingui/react";
8
+ import { ErrorBoundary as _ } from "react-error-boundary";
9
+ //#region src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/index.tsx?tsr-split=errorComponent
10
+ function v() {
11
+ let { i18n: t, _: n } = g(), r = p(), { projectId: i, provider: o, storageType: s } = a.useParams();
12
+ return /*#__PURE__*/ d(l, { action: /*#__PURE__*/ d(e, {
13
+ variant: "primary",
14
+ onClick: () => r({
15
+ to: "/projects/$projectId/storage/$provider/$storageType",
16
+ params: {
17
+ projectId: i,
18
+ provider: o,
19
+ storageType: s
20
+ }
21
+ }),
22
+ children: o === "ceph" ? t._({ id: "Rzahyj" }) : t._({ id: "6nrGLS" })
23
+ }) });
24
+ }
25
+ function y() {
26
+ let { projectId: e, provider: l, containerName: p } = m({
27
+ from: "/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/",
28
+ select: (e) => ({
29
+ projectId: e.projectId,
30
+ provider: e.provider,
31
+ containerName: e.containerName
32
+ })
33
+ });
34
+ c(a.id, p);
35
+ let { prefix: g, sortBy: v, sortDirection: y, search: b, view: x } = a.useSearch();
36
+ return /*#__PURE__*/ f(u, { children: [
37
+ l === "ceph" && /*#__PURE__*/ d(o, { bucketName: p }),
38
+ l === "swift" && /*#__PURE__*/ d(i, { containerName: p }),
39
+ /*#__PURE__*/ d("div", {
40
+ className: l === "swift" ? "pt-4" : void 0,
41
+ children: e ? /*#__PURE__*/ d(_, {
42
+ resetKeys: [
43
+ e,
44
+ l,
45
+ p,
46
+ g,
47
+ v,
48
+ y,
49
+ b,
50
+ x
51
+ ],
52
+ fallback: /*#__PURE__*/ d("div", {
53
+ className: "p-4 text-center",
54
+ children: /*#__PURE__*/ d(h, { id: "diFNkW" })
55
+ }),
56
+ children: (() => {
57
+ switch (l) {
58
+ case "swift": return /*#__PURE__*/ d(t, {
59
+ provider: l,
60
+ containerName: p
61
+ });
62
+ case "ceph": return d(x === "lifecycle-rules" ? r : x === "cors-rules" ? s : n, { bucketName: p });
63
+ default: return /*#__PURE__*/ d("div", {
64
+ className: "p-4",
65
+ children: /*#__PURE__*/ d(h, {
66
+ id: "ubUrot",
67
+ values: { containerName: p }
68
+ })
69
+ });
70
+ }
71
+ })()
72
+ }) : /*#__PURE__*/ d("div", {
73
+ className: "p-4 text-center",
74
+ children: /*#__PURE__*/ d(h, { id: "Z2fZGD" })
75
+ })
76
+ })
77
+ ] });
78
+ }
79
+ //#endregion
80
+ export { y as ObjectsDashboard, v as errorComponent };
81
+
82
+ //# sourceMappingURL=objects-QryuClU3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects-QryuClU3.mjs","names":["useNavigate","useParams","Button","ErrorBoundary","Trans","useLingui","SwiftObjects","CephObjects","CephCorsRules","CephLifecycleRules","RouteIdLevelDefaultError","BucketHeader","ContainerHeader","useSetBreadcrumb","ObjectStorageErrorComponent","t","navigate","projectId","provider","storageType","Route","isCeph","to","params","ObjectsDashboard","containerName","from","select","id","prefix","sortBy","sortDirection","search","view","useSearch","undefined","errorComponent"],"sources":["../../src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import { createFileRoute, useNavigate, useParams } from \"@tanstack/react-router\"\nimport { Button } from \"@cloudoperators/juno-ui-components\"\nimport { checkServiceAvailability } from \"../../../../-components/utils/serviceAvailability\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { SwiftObjects } from \"../../../../-components/Swift/Objects\"\nimport { CephObjects } from \"../../../../-components/Ceph/Objects\"\nimport { CephCorsRules, CephLifecycleRules } from \"../../../../-components/Ceph/Buckets\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteIdLevelDefaultError } from \"@/client/components/Errors/RouteIdLevelDefaultError\"\nimport { BucketHeader } from \"../../../../-components/Ceph/Buckets/BucketHeader\"\nimport { ContainerHeader } from \"../../../../-components/Swift/Containers/ContainerHeader\"\nimport { useSetBreadcrumb } from \"@/client/hooks/useSetBreadcrumb\"\n\nfunction ObjectStorageErrorComponent() {\n const { t } = useLingui()\n const navigate = useNavigate()\n const { projectId, provider, storageType } = Route.useParams()\n const isCeph = provider === \"ceph\"\n\n return (\n <RouteIdLevelDefaultError\n action={\n <Button\n variant=\"primary\"\n onClick={() =>\n navigate({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { projectId, provider, storageType },\n })\n }\n >\n {isCeph ? t`Back to Buckets` : t`Back to Containers`}\n </Button>\n }\n />\n )\n}\n\n// Search params schema\n// - prefix: base64-encoded current folder path, safe to carry \"/\" chars in the URL\n// - sortBy: active sort column key — persisted so deep links and back navigation restore sort state\n// Accepts both Swift keys (last_modified, bytes) and Ceph keys (lastModified, size) for compatibility\n// - sortDirection: \"asc\" | \"desc\" — persisted alongside sortBy\n// - view: tab selection for Ceph bucket details page (overview shows objects, cors-rules shows CORS config, lifecycle-rules shows lifecycle config)\n// - corsSortBy: active sort column for CORS rules tab (ID, AllowedOrigins, etc.) — separate from objects sortBy\n// - corsSortDirection: \"asc\" | \"desc\" for CORS rules — separate from objects sortDirection\n// - corsSearch: search term for filtering CORS rules by Rule ID — separate from objects search\n// - lifecycleSortBy: active sort column for lifecycle rules tab (ID, Status, Expiration) — separate from objects sortBy\n// - lifecycleSortDirection: \"asc\" | \"desc\" for lifecycle rules — separate from objects sortDirection\n// - lifecycleSearch: search term for filtering lifecycle rules by Rule ID — separate from objects search\nconst objectsSearchSchema = z.object({\n prefix: z.string().optional(),\n sortBy: z.enum([\"name\", \"last_modified\", \"bytes\", \"lastModified\", \"size\"]).optional().default(\"name\"),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n search: z.string().optional(),\n tab: z.enum([\"all\", \"deleted\"]).optional().default(\"all\"),\n view: z.enum([\"overview\", \"cors-rules\", \"lifecycle-rules\"]).optional().default(\"overview\"),\n corsSortBy: z\n .enum([\"ID\", \"AllowedOrigins\", \"AllowedMethods\", \"AllowedHeaders\", \"ExposeHeaders\", \"MaxAgeSeconds\"])\n .optional()\n .default(\"ID\"),\n corsSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n corsSearch: z.string().optional(),\n lifecycleSortBy: z.enum([\"ID\", \"Status\", \"Expiration\"]).optional().default(\"ID\"),\n lifecycleSortDirection: z.enum([\"asc\", \"desc\"]).optional().default(\"asc\"),\n lifecycleSearch: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\n \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\"\n)({\n staticData: {\n section: \"storage\",\n service: \"containers\",\n analytics: {\n name: \"storage.objectstore.detail\",\n },\n } satisfies RouteInfo,\n validateSearch: objectsSearchSchema,\n head: ({ match }) => ({\n meta: [{ title: match.params.containerName }],\n }),\n component: () => {\n return <ObjectsDashboard />\n },\n notFoundComponent: ObjectStorageErrorComponent,\n errorComponent: ObjectStorageErrorComponent,\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n\n return {\n client: trpcClient,\n availableServices,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n checkServiceAvailability(availableServices!, params)\n },\n})\n\nexport function ObjectsDashboard() {\n const { projectId, provider, containerName } = useParams({\n from: \"/_auth/projects/$projectId/storage/$provider/$storageType/$containerName/objects/\",\n select: (params) => ({\n projectId: params.projectId,\n provider: params.provider,\n containerName: params.containerName,\n }),\n })\n\n useSetBreadcrumb(Route.id, containerName)\n\n const { prefix, sortBy, sortDirection, search, view } = Route.useSearch()\n\n return (\n <>\n {provider === \"ceph\" && <BucketHeader bucketName={containerName} />}\n {provider === \"swift\" && <ContainerHeader containerName={containerName} />}\n {/* Ceph gets extra breathing room below its header from BucketHeader's own\n tabs block; Swift has no such block, so pad the content wrapper directly\n to avoid the overflow menu sitting too close to the toolbar below it. */}\n <div className={provider === \"swift\" ? \"pt-4\" : undefined}>\n {projectId ? (\n <ErrorBoundary\n resetKeys={[projectId, provider, containerName, prefix, sortBy, sortDirection, search, view]}\n fallback={\n <div className=\"p-4 text-center\">\n <Trans>Error loading component</Trans>\n </div>\n }\n >\n {(() => {\n switch (provider) {\n case \"swift\":\n return <SwiftObjects provider={provider} containerName={containerName} />\n case \"ceph\":\n if (view === \"lifecycle-rules\") {\n return <CephLifecycleRules bucketName={containerName} />\n }\n if (view === \"cors-rules\") {\n return <CephCorsRules bucketName={containerName} />\n }\n return <CephObjects bucketName={containerName} />\n default:\n return (\n <div className=\"p-4\">\n <Trans>Objects: {containerName}</Trans>\n </div>\n )\n }\n })()}\n </ErrorBoundary>\n ) : (\n <div className=\"p-4 text-center\">\n <Trans>No project selected</Trans>\n </div>\n )}\n </div>\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAeA,SAASc,IAAAA;CACP,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQT,EAAAA,GACRW,IAAWhB,EAAAA,GACX,EAAEiB,cAAWC,aAAUC,mBAAgBC,EAAMnB,UAAS;CAG5D,OACE,gBAAC,GAAA,EACC,QACE,gBAAC,GAAA;EACC,SAAQ;EACR,eACEe,EAAS;GACPM,IAAI;GACJC,QAAQ;IAAEN;IAAWC;IAAUC;GAAY;EAC7C,CAAA;EAGDE,UAdMH,MAAa,SAcVH,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA,IAAoBA,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA;;AAK1C;AAmEA,SAAgBS,IAAAA;CACd,IAAM,EAAEP,cAAWC,aAAUO,qBAAkBxB,EAAU;EACvDyB,MAAM;EACNC,SAASJ,OAAY;GACnBN,WAAWM,EAAON;GAClBC,UAAUK,EAAOL;GACjBO,eAAeF,EAAOE;EACxB;CACF,CAAA;CAEAZ,EAAiBO,EAAMQ,IAAIH,CAAAA;CAE3B,IAAM,EAAEI,WAAQC,WAAQC,kBAAeC,WAAQC,YAASb,EAAMc,UAAS;CAEvE,OACE,gBAAA,GAAA,EAAA,UAAA;EACGhB,MAAa,UAAU,gBAAC,GAAA,EAAa,YAAYO,EAAAA,CAAAA;EACjDP,MAAa,WAAW,gBAAC,GAAA,EAA+BO,iBAAAA,CAAAA;EAIzD,gBAAC,OAAA;GAAI,WAAWP,MAAa,UAAU,SAASiB,KAAAA;GAC7ClB,UAAAA,IACC,gBAAC,GAAA;IACC,WAAW;KAACA;KAAWC;KAAUO;KAAeI;KAAQC;KAAQC;KAAeC;KAAQC;IAAK;IAC5F,UACE,gBAAC,OAAA;KAAI,WAAU;KACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;IAIH,iBAAC;KACA,QAAQf,GAAR;MACE,KAAK,SACH,OAAO,gBAAC,GAAA;OAAuBA;OAAyBO;;MAC1D,KAAK,QAOH,OALS,EADLQ,MAAS,oBACH,IAENA,MAAS,eACH,IAEF,GALE,EAAmB,YAAYR,EAAAA,CAAAA;MAM3C,SACE,OACE,gBAAC,OAAA;OAAI,WAAU;OACb,UAAA,gBAAA,GAAA;;QAAiBA,QAAAA,EAAAA,iBAAAA;;;KAGzB;IACF,EAAA,CAAA;GAGF,CAAA,IAAA,gBAAC,OAAA;IAAI,WAAU;IACb,UAAA,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;;AAMZ"}