@cobaltcore-dev/aurora 0.8.1 → 0.10.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 (98) hide show
  1. package/README.md +47 -13
  2. package/dist/client/AuroraApp.d.ts +14 -0
  3. package/dist/client/ContentHeader-D4jlOG-9.mjs +96 -0
  4. package/dist/client/ContentHeader-D4jlOG-9.mjs.map +1 -0
  5. package/dist/client/DeleteVersionsModal-CyYZfB8d.mjs +331 -0
  6. package/dist/client/DeleteVersionsModal-CyYZfB8d.mjs.map +1 -0
  7. package/dist/client/Slot-CWb612-_.mjs +28 -0
  8. package/dist/client/Slot-CWb612-_.mjs.map +1 -0
  9. package/dist/client/{SortInput-VK7IYqQv.mjs → SortInput-DLcusjGZ.mjs} +8 -8
  10. package/dist/client/SortInput-DLcusjGZ.mjs.map +1 -0
  11. package/dist/client/_auth-DXJkv9QO.mjs.map +1 -1
  12. package/dist/client/{_flavorId-iZE2j210.mjs → _flavorId-DsD2VTKA.mjs} +3 -3
  13. package/dist/client/{_flavorId-iZE2j210.mjs.map → _flavorId-DsD2VTKA.mjs.map} +1 -1
  14. package/dist/client/{_flavorId-DU4gcFna.mjs → _flavorId-Dy7EYQum.mjs} +2 -2
  15. package/dist/client/{_flavorId-DU4gcFna.mjs.map → _flavorId-Dy7EYQum.mjs.map} +1 -1
  16. package/dist/client/{_floatingIpId-B5GMSLeQ.mjs → _floatingIpId-BjVbeNw_.mjs} +2 -2
  17. package/dist/client/{_floatingIpId-B5GMSLeQ.mjs.map → _floatingIpId-BjVbeNw_.mjs.map} +1 -1
  18. package/dist/client/{_floatingIpId-C2-BeRmF.mjs → _floatingIpId-j17rCQqG2.mjs} +2 -2
  19. package/dist/client/_floatingIpId-j17rCQqG2.mjs.map +1 -0
  20. package/dist/client/{_imageId-zmaSymWe.mjs → _imageId-BjfhqAje.mjs} +2 -2
  21. package/dist/client/{_imageId-zmaSymWe.mjs.map → _imageId-BjfhqAje.mjs.map} +1 -1
  22. package/dist/client/{_pcaId-BwTvJJgh.mjs → _pcaId-Bo7yHkNW.mjs} +3 -3
  23. package/dist/client/{_pcaId-BwTvJJgh.mjs.map → _pcaId-Bo7yHkNW.mjs.map} +1 -1
  24. package/dist/client/{_pcaId-DUHQd0rB.mjs → _pcaId-CKkCVC7b.mjs} +2 -2
  25. package/dist/client/{_pcaId-DUHQd0rB.mjs.map → _pcaId-CKkCVC7b.mjs.map} +1 -1
  26. package/dist/client/_projectId-B_2sZKk-.mjs.map +1 -1
  27. package/dist/client/_projectId-CARHuZTU.mjs +106 -0
  28. package/dist/client/_projectId-CARHuZTU.mjs.map +1 -0
  29. package/dist/client/_projectId-CY8W0IF6.mjs +27 -0
  30. package/dist/client/_projectId-CY8W0IF6.mjs.map +1 -0
  31. package/dist/client/_projectId-Dbck_MFa.mjs +290 -0
  32. package/dist/client/_projectId-Dbck_MFa.mjs.map +1 -0
  33. package/dist/client/{_securityGroupId-DYxmXUOP.mjs → _securityGroupId-CkN0CGVg.mjs} +3 -3
  34. package/dist/client/{_securityGroupId-DYxmXUOP.mjs.map → _securityGroupId-CkN0CGVg.mjs.map} +1 -1
  35. package/dist/client/{_securityGroupId-fhK1CuZh.mjs → _securityGroupId-gSEZbBII.mjs} +2 -2
  36. package/dist/client/{_securityGroupId-fhK1CuZh.mjs.map → _securityGroupId-gSEZbBII.mjs.map} +1 -1
  37. package/dist/client/{_storageType-CepuevDG.mjs → _storageType-6k8lUnQo.mjs} +2 -2
  38. package/dist/client/{_storageType-CepuevDG.mjs.map → _storageType-6k8lUnQo.mjs.map} +1 -1
  39. package/dist/client/_storageType-CLTxXjQZ.mjs +3048 -0
  40. package/dist/client/_storageType-CLTxXjQZ.mjs.map +1 -0
  41. package/dist/client/{constants-J5nm9hbP.mjs → constants-PMXUGI4Q.mjs} +2 -2
  42. package/dist/client/{constants-J5nm9hbP.mjs.map → constants-PMXUGI4Q.mjs.map} +1 -1
  43. package/dist/client/{flavors-8bZVlzzb.mjs → flavors-BclEwobO.mjs} +2 -2
  44. package/dist/client/{flavors-8bZVlzzb.mjs.map → flavors-BclEwobO.mjs.map} +1 -1
  45. package/dist/client/{flavors-BfsEBUE-.mjs → flavors-p2TKcqP-.mjs} +4 -4
  46. package/dist/client/{flavors-BfsEBUE-.mjs.map → flavors-p2TKcqP-.mjs.map} +1 -1
  47. package/dist/client/{floatingips-Dq4DXQYb.mjs → floatingips-ph0ZxJw8.mjs} +3 -3
  48. package/dist/client/{floatingips-Dq4DXQYb.mjs.map → floatingips-ph0ZxJw8.mjs.map} +1 -1
  49. package/dist/client/{images-BPnTuKFO2.mjs → images-BblnyWJq.mjs} +4 -4
  50. package/dist/client/images-BblnyWJq.mjs.map +1 -0
  51. package/dist/client/{images-8FOgju2f.mjs → images-CXdghaMW.mjs} +2 -2
  52. package/dist/client/{images-8FOgju2f.mjs.map → images-CXdghaMW.mjs.map} +1 -1
  53. package/dist/client/index.js +261 -247
  54. package/dist/client/index.js.map +1 -1
  55. package/dist/client/{md-CYTrL5dq.mjs → md-CyCflQee.mjs} +10 -28
  56. package/dist/client/{md-CYTrL5dq.mjs.map → md-CyCflQee.mjs.map} +1 -1
  57. package/dist/client/{objects-DKWp9RtR.mjs → objects-B9Jh3SMG.mjs} +4 -3
  58. package/dist/client/objects-B9Jh3SMG.mjs.map +1 -0
  59. package/dist/client/objects-Bw25cE1m.mjs +5970 -0
  60. package/dist/client/objects-Bw25cE1m.mjs.map +1 -0
  61. package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -1
  62. package/dist/client/{pca-5wOBf_KI.mjs → pca-CiLPHmK7.mjs} +4 -4
  63. package/dist/client/{pca-5wOBf_KI.mjs.map → pca-CiLPHmK7.mjs.map} +1 -1
  64. package/dist/client/{pca-dhrOFfrE.mjs → pca-DUrQ_tIg.mjs} +2 -2
  65. package/dist/client/{pca-dhrOFfrE.mjs.map → pca-DUrQ_tIg.mjs.map} +1 -1
  66. package/dist/client/{projects-B_PPyZD1.mjs → projects-B5topuei.mjs} +2 -2
  67. package/dist/client/projects-B5topuei.mjs.map +1 -0
  68. package/dist/client/projects-CHYn7L5e.mjs.map +1 -1
  69. package/dist/client/projects-DNd3UTas.mjs +110 -0
  70. package/dist/client/projects-DNd3UTas.mjs.map +1 -0
  71. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  72. package/dist/client/routeInfo-Dy9l-wFB.mjs +31 -0
  73. package/dist/client/routeInfo-Dy9l-wFB.mjs.map +1 -0
  74. package/dist/client/{securitygroups-CNFLu9zS.mjs → securitygroups-CcA2TpAt.mjs} +2 -2
  75. package/dist/client/{securitygroups-CNFLu9zS.mjs.map → securitygroups-CcA2TpAt.mjs.map} +1 -1
  76. package/dist/client/{useListWithFiltering-v2A0-SZb.mjs → useListWithFiltering-CVzhMyEA.mjs} +2 -2
  77. package/dist/client/{useListWithFiltering-v2A0-SZb.mjs.map → useListWithFiltering-CVzhMyEA.mjs.map} +1 -1
  78. package/dist/server/index.js +282 -48
  79. package/package.json +3 -3
  80. package/dist/client/ContentHeader-C51H95X8.mjs +0 -85
  81. package/dist/client/ContentHeader-C51H95X8.mjs.map +0 -1
  82. package/dist/client/SortInput-VK7IYqQv.mjs.map +0 -1
  83. package/dist/client/_floatingIpId-C2-BeRmF.mjs.map +0 -1
  84. package/dist/client/_projectId-C8BaEHUj.mjs +0 -273
  85. package/dist/client/_projectId-C8BaEHUj.mjs.map +0 -1
  86. package/dist/client/_projectId-COt93OEF.mjs +0 -84
  87. package/dist/client/_projectId-COt93OEF.mjs.map +0 -1
  88. package/dist/client/_storageType-B-qGcGUQ.mjs +0 -3244
  89. package/dist/client/_storageType-B-qGcGUQ.mjs.map +0 -1
  90. package/dist/client/images-BPnTuKFO2.mjs.map +0 -1
  91. package/dist/client/objects-DKWp9RtR.mjs.map +0 -1
  92. package/dist/client/objects-DaCuy_CB.mjs +0 -5708
  93. package/dist/client/objects-DaCuy_CB.mjs.map +0 -1
  94. package/dist/client/projects-B_PPyZD1.mjs.map +0 -1
  95. package/dist/client/projects-Dmewygrp.mjs +0 -105
  96. package/dist/client/projects-Dmewygrp.mjs.map +0 -1
  97. package/dist/client/routeInfo-CHiJfum5.mjs +0 -73
  98. package/dist/client/routeInfo-CHiJfum5.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects-B_PPyZD1.mjs","names":["createFileRoute","z","searchSchema","object","search","string","optional","Route","component","lazyRouteComponent","$$splitComponentImporter","errorComponent","$$splitErrorComponentImporter","notFoundComponent","$$splitNotFoundComponentImporter","validateSearch","loaderDeps","loader","context","deps","allProjects","trpcClient","project","getAuthProjects","query","projects","trim","searchTermLower","toLowerCase","filter","name","includes","description"],"sources":["../../src/client/routes/_auth/projects/index.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n component: ProjectsOverview,\n errorComponent: ({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n ),\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n loaderDeps: ({ search }) => ({\n search: search.search || \"\",\n }),\n loader: async ({ context, deps }) => {\n const allProjects = await context.trpcClient?.project.getAuthProjects.query()\n\n let projects = allProjects\n if (deps.search && deps.search.trim() !== \"\") {\n const searchTermLower = deps.search.toLowerCase()\n projects = allProjects?.filter(\n (project) =>\n project.name?.toLowerCase().includes(searchTermLower) ||\n project.description?.toLowerCase().includes(searchTermLower)\n )\n }\n\n return { projects }\n },\n})\n\nfunction ProjectsOverview() {\n const { projects } = Route.useLoaderData()\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n\n const handleSearch = (value: string) => {\n navigate({ search: { search: value }, replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <ProjectCardView projects={projects} />\n </div>\n </Container>\n )\n}\n"],"mappings":";;;2IASME,IAAeD,EAAEE,OAAO,EAC5BC,QAAQH,EAAEI,OAAM,EAAGC,SAAQ,EAC7B,CAAA,GAEaC,IAAQP,EAAgB,kBAAA,EAAoB;CACvDQ,WAASC,EAAAC,GAAA,WAAA;CACTC,gBAAcF,EAAAG,GAAA,gBAAA;CAGdC,mBAAiBJ,EAAAK,GAAA,mBAAA;CAGjBC,gBAAgBb;CAChBc,aAAa,EAAEZ,iBAAc,EAC3BA,QAAQA,EAAOA,UAAU,GAC3B;CACAa,QAAQ,OAAO,EAAEC,YAASC,cAAM;EAC9B,IAAMC,IAAc,MAAMF,EAAQG,YAAYC,QAAQC,gBAAgBC,MAAAA,GAElEC,IAAWL;EACf,IAAID,EAAKf,UAAUe,EAAKf,OAAOsB,KAAI,MAAO,IAAI;GAC5C,IAAMC,IAAkBR,EAAKf,OAAOwB,YAAW;GAC/CH,IAAWL,GAAaS,QACrBP,MACCA,EAAQQ,MAAMF,YAAAA,EAAcG,SAASJ,CAAAA,KACrCL,EAAQU,aAAaJ,YAAAA,EAAcG,SAASJ,CAAAA,CAAAA;EAElD;EAEA,OAAO,EAAEF,YAAS;CACpB;AACF,CAAA"}
@@ -1,105 +0,0 @@
1
- import { O as e, Q as t, V as n, u as r } from "./build-BdRRmNf5.mjs";
2
- import { t as i } from "./projects-B_PPyZD1.mjs";
3
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
- import { useEffect as s, useRef as c, useState as l } from "react";
5
- import { useNavigate as u } from "@tanstack/react-router";
6
- import { Trans as d, useLingui as f } from "@lingui/react";
7
- //#region src/client/routes/_auth/projects/-components/ProjectOverviewNavBar.tsx
8
- function p({ onSearch: e, searchTerm: t = "" }) {
9
- let { i18n: r, _: i } = f(), o = c(null), u = c(!1), [d, p] = l(t);
10
- return s(() => {
11
- !u.current && !o.current && t !== d && p(t);
12
- }, [t]), s(() => () => {
13
- o.current && clearTimeout(o.current);
14
- }, []), /*#__PURE__*/ a(n, {
15
- className: "w-full",
16
- type: "text",
17
- placeholder: r._({ id: "YIix5Y" }),
18
- onChange: (t) => {
19
- let n = t.target.value;
20
- p(n), o.current && clearTimeout(o.current), o.current = setTimeout(() => {
21
- o.current = null, e(n);
22
- }, 300);
23
- },
24
- onFocus: () => {
25
- u.current = !0;
26
- },
27
- onBlur: () => {
28
- u.current = !1;
29
- },
30
- onClear: () => {
31
- o.current &&= (clearTimeout(o.current), null), p(""), e("");
32
- },
33
- value: d
34
- });
35
- }
36
- //#endregion
37
- //#region src/client/routes/_auth/projects/-components/ProjectCardView.tsx
38
- function m({ project: e }) {
39
- let t = u();
40
- return /*#__PURE__*/ o(r, {
41
- padding: !0,
42
- onClick: () => t({
43
- to: "/projects/$projectId",
44
- params: { projectId: e.id }
45
- }),
46
- className: "flex flex-col gap-4",
47
- children: [/*#__PURE__*/ o("div", {
48
- className: "flex min-w-0 flex-col",
49
- children: [/*#__PURE__*/ a("p", {
50
- className: "text-theme-light text-xs leading-5 font-normal",
51
- children: e.domain_name ?? e.domain_id ?? /*#__PURE__*/ a(d, { id: "ZkxxiR" })
52
- }), /*#__PURE__*/ a("p", {
53
- "data-testid": "project-name",
54
- className: "text-theme-high text-lg leading-7 font-bold",
55
- children: e.name
56
- })]
57
- }), e.description && /*#__PURE__*/ a("p", {
58
- className: "text-theme-default line-clamp-2 text-sm font-normal",
59
- children: e.description
60
- })]
61
- });
62
- }
63
- function h({ projects: e }) {
64
- return /*#__PURE__*/ a("div", {
65
- className: "w-full",
66
- children: /*#__PURE__*/ a("div", {
67
- className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4",
68
- children: e?.length ? e.map((e) => /*#__PURE__*/ a(m, { project: e }, e.id)) : /*#__PURE__*/ a("p", {
69
- className: "text-center",
70
- children: /*#__PURE__*/ a(d, { id: "Zgp2Sm" })
71
- })
72
- })
73
- });
74
- }
75
- //#endregion
76
- //#region src/client/routes/_auth/projects/index.tsx?tsr-split=component
77
- function g() {
78
- let { projects: n } = i.useLoaderData(), { search: r = "" } = i.useSearch(), s = i.useNavigate();
79
- return /*#__PURE__*/ o(e, {
80
- py: !0,
81
- children: [
82
- /*#__PURE__*/ a(t, {
83
- className: "pb-4",
84
- children: /*#__PURE__*/ a(d, { id: "+0B+ue" })
85
- }),
86
- /*#__PURE__*/ a(p, {
87
- searchTerm: r,
88
- onSearch: (e) => {
89
- s({
90
- search: { search: e },
91
- replace: !0
92
- });
93
- }
94
- }),
95
- /*#__PURE__*/ a("div", {
96
- className: "pt-5",
97
- children: /*#__PURE__*/ a(h, { projects: n })
98
- })
99
- ]
100
- });
101
- }
102
- //#endregion
103
- export { g as component };
104
-
105
- //# sourceMappingURL=projects-Dmewygrp.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects-Dmewygrp.mjs","names":["useEffect","useRef","useState","SearchInput","ProjectsOverviewNavBar","onSearch","searchTerm","useLingui","timerRef","inputFocusedRef","inputValue","setInputValue","current","clearTimeout","handleSearchChange","e","value","target","setTimeout","handleClear","className","type","placeholder","t","onChange","onFocus","onBlur","onClear","useNavigate","Card","ProjectCard","project","navigate","padding","onClick","to","params","projectId","id","className","div","p","domain_name","domain_id","data-testid","name","description","ProjectCardView","projects","length","map","ProjectsOverviewNavBar","ProjectCardView","Container","ContentHeading","Trans","Route","ProjectsOverview","projects","useLoaderData","search","useSearch","navigate","useNavigate","handleSearch","value","replace","component"],"sources":["../../src/client/routes/_auth/projects/-components/ProjectOverviewNavBar.tsx","../../src/client/routes/_auth/projects/-components/ProjectCardView.tsx","../../src/client/routes/_auth/projects/index.tsx?tsr-split=component"],"sourcesContent":["import { ChangeEvent, useEffect, useRef, useState } from \"react\"\nimport { SearchInput } from \"@cloudoperators/juno-ui-components\"\nimport { useLingui } from \"@lingui/react/macro\"\n\ntype ProjectsOverviewNavBarProps = {\n searchTerm?: string\n onSearch: (value: string) => void\n}\n\nexport function ProjectsOverviewNavBar({ onSearch, searchTerm = \"\" }: ProjectsOverviewNavBarProps) {\n const { t } = useLingui()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const inputFocusedRef = useRef(false)\n const [inputValue, setInputValue] = useState(searchTerm)\n\n useEffect(() => {\n if (!inputFocusedRef.current && !timerRef.current && searchTerm !== inputValue) {\n setInputValue(searchTerm)\n }\n }, [searchTerm])\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n const handleSearchChange = (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setInputValue(value)\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n timerRef.current = null\n onSearch(value)\n }, 300)\n }\n\n const handleClear = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n setInputValue(\"\")\n onSearch(\"\")\n }\n\n return (\n <SearchInput\n className=\"w-full\"\n type=\"text\"\n placeholder={t`Search...`}\n onChange={handleSearchChange}\n onFocus={() => {\n inputFocusedRef.current = true\n }}\n onBlur={() => {\n inputFocusedRef.current = false\n }}\n onClear={handleClear}\n value={inputValue}\n />\n )\n}\n","import { useNavigate } from \"@tanstack/react-router\"\nimport { Project } from \"@/server/Project/types/models\"\nimport { Card } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\n\ntype ProjectCardProps = {\n project: Project\n}\ntype ProjectCardViewProps = {\n projects: Project[] | undefined\n}\n\nexport function ProjectCard({ project }: ProjectCardProps) {\n const navigate = useNavigate()\n return (\n <Card\n padding\n onClick={() => navigate({ to: \"/projects/$projectId\", params: { projectId: project.id } })}\n className=\"flex flex-col gap-4\"\n >\n <div className=\"flex min-w-0 flex-col\">\n <p className=\"text-theme-light text-xs leading-5 font-normal\">\n {project.domain_name ?? project.domain_id ?? <Trans>Unknown domain</Trans>}\n </p>\n <p data-testid=\"project-name\" className=\"text-theme-high text-lg leading-7 font-bold\">\n {project.name}\n </p>\n </div>\n {project.description && (\n <p className=\"text-theme-default line-clamp-2 text-sm font-normal\">{project.description}</p>\n )}\n </Card>\n )\n}\n\nexport function ProjectCardView({ projects }: ProjectCardViewProps) {\n return (\n <div className=\"w-full\">\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {projects?.length ? (\n projects.map((project) => <ProjectCard key={project.id} project={project} />)\n ) : (\n <p className=\"text-center\">\n <Trans>No projects available.</Trans>\n </p>\n )}\n </div>\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n component: ProjectsOverview,\n errorComponent: ({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n ),\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n loaderDeps: ({ search }) => ({\n search: search.search || \"\",\n }),\n loader: async ({ context, deps }) => {\n const allProjects = await context.trpcClient?.project.getAuthProjects.query()\n\n let projects = allProjects\n if (deps.search && deps.search.trim() !== \"\") {\n const searchTermLower = deps.search.toLowerCase()\n projects = allProjects?.filter(\n (project) =>\n project.name?.toLowerCase().includes(searchTermLower) ||\n project.description?.toLowerCase().includes(searchTermLower)\n )\n }\n\n return { projects }\n },\n})\n\nfunction ProjectsOverview() {\n const { projects } = Route.useLoaderData()\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n\n const handleSearch = (value: string) => {\n navigate({ search: { search: value }, replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <ProjectCardView projects={projects} />\n </div>\n </Container>\n )\n}\n"],"mappings":";;;;;;;AASA,SAAgBI,EAAuB,EAAEC,aAAUC,gBAAa,MAAiC;CAC/F,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQC,EAAAA,GACRC,IAAWP,EAA6C,IAAA,GACxDQ,IAAkBR,EAAO,EAAA,GACzB,CAACS,GAAYC,KAAiBT,EAASI,CAAAA;CAiC7C,OA/BAN,QAAU;EACR,AAAI,CAACS,EAAgBG,WAAW,CAACJ,EAASI,WAAWN,MAAeI,KAClEC,EAAcL,CAAAA;CAElB,GAAG,CAACA,CAAAA,CAAW,GAEfN,cACS;EACL,AAAIQ,EAASI,WAASC,aAAaL,EAASI,OAAO;CACrD,GACC,CAAA,CAAE,GAsBH,gBAACT,GAAAA;EACCiB,WAAU;EACVC,MAAK;EACLC,aAAaC,EAAAA,EAAC,EAAA,IAAA,SAAU,CAAA;EACxBC,WAxBwBT,MAAAA;GAC1B,IAAMC,IAAQD,EAAEE,OAAOD;GAGvBR,AAFAG,EAAcK,CAAAA,GACVR,EAASI,WAASC,aAAaL,EAASI,OAAO,GACnDJ,EAASI,UAAUM,iBAAW;IAE5Bb,AADAG,EAASI,UAAU,MACnBP,EAASW,CAAAA;GACX,GAAG,GAAA;EACL;EAiBIS,eAAS;GACPhB,EAAgBG,UAAU;EAC5B;EACAc,cAAQ;GACNjB,EAAgBG,UAAU;EAC5B;EACAe,eArBgB;GAMlBtB,AALA,AAEEG,EAASI,aADTC,aAAaL,EAASI,OAAO,GACV,OAErBD,EAAc,EAAA,GACdN,EAAS,EAAA;EACX;EAeIW,OAAON;;AAGb;;;AClDA,SAAgBoB,EAAY,EAAEC,cAA2B;CACvD,IAAMC,IAAWJ,EAAAA;CACjB,OACE,gBAACC,GAAAA;EACCI,SAAO;EACPC,eAAeF,EAAS;GAAEG,IAAI;GAAwBC,QAAQ,EAAEC,WAAWN,EAAQO,GAAG;EAAE,CAAA;EACxFC,WAAU;aAEV,gBAACC,OAAAA;GAAID,WAAU;cACb,gBAACE,KAAAA;IAAEF,WAAU;cACVR,EAAQW,eAAeX,EAAQY,aAAa,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;OAE/C,gBAACF,KAAAA;IAAEG,eAAY;IAAeL,WAAU;cACrCR,EAAQc;;MAGZd,EAAQe,eACP,gBAACL,KAAAA;GAAEF,WAAU;aAAuDR,EAAQe;;;AAIpF;AAEA,SAAgBC,EAAgB,EAAEC,eAAgC;CAChE,OACE,gBAACR,OAAAA;EAAID,WAAU;YACb,gBAACC,OAAAA;GAAID,WAAU;aACZS,GAAUC,SACTD,EAASE,KAAKnB,MAAY,gBAACD,GAAAA,EAAsCC,WAAAA,GAArBA,EAAQO,EAAE,CAAA,IAEtD,gBAACG,KAAAA;IAAEF,WAAU;cACX,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;;AAMZ;;;ACPA,SAASkB,IAAAA;CACP,IAAM,EAAEC,gBAAaF,EAAMG,cAAa,GAClC,EAAEC,YAAS,OAAOJ,EAAMK,UAAS,GACjCC,IAAWN,EAAMO,YAAW;CAMlC,OACE,gBAAC,GAAA;EAAU,IAAE;;GACX,gBAAC,GAAA;IAAe,WAAU;cACxB,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;GAEF,gBAAC,GAAA;IAAuB,YAAYH;IAAQ,WAT1BK,MAAAA;KACpBH,EAAS;MAAEF,QAAQ,EAAEA,QAAQK,EAAM;MAAGC,SAAS;KAAK,CAAA;IACtD;;GAQI,gBAAC,OAAA;IAAI,WAAU;cACb,gBAAC,GAAA,EAA0BR,YAAAA,CAAAA;;;;AAInC"}
@@ -1,73 +0,0 @@
1
- import { jsx as e } from "react/jsx-runtime";
2
- import { useEffect as t, useRef as n, useState as r } from "react";
3
- import { createPortal as i } from "react-dom";
4
- import { createFileRoute as a, lazyRouteComponent as o, useRouteContext as s } from "@tanstack/react-router";
5
- import { z as c } from "zod";
6
- //#region src/client/components/Slot.tsx
7
- function l({ children: a }) {
8
- let o = n(null), [s, c] = r(null);
9
- return t(() => {
10
- o.current && c(o.current.shadowRoot ?? o.current.attachShadow({ mode: "open" }));
11
- }, []), /*#__PURE__*/ e("div", {
12
- ref: o,
13
- style: { display: "contents" },
14
- children: s && /*#__PURE__*/ i(a, s)
15
- });
16
- }
17
- function u({ component: t, useShadowDOM: n = !0 }) {
18
- let { trpcClient: r } = s({ strict: !1 });
19
- if (!r) return null;
20
- let i = /*#__PURE__*/ e(t, { auroraContext: { client: r } });
21
- return n ? /*#__PURE__*/ e(l, { children: i }) : i;
22
- }
23
- var d = a("/_auth/projects/$projectId")({
24
- component: o(() => import("./_projectId-C8BaEHUj.mjs"), "component"),
25
- errorComponent: o(() => import("./_projectId-B_2sZKk-.mjs"), "errorComponent"),
26
- loader: async (e) => {
27
- let { context: t, params: n } = e, r = await t.trpcClient?.auth.setCurrentScope.mutate({
28
- type: "project",
29
- projectId: n.projectId || ""
30
- }), [i, a] = await Promise.all([t.trpcClient?.auth.getAvailableServices.query(), t.trpcClient?.project.getAuthProjects.query().catch(() => null)]), o = r?.domain?.id || "", s = a?.find((e) => e.id === n.projectId)?.description ?? null;
31
- return {
32
- trpcClient: t.trpcClient,
33
- crumbDomain: {
34
- path: "/projects",
35
- name: r?.domain?.name
36
- },
37
- crumbProject: r?.project,
38
- availableServices: i,
39
- accountId: o,
40
- projectId: n.projectId,
41
- description: s
42
- };
43
- }
44
- }), f = c.object({
45
- labelKey: c.enum([
46
- "Compute",
47
- "Network",
48
- "Storage",
49
- "Services",
50
- "Images",
51
- "Flavors",
52
- "Security Groups",
53
- "Floating IPs",
54
- "PCA (Clavis)"
55
- ]).optional(),
56
- to: c.string().optional(),
57
- useParamAsLabel: c.string().optional(),
58
- useParentTitleAsLabel: c.boolean().optional()
59
- }), p = c.object({
60
- section: c.string(),
61
- service: c.string().optional(),
62
- isDetail: c.boolean().optional(),
63
- crumb: f.optional(),
64
- sectionCrumb: f.optional(),
65
- intermediateCrumb: f.optional()
66
- });
67
- function m(e) {
68
- return p.safeParse(e).success;
69
- }
70
- //#endregion
71
- export { d as n, u as r, m as t };
72
-
73
- //# sourceMappingURL=routeInfo-CHiJfum5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routeInfo-CHiJfum5.mjs","names":["useRef","useState","useEffect","createPortal","useRouteContext","SlotShadowRoot","children","ref","root","setRoot","current","shadowRoot","attachShadow","mode","div","style","display","Slot","component","Component","useShadowDOM","trpcClient","strict","content","auroraContext","client","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","errorComponent","$$splitErrorComponentImporter","loader","options","context","params","data","trpcClient","auth","setCurrentScope","mutate","type","projectId","availableServices","projects","Promise","all","getAvailableServices","query","project","getAuthProjects","catch","accountId","domain","id","description","find","p","crumbDomain","path","name","crumbProject","z","CRUMB_LABEL_KEYS","CrumbSchema","object","labelKey","enum","optional","to","string","useParamAsLabel","useParentTitleAsLabel","boolean","RouteInfoSchema","section","service","isDetail","crumb","sectionCrumb","intermediateCrumb","isRouteInfo","data","safeParse","success"],"sources":["../../src/client/components/Slot.tsx","../../src/client/routes/_auth/projects/$projectId.tsx","../../src/client/routes/routeInfo.ts"],"sourcesContent":["import { useRef, useState, useEffect, type ReactNode, type FC } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { useRouteContext } from \"@tanstack/react-router\"\nimport type { SlotProps } from \"../AuroraApp\"\n\nfunction SlotShadowRoot({ children }: { children: ReactNode }) {\n const ref = useRef<HTMLDivElement>(null)\n const [root, setRoot] = useState<ShadowRoot | null>(null)\n\n useEffect(() => {\n if (!ref.current) return\n setRoot(ref.current.shadowRoot ?? ref.current.attachShadow({ mode: \"open\" }))\n }, [])\n\n return (\n <div ref={ref} style={{ display: \"contents\" }}>\n {root && createPortal(children, root)}\n </div>\n )\n}\n\nexport function Slot({\n component: Component,\n useShadowDOM = true,\n}: {\n component: FC<SlotProps>\n useShadowDOM?: boolean\n}) {\n const { trpcClient } = useRouteContext({ strict: false })\n\n if (!trpcClient) return null\n\n const content = <Component auroraContext={{ client: trpcClient }} />\n\n if (!useShadowDOM) {\n return content\n }\n\n return <SlotShadowRoot>{content}</SlotShadowRoot>\n}\n","import { createFileRoute, Outlet, useLoaderData } from \"@tanstack/react-router\"\nimport { AppShell, Container, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { SideNavBar } from \"@/client/routes/_auth/projects/-components/SideNavBar\"\nimport { ProjectInfoBox } from \"@/client/components/ProjectView/ProjectInfoBox\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId\")({\n component: RouteComponent,\n errorComponent: ({ error }) => {\n return <RouteError error={error} />\n },\n loader: async (options) => {\n const { context, params } = options\n const data = await context.trpcClient?.auth.setCurrentScope.mutate({\n type: \"project\",\n projectId: params.projectId || \"\",\n })\n\n const [availableServices, projects] = await Promise.all([\n context.trpcClient?.auth.getAvailableServices.query(),\n context.trpcClient?.project.getAuthProjects.query().catch(() => null),\n ])\n\n const accountId = data?.domain?.id || \"\"\n const description = projects?.find((p) => p.id === params.projectId)?.description ?? null\n\n return {\n trpcClient: context.trpcClient,\n crumbDomain: { path: `/projects`, name: data?.domain?.name },\n crumbProject: data?.project,\n availableServices,\n accountId,\n projectId: params.projectId,\n description,\n }\n },\n})\n\nfunction RouteComponent() {\n const { availableServices, projectId, crumbProject, crumbDomain } = useLoaderData({ from: Route.id })\n\n return (\n <AppShell\n embedded\n sideNavigation={\n <SideNavBar\n availableServices={availableServices!}\n projectId={projectId}\n projectName={crumbProject?.name || projectId}\n domainName={crumbDomain?.name}\n />\n }\n className=\"h-min-screen\"\n >\n <Container>\n <Stack direction=\"vertical\" distribution=\"start\" alignment=\"stretch\" className=\"xl:flex-row\" gap=\"6\">\n {/* Main content area */}\n <div className=\"min-w-0 flex-1\">\n <ProjectInfoBox\n projectInfo={{\n id: projectId,\n name: crumbProject?.name || projectId,\n domain: crumbProject?.domain,\n }}\n />\n <Outlet />\n </div>\n </Stack>\n </Container>\n </AppShell>\n )\n}\n","import { z } from \"zod\"\n\nexport const CRUMB_LABEL_KEYS = [\n \"Compute\",\n \"Network\",\n \"Storage\",\n \"Services\",\n \"Images\",\n \"Flavors\",\n \"Security Groups\",\n \"Floating IPs\",\n \"PCA (Clavis)\",\n] as const\n\nexport type CrumbLabelKey = (typeof CRUMB_LABEL_KEYS)[number]\n\nconst CrumbSchema = z.object({\n labelKey: z.enum(CRUMB_LABEL_KEYS).optional(),\n to: z.string().optional(),\n useParamAsLabel: z.string().optional(),\n useParentTitleAsLabel: z.boolean().optional(),\n})\n\nconst RouteInfoSchema = z.object({\n section: z.string(),\n service: z.string().optional(),\n isDetail: z.boolean().optional(),\n crumb: CrumbSchema.optional(),\n sectionCrumb: CrumbSchema.optional(),\n intermediateCrumb: CrumbSchema.optional(),\n})\n\nexport type Crumb = z.infer<typeof CrumbSchema>\nexport type RouteInfo = z.infer<typeof RouteInfoSchema>\n\nexport function isRouteInfo(data: unknown): data is RouteInfo {\n return RouteInfoSchema.safeParse(data).success\n}\n"],"mappings":";;;;;;AAKA,SAASK,EAAe,EAAEC,eAAmC;CAC3D,IAAMC,IAAMP,EAAuB,IAAA,GAC7B,CAACQ,GAAMC,KAAWR,EAA4B,IAAA;CAOpD,OALAC,QAAU;EACHK,EAAIG,WACTD,EAAQF,EAAIG,QAAQC,cAAcJ,EAAIG,QAAQE,aAAa,EAAEC,MAAM,OAAO,CAAA,CAAA;CAC5E,GAAG,CAAA,CAAE,GAGH,gBAACC,OAAAA;EAASP;EAAKQ,OAAO,EAAEC,SAAS,WAAW;YACzCR,KAAQL,gBAAaG,GAAUE,CAAAA;;AAGtC;AAEA,SAAgBS,EAAK,EACnBC,WAAWC,GACXC,kBAAe,MAIhB;CACC,IAAM,EAAEC,kBAAejB,EAAgB,EAAEkB,QAAQ,GAAM,CAAA;CAEvD,IAAI,CAACD,GAAY,OAAO;CAExB,IAAME,IAAU,gBAACJ,GAAAA,EAAUK,eAAe,EAAEC,QAAQJ,EAAW,EAAA,CAAA;CAM/D,OAJKD,IAIE,gBAACf,GAAAA,EAAAA,UAAgBkB,EAAAA,CAAAA,IAHfA;AAIX;ACjCA,IAAaI,IAAQD,EAAgB,4BAAA,EAA8B;CACjEE,WAASC,6CAAA,WAAA;CACTE,gBAAcF,6CAAA,gBAAA;CAGdI,QAAQ,OAAOC,MAAAA;EACb,IAAM,EAAEC,YAASC,cAAWF,GACtBG,IAAO,MAAMF,EAAQG,YAAYC,KAAKC,gBAAgBC,OAAO;GACjEC,MAAM;GACNC,WAAWP,EAAOO,aAAa;EACjC,CAAA,GAEM,CAACC,GAAmBC,KAAY,MAAMC,QAAQC,IAAI,CACtDZ,EAAQG,YAAYC,KAAKS,qBAAqBC,MAAAA,GAC9Cd,EAAQG,YAAYY,QAAQC,gBAAgBF,MAAAA,EAAQG,YAAY,IAAA,CAAA,CACjE,GAEKC,IAAYhB,GAAMiB,QAAQC,MAAM,IAChCC,IAAcX,GAAUY,MAAMC,MAAMA,EAAEH,OAAOnB,EAAOO,SAAS,GAAGa,eAAe;EAErF,OAAO;GACLlB,YAAYH,EAAQG;GACpBqB,aAAa;IAAEC,MAAM;IAAaC,MAAMxB,GAAMiB,QAAQO;GAAK;GAC3DC,cAAczB,GAAMa;GACpBN;GACAS;GACAV,WAAWP,EAAOO;GAClBa;EACF;CACF;AACF,CAAA,GCpBMS,IAAcF,EAAEG,OAAO;CAC3BC,UAAUJ,EAAEK,KAAKJ;EAdjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAMiBA,CAAAA,EAAkBK,SAAQ;CAC3CC,IAAIP,EAAEQ,OAAM,EAAGF,SAAQ;CACvBG,iBAAiBT,EAAEQ,OAAM,EAAGF,SAAQ;CACpCI,uBAAuBV,EAAEW,QAAO,EAAGL,SAAQ;AAC7C,CAAA,GAEMM,IAAkBZ,EAAEG,OAAO;CAC/BU,SAASb,EAAEQ,OAAM;CACjBM,SAASd,EAAEQ,OAAM,EAAGF,SAAQ;CAC5BS,UAAUf,EAAEW,QAAO,EAAGL,SAAQ;CAC9BU,OAAOd,EAAYI,SAAQ;CAC3BW,cAAcf,EAAYI,SAAQ;CAClCY,mBAAmBhB,EAAYI,SAAQ;AACzC,CAAA;AAKA,SAAgBa,EAAYC,GAAa;CACvC,OAAOR,EAAgBS,UAAUD,CAAAA,EAAME;AACzC"}