@cobaltcore-dev/aurora 0.20.1 → 0.20.3

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 (57) hide show
  1. package/dist/client/{ContentHeader-BIScbvb4.mjs → ContentHeader-CIAzorGI.mjs} +2 -3
  2. package/dist/client/{ContentHeader-BIScbvb4.mjs.map → ContentHeader-CIAzorGI.mjs.map} +1 -1
  3. package/dist/client/{_flavorId-sS1sg_DZ.mjs → _flavorId-BMX239RH.mjs} +3 -3
  4. package/dist/client/{_flavorId-sS1sg_DZ.mjs.map → _flavorId-BMX239RH.mjs.map} +1 -1
  5. package/dist/client/{_flavorId-BQY7YhNx.mjs → _flavorId-BaNJ1CDY.mjs} +2 -2
  6. package/dist/client/{_flavorId-BQY7YhNx.mjs.map → _flavorId-BaNJ1CDY.mjs.map} +1 -1
  7. package/dist/client/{_floatingIpId-DFCaWI9K.mjs → _floatingIpId-DQFtZNeg.mjs} +2 -2
  8. package/dist/client/{_floatingIpId-DFCaWI9K.mjs.map → _floatingIpId-DQFtZNeg.mjs.map} +1 -1
  9. package/dist/client/{_floatingIpId-De0hCSSN2.mjs → _floatingIpId-E6x99cmW.mjs} +2 -2
  10. package/dist/client/_floatingIpId-E6x99cmW.mjs.map +1 -0
  11. package/dist/client/{_imageId-D8HiDS3P.mjs → _imageId-C2662dZr.mjs} +2 -2
  12. package/dist/client/{_imageId-D8HiDS3P.mjs.map → _imageId-C2662dZr.mjs.map} +1 -1
  13. package/dist/client/{_projectId-CoMD6nq6.mjs → _projectId-B4ScifQf.mjs} +3 -3
  14. package/dist/client/{_projectId-CoMD6nq6.mjs.map → _projectId-B4ScifQf.mjs.map} +1 -1
  15. package/dist/client/{_projectId-D8FHe0gr.mjs → _projectId-CYq4KZXB.mjs} +3 -3
  16. package/dist/client/{_projectId-D8FHe0gr.mjs.map → _projectId-CYq4KZXB.mjs.map} +1 -1
  17. package/dist/client/{_projectId-hMtrqW6m.mjs → _projectId-DJLjspKf.mjs} +23 -24
  18. package/dist/client/{_projectId-hMtrqW6m.mjs.map → _projectId-DJLjspKf.mjs.map} +1 -1
  19. package/dist/client/{_projectId-MjFv839t.mjs → _projectId-DxgPaiA7.mjs} +2 -2
  20. package/dist/client/{_projectId-MjFv839t.mjs.map → _projectId-DxgPaiA7.mjs.map} +1 -1
  21. package/dist/client/{_storageType-CH2khFcZ.mjs → _storageType-BkhbKG_G.mjs} +2 -2
  22. package/dist/client/{_storageType-CH2khFcZ.mjs.map → _storageType-BkhbKG_G.mjs.map} +1 -1
  23. package/dist/client/{_storageType-D-1H6SX1.mjs → _storageType-ByLL106s.mjs} +851 -853
  24. package/dist/client/_storageType-ByLL106s.mjs.map +1 -0
  25. package/dist/client/{flavors-D5aTQJT1.mjs → flavors-Bwjig3k2.mjs} +3 -3
  26. package/dist/client/{flavors-D5aTQJT1.mjs.map → flavors-Bwjig3k2.mjs.map} +1 -1
  27. package/dist/client/{flavors-TqwbWt4R.mjs → flavors-C7PVJUqZ.mjs} +2 -2
  28. package/dist/client/{flavors-TqwbWt4R.mjs.map → flavors-C7PVJUqZ.mjs.map} +1 -1
  29. package/dist/client/{images-sNuJa6ce.mjs → images-CD7DNwru.mjs} +2 -2
  30. package/dist/client/{images-sNuJa6ce.mjs.map → images-CD7DNwru.mjs.map} +1 -1
  31. package/dist/client/{images-CkW8zNjs.mjs → images-CfBrglGJ.mjs} +9 -9
  32. package/dist/client/{images-CkW8zNjs.mjs.map → images-CfBrglGJ.mjs.map} +1 -1
  33. package/dist/client/index.js +454 -317
  34. package/dist/client/index.js.map +1 -1
  35. package/dist/client/{objects-B3Z8h4RU.mjs → objects-CEBrL7k-.mjs} +2 -2
  36. package/dist/client/{objects-B3Z8h4RU.mjs.map → objects-CEBrL7k-.mjs.map} +1 -1
  37. package/dist/client/{objects-CGOfO00N.mjs → objects-DvIxpzGI.mjs} +3 -3
  38. package/dist/client/{objects-CGOfO00N.mjs.map → objects-DvIxpzGI.mjs.map} +1 -1
  39. package/dist/client/{pca-BClYQElh.mjs → pca-CpMqoF00.mjs} +3 -3
  40. package/dist/client/{pca-BClYQElh.mjs.map → pca-CpMqoF00.mjs.map} +1 -1
  41. package/dist/client/{pca-B4_2DqT2.mjs → pca-ZgGU0UPF.mjs} +2 -2
  42. package/dist/client/{pca-B4_2DqT2.mjs.map → pca-ZgGU0UPF.mjs.map} +1 -1
  43. package/dist/client/projects-DvSiI5Vg.mjs.map +1 -1
  44. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  45. package/dist/client/routeInfo-Ct5r4Gen.mjs +56 -0
  46. package/dist/client/routeInfo-Ct5r4Gen.mjs.map +1 -0
  47. package/package.json +3 -3
  48. package/dist/client/Slot-CWb612-_.mjs +0 -28
  49. package/dist/client/Slot-CWb612-_.mjs.map +0 -1
  50. package/dist/client/_floatingIpId-De0hCSSN2.mjs.map +0 -1
  51. package/dist/client/_storageType-D-1H6SX1.mjs.map +0 -1
  52. package/dist/client/projects-4wFhznPY.mjs +0 -34
  53. package/dist/client/projects-4wFhznPY.mjs.map +0 -1
  54. package/dist/client/projects-wd6Yc-GU.mjs +0 -107
  55. package/dist/client/projects-wd6Yc-GU.mjs.map +0 -1
  56. package/dist/client/routeInfo-CdTRlSxv.mjs +0 -32
  57. package/dist/client/routeInfo-CdTRlSxv.mjs.map +0 -1
