robodev 0.22.0 → 0.24.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 (178) hide show
  1. package/package.json +1 -1
  2. package/src/emit-starter.test.ts +36 -0
  3. package/templates/auth-chat/package.json +1 -1
  4. package/templates/backend/api/_lib.ts +9 -2
  5. package/templates/backend/package.json +1 -1
  6. package/templates/catalog.json +5 -0
  7. package/templates/empty/package.json +1 -1
  8. package/templates/marketplace/.config/local.spa.template.yml +27 -0
  9. package/templates/marketplace/.oxlint-base.json +29 -0
  10. package/templates/marketplace/.oxlintrc.json +78 -0
  11. package/templates/marketplace/.rulesync/rules/frontend-api-boundary.md +36 -0
  12. package/templates/marketplace/.rulesync/rules/frontend-component-structure.md +38 -0
  13. package/templates/marketplace/.rulesync/rules/frontend-forms.md +32 -0
  14. package/templates/marketplace/.rulesync/rules/frontend-notifications.md +24 -0
  15. package/templates/marketplace/.rulesync/rules/frontend-povio-components.md +42 -0
  16. package/templates/marketplace/.rulesync/rules/frontend-povio-ui.md +45 -0
  17. package/templates/marketplace/.rulesync/rules/frontend-query-autocomplete.md +29 -0
  18. package/templates/marketplace/.rulesync/rules/frontend-tables-and-lists.md +34 -0
  19. package/templates/marketplace/.rulesync/rules/frontend-translations.md +26 -0
  20. package/templates/marketplace/.rulesync/rules/project-overview.md +32 -0
  21. package/templates/marketplace/.rulesync/rules/robodev-api.md +30 -0
  22. package/templates/marketplace/.rulesync/rules/robodev-auth.md +40 -0
  23. package/templates/marketplace/.rulesync/rules/robodev-database.md +22 -0
  24. package/templates/marketplace/.rulesync/rules/role-based-app-structure.md +36 -0
  25. package/templates/marketplace/.rulesync/skills/media-feature/SKILL.md +21 -0
  26. package/templates/marketplace/.rulesync/skills/povio-ui-styling/SKILL.md +208 -0
  27. package/templates/marketplace/.rulesync/skills/povio-ui-styling/agents/openai.yaml +4 -0
  28. package/templates/marketplace/.rulesync/skills/robodev-api-route/SKILL.md +13 -0
  29. package/templates/marketplace/.rulesync/skills/robodev-table/SKILL.md +12 -0
  30. package/templates/marketplace/README.md +40 -0
  31. package/templates/marketplace/api/_lib.ts +677 -0
  32. package/templates/marketplace/api/cart/[id].ts +51 -0
  33. package/templates/marketplace/api/cart.ts +70 -0
  34. package/templates/marketplace/api/categories.ts +11 -0
  35. package/templates/marketplace/api/checkout.ts +157 -0
  36. package/templates/marketplace/api/health.ts +7 -0
  37. package/templates/marketplace/api/listings/[id].ts +101 -0
  38. package/templates/marketplace/api/listings/paginate.ts +29 -0
  39. package/templates/marketplace/api/listings.ts +90 -0
  40. package/templates/marketplace/api/me.ts +14 -0
  41. package/templates/marketplace/api/orders/[id]/complete.ts +27 -0
  42. package/templates/marketplace/api/orders/[id]/ship.ts +24 -0
  43. package/templates/marketplace/api/orders/[id].ts +15 -0
  44. package/templates/marketplace/api/purchases.ts +19 -0
  45. package/templates/marketplace/api/reviews.ts +58 -0
  46. package/templates/marketplace/api/sales.ts +19 -0
  47. package/templates/marketplace/api/watches/[listingId].ts +18 -0
  48. package/templates/marketplace/api/watches.ts +51 -0
  49. package/templates/marketplace/apps/fe/index.html +24 -0
  50. package/templates/marketplace/apps/fe/openapi-codegen.config.ts +72 -0
  51. package/templates/marketplace/apps/fe/package.json +84 -0
  52. package/templates/marketplace/apps/fe/public/apple-touch-icon.png +0 -0
  53. package/templates/marketplace/apps/fe/public/favicon-96x96.png +0 -0
  54. package/templates/marketplace/apps/fe/public/favicon.ico +0 -0
  55. package/templates/marketplace/apps/fe/public/favicon.svg +3 -0
  56. package/templates/marketplace/apps/fe/public/site.webmanifest +21 -0
  57. package/templates/marketplace/apps/fe/public/web-app-manifest-192x192.png +0 -0
  58. package/templates/marketplace/apps/fe/public/web-app-manifest-512x512.png +0 -0
  59. package/templates/marketplace/apps/fe/src/assets/fonts/GeneralSans-Bold.otf +0 -0
  60. package/templates/marketplace/apps/fe/src/assets/fonts/GeneralSans-Medium.otf +0 -0
  61. package/templates/marketplace/apps/fe/src/assets/fonts/GeneralSans-Regular.otf +0 -0
  62. package/templates/marketplace/apps/fe/src/assets/fonts/GeneralSans-Semibold.otf +0 -0
  63. package/templates/marketplace/apps/fe/src/assets/locales/en/translation.json +335 -0
  64. package/templates/marketplace/apps/fe/src/assets/locales/sl/translation.json +335 -0
  65. package/templates/marketplace/apps/fe/src/clients/app-rest-client.ts +15 -0
  66. package/templates/marketplace/apps/fe/src/clients/auth-token-store.ts +101 -0
  67. package/templates/marketplace/apps/fe/src/clients/rest/app-error-handler.ts +31 -0
  68. package/templates/marketplace/apps/fe/src/clients/rest/interceptors/authorization-header.interceptor.ts +15 -0
  69. package/templates/marketplace/apps/fe/src/clients/rest/interceptors/refresh-token.interceptor.ts +37 -0
  70. package/templates/marketplace/apps/fe/src/clients/rest/interceptors/response.interceptor.ts +17 -0
  71. package/templates/marketplace/apps/fe/src/components/404.tsx +18 -0
  72. package/templates/marketplace/apps/fe/src/components/features/auth/AuthBrandPanel.tsx +60 -0
  73. package/templates/marketplace/apps/fe/src/components/features/auth/AuthLayout.tsx +23 -0
  74. package/templates/marketplace/apps/fe/src/components/features/auth/LoginPage.tsx +111 -0
  75. package/templates/marketplace/apps/fe/src/components/features/auth/RegisterPage.tsx +143 -0
  76. package/templates/marketplace/apps/fe/src/components/features/marketplace/BrowsePage.tsx +76 -0
  77. package/templates/marketplace/apps/fe/src/components/features/marketplace/CartPage.tsx +88 -0
  78. package/templates/marketplace/apps/fe/src/components/features/marketplace/CheckoutPage.tsx +193 -0
  79. package/templates/marketplace/apps/fe/src/components/features/marketplace/ListingCard.tsx +50 -0
  80. package/templates/marketplace/apps/fe/src/components/features/marketplace/ListingDetailsPage.tsx +152 -0
  81. package/templates/marketplace/apps/fe/src/components/features/marketplace/ListingFormPage.tsx +243 -0
  82. package/templates/marketplace/apps/fe/src/components/features/marketplace/MyListingsPage.tsx +84 -0
  83. package/templates/marketplace/apps/fe/src/components/features/marketplace/OrdersPage.tsx +224 -0
  84. package/templates/marketplace/apps/fe/src/components/features/marketplace/WatchlistPage.tsx +56 -0
  85. package/templates/marketplace/apps/fe/src/components/features/profile/ProfilePage.tsx +96 -0
  86. package/templates/marketplace/apps/fe/src/components/googleAnalytics/GoogleAnalytics.tsx +35 -0
  87. package/templates/marketplace/apps/fe/src/components/layout/AppLayout.tsx +19 -0
  88. package/templates/marketplace/apps/fe/src/components/layout/app-header/AppHeader.tsx +95 -0
  89. package/templates/marketplace/apps/fe/src/components/layout/app-header/MobileNavigation.tsx +55 -0
  90. package/templates/marketplace/apps/fe/src/components/layout/app-header/NavLink.tsx +29 -0
  91. package/templates/marketplace/apps/fe/src/components/shared/branding/BrandLogo.tsx +13 -0
  92. package/templates/marketplace/apps/fe/src/components/shared/error/ErrorFallback.tsx +43 -0
  93. package/templates/marketplace/apps/fe/src/components/shared/error/ErrorText.tsx +20 -0
  94. package/templates/marketplace/apps/fe/src/components/shared/error/NotFound.tsx +36 -0
  95. package/templates/marketplace/apps/fe/src/components/shared/forms/RequiredLabel.tsx +21 -0
  96. package/templates/marketplace/apps/fe/src/components/shared/forms/RowInputWrapper.tsx +50 -0
  97. package/templates/marketplace/apps/fe/src/components/shared/head/AppHead.tsx +32 -0
  98. package/templates/marketplace/apps/fe/src/components/shared/head/DefaultAppHead.tsx +34 -0
  99. package/templates/marketplace/apps/fe/src/components/shared/layout/LoadingState.tsx +9 -0
  100. package/templates/marketplace/apps/fe/src/components/shared/layout/ThinPageWrapper.tsx +5 -0
  101. package/templates/marketplace/apps/fe/src/components/shared/page/PageHeader.tsx +69 -0
  102. package/templates/marketplace/apps/fe/src/components/shared/ui/Card.tsx +60 -0
  103. package/templates/marketplace/apps/fe/src/components/shared/ui/GoogleLoginButton.tsx +19 -0
  104. package/templates/marketplace/apps/fe/src/components/shared/ui/RequiredLabel.tsx +22 -0
  105. package/templates/marketplace/apps/fe/src/components/shared/ui/TableActions.tsx +22 -0
  106. package/templates/marketplace/apps/fe/src/config/app.config.ts +35 -0
  107. package/templates/marketplace/apps/fe/src/config/i18n.ts +43 -0
  108. package/templates/marketplace/apps/fe/src/config/inits/a11y.ts +14 -0
  109. package/templates/marketplace/apps/fe/src/config/inits/logger.ts +7 -0
  110. package/templates/marketplace/apps/fe/src/config/inits/sentry.ts +21 -0
  111. package/templates/marketplace/apps/fe/src/config/jwt.config.ts +2 -0
  112. package/templates/marketplace/apps/fe/src/config/query.config.ts +20 -0
  113. package/templates/marketplace/apps/fe/src/hooks/useAuth.ts +5 -0
  114. package/templates/marketplace/apps/fe/src/main.tsx +52 -0
  115. package/templates/marketplace/apps/fe/src/pages/(guest)/login.tsx +23 -0
  116. package/templates/marketplace/apps/fe/src/pages/(guest)/register.tsx +23 -0
  117. package/templates/marketplace/apps/fe/src/pages/(guest)/route.tsx +18 -0
  118. package/templates/marketplace/apps/fe/src/pages/(private)/cart.tsx +22 -0
  119. package/templates/marketplace/apps/fe/src/pages/(private)/checkout.tsx +22 -0
  120. package/templates/marketplace/apps/fe/src/pages/(private)/index.tsx +22 -0
  121. package/templates/marketplace/apps/fe/src/pages/(private)/listings/$id/index.tsx +37 -0
  122. package/templates/marketplace/apps/fe/src/pages/(private)/my-listings.tsx +22 -0
  123. package/templates/marketplace/apps/fe/src/pages/(private)/orders/$id.tsx +40 -0
  124. package/templates/marketplace/apps/fe/src/pages/(private)/orders/index.tsx +22 -0
  125. package/templates/marketplace/apps/fe/src/pages/(private)/profile.tsx +23 -0
  126. package/templates/marketplace/apps/fe/src/pages/(private)/route.tsx +18 -0
  127. package/templates/marketplace/apps/fe/src/pages/(private)/sales.tsx +22 -0
  128. package/templates/marketplace/apps/fe/src/pages/(private)/sell/$id.tsx +44 -0
  129. package/templates/marketplace/apps/fe/src/pages/(private)/sell/index.tsx +19 -0
  130. package/templates/marketplace/apps/fe/src/pages/(private)/watchlist.tsx +22 -0
  131. package/templates/marketplace/apps/fe/src/pages/(public)/auth.tsx +37 -0
  132. package/templates/marketplace/apps/fe/src/pages/(public)/route.tsx +9 -0
  133. package/templates/marketplace/apps/fe/src/pages/__root.tsx +164 -0
  134. package/templates/marketplace/apps/fe/src/providers/AppErrorBoundary.tsx +10 -0
  135. package/templates/marketplace/apps/fe/src/providers/OpenApiRuntimeProvider.tsx +31 -0
  136. package/templates/marketplace/apps/fe/src/providers/index.tsx +44 -0
  137. package/templates/marketplace/apps/fe/src/providers/jwt.provider.tsx +95 -0
  138. package/templates/marketplace/apps/fe/src/routeTree.gen.ts +435 -0
  139. package/templates/marketplace/apps/fe/src/styles/base.css +103 -0
  140. package/templates/marketplace/apps/fe/src/styles/fonts/fonts.tsx +10 -0
  141. package/templates/marketplace/apps/fe/src/styles/fonts/general-sans.css +31 -0
  142. package/templates/marketplace/apps/fe/src/styles/globals.css +28 -0
  143. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/button.override.ts +536 -0
  144. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/checkbox.override.ts +71 -0
  145. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/input.override.ts +252 -0
  146. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/label.override.ts +91 -0
  147. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/modal.override.ts +57 -0
  148. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/radio.override.ts +46 -0
  149. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/table.override.ts +104 -0
  150. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/tag.override.ts +66 -0
  151. package/templates/marketplace/apps/fe/src/styles/overrides/defaults/typography.override.ts +115 -0
  152. package/templates/marketplace/apps/fe/src/styles/overrides/outline.clsx.ts +10 -0
  153. package/templates/marketplace/apps/fe/src/styles/overrides/uiOverrides.override.ts +60 -0
  154. package/templates/marketplace/apps/fe/src/styles/theme.css +2177 -0
  155. package/templates/marketplace/apps/fe/src/types/i18next.d.ts +12 -0
  156. package/templates/marketplace/apps/fe/src/types/table.d.ts +17 -0
  157. package/templates/marketplace/apps/fe/src/types/ui.d.ts +26 -0
  158. package/templates/marketplace/apps/fe/src/types/vite-env.d.ts +20 -0
  159. package/templates/marketplace/apps/fe/src/utils/date.utils.ts +17 -0
  160. package/templates/marketplace/apps/fe/src/utils/image-fallback.ts +9 -0
  161. package/templates/marketplace/apps/fe/src/utils/listing-form.test.ts +69 -0
  162. package/templates/marketplace/apps/fe/src/utils/listing-form.ts +77 -0
  163. package/templates/marketplace/apps/fe/src/utils/listing-submit.ts +29 -0
  164. package/templates/marketplace/apps/fe/src/utils/number.utils.ts +12 -0
  165. package/templates/marketplace/apps/fe/src/utils/string.utils.ts +5 -0
  166. package/templates/marketplace/apps/fe/src/vite-env.d.ts +1 -0
  167. package/templates/marketplace/apps/fe/tsconfig.app.json +32 -0
  168. package/templates/marketplace/apps/fe/tsconfig.json +9 -0
  169. package/templates/marketplace/apps/fe/tsconfig.node.json +31 -0
  170. package/templates/marketplace/apps/fe/vite.config.ts +125 -0
  171. package/templates/marketplace/database.ts +154 -0
  172. package/templates/marketplace/openapi.json +2303 -0
  173. package/templates/marketplace/oxfmt.config.js +23 -0
  174. package/templates/marketplace/package.json +18 -0
  175. package/templates/marketplace/rulesync.jsonc +18 -0
  176. package/templates/marketplace/tsconfig.json +11 -0
  177. package/templates/space/api/_lib.ts +9 -2
  178. package/templates/space/package.json +1 -1
