robodev 0.10.0 → 0.12.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.
- package/package.json +1 -1
- package/src/collect-files.test.ts +19 -0
- package/src/collect-files.ts +1 -0
- package/src/config.test.ts +26 -0
- package/src/config.ts +34 -5
- package/src/emit-starter.test.ts +54 -0
- package/src/emit-starter.ts +47 -13
- package/src/index.ts +37 -4
- package/templates/auth-chat/README.md +1 -1
- package/templates/auth-chat/api/health.ts +1 -1
- package/templates/auth-chat/api/me.ts +1 -1
- package/templates/auth-chat/api/messages.ts +1 -1
- package/templates/auth-chat/package.json +1 -1
- package/templates/auth-chat/src/main.tsx +5 -5
- package/templates/backend/README.md +1 -1
- package/templates/backend/api/health.ts +1 -1
- package/templates/backend/api/launch.ts +1 -1
- package/templates/backend/api/me.ts +1 -1
- package/templates/backend/api/motto.ts +1 -1
- package/templates/backend/api/planets/[id].ts +1 -1
- package/templates/backend/api/planets.ts +1 -1
- package/templates/backend/api/rockets.ts +1 -1
- package/templates/backend/package.json +1 -1
- package/templates/catalog.json +2 -2
- package/templates/empty/README.md +1 -1
- package/templates/empty/api/health.ts +1 -1
- package/templates/empty/package.json +1 -1
- package/templates/space/.config/local.spa.template.yml +27 -0
- package/templates/space/.oxlint-base.json +29 -0
- package/templates/space/.oxlintrc.json +78 -0
- package/templates/space/.rulesync/rules/frontend-api-boundary.md +36 -0
- package/templates/space/.rulesync/rules/frontend-component-structure.md +38 -0
- package/templates/space/.rulesync/rules/frontend-forms.md +32 -0
- package/templates/space/.rulesync/rules/frontend-notifications.md +24 -0
- package/templates/space/.rulesync/rules/frontend-povio-components.md +42 -0
- package/templates/space/.rulesync/rules/frontend-povio-ui.md +45 -0
- package/templates/space/.rulesync/rules/frontend-query-autocomplete.md +29 -0
- package/templates/space/.rulesync/rules/frontend-tables-and-lists.md +34 -0
- package/templates/space/.rulesync/rules/frontend-translations.md +26 -0
- package/templates/space/.rulesync/rules/project-overview.md +32 -0
- package/templates/space/.rulesync/rules/robodev-api.md +30 -0
- package/templates/space/.rulesync/rules/robodev-auth.md +40 -0
- package/templates/space/.rulesync/rules/robodev-database.md +22 -0
- package/templates/space/.rulesync/rules/role-based-app-structure.md +36 -0
- package/templates/space/.rulesync/skills/media-feature/SKILL.md +21 -0
- package/templates/space/.rulesync/skills/povio-ui-styling/SKILL.md +208 -0
- package/templates/space/.rulesync/skills/povio-ui-styling/agents/openai.yaml +4 -0
- package/templates/space/.rulesync/skills/robodev-api-route/SKILL.md +13 -0
- package/templates/space/.rulesync/skills/robodev-table/SKILL.md +12 -0
- package/templates/space/README.md +26 -7
- package/templates/space/api/_lib.ts +359 -0
- package/templates/space/api/aliens/labels.ts +19 -0
- package/templates/space/api/files/presigned-url.ts +48 -0
- package/templates/space/api/files/upload.ts +29 -0
- package/templates/space/api/planets/[id]/like.ts +36 -0
- package/templates/space/api/planets/[id].ts +56 -13
- package/templates/space/api/planets/paginate.ts +36 -0
- package/templates/space/api/planets.ts +52 -44
- package/templates/space/apps/fe/index.html +24 -0
- package/templates/space/apps/fe/openapi-codegen.config.ts +37 -0
- package/templates/space/apps/fe/package.json +82 -0
- package/templates/space/apps/fe/public/apple-touch-icon.png +0 -0
- package/templates/space/apps/fe/public/favicon-96x96.png +0 -0
- package/templates/space/apps/fe/public/favicon.ico +0 -0
- package/templates/space/apps/fe/public/favicon.svg +3 -0
- package/templates/space/apps/fe/public/site.webmanifest +21 -0
- package/templates/space/apps/fe/public/web-app-manifest-192x192.png +0 -0
- package/templates/space/apps/fe/public/web-app-manifest-512x512.png +0 -0
- package/templates/space/apps/fe/src/assets/fonts/GeneralSans-Bold.otf +0 -0
- package/templates/space/apps/fe/src/assets/fonts/GeneralSans-Medium.otf +0 -0
- package/templates/space/apps/fe/src/assets/fonts/GeneralSans-Regular.otf +0 -0
- package/templates/space/apps/fe/src/assets/fonts/GeneralSans-Semibold.otf +0 -0
- package/templates/space/apps/fe/src/assets/locales/en/translation.json +301 -0
- package/templates/space/apps/fe/src/assets/locales/sl/translation.json +301 -0
- package/templates/space/apps/fe/src/clients/app-rest-client.ts +15 -0
- package/templates/space/apps/fe/src/clients/auth-token-store.ts +101 -0
- package/templates/space/apps/fe/src/clients/rest/app-error-handler.ts +31 -0
- package/templates/space/apps/fe/src/clients/rest/interceptors/authorization-header.interceptor.ts +15 -0
- package/templates/space/apps/fe/src/clients/rest/interceptors/refresh-token.interceptor.ts +37 -0
- package/templates/space/apps/fe/src/clients/rest/interceptors/response.interceptor.ts +17 -0
- package/templates/space/apps/fe/src/components/404.tsx +18 -0
- package/templates/space/apps/fe/src/components/features/auth/AuthBrandPanel.tsx +60 -0
- package/templates/space/apps/fe/src/components/features/auth/AuthLayout.tsx +23 -0
- package/templates/space/apps/fe/src/components/features/auth/LoginPage.tsx +111 -0
- package/templates/space/apps/fe/src/components/features/auth/RegisterPage.tsx +143 -0
- package/templates/space/apps/fe/src/components/features/home/HomePage.tsx +21 -0
- package/templates/space/apps/fe/src/components/features/planets/details/PlanetDetailsPage.tsx +139 -0
- package/templates/space/apps/fe/src/components/features/planets/details/PlanetEditPage.tsx +266 -0
- package/templates/space/apps/fe/src/components/features/planets/feed/PlanetFeedCard.tsx +131 -0
- package/templates/space/apps/fe/src/components/features/planets/feed/PlanetsFeedPage.tsx +119 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetCard.tsx +89 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetCreateModal.tsx +179 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsFilters.css +3 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsFilters.tsx +73 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsGridPage.tsx +51 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsInfiniteTablePage.tsx +79 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsPage.tsx +65 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsTablePage.tsx +72 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsTableSummary.tsx +29 -0
- package/templates/space/apps/fe/src/components/features/planets/list/PlanetsViewTabs.tsx +79 -0
- package/templates/space/apps/fe/src/components/features/planets/list/table/PlanetsTable.tsx +30 -0
- package/templates/space/apps/fe/src/components/features/planets/list/table/PlanetsTableActions.tsx +64 -0
- package/templates/space/apps/fe/src/components/features/planets/list/table/PlanetsTableInfinite.tsx +36 -0
- package/templates/space/apps/fe/src/components/features/planets/list/table/planetsTableColumns.tsx +72 -0
- package/templates/space/apps/fe/src/components/features/planets/list/table/usePlanetTableFilters.tsx +102 -0
- package/templates/space/apps/fe/src/components/features/profile/ProfilePage.tsx +96 -0
- package/templates/space/apps/fe/src/components/googleAnalytics/GoogleAnalytics.tsx +35 -0
- package/templates/space/apps/fe/src/components/layout/AppLayout.tsx +19 -0
- package/templates/space/apps/fe/src/components/layout/app-header/AppHeader.tsx +93 -0
- package/templates/space/apps/fe/src/components/layout/app-header/MobileNavigation.tsx +53 -0
- package/templates/space/apps/fe/src/components/layout/app-header/NavLink.tsx +29 -0
- package/templates/space/apps/fe/src/components/shared/branding/BrandLogo.tsx +13 -0
- package/templates/space/apps/fe/src/components/shared/error/ErrorFallback.tsx +43 -0
- package/templates/space/apps/fe/src/components/shared/error/ErrorText.tsx +20 -0
- package/templates/space/apps/fe/src/components/shared/error/NotFound.tsx +36 -0
- package/templates/space/apps/fe/src/components/shared/forms/RequiredLabel.tsx +21 -0
- package/templates/space/apps/fe/src/components/shared/forms/RowInputWrapper.tsx +50 -0
- package/templates/space/apps/fe/src/components/shared/head/AppHead.tsx +32 -0
- package/templates/space/apps/fe/src/components/shared/head/DefaultAppHead.tsx +34 -0
- package/templates/space/apps/fe/src/components/shared/layout/LoadingState.tsx +9 -0
- package/templates/space/apps/fe/src/components/shared/layout/ThinPageWrapper.tsx +5 -0
- package/templates/space/apps/fe/src/components/shared/page/PageHeader.tsx +69 -0
- package/templates/space/apps/fe/src/components/shared/ui/Card.tsx +60 -0
- package/templates/space/apps/fe/src/components/shared/ui/GoogleLoginButton.tsx +19 -0
- package/templates/space/apps/fe/src/components/shared/ui/RequiredLabel.tsx +22 -0
- package/templates/space/apps/fe/src/components/shared/ui/TableActions.tsx +22 -0
- package/templates/space/apps/fe/src/config/app.config.ts +35 -0
- package/templates/space/apps/fe/src/config/i18n.ts +43 -0
- package/templates/space/apps/fe/src/config/inits/a11y.ts +14 -0
- package/templates/space/apps/fe/src/config/inits/logger.ts +7 -0
- package/templates/space/apps/fe/src/config/inits/sentry.ts +21 -0
- package/templates/space/apps/fe/src/config/jwt.config.ts +2 -0
- package/templates/space/apps/fe/src/config/query.config.ts +20 -0
- package/templates/space/apps/fe/src/hooks/useAuth.ts +5 -0
- package/templates/space/apps/fe/src/main.tsx +52 -0
- package/templates/space/apps/fe/src/pages/(guest)/login.tsx +23 -0
- package/templates/space/apps/fe/src/pages/(guest)/register.tsx +23 -0
- package/templates/space/apps/fe/src/pages/(guest)/route.tsx +18 -0
- package/templates/space/apps/fe/src/pages/(private)/index.tsx +23 -0
- package/templates/space/apps/fe/src/pages/(private)/planets/$id/edit.tsx +53 -0
- package/templates/space/apps/fe/src/pages/(private)/planets/$id/index.tsx +41 -0
- package/templates/space/apps/fe/src/pages/(private)/planets/index.tsx +24 -0
- package/templates/space/apps/fe/src/pages/(private)/planets-feed.tsx +23 -0
- package/templates/space/apps/fe/src/pages/(private)/profile.tsx +23 -0
- package/templates/space/apps/fe/src/pages/(private)/route.tsx +18 -0
- package/templates/space/apps/fe/src/pages/(public)/auth.tsx +37 -0
- package/templates/space/apps/fe/src/pages/(public)/route.tsx +9 -0
- package/templates/space/apps/fe/src/pages/__root.tsx +164 -0
- package/templates/space/apps/fe/src/providers/AppErrorBoundary.tsx +10 -0
- package/templates/space/apps/fe/src/providers/OpenApiRuntimeProvider.tsx +31 -0
- package/templates/space/apps/fe/src/providers/index.tsx +44 -0
- package/templates/space/apps/fe/src/providers/jwt.provider.tsx +95 -0
- package/templates/space/apps/fe/src/routeTree.gen.ts +309 -0
- package/templates/space/apps/fe/src/styles/base.css +103 -0
- package/templates/space/apps/fe/src/styles/fonts/fonts.tsx +10 -0
- package/templates/space/apps/fe/src/styles/fonts/general-sans.css +31 -0
- package/templates/space/apps/fe/src/styles/globals.css +28 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/button.override.ts +536 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/checkbox.override.ts +71 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/input.override.ts +252 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/label.override.ts +91 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/modal.override.ts +57 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/radio.override.ts +46 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/table.override.ts +104 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/tag.override.ts +66 -0
- package/templates/space/apps/fe/src/styles/overrides/defaults/typography.override.ts +115 -0
- package/templates/space/apps/fe/src/styles/overrides/outline.clsx.ts +10 -0
- package/templates/space/apps/fe/src/styles/overrides/uiOverrides.override.ts +60 -0
- package/templates/space/apps/fe/src/styles/theme.css +2177 -0
- package/templates/space/apps/fe/src/types/i18next.d.ts +12 -0
- package/templates/space/apps/fe/src/types/table.d.ts +17 -0
- package/templates/space/apps/fe/src/types/ui.d.ts +26 -0
- package/templates/space/apps/fe/src/types/vite-env.d.ts +20 -0
- package/templates/space/apps/fe/src/utils/date.utils.ts +17 -0
- package/templates/space/apps/fe/src/utils/image-fallback.ts +9 -0
- package/templates/space/apps/fe/src/utils/media-upload.ts +63 -0
- package/templates/space/apps/fe/src/utils/number.utils.ts +12 -0
- package/templates/space/apps/fe/src/utils/string.utils.ts +5 -0
- package/templates/space/apps/fe/src/vite-env.d.ts +1 -0
- package/templates/space/apps/fe/tsconfig.app.json +32 -0
- package/templates/space/apps/fe/tsconfig.json +9 -0
- package/templates/space/apps/fe/tsconfig.node.json +31 -0
- package/templates/space/apps/fe/vite.config.ts +94 -0
- package/templates/space/database.ts +33 -13
- package/templates/space/openapi.json +1819 -0
- package/templates/space/oxfmt.config.js +23 -0
- package/templates/space/package.json +6 -13
- package/templates/space/rulesync.jsonc +18 -0
- package/templates/space/tsconfig.json +2 -4
- package/templates/space/api/health.ts +0 -7
- package/templates/space/api/launch.ts +0 -29
- package/templates/space/api/me.ts +0 -14
- package/templates/space/api/motto.ts +0 -9
- package/templates/space/api/rockets.ts +0 -43
- package/templates/space/index.html +0 -138
- package/templates/space/src/main.tsx +0 -229
- package/templates/space/vite.config.ts +0 -7
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AuthContext } from "@povio/openapi-codegen-cli";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
4
|
+
|
|
5
|
+
import { authTokenStore } from "@/clients/auth-token-store";
|
|
6
|
+
import { LoadingState } from "@/components/shared/layout/LoadingState";
|
|
7
|
+
import { UserApi } from "@/openapi/user/user.api";
|
|
8
|
+
import type { UserModels } from "@/openapi/user/user.models";
|
|
9
|
+
import { UserQueries } from "@/openapi/user/user.queries";
|
|
10
|
+
|
|
11
|
+
const routes: AuthContext.Routes = {
|
|
12
|
+
authenticated: "/",
|
|
13
|
+
unauthenticated: "/login",
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const JWTProvider = ({ children }: PropsWithChildren) => {
|
|
17
|
+
const queryClient = useQueryClient();
|
|
18
|
+
|
|
19
|
+
const previousAccessToken = useRef<string | null>(null);
|
|
20
|
+
const accessToken = useSyncExternalStore(
|
|
21
|
+
authTokenStore.subscribe,
|
|
22
|
+
authTokenStore.getAccessToken,
|
|
23
|
+
authTokenStore.getServerSnapshot,
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const authenticated = !!accessToken;
|
|
27
|
+
const isInitializing = false;
|
|
28
|
+
|
|
29
|
+
const { data: user } = UserQueries.useGet({
|
|
30
|
+
enabled: authenticated,
|
|
31
|
+
staleTime: 10 * 60 * 1000,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const onAccessTokenChange = useCallback((token: string | null) => {
|
|
35
|
+
authTokenStore.setAccessToken(token);
|
|
36
|
+
}, []);
|
|
37
|
+
|
|
38
|
+
const onRefreshTokenChange = useCallback((token: string | null) => {
|
|
39
|
+
authTokenStore.setRefreshToken(token);
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
const logout = useCallback(() => {
|
|
43
|
+
authTokenStore.clear();
|
|
44
|
+
queryClient.clear();
|
|
45
|
+
}, [queryClient]);
|
|
46
|
+
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (previousAccessToken.current && !accessToken) {
|
|
49
|
+
queryClient.clear();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
previousAccessToken.current = accessToken;
|
|
53
|
+
}, [accessToken, queryClient]);
|
|
54
|
+
|
|
55
|
+
const userPromise = useCallback(async () => {
|
|
56
|
+
try {
|
|
57
|
+
const user = await UserApi.get();
|
|
58
|
+
queryClient.setQueryData<UserModels.UserMeResponse>(UserQueries.keys.get(), user);
|
|
59
|
+
return user;
|
|
60
|
+
} catch {
|
|
61
|
+
logout();
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}, [logout, queryClient]);
|
|
65
|
+
|
|
66
|
+
const updateTokens = useCallback(
|
|
67
|
+
(accessToken: string | null, refreshToken?: string | null) => {
|
|
68
|
+
if (accessToken !== null) {
|
|
69
|
+
onAccessTokenChange(accessToken);
|
|
70
|
+
}
|
|
71
|
+
if (refreshToken !== null && refreshToken !== undefined) {
|
|
72
|
+
onRefreshTokenChange(refreshToken);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
[onAccessTokenChange, onRefreshTokenChange],
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const loadingState = useMemo(() => <LoadingState />, []);
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<AuthContext.Provider
|
|
82
|
+
isAuthenticated={authenticated}
|
|
83
|
+
isInitializing={isInitializing}
|
|
84
|
+
logout={logout}
|
|
85
|
+
updateTokens={updateTokens}
|
|
86
|
+
accessToken={accessToken}
|
|
87
|
+
user={user}
|
|
88
|
+
userPromise={userPromise}
|
|
89
|
+
routes={routes}
|
|
90
|
+
loadingState={loadingState}
|
|
91
|
+
>
|
|
92
|
+
{children}
|
|
93
|
+
</AuthContext.Provider>
|
|
94
|
+
);
|
|
95
|
+
};
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
|
|
5
|
+
// noinspection JSUnusedGlobalSymbols
|
|
6
|
+
|
|
7
|
+
// This file was automatically generated by TanStack Router.
|
|
8
|
+
// You should NOT make any changes in this file as it will be overwritten.
|
|
9
|
+
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
|
10
|
+
|
|
11
|
+
import { Route as rootRouteImport } from './pages/__root'
|
|
12
|
+
import { Route as publicRouteRouteImport } from './pages/(public)/route'
|
|
13
|
+
import { Route as privateRouteRouteImport } from './pages/(private)/route'
|
|
14
|
+
import { Route as guestRouteRouteImport } from './pages/(guest)/route'
|
|
15
|
+
import { Route as privateIndexRouteImport } from './pages/(private)/index'
|
|
16
|
+
import { Route as publicAuthRouteImport } from './pages/(public)/auth'
|
|
17
|
+
import { Route as privateProfileRouteImport } from './pages/(private)/profile'
|
|
18
|
+
import { Route as privatePlanetsFeedRouteImport } from './pages/(private)/planets-feed'
|
|
19
|
+
import { Route as guestRegisterRouteImport } from './pages/(guest)/register'
|
|
20
|
+
import { Route as guestLoginRouteImport } from './pages/(guest)/login'
|
|
21
|
+
import { Route as privatePlanetsIndexRouteImport } from './pages/(private)/planets/index'
|
|
22
|
+
import { Route as privatePlanetsIdIndexRouteImport } from './pages/(private)/planets/$id/index'
|
|
23
|
+
import { Route as privatePlanetsIdEditRouteImport } from './pages/(private)/planets/$id/edit'
|
|
24
|
+
|
|
25
|
+
const publicRouteRoute = publicRouteRouteImport.update({
|
|
26
|
+
id: '/(public)',
|
|
27
|
+
getParentRoute: () => rootRouteImport,
|
|
28
|
+
} as any)
|
|
29
|
+
const privateRouteRoute = privateRouteRouteImport.update({
|
|
30
|
+
id: '/(private)',
|
|
31
|
+
getParentRoute: () => rootRouteImport,
|
|
32
|
+
} as any)
|
|
33
|
+
const guestRouteRoute = guestRouteRouteImport.update({
|
|
34
|
+
id: '/(guest)',
|
|
35
|
+
getParentRoute: () => rootRouteImport,
|
|
36
|
+
} as any)
|
|
37
|
+
const privateIndexRoute = privateIndexRouteImport.update({
|
|
38
|
+
id: '/',
|
|
39
|
+
path: '/',
|
|
40
|
+
getParentRoute: () => privateRouteRoute,
|
|
41
|
+
} as any)
|
|
42
|
+
const publicAuthRoute = publicAuthRouteImport.update({
|
|
43
|
+
id: '/auth',
|
|
44
|
+
path: '/auth',
|
|
45
|
+
getParentRoute: () => publicRouteRoute,
|
|
46
|
+
} as any)
|
|
47
|
+
const privateProfileRoute = privateProfileRouteImport.update({
|
|
48
|
+
id: '/profile',
|
|
49
|
+
path: '/profile',
|
|
50
|
+
getParentRoute: () => privateRouteRoute,
|
|
51
|
+
} as any)
|
|
52
|
+
const privatePlanetsFeedRoute = privatePlanetsFeedRouteImport.update({
|
|
53
|
+
id: '/planets-feed',
|
|
54
|
+
path: '/planets-feed',
|
|
55
|
+
getParentRoute: () => privateRouteRoute,
|
|
56
|
+
} as any)
|
|
57
|
+
const guestRegisterRoute = guestRegisterRouteImport.update({
|
|
58
|
+
id: '/register',
|
|
59
|
+
path: '/register',
|
|
60
|
+
getParentRoute: () => guestRouteRoute,
|
|
61
|
+
} as any)
|
|
62
|
+
const guestLoginRoute = guestLoginRouteImport.update({
|
|
63
|
+
id: '/login',
|
|
64
|
+
path: '/login',
|
|
65
|
+
getParentRoute: () => guestRouteRoute,
|
|
66
|
+
} as any)
|
|
67
|
+
const privatePlanetsIndexRoute = privatePlanetsIndexRouteImport.update({
|
|
68
|
+
id: '/planets/',
|
|
69
|
+
path: '/planets/',
|
|
70
|
+
getParentRoute: () => privateRouteRoute,
|
|
71
|
+
} as any)
|
|
72
|
+
const privatePlanetsIdIndexRoute = privatePlanetsIdIndexRouteImport.update({
|
|
73
|
+
id: '/planets/$id/',
|
|
74
|
+
path: '/planets/$id/',
|
|
75
|
+
getParentRoute: () => privateRouteRoute,
|
|
76
|
+
} as any)
|
|
77
|
+
const privatePlanetsIdEditRoute = privatePlanetsIdEditRouteImport.update({
|
|
78
|
+
id: '/planets/$id/edit',
|
|
79
|
+
path: '/planets/$id/edit',
|
|
80
|
+
getParentRoute: () => privateRouteRoute,
|
|
81
|
+
} as any)
|
|
82
|
+
|
|
83
|
+
export interface FileRoutesByFullPath {
|
|
84
|
+
'/login': typeof guestLoginRoute
|
|
85
|
+
'/register': typeof guestRegisterRoute
|
|
86
|
+
'/planets-feed': typeof privatePlanetsFeedRoute
|
|
87
|
+
'/profile': typeof privateProfileRoute
|
|
88
|
+
'/auth': typeof publicAuthRoute
|
|
89
|
+
'/': typeof privateIndexRoute
|
|
90
|
+
'/planets/': typeof privatePlanetsIndexRoute
|
|
91
|
+
'/planets/$id/edit': typeof privatePlanetsIdEditRoute
|
|
92
|
+
'/planets/$id/': typeof privatePlanetsIdIndexRoute
|
|
93
|
+
}
|
|
94
|
+
export interface FileRoutesByTo {
|
|
95
|
+
'/login': typeof guestLoginRoute
|
|
96
|
+
'/register': typeof guestRegisterRoute
|
|
97
|
+
'/planets-feed': typeof privatePlanetsFeedRoute
|
|
98
|
+
'/profile': typeof privateProfileRoute
|
|
99
|
+
'/auth': typeof publicAuthRoute
|
|
100
|
+
'/': typeof privateIndexRoute
|
|
101
|
+
'/planets': typeof privatePlanetsIndexRoute
|
|
102
|
+
'/planets/$id/edit': typeof privatePlanetsIdEditRoute
|
|
103
|
+
'/planets/$id': typeof privatePlanetsIdIndexRoute
|
|
104
|
+
}
|
|
105
|
+
export interface FileRoutesById {
|
|
106
|
+
__root__: typeof rootRouteImport
|
|
107
|
+
'/(guest)': typeof guestRouteRouteWithChildren
|
|
108
|
+
'/(private)': typeof privateRouteRouteWithChildren
|
|
109
|
+
'/(public)': typeof publicRouteRouteWithChildren
|
|
110
|
+
'/(guest)/login': typeof guestLoginRoute
|
|
111
|
+
'/(guest)/register': typeof guestRegisterRoute
|
|
112
|
+
'/(private)/planets-feed': typeof privatePlanetsFeedRoute
|
|
113
|
+
'/(private)/profile': typeof privateProfileRoute
|
|
114
|
+
'/(public)/auth': typeof publicAuthRoute
|
|
115
|
+
'/(private)/': typeof privateIndexRoute
|
|
116
|
+
'/(private)/planets/': typeof privatePlanetsIndexRoute
|
|
117
|
+
'/(private)/planets/$id/edit': typeof privatePlanetsIdEditRoute
|
|
118
|
+
'/(private)/planets/$id/': typeof privatePlanetsIdIndexRoute
|
|
119
|
+
}
|
|
120
|
+
export interface FileRouteTypes {
|
|
121
|
+
fileRoutesByFullPath: FileRoutesByFullPath
|
|
122
|
+
fullPaths:
|
|
123
|
+
| '/login'
|
|
124
|
+
| '/register'
|
|
125
|
+
| '/planets-feed'
|
|
126
|
+
| '/profile'
|
|
127
|
+
| '/auth'
|
|
128
|
+
| '/'
|
|
129
|
+
| '/planets/'
|
|
130
|
+
| '/planets/$id/edit'
|
|
131
|
+
| '/planets/$id/'
|
|
132
|
+
fileRoutesByTo: FileRoutesByTo
|
|
133
|
+
to:
|
|
134
|
+
| '/login'
|
|
135
|
+
| '/register'
|
|
136
|
+
| '/planets-feed'
|
|
137
|
+
| '/profile'
|
|
138
|
+
| '/auth'
|
|
139
|
+
| '/'
|
|
140
|
+
| '/planets'
|
|
141
|
+
| '/planets/$id/edit'
|
|
142
|
+
| '/planets/$id'
|
|
143
|
+
id:
|
|
144
|
+
| '__root__'
|
|
145
|
+
| '/(guest)'
|
|
146
|
+
| '/(private)'
|
|
147
|
+
| '/(public)'
|
|
148
|
+
| '/(guest)/login'
|
|
149
|
+
| '/(guest)/register'
|
|
150
|
+
| '/(private)/planets-feed'
|
|
151
|
+
| '/(private)/profile'
|
|
152
|
+
| '/(public)/auth'
|
|
153
|
+
| '/(private)/'
|
|
154
|
+
| '/(private)/planets/'
|
|
155
|
+
| '/(private)/planets/$id/edit'
|
|
156
|
+
| '/(private)/planets/$id/'
|
|
157
|
+
fileRoutesById: FileRoutesById
|
|
158
|
+
}
|
|
159
|
+
export interface RootRouteChildren {
|
|
160
|
+
guestRouteRoute: typeof guestRouteRouteWithChildren
|
|
161
|
+
privateRouteRoute: typeof privateRouteRouteWithChildren
|
|
162
|
+
publicRouteRoute: typeof publicRouteRouteWithChildren
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
declare module '@tanstack/react-router' {
|
|
166
|
+
interface FileRoutesByPath {
|
|
167
|
+
'/(public)': {
|
|
168
|
+
id: '/(public)'
|
|
169
|
+
path: ''
|
|
170
|
+
fullPath: ''
|
|
171
|
+
preLoaderRoute: typeof publicRouteRouteImport
|
|
172
|
+
parentRoute: typeof rootRouteImport
|
|
173
|
+
}
|
|
174
|
+
'/(private)': {
|
|
175
|
+
id: '/(private)'
|
|
176
|
+
path: ''
|
|
177
|
+
fullPath: ''
|
|
178
|
+
preLoaderRoute: typeof privateRouteRouteImport
|
|
179
|
+
parentRoute: typeof rootRouteImport
|
|
180
|
+
}
|
|
181
|
+
'/(guest)': {
|
|
182
|
+
id: '/(guest)'
|
|
183
|
+
path: ''
|
|
184
|
+
fullPath: ''
|
|
185
|
+
preLoaderRoute: typeof guestRouteRouteImport
|
|
186
|
+
parentRoute: typeof rootRouteImport
|
|
187
|
+
}
|
|
188
|
+
'/(private)/': {
|
|
189
|
+
id: '/(private)/'
|
|
190
|
+
path: '/'
|
|
191
|
+
fullPath: '/'
|
|
192
|
+
preLoaderRoute: typeof privateIndexRouteImport
|
|
193
|
+
parentRoute: typeof privateRouteRoute
|
|
194
|
+
}
|
|
195
|
+
'/(public)/auth': {
|
|
196
|
+
id: '/(public)/auth'
|
|
197
|
+
path: '/auth'
|
|
198
|
+
fullPath: '/auth'
|
|
199
|
+
preLoaderRoute: typeof publicAuthRouteImport
|
|
200
|
+
parentRoute: typeof publicRouteRoute
|
|
201
|
+
}
|
|
202
|
+
'/(private)/profile': {
|
|
203
|
+
id: '/(private)/profile'
|
|
204
|
+
path: '/profile'
|
|
205
|
+
fullPath: '/profile'
|
|
206
|
+
preLoaderRoute: typeof privateProfileRouteImport
|
|
207
|
+
parentRoute: typeof privateRouteRoute
|
|
208
|
+
}
|
|
209
|
+
'/(private)/planets-feed': {
|
|
210
|
+
id: '/(private)/planets-feed'
|
|
211
|
+
path: '/planets-feed'
|
|
212
|
+
fullPath: '/planets-feed'
|
|
213
|
+
preLoaderRoute: typeof privatePlanetsFeedRouteImport
|
|
214
|
+
parentRoute: typeof privateRouteRoute
|
|
215
|
+
}
|
|
216
|
+
'/(guest)/register': {
|
|
217
|
+
id: '/(guest)/register'
|
|
218
|
+
path: '/register'
|
|
219
|
+
fullPath: '/register'
|
|
220
|
+
preLoaderRoute: typeof guestRegisterRouteImport
|
|
221
|
+
parentRoute: typeof guestRouteRoute
|
|
222
|
+
}
|
|
223
|
+
'/(guest)/login': {
|
|
224
|
+
id: '/(guest)/login'
|
|
225
|
+
path: '/login'
|
|
226
|
+
fullPath: '/login'
|
|
227
|
+
preLoaderRoute: typeof guestLoginRouteImport
|
|
228
|
+
parentRoute: typeof guestRouteRoute
|
|
229
|
+
}
|
|
230
|
+
'/(private)/planets/': {
|
|
231
|
+
id: '/(private)/planets/'
|
|
232
|
+
path: '/planets'
|
|
233
|
+
fullPath: '/planets/'
|
|
234
|
+
preLoaderRoute: typeof privatePlanetsIndexRouteImport
|
|
235
|
+
parentRoute: typeof privateRouteRoute
|
|
236
|
+
}
|
|
237
|
+
'/(private)/planets/$id/': {
|
|
238
|
+
id: '/(private)/planets/$id/'
|
|
239
|
+
path: '/planets/$id'
|
|
240
|
+
fullPath: '/planets/$id/'
|
|
241
|
+
preLoaderRoute: typeof privatePlanetsIdIndexRouteImport
|
|
242
|
+
parentRoute: typeof privateRouteRoute
|
|
243
|
+
}
|
|
244
|
+
'/(private)/planets/$id/edit': {
|
|
245
|
+
id: '/(private)/planets/$id/edit'
|
|
246
|
+
path: '/planets/$id/edit'
|
|
247
|
+
fullPath: '/planets/$id/edit'
|
|
248
|
+
preLoaderRoute: typeof privatePlanetsIdEditRouteImport
|
|
249
|
+
parentRoute: typeof privateRouteRoute
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
interface guestRouteRouteChildren {
|
|
255
|
+
guestLoginRoute: typeof guestLoginRoute
|
|
256
|
+
guestRegisterRoute: typeof guestRegisterRoute
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const guestRouteRouteChildren: guestRouteRouteChildren = {
|
|
260
|
+
guestLoginRoute: guestLoginRoute,
|
|
261
|
+
guestRegisterRoute: guestRegisterRoute,
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const guestRouteRouteWithChildren = guestRouteRoute._addFileChildren(
|
|
265
|
+
guestRouteRouteChildren,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
interface privateRouteRouteChildren {
|
|
269
|
+
privatePlanetsFeedRoute: typeof privatePlanetsFeedRoute
|
|
270
|
+
privateProfileRoute: typeof privateProfileRoute
|
|
271
|
+
privateIndexRoute: typeof privateIndexRoute
|
|
272
|
+
privatePlanetsIndexRoute: typeof privatePlanetsIndexRoute
|
|
273
|
+
privatePlanetsIdEditRoute: typeof privatePlanetsIdEditRoute
|
|
274
|
+
privatePlanetsIdIndexRoute: typeof privatePlanetsIdIndexRoute
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const privateRouteRouteChildren: privateRouteRouteChildren = {
|
|
278
|
+
privatePlanetsFeedRoute: privatePlanetsFeedRoute,
|
|
279
|
+
privateProfileRoute: privateProfileRoute,
|
|
280
|
+
privateIndexRoute: privateIndexRoute,
|
|
281
|
+
privatePlanetsIndexRoute: privatePlanetsIndexRoute,
|
|
282
|
+
privatePlanetsIdEditRoute: privatePlanetsIdEditRoute,
|
|
283
|
+
privatePlanetsIdIndexRoute: privatePlanetsIdIndexRoute,
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const privateRouteRouteWithChildren = privateRouteRoute._addFileChildren(
|
|
287
|
+
privateRouteRouteChildren,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
interface publicRouteRouteChildren {
|
|
291
|
+
publicAuthRoute: typeof publicAuthRoute
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const publicRouteRouteChildren: publicRouteRouteChildren = {
|
|
295
|
+
publicAuthRoute: publicAuthRoute,
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
const publicRouteRouteWithChildren = publicRouteRoute._addFileChildren(
|
|
299
|
+
publicRouteRouteChildren,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
const rootRouteChildren: RootRouteChildren = {
|
|
303
|
+
guestRouteRoute: guestRouteRouteWithChildren,
|
|
304
|
+
privateRouteRoute: privateRouteRouteWithChildren,
|
|
305
|
+
publicRouteRoute: publicRouteRouteWithChildren,
|
|
306
|
+
}
|
|
307
|
+
export const routeTree = rootRouteImport
|
|
308
|
+
._addFileChildren(rootRouteChildren)
|
|
309
|
+
._addFileTypes<FileRouteTypes>()
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
@plugin "tailwindcss-react-aria-components";
|
|
2
|
+
|
|
3
|
+
@layer base {
|
|
4
|
+
button:not(:disabled),
|
|
5
|
+
[role="button"]:not(:disabled) {
|
|
6
|
+
cursor: pointer;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@theme static {
|
|
11
|
+
--color-*: initial;
|
|
12
|
+
--color-inherit: inherit;
|
|
13
|
+
--color-transparent: transparent;
|
|
14
|
+
--color-current: currentColor;
|
|
15
|
+
--radius-*: initial;
|
|
16
|
+
--radius-none: 0rem;
|
|
17
|
+
--container-*: initial;
|
|
18
|
+
--container-none: none;
|
|
19
|
+
--container-modal: 32.5rem;
|
|
20
|
+
--container-toast: 45rem;
|
|
21
|
+
--spacing-*: initial;
|
|
22
|
+
--spacing-0: 0rem;
|
|
23
|
+
--shadow-*: initial;
|
|
24
|
+
--shadow-none: none;
|
|
25
|
+
--text-*: initial;
|
|
26
|
+
--text-inherit: inherit;
|
|
27
|
+
--text-inherit--line-height: inherit;
|
|
28
|
+
--text-inherit--letter-spacing: inherit;
|
|
29
|
+
--breakpoint-*: initial;
|
|
30
|
+
--breakpoint-sm: 23.75rem;
|
|
31
|
+
--breakpoint-md: 37.5rem;
|
|
32
|
+
--breakpoint-lg: 80rem;
|
|
33
|
+
--breakpoint-xl: 105rem;
|
|
34
|
+
--rotate-*: initial;
|
|
35
|
+
--rotate-0: 0deg;
|
|
36
|
+
--rotate-45: 45deg;
|
|
37
|
+
--rotate-90: 90deg;
|
|
38
|
+
--rotate-180: 180deg;
|
|
39
|
+
--rotate-270: 270deg;
|
|
40
|
+
--rotate-360: 360deg;
|
|
41
|
+
--animate-drawer-enter-right: drawer-slide-right 0.3s;
|
|
42
|
+
--animate-drawer-exit-right: drawer-slide-right 0.3s reverse;
|
|
43
|
+
--animate-drawer-enter-left: drawer-slide-left 0.3s;
|
|
44
|
+
--animate-drawer-exit-left: drawer-slide-left 0.3s reverse;
|
|
45
|
+
--animate-loader-spin: loader-spin 1s linear infinite;
|
|
46
|
+
--z-index-base: 0;
|
|
47
|
+
--z-index-raised: 1;
|
|
48
|
+
--z-index-sticky: 10;
|
|
49
|
+
--z-index-drawer: 20;
|
|
50
|
+
--z-index-modal: 30;
|
|
51
|
+
--z-index-bottom-sheet: 40;
|
|
52
|
+
--z-index-drop-target: 50;
|
|
53
|
+
--z-index-overlay-above: 100;
|
|
54
|
+
|
|
55
|
+
@keyframes drawer-slide-right {
|
|
56
|
+
from {
|
|
57
|
+
transform: translateX(100%);
|
|
58
|
+
}
|
|
59
|
+
to {
|
|
60
|
+
transform: translateX(0);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
@keyframes drawer-slide-left {
|
|
64
|
+
from {
|
|
65
|
+
transform: translateX(-100%);
|
|
66
|
+
}
|
|
67
|
+
to {
|
|
68
|
+
transform: translateX(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
@keyframes loader-spin {
|
|
72
|
+
to {
|
|
73
|
+
transform: rotate(360deg);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
html {
|
|
79
|
+
-webkit-font-smoothing: antialiased;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.flex-fill {
|
|
83
|
+
flex: 1 0 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:root {
|
|
87
|
+
--elevation-fill-default-2-base: 248 249 249;
|
|
88
|
+
--elevation-outline-default-1-base: 218 220 221;
|
|
89
|
+
--elevation-outline-default-2-base: 198 200 201;
|
|
90
|
+
--interactive-contained-primary-idle-base: 0 90 154;
|
|
91
|
+
--interactive-contained-primary-hover-base: 46 142 210;
|
|
92
|
+
--interactive-contained-primary-pressed-base: 95 170 224;
|
|
93
|
+
--interactive-contained-primary-disabled-base: 155 194 221;
|
|
94
|
+
--interactive-contained-primary-focus-base: 95 170 224;
|
|
95
|
+
--interactive-outlined-primary-on-idle-base: 0 90 154;
|
|
96
|
+
--interactive-outlined-primary-outline-idle-base: 0 90 154;
|
|
97
|
+
--interactive-outlined-primary-outline-hover-base: 46 142 210;
|
|
98
|
+
--interactive-text-primary-idle-base: 0 90 154;
|
|
99
|
+
--interactive-text-primary-hover-base: 46 142 210;
|
|
100
|
+
--text-default-1-base: 25 26 27;
|
|
101
|
+
--text-default-2-base: 79 85 88;
|
|
102
|
+
--text-default-3-base: 111 114 116;
|
|
103
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "General Sans";
|
|
3
|
+
src: url("../../assets/fonts/GeneralSans-Regular.otf") format("opentype");
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-display: swap;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@font-face {
|
|
10
|
+
font-family: "General Sans";
|
|
11
|
+
src: url("../../assets/fonts/GeneralSans-Medium.otf") format("opentype");
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
font-style: normal;
|
|
14
|
+
font-display: swap;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@font-face {
|
|
18
|
+
font-family: "General Sans";
|
|
19
|
+
src: url("../../assets/fonts/GeneralSans-Semibold.otf") format("opentype");
|
|
20
|
+
font-weight: 600;
|
|
21
|
+
font-style: normal;
|
|
22
|
+
font-display: swap;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@font-face {
|
|
26
|
+
font-family: "General Sans";
|
|
27
|
+
src: url("../../assets/fonts/GeneralSans-Bold.otf") format("opentype");
|
|
28
|
+
font-weight: 700;
|
|
29
|
+
font-style: normal;
|
|
30
|
+
font-display: swap;
|
|
31
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@import "@fontsource-variable/inter";
|
|
2
|
+
@import "@fontsource-variable/geist";
|
|
3
|
+
@import "./fonts/general-sans.css";
|
|
4
|
+
|
|
5
|
+
@import "tailwindcss";
|
|
6
|
+
@source "../../node_modules/@povio/ui/dist";
|
|
7
|
+
@import "./base.css";
|
|
8
|
+
@import "./theme.css";
|
|
9
|
+
|
|
10
|
+
/* width */
|
|
11
|
+
::-webkit-scrollbar {
|
|
12
|
+
@apply w-1-5;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Track */
|
|
16
|
+
::-webkit-scrollbar-track {
|
|
17
|
+
@apply bg-transparent;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Handle */
|
|
21
|
+
::-webkit-scrollbar-thumb {
|
|
22
|
+
@apply bg-elevation-outline-default-2 rounded-full;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Handle on hover */
|
|
26
|
+
::-webkit-scrollbar-thumb:hover {
|
|
27
|
+
@apply bg-elevation-outline-default-2;
|
|
28
|
+
}
|