@@ -1,34 +0,0 @@
1
- import { K as e, tt as t } from "./build-DgeVmENN.mjs";
2
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
- import { createFileRoute as i, lazyRouteComponent as a } from "@tanstack/react-router";
4
- import { z as o } from "zod";
5
- //#region src/client/routes/_auth/projects/index.tsx
6
- var s = () => import("./projects-yiK0HGSA.mjs"), c = () => import("./projects-DvSiI5Vg.mjs"), l = () => import("./projects-wd6Yc-GU.mjs"), u = o.object({ search: o.string().optional() }), d = i("/_auth/projects/")({
7
- staticData: { analytics: { name: "projects.list" } },
8
- component: a(l, "component"),
9
- pendingComponent: () => /*#__PURE__*/ r(t, {
10
- className: "fixed inset-0",
11
- distribution: "center",
12
- alignment: "center",
13
- children: [/*#__PURE__*/ n("div", { className: "absolute inset-0 backdrop-blur-sm" }), /*#__PURE__*/ n(e, {
14
- variant: "primary",
15
- size: "large"
16
- })]
17
- }),
18
- errorComponent: a(c, "errorComponent"),
19
- notFoundComponent: a(s, "notFoundComponent"),
20
- validateSearch: u,
21
- loaderDeps: ({ search: e }) => ({ search: e.search || "" }),
22
- loader: async ({ context: e, deps: t }) => {
23
- let n = await e.trpcClient?.project.getAuthProjects.query(), r = n;
24
- if (t.search && t.search.trim() !== "") {
25
- let e = t.search.toLowerCase();
26
- r = n?.filter((t) => t.name?.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e));
27
- }
28
- return { projects: r };
29
- }
30
- });
31
- //#endregion
32
- export { d as t };
33
-
34
- //# sourceMappingURL=projects-4wFhznPY.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects-4wFhznPY.mjs","names":["createFileRoute","Spinner","Stack","z","searchSchema","object","search","string","optional","Route","staticData","analytics","name","RouteInfo","component","lazyRouteComponent","$$splitComponentImporter","pendingComponent","errorComponent","$$splitErrorComponentImporter","notFoundComponent","$$splitNotFoundComponentImporter","validateSearch","loaderDeps","loader","context","deps","allProjects","trpcClient","project","getAuthProjects","query","projects","trim","searchTermLower","toLowerCase","filter","includes","description"],"sources":["../../src/client/routes/_auth/projects/index.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\"\nimport { useRouteContext } 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, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n pendingComponent: () => (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n ),\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 const { slots } = useRouteContext({ strict: false })\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 {slots?.projectsBanner && <Slot component={slots.projectsBanner} useShadowDOM={false} />}\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <ProjectCardView projects={projects} />\n </div>\n </Container>\n )\n}\n"],"mappings":";;;;;2IAYMI,IAAeD,EAAEE,OAAO,EAC5BC,QAAQH,EAAEI,OAAM,EAAGC,SAAQ,EAC7B,CAAA,GAEaC,IAAQT,EAAgB,kBAAA,EAAoB;CACvDU,YAAY,EACVC,WAAW,EACTC,MAAM,gBACR,EACF;CACAE,WAASC,EAAAC,GAAA,WAAA;CACTC,wBACE,gBAAC,GAAA;EAAM,WAAU;EAAgB,cAAa;EAAS,WAAU;aAC/D,gBAAC,OAAA,EAAI,WAAU,oCAAA,CAAA,GACf,gBAAC,GAAA;GAAQ,SAAQ;GAAU,MAAK;;;CAGpCC,gBAAcH,EAAAI,GAAA,gBAAA;CAGdC,mBAAiBL,EAAAM,GAAA,mBAAA;CAGjBC,gBAAgBlB;CAChBmB,aAAa,EAAEjB,iBAAc,EAC3BA,QAAQA,EAAOA,UAAU,GAC3B;CACAkB,QAAQ,OAAO,EAAEC,YAASC,cAAM;EAC9B,IAAMC,IAAc,MAAMF,EAAQG,YAAYC,QAAQC,gBAAgBC,MAAAA,GAElEC,IAAWL;EACf,IAAID,EAAKpB,UAAUoB,EAAKpB,OAAO2B,KAAI,MAAO,IAAI;GAC5C,IAAMC,IAAkBR,EAAKpB,OAAO6B,YAAW;GAC/CH,IAAWL,GAAaS,QACrBP,MACCA,EAAQjB,MAAMuB,YAAAA,EAAcE,SAASH,CAAAA,KACrCL,EAAQS,aAAaH,YAAAA,EAAcE,SAASH,CAAAA,CAAAA;EAElD;EAEA,OAAO,EAAEF,YAAS;CACpB;AACF,CAAA"}
@@ -1,107 +0,0 @@
1
- import { Y as e, Z as t, n, x as r } from "./build-DgeVmENN.mjs";
2
- import { t as i } from "./Slot-CWb612-_.mjs";
3
- import { t as a } from "./projects-4wFhznPY.mjs";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { useEffect as c, useRef as l, useState as u } from "react";
6
- import { useNavigate as d, useRouteContext as f } from "@tanstack/react-router";
7
- import { Trans as p, useLingui as m } from "@lingui/react";
8
- //#region src/client/routes/_auth/projects/-components/ProjectOverviewNavBar.tsx
9
- function h({ onSearch: e, searchTerm: t = "" }) {
10
- let { i18n: r, _: i } = m(), a = l(null), s = l(!1), [d, f] = u(t);
11
- return c(() => {
12
- !s.current && !a.current && t !== d && f(t);
13
- }, [t]), c(() => () => {
14
- a.current && clearTimeout(a.current);
15
- }, []), /*#__PURE__*/ o(n, {
16
- className: "w-full",
17
- type: "text",
18
- placeholder: r._({ id: "YIix5Y" }),
19
- onChange: (t) => {
20
- let n = t.target.value;
21
- f(n), a.current && clearTimeout(a.current), a.current = setTimeout(() => {
22
- a.current = null, e(n);
23
- }, 300);
24
- },
25
- onFocus: () => {
26
- s.current = !0;
27
- },
28
- onBlur: () => {
29
- s.current = !1;
30
- },
31
- onClear: () => {
32
- a.current &&= (clearTimeout(a.current), null), f(""), e("");
33
- },
34
- value: d
35
- });
36
- }
37
- //#endregion
38
- //#region src/client/routes/_auth/projects/-components/ProjectCardView.tsx
39
- function g({ project: e }) {
40
- let t = d();
41
- return /*#__PURE__*/ s(r, {
42
- padding: !0,
43
- onClick: () => t({
44
- to: "/projects/$projectId",
45
- params: { projectId: e.id }
46
- }),
47
- className: "flex flex-col gap-4",
48
- children: [/*#__PURE__*/ s("div", {
49
- className: "flex min-w-0 flex-col",
50
- children: [/*#__PURE__*/ o("p", {
51
- className: "text-theme-light text-xs leading-5 font-normal",
52
- children: e.domain_name ?? e.domain_id ?? /*#__PURE__*/ o(p, { id: "ZkxxiR" })
53
- }), /*#__PURE__*/ o("p", {
54
- "data-testid": "project-name",
55
- className: "text-theme-high text-lg leading-7 font-bold",
56
- children: e.name
57
- })]
58
- }), e.description && /*#__PURE__*/ o("p", {
59
- className: "text-theme-default line-clamp-2 text-sm font-normal",
60
- children: e.description
61
- })]
62
- });
63
- }
64
- function _({ projects: e }) {
65
- return /*#__PURE__*/ o("div", {
66
- className: "w-full",
67
- children: /*#__PURE__*/ o("div", {
68
- className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4",
69
- children: e?.length ? [...e].sort((e, t) => e.name.localeCompare(t.name)).map((e) => /*#__PURE__*/ o(g, { project: e }, e.id)) : /*#__PURE__*/ o("p", { children: /*#__PURE__*/ o(p, { id: "Zgp2Sm" }) })
70
- })
71
- });
72
- }
73
- //#endregion
74
- //#region src/client/routes/_auth/projects/index.tsx?tsr-split=component
75
- function v() {
76
- let { projects: n } = a.useLoaderData(), { search: r = "" } = a.useSearch(), c = a.useNavigate(), { slots: l } = f({ strict: !1 });
77
- return /*#__PURE__*/ s(t, {
78
- py: !0,
79
- children: [
80
- /*#__PURE__*/ o(e, {
81
- className: "pb-4",
82
- children: /*#__PURE__*/ o(p, { id: "+0B+ue" })
83
- }),
84
- l?.projectsBanner && /*#__PURE__*/ o(i, {
85
- component: l.projectsBanner,
86
- useShadowDOM: !1
87
- }),
88
- /*#__PURE__*/ o(h, {
89
- searchTerm: r,
90
- onSearch: (e) => {
91
- c({
92
- search: { search: e },
93
- replace: !0
94
- });
95
- }
96
- }),
97
- /*#__PURE__*/ o("div", {
98
- className: "pt-5",
99
- children: /*#__PURE__*/ o(_, { projects: n })
100
- })
101
- ]
102
- });
103
- }
104
- //#endregion
105
- export { v as component };
106
-
107
- //# sourceMappingURL=projects-wd6Yc-GU.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects-wd6Yc-GU.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","sort","a","b","localeCompare","map","useRouteContext","ProjectsOverviewNavBar","ProjectCardView","Container","ContentHeading","Trans","Slot","Route","ProjectsOverview","projects","useLoaderData","search","useSearch","navigate","useNavigate","slots","strict","handleSearch","value","replace","projectsBanner","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]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((project) => <ProjectCard key={project.id} project={project} />)\n ) : (\n <p>\n <Trans>No projects available.</Trans>\n </p>\n )}\n </div>\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { useRouteContext } 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, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n pendingComponent: () => (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n ),\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 const { slots } = useRouteContext({ strict: false })\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 {slots?.projectsBanner && <Slot component={slots.projectsBanner} useShadowDOM={false} />}\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,SACT,CAAA,GAAID,CAAAA,EACDE,MAAMC,GAAGC,MAAMD,EAAEN,KAAKQ,cAAcD,EAAEP,IAAI,CAAA,EAC1CS,KAAKvB,MAAY,gBAACD,GAAAA,EAAsCC,WAAAA,GAArBA,EAAQO,EAAE,CAAA,IAEhD,gBAACG,KAAAA,EAAAA,UACC,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA,EAAA,CAAA;;;AAMZ;;;ACKA,SAASsB,IAAAA;CACP,IAAM,EAAEC,gBAAaF,EAAMG,cAAa,GAClC,EAAEC,YAAS,OAAOJ,EAAMK,UAAS,GACjCC,IAAWN,EAAMO,YAAW,GAC5B,EAAEC,aAAUf,EAAgB,EAAEgB,QAAQ,GAAM,CAAA;CAMlD,OACE,gBAAC,GAAA;EAAU,IAAE;;GACX,gBAAC,GAAA;IAAe,WAAU;cACxB,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;GAEDD,GAAOK,kBAAkB,gBAAC,GAAA;IAAK,WAAWL,EAAMK;IAAgB,cAAc;;GAC/E,gBAAC,GAAA;IAAuB,YAAYT;IAAQ,WAV1BO,MAAAA;KACpBL,EAAS;MAAEF,QAAQ,EAAEA,QAAQO,EAAM;MAAGC,SAAS;KAAK,CAAA;IACtD;;GASI,gBAAC,OAAA;IAAI,WAAU;cACb,gBAAC,GAAA,EAA0BV,YAAAA,CAAAA;;;;AAInC"}
@@ -1,32 +0,0 @@
1
- import { z as e } from "zod";
2
- var t = e.object({
3
- labelKey: e.enum([
4
- "Compute",
5
- "Network",
6
- "Storage",
7
- "Services",
8
- "Images",
9
- "Flavors",
10
- "Security Groups",
11
- "Floating IPs",
12
- "PCA (Clavis)"
13
- ]).optional(),
14
- to: e.string().optional(),
15
- useParamAsLabel: e.string().optional(),
16
- useParentTitleAsLabel: e.boolean().optional()
17
- }), n = e.object({ name: e.string() }), r = e.object({
18
- section: e.string().optional(),
19
- service: e.string().optional(),
20
- isDetail: e.boolean().optional(),
21
- crumb: t.optional(),
22
- sectionCrumb: t.optional(),
23
- intermediateCrumb: t.optional(),
24
- analytics: n.optional()
25
- });
26
- function i(e) {
27
- return r.safeParse(e).success;
28
- }
29
- //#endregion
30
- export { i as t };
31
-
32
- //# sourceMappingURL=routeInfo-CdTRlSxv.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routeInfo-CdTRlSxv.mjs","names":["z","CRUMB_LABEL_KEYS","CrumbSchema","object","labelKey","enum","optional","to","string","useParamAsLabel","useParentTitleAsLabel","boolean","AnalyticsSchema","name","RouteInfoSchema","section","service","isDetail","crumb","sectionCrumb","intermediateCrumb","analytics","isRouteInfo","data","safeParse","success"],"sources":["../../src/client/routes/routeInfo.ts"],"sourcesContent":["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 AnalyticsSchema = z.object({\n name: z.string(),\n})\n\nconst RouteInfoSchema = z.object({\n section: z.string().optional(),\n service: z.string().optional(),\n isDetail: z.boolean().optional(),\n crumb: CrumbSchema.optional(),\n sectionCrumb: CrumbSchema.optional(),\n intermediateCrumb: CrumbSchema.optional(),\n analytics: AnalyticsSchema.optional(),\n})\n\nexport type Crumb = z.infer<typeof CrumbSchema>\nexport type Analytics = z.infer<typeof AnalyticsSchema>\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":";AAgBA,IAAME,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,EAC/BU,MAAMb,EAAEQ,OAAM,EAChB,CAAA,GAEMM,IAAkBd,EAAEG,OAAO;CAC/BY,SAASf,EAAEQ,OAAM,EAAGF,SAAQ;CAC5BU,SAAShB,EAAEQ,OAAM,EAAGF,SAAQ;CAC5BW,UAAUjB,EAAEW,QAAO,EAAGL,SAAQ;CAC9BY,OAAOhB,EAAYI,SAAQ;CAC3Ba,cAAcjB,EAAYI,SAAQ;CAClCc,mBAAmBlB,EAAYI,SAAQ;CACvCe,WAAWT,EAAgBN,SAAQ;AACrC,CAAA;AAMA,SAAgBgB,EAAYC,GAAa;CACvC,OAAOT,EAAgBU,UAAUD,CAAAA,EAAME;AACzC"}