@@ -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,435 @@
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 guestRouteRouteImport } from './pages/(guest)/route'
13
+ import { Route as privateRouteRouteImport } from './pages/(private)/route'
14
+ import { Route as publicRouteRouteImport } from './pages/(public)/route'
15
+ import { Route as guestLoginRouteImport } from './pages/(guest)/login'
16
+ import { Route as guestRegisterRouteImport } from './pages/(guest)/register'
17
+ import { Route as privateIndexRouteImport } from './pages/(private)/index'
18
+ import { Route as privateCartRouteImport } from './pages/(private)/cart'
19
+ import { Route as privateCheckoutRouteImport } from './pages/(private)/checkout'
20
+ import { Route as privateMyListingsRouteImport } from './pages/(private)/my-listings'
21
+ import { Route as privateProfileRouteImport } from './pages/(private)/profile'
22
+ import { Route as privateSalesRouteImport } from './pages/(private)/sales'
23
+ import { Route as privateWatchlistRouteImport } from './pages/(private)/watchlist'
24
+ import { Route as publicAuthRouteImport } from './pages/(public)/auth'
25
+ import { Route as privateOrdersIndexRouteImport } from './pages/(private)/orders/index'
26
+ import { Route as privateOrdersIdRouteImport } from './pages/(private)/orders/$id'
27
+ import { Route as privateSellIndexRouteImport } from './pages/(private)/sell/index'
28
+ import { Route as privateSellIdRouteImport } from './pages/(private)/sell/$id'
29
+ import { Route as privateListingsIdIndexRouteImport } from './pages/(private)/listings/$id/index'
30
+
31
+ const guestRouteRoute = guestRouteRouteImport.update({
32
+ id: '/(guest)',
33
+ getParentRoute: () => rootRouteImport,
34
+ } as any)
35
+ const privateRouteRoute = privateRouteRouteImport.update({
36
+ id: '/(private)',
37
+ getParentRoute: () => rootRouteImport,
38
+ } as any)
39
+ const publicRouteRoute = publicRouteRouteImport.update({
40
+ id: '/(public)',
41
+ getParentRoute: () => rootRouteImport,
42
+ } as any)
43
+ const guestLoginRoute = guestLoginRouteImport.update({
44
+ id: '/login',
45
+ path: '/login',
46
+ getParentRoute: () => guestRouteRoute,
47
+ } as any)
48
+ const guestRegisterRoute = guestRegisterRouteImport.update({
49
+ id: '/register',
50
+ path: '/register',
51
+ getParentRoute: () => guestRouteRoute,
52
+ } as any)
53
+ const privateIndexRoute = privateIndexRouteImport.update({
54
+ id: '/',
55
+ path: '/',
56
+ getParentRoute: () => privateRouteRoute,
57
+ } as any)
58
+ const privateCartRoute = privateCartRouteImport.update({
59
+ id: '/cart',
60
+ path: '/cart',
61
+ getParentRoute: () => privateRouteRoute,
62
+ } as any)
63
+ const privateCheckoutRoute = privateCheckoutRouteImport.update({
64
+ id: '/checkout',
65
+ path: '/checkout',
66
+ getParentRoute: () => privateRouteRoute,
67
+ } as any)
68
+ const privateMyListingsRoute = privateMyListingsRouteImport.update({
69
+ id: '/my-listings',
70
+ path: '/my-listings',
71
+ getParentRoute: () => privateRouteRoute,
72
+ } as any)
73
+ const privateProfileRoute = privateProfileRouteImport.update({
74
+ id: '/profile',
75
+ path: '/profile',
76
+ getParentRoute: () => privateRouteRoute,
77
+ } as any)
78
+ const privateSalesRoute = privateSalesRouteImport.update({
79
+ id: '/sales',
80
+ path: '/sales',
81
+ getParentRoute: () => privateRouteRoute,
82
+ } as any)
83
+ const privateWatchlistRoute = privateWatchlistRouteImport.update({
84
+ id: '/watchlist',
85
+ path: '/watchlist',
86
+ getParentRoute: () => privateRouteRoute,
87
+ } as any)
88
+ const publicAuthRoute = publicAuthRouteImport.update({
89
+ id: '/auth',
90
+ path: '/auth',
91
+ getParentRoute: () => publicRouteRoute,
92
+ } as any)
93
+ const privateOrdersIndexRoute = privateOrdersIndexRouteImport.update({
94
+ id: '/orders/',
95
+ path: '/orders/',
96
+ getParentRoute: () => privateRouteRoute,
97
+ } as any)
98
+ const privateOrdersIdRoute = privateOrdersIdRouteImport.update({
99
+ id: '/orders/$id',
100
+ path: '/orders/$id',
101
+ getParentRoute: () => privateRouteRoute,
102
+ } as any)
103
+ const privateSellIndexRoute = privateSellIndexRouteImport.update({
104
+ id: '/sell/',
105
+ path: '/sell/',
106
+ getParentRoute: () => privateRouteRoute,
107
+ } as any)
108
+ const privateSellIdRoute = privateSellIdRouteImport.update({
109
+ id: '/sell/$id',
110
+ path: '/sell/$id',
111
+ getParentRoute: () => privateRouteRoute,
112
+ } as any)
113
+ const privateListingsIdIndexRoute = privateListingsIdIndexRouteImport.update({
114
+ id: '/listings/$id/',
115
+ path: '/listings/$id/',
116
+ getParentRoute: () => privateRouteRoute,
117
+ } as any)
118
+
119
+ export interface FileRoutesByFullPath {
120
+ '/login': typeof guestLoginRoute
121
+ '/register': typeof guestRegisterRoute
122
+ '/cart': typeof privateCartRoute
123
+ '/checkout': typeof privateCheckoutRoute
124
+ '/my-listings': typeof privateMyListingsRoute
125
+ '/profile': typeof privateProfileRoute
126
+ '/sales': typeof privateSalesRoute
127
+ '/watchlist': typeof privateWatchlistRoute
128
+ '/auth': typeof publicAuthRoute
129
+ '/': typeof privateIndexRoute
130
+ '/orders/$id': typeof privateOrdersIdRoute
131
+ '/sell/$id': typeof privateSellIdRoute
132
+ '/orders/': typeof privateOrdersIndexRoute
133
+ '/sell/': typeof privateSellIndexRoute
134
+ '/listings/$id/': typeof privateListingsIdIndexRoute
135
+ }
136
+ export interface FileRoutesByTo {
137
+ '/login': typeof guestLoginRoute
138
+ '/register': typeof guestRegisterRoute
139
+ '/cart': typeof privateCartRoute
140
+ '/checkout': typeof privateCheckoutRoute
141
+ '/my-listings': typeof privateMyListingsRoute
142
+ '/profile': typeof privateProfileRoute
143
+ '/sales': typeof privateSalesRoute
144
+ '/watchlist': typeof privateWatchlistRoute
145
+ '/auth': typeof publicAuthRoute
146
+ '/': typeof privateIndexRoute
147
+ '/orders/$id': typeof privateOrdersIdRoute
148
+ '/sell/$id': typeof privateSellIdRoute
149
+ '/orders': typeof privateOrdersIndexRoute
150
+ '/sell': typeof privateSellIndexRoute
151
+ '/listings/$id': typeof privateListingsIdIndexRoute
152
+ }
153
+ export interface FileRoutesById {
154
+ __root__: typeof rootRouteImport
155
+ '/(guest)': typeof guestRouteRouteWithChildren
156
+ '/(private)': typeof privateRouteRouteWithChildren
157
+ '/(public)': typeof publicRouteRouteWithChildren
158
+ '/(guest)/login': typeof guestLoginRoute
159
+ '/(guest)/register': typeof guestRegisterRoute
160
+ '/(private)/cart': typeof privateCartRoute
161
+ '/(private)/checkout': typeof privateCheckoutRoute
162
+ '/(private)/my-listings': typeof privateMyListingsRoute
163
+ '/(private)/profile': typeof privateProfileRoute
164
+ '/(private)/sales': typeof privateSalesRoute
165
+ '/(private)/watchlist': typeof privateWatchlistRoute
166
+ '/(public)/auth': typeof publicAuthRoute
167
+ '/(private)/': typeof privateIndexRoute
168
+ '/(private)/orders/$id': typeof privateOrdersIdRoute
169
+ '/(private)/sell/$id': typeof privateSellIdRoute
170
+ '/(private)/orders/': typeof privateOrdersIndexRoute
171
+ '/(private)/sell/': typeof privateSellIndexRoute
172
+ '/(private)/listings/$id/': typeof privateListingsIdIndexRoute
173
+ }
174
+ export interface FileRouteTypes {
175
+ fileRoutesByFullPath: FileRoutesByFullPath
176
+ fullPaths:
177
+ | '/login'
178
+ | '/register'
179
+ | '/cart'
180
+ | '/checkout'
181
+ | '/my-listings'
182
+ | '/profile'
183
+ | '/sales'
184
+ | '/watchlist'
185
+ | '/auth'
186
+ | '/'
187
+ | '/orders/$id'
188
+ | '/sell/$id'
189
+ | '/orders/'
190
+ | '/sell/'
191
+ | '/listings/$id/'
192
+ fileRoutesByTo: FileRoutesByTo
193
+ to:
194
+ | '/login'
195
+ | '/register'
196
+ | '/cart'
197
+ | '/checkout'
198
+ | '/my-listings'
199
+ | '/profile'
200
+ | '/sales'
201
+ | '/watchlist'
202
+ | '/auth'
203
+ | '/'
204
+ | '/orders/$id'
205
+ | '/sell/$id'
206
+ | '/orders'
207
+ | '/sell'
208
+ | '/listings/$id'
209
+ id:
210
+ | '__root__'
211
+ | '/(guest)'
212
+ | '/(private)'
213
+ | '/(public)'
214
+ | '/(guest)/login'
215
+ | '/(guest)/register'
216
+ | '/(private)/cart'
217
+ | '/(private)/checkout'
218
+ | '/(private)/my-listings'
219
+ | '/(private)/profile'
220
+ | '/(private)/sales'
221
+ | '/(private)/watchlist'
222
+ | '/(public)/auth'
223
+ | '/(private)/'
224
+ | '/(private)/orders/$id'
225
+ | '/(private)/sell/$id'
226
+ | '/(private)/orders/'
227
+ | '/(private)/sell/'
228
+ | '/(private)/listings/$id/'
229
+ fileRoutesById: FileRoutesById
230
+ }
231
+ export interface RootRouteChildren {
232
+ guestRouteRoute: typeof guestRouteRouteWithChildren
233
+ privateRouteRoute: typeof privateRouteRouteWithChildren
234
+ publicRouteRoute: typeof publicRouteRouteWithChildren
235
+ }
236
+
237
+ declare module '@tanstack/react-router' {
238
+ interface FileRoutesByPath {
239
+ '/(guest)': {
240
+ id: '/(guest)'
241
+ path: ''
242
+ fullPath: ''
243
+ preLoaderRoute: typeof guestRouteRouteImport
244
+ parentRoute: typeof rootRouteImport
245
+ }
246
+ '/(private)': {
247
+ id: '/(private)'
248
+ path: ''
249
+ fullPath: ''
250
+ preLoaderRoute: typeof privateRouteRouteImport
251
+ parentRoute: typeof rootRouteImport
252
+ }
253
+ '/(public)': {
254
+ id: '/(public)'
255
+ path: ''
256
+ fullPath: ''
257
+ preLoaderRoute: typeof publicRouteRouteImport
258
+ parentRoute: typeof rootRouteImport
259
+ }
260
+ '/(guest)/login': {
261
+ id: '/(guest)/login'
262
+ path: '/login'
263
+ fullPath: '/login'
264
+ preLoaderRoute: typeof guestLoginRouteImport
265
+ parentRoute: typeof guestRouteRoute
266
+ }
267
+ '/(guest)/register': {
268
+ id: '/(guest)/register'
269
+ path: '/register'
270
+ fullPath: '/register'
271
+ preLoaderRoute: typeof guestRegisterRouteImport
272
+ parentRoute: typeof guestRouteRoute
273
+ }
274
+ '/(private)/': {
275
+ id: '/(private)/'
276
+ path: '/'
277
+ fullPath: '/'
278
+ preLoaderRoute: typeof privateIndexRouteImport
279
+ parentRoute: typeof privateRouteRoute
280
+ }
281
+ '/(private)/cart': {
282
+ id: '/(private)/cart'
283
+ path: '/cart'
284
+ fullPath: '/cart'
285
+ preLoaderRoute: typeof privateCartRouteImport
286
+ parentRoute: typeof privateRouteRoute
287
+ }
288
+ '/(private)/checkout': {
289
+ id: '/(private)/checkout'
290
+ path: '/checkout'
291
+ fullPath: '/checkout'
292
+ preLoaderRoute: typeof privateCheckoutRouteImport
293
+ parentRoute: typeof privateRouteRoute
294
+ }
295
+ '/(private)/my-listings': {
296
+ id: '/(private)/my-listings'
297
+ path: '/my-listings'
298
+ fullPath: '/my-listings'
299
+ preLoaderRoute: typeof privateMyListingsRouteImport
300
+ parentRoute: typeof privateRouteRoute
301
+ }
302
+ '/(private)/profile': {
303
+ id: '/(private)/profile'
304
+ path: '/profile'
305
+ fullPath: '/profile'
306
+ preLoaderRoute: typeof privateProfileRouteImport
307
+ parentRoute: typeof privateRouteRoute
308
+ }
309
+ '/(private)/sales': {
310
+ id: '/(private)/sales'
311
+ path: '/sales'
312
+ fullPath: '/sales'
313
+ preLoaderRoute: typeof privateSalesRouteImport
314
+ parentRoute: typeof privateRouteRoute
315
+ }
316
+ '/(private)/watchlist': {
317
+ id: '/(private)/watchlist'
318
+ path: '/watchlist'
319
+ fullPath: '/watchlist'
320
+ preLoaderRoute: typeof privateWatchlistRouteImport
321
+ parentRoute: typeof privateRouteRoute
322
+ }
323
+ '/(public)/auth': {
324
+ id: '/(public)/auth'
325
+ path: '/auth'
326
+ fullPath: '/auth'
327
+ preLoaderRoute: typeof publicAuthRouteImport
328
+ parentRoute: typeof publicRouteRoute
329
+ }
330
+ '/(private)/orders/': {
331
+ id: '/(private)/orders/'
332
+ path: '/orders'
333
+ fullPath: '/orders/'
334
+ preLoaderRoute: typeof privateOrdersIndexRouteImport
335
+ parentRoute: typeof privateRouteRoute
336
+ }
337
+ '/(private)/orders/$id': {
338
+ id: '/(private)/orders/$id'
339
+ path: '/orders/$id'
340
+ fullPath: '/orders/$id'
341
+ preLoaderRoute: typeof privateOrdersIdRouteImport
342
+ parentRoute: typeof privateRouteRoute
343
+ }
344
+ '/(private)/sell/': {
345
+ id: '/(private)/sell/'
346
+ path: '/sell'
347
+ fullPath: '/sell/'
348
+ preLoaderRoute: typeof privateSellIndexRouteImport
349
+ parentRoute: typeof privateRouteRoute
350
+ }
351
+ '/(private)/sell/$id': {
352
+ id: '/(private)/sell/$id'
353
+ path: '/sell/$id'
354
+ fullPath: '/sell/$id'
355
+ preLoaderRoute: typeof privateSellIdRouteImport
356
+ parentRoute: typeof privateRouteRoute
357
+ }
358
+ '/(private)/listings/$id/': {
359
+ id: '/(private)/listings/$id/'
360
+ path: '/listings/$id'
361
+ fullPath: '/listings/$id/'
362
+ preLoaderRoute: typeof privateListingsIdIndexRouteImport
363
+ parentRoute: typeof privateRouteRoute
364
+ }
365
+ }
366
+ }
367
+
368
+ interface guestRouteRouteChildren {
369
+ guestLoginRoute: typeof guestLoginRoute
370
+ guestRegisterRoute: typeof guestRegisterRoute
371
+ }
372
+
373
+ const guestRouteRouteChildren: guestRouteRouteChildren = {
374
+ guestLoginRoute: guestLoginRoute,
375
+ guestRegisterRoute: guestRegisterRoute,
376
+ }
377
+
378
+ const guestRouteRouteWithChildren = guestRouteRoute._addFileChildren(
379
+ guestRouteRouteChildren,
380
+ )
381
+
382
+ interface privateRouteRouteChildren {
383
+ privateCartRoute: typeof privateCartRoute
384
+ privateCheckoutRoute: typeof privateCheckoutRoute
385
+ privateMyListingsRoute: typeof privateMyListingsRoute
386
+ privateProfileRoute: typeof privateProfileRoute
387
+ privateSalesRoute: typeof privateSalesRoute
388
+ privateWatchlistRoute: typeof privateWatchlistRoute
389
+ privateIndexRoute: typeof privateIndexRoute
390
+ privateOrdersIdRoute: typeof privateOrdersIdRoute
391
+ privateSellIdRoute: typeof privateSellIdRoute
392
+ privateOrdersIndexRoute: typeof privateOrdersIndexRoute
393
+ privateSellIndexRoute: typeof privateSellIndexRoute
394
+ privateListingsIdIndexRoute: typeof privateListingsIdIndexRoute
395
+ }
396
+
397
+ const privateRouteRouteChildren: privateRouteRouteChildren = {
398
+ privateCartRoute: privateCartRoute,
399
+ privateCheckoutRoute: privateCheckoutRoute,
400
+ privateMyListingsRoute: privateMyListingsRoute,
401
+ privateProfileRoute: privateProfileRoute,
402
+ privateSalesRoute: privateSalesRoute,
403
+ privateWatchlistRoute: privateWatchlistRoute,
404
+ privateIndexRoute: privateIndexRoute,
405
+ privateOrdersIdRoute: privateOrdersIdRoute,
406
+ privateSellIdRoute: privateSellIdRoute,
407
+ privateOrdersIndexRoute: privateOrdersIndexRoute,
408
+ privateSellIndexRoute: privateSellIndexRoute,
409
+ privateListingsIdIndexRoute: privateListingsIdIndexRoute,
410
+ }
411
+
412
+ const privateRouteRouteWithChildren = privateRouteRoute._addFileChildren(
413
+ privateRouteRouteChildren,
414
+ )
415
+
416
+ interface publicRouteRouteChildren {
417
+ publicAuthRoute: typeof publicAuthRoute
418
+ }
419
+
420
+ const publicRouteRouteChildren: publicRouteRouteChildren = {
421
+ publicAuthRoute: publicAuthRoute,
422
+ }
423
+
424
+ const publicRouteRouteWithChildren = publicRouteRoute._addFileChildren(
425
+ publicRouteRouteChildren,
426
+ )
427
+
428
+ const rootRouteChildren: RootRouteChildren = {
429
+ guestRouteRoute: guestRouteRouteWithChildren,
430
+ privateRouteRoute: privateRouteRouteWithChildren,
431
+ publicRouteRoute: publicRouteRouteWithChildren,
432
+ }
433
+ export const routeTree = rootRouteImport
434
+ ._addFileChildren(rootRouteChildren)
435
+ ._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,10 @@
1
+ export const globalFontClass = "font-primary";
2
+
3
+ export const Fonts = () => (
4
+ <style>{`
5
+ :root {
6
+ --font-inter-base: "General Sans";
7
+ --font-geist-base: "Geist Variable";
8
+ }
9
+ `}</style>
10
+ );
@@ -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
+ }