robodev 0.12.0 → 0.14.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/emit-starter.test.ts +14 -0
- package/src/index.ts +54 -45
- package/src/parse-create-args.test.ts +26 -0
- package/src/parse-create-args.ts +63 -0
- package/templates/auth-chat/.config/local.spa.template.yml +27 -0
- package/templates/auth-chat/.oxlint-base.json +29 -0
- package/templates/auth-chat/.oxlintrc.json +78 -0
- package/templates/auth-chat/.rulesync/rules/frontend-api-boundary.md +36 -0
- package/templates/auth-chat/.rulesync/rules/frontend-component-structure.md +38 -0
- package/templates/auth-chat/.rulesync/rules/frontend-forms.md +32 -0
- package/templates/auth-chat/.rulesync/rules/frontend-notifications.md +24 -0
- package/templates/auth-chat/.rulesync/rules/frontend-povio-components.md +42 -0
- package/templates/auth-chat/.rulesync/rules/frontend-povio-ui.md +45 -0
- package/templates/auth-chat/.rulesync/rules/frontend-query-autocomplete.md +29 -0
- package/templates/auth-chat/.rulesync/rules/frontend-tables-and-lists.md +34 -0
- package/templates/auth-chat/.rulesync/rules/frontend-translations.md +26 -0
- package/templates/auth-chat/.rulesync/rules/project-overview.md +32 -0
- package/templates/auth-chat/.rulesync/rules/robodev-api.md +30 -0
- package/templates/auth-chat/.rulesync/rules/robodev-auth.md +40 -0
- package/templates/auth-chat/.rulesync/rules/robodev-database.md +22 -0
- package/templates/auth-chat/.rulesync/rules/role-based-app-structure.md +36 -0
- package/templates/auth-chat/.rulesync/skills/media-feature/SKILL.md +21 -0
- package/templates/auth-chat/.rulesync/skills/povio-ui-styling/SKILL.md +208 -0
- package/templates/auth-chat/.rulesync/skills/povio-ui-styling/agents/openai.yaml +4 -0
- package/templates/auth-chat/.rulesync/skills/robodev-api-route/SKILL.md +13 -0
- package/templates/auth-chat/.rulesync/skills/robodev-table/SKILL.md +12 -0
- package/templates/auth-chat/README.md +26 -7
- package/templates/auth-chat/api/invite.ts +43 -0
- package/templates/auth-chat/apps/fe/index.html +24 -0
- package/templates/auth-chat/apps/fe/openapi-codegen.config.ts +37 -0
- package/templates/auth-chat/apps/fe/package.json +82 -0
- package/templates/auth-chat/apps/fe/public/apple-touch-icon.png +0 -0
- package/templates/auth-chat/apps/fe/public/favicon-96x96.png +0 -0
- package/templates/auth-chat/apps/fe/public/favicon.ico +0 -0
- package/templates/auth-chat/apps/fe/public/favicon.svg +3 -0
- package/templates/auth-chat/apps/fe/public/site.webmanifest +21 -0
- package/templates/auth-chat/apps/fe/public/web-app-manifest-192x192.png +0 -0
- package/templates/auth-chat/apps/fe/public/web-app-manifest-512x512.png +0 -0
- package/templates/auth-chat/apps/fe/src/assets/fonts/GeneralSans-Bold.otf +0 -0
- package/templates/auth-chat/apps/fe/src/assets/fonts/GeneralSans-Medium.otf +0 -0
- package/templates/auth-chat/apps/fe/src/assets/fonts/GeneralSans-Regular.otf +0 -0
- package/templates/auth-chat/apps/fe/src/assets/fonts/GeneralSans-Semibold.otf +0 -0
- package/templates/auth-chat/apps/fe/src/assets/locales/en/translation.json +202 -0
- package/templates/auth-chat/apps/fe/src/assets/locales/sl/translation.json +202 -0
- package/templates/auth-chat/apps/fe/src/clients/app-rest-client.ts +15 -0
- package/templates/auth-chat/apps/fe/src/clients/auth-token-store.ts +101 -0
- package/templates/auth-chat/apps/fe/src/clients/rest/app-error-handler.ts +31 -0
- package/templates/auth-chat/apps/fe/src/clients/rest/interceptors/authorization-header.interceptor.ts +15 -0
- package/templates/auth-chat/apps/fe/src/clients/rest/interceptors/refresh-token.interceptor.ts +37 -0
- package/templates/auth-chat/apps/fe/src/clients/rest/interceptors/response.interceptor.ts +17 -0
- package/templates/auth-chat/apps/fe/src/components/404.tsx +18 -0
- package/templates/auth-chat/apps/fe/src/components/features/auth/AuthBrandPanel.tsx +60 -0
- package/templates/auth-chat/apps/fe/src/components/features/auth/AuthLayout.tsx +23 -0
- package/templates/auth-chat/apps/fe/src/components/features/auth/LoginPage.tsx +111 -0
- package/templates/auth-chat/apps/fe/src/components/features/auth/RegisterPage.tsx +143 -0
- package/templates/auth-chat/apps/fe/src/components/features/chat/ChatPage.tsx +105 -0
- package/templates/auth-chat/apps/fe/src/components/features/chat/InviteForm.tsx +84 -0
- package/templates/auth-chat/apps/fe/src/components/features/profile/ProfilePage.tsx +96 -0
- package/templates/auth-chat/apps/fe/src/components/googleAnalytics/GoogleAnalytics.tsx +35 -0
- package/templates/auth-chat/apps/fe/src/components/layout/AppLayout.tsx +19 -0
- package/templates/auth-chat/apps/fe/src/components/layout/app-header/AppHeader.tsx +91 -0
- package/templates/auth-chat/apps/fe/src/components/layout/app-header/MobileNavigation.tsx +51 -0
- package/templates/auth-chat/apps/fe/src/components/layout/app-header/NavLink.tsx +29 -0
- package/templates/auth-chat/apps/fe/src/components/shared/branding/BrandLogo.tsx +13 -0
- package/templates/auth-chat/apps/fe/src/components/shared/error/ErrorFallback.tsx +43 -0
- package/templates/auth-chat/apps/fe/src/components/shared/error/ErrorText.tsx +20 -0
- package/templates/auth-chat/apps/fe/src/components/shared/error/NotFound.tsx +36 -0
- package/templates/auth-chat/apps/fe/src/components/shared/forms/RequiredLabel.tsx +21 -0
- package/templates/auth-chat/apps/fe/src/components/shared/forms/RowInputWrapper.tsx +50 -0
- package/templates/auth-chat/apps/fe/src/components/shared/head/AppHead.tsx +32 -0
- package/templates/auth-chat/apps/fe/src/components/shared/head/DefaultAppHead.tsx +34 -0
- package/templates/auth-chat/apps/fe/src/components/shared/layout/LoadingState.tsx +9 -0
- package/templates/auth-chat/apps/fe/src/components/shared/layout/ThinPageWrapper.tsx +5 -0
- package/templates/auth-chat/apps/fe/src/components/shared/page/PageHeader.tsx +69 -0
- package/templates/auth-chat/apps/fe/src/components/shared/ui/Card.tsx +60 -0
- package/templates/auth-chat/apps/fe/src/components/shared/ui/GoogleLoginButton.tsx +19 -0
- package/templates/auth-chat/apps/fe/src/components/shared/ui/RequiredLabel.tsx +22 -0
- package/templates/auth-chat/apps/fe/src/components/shared/ui/TableActions.tsx +22 -0
- package/templates/auth-chat/apps/fe/src/config/app.config.ts +35 -0
- package/templates/auth-chat/apps/fe/src/config/i18n.ts +43 -0
- package/templates/auth-chat/apps/fe/src/config/inits/a11y.ts +14 -0
- package/templates/auth-chat/apps/fe/src/config/inits/logger.ts +7 -0
- package/templates/auth-chat/apps/fe/src/config/inits/sentry.ts +21 -0
- package/templates/auth-chat/apps/fe/src/config/jwt.config.ts +2 -0
- package/templates/auth-chat/apps/fe/src/config/query.config.ts +20 -0
- package/templates/auth-chat/apps/fe/src/hooks/useAuth.ts +5 -0
- package/templates/auth-chat/apps/fe/src/main.tsx +52 -0
- package/templates/auth-chat/apps/fe/src/pages/(guest)/login.tsx +23 -0
- package/templates/auth-chat/apps/fe/src/pages/(guest)/register.tsx +23 -0
- package/templates/auth-chat/apps/fe/src/pages/(guest)/route.tsx +18 -0
- package/templates/auth-chat/apps/fe/src/pages/(private)/index.tsx +23 -0
- package/templates/auth-chat/apps/fe/src/pages/(private)/profile.tsx +23 -0
- package/templates/auth-chat/apps/fe/src/pages/(private)/route.tsx +18 -0
- package/templates/auth-chat/apps/fe/src/pages/(public)/auth.tsx +37 -0
- package/templates/auth-chat/apps/fe/src/pages/(public)/route.tsx +9 -0
- package/templates/auth-chat/apps/fe/src/pages/__root.tsx +164 -0
- package/templates/auth-chat/apps/fe/src/providers/AppErrorBoundary.tsx +10 -0
- package/templates/auth-chat/apps/fe/src/providers/OpenApiRuntimeProvider.tsx +31 -0
- package/templates/auth-chat/apps/fe/src/providers/index.tsx +44 -0
- package/templates/auth-chat/apps/fe/src/providers/jwt.provider.tsx +95 -0
- package/templates/auth-chat/apps/fe/src/routeTree.gen.ts +225 -0
- package/templates/auth-chat/apps/fe/src/styles/base.css +103 -0
- package/templates/auth-chat/apps/fe/src/styles/fonts/fonts.tsx +10 -0
- package/templates/auth-chat/apps/fe/src/styles/fonts/general-sans.css +31 -0
- package/templates/auth-chat/apps/fe/src/styles/globals.css +28 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/button.override.ts +536 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/checkbox.override.ts +71 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/input.override.ts +252 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/label.override.ts +91 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/modal.override.ts +57 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/radio.override.ts +46 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/table.override.ts +104 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/tag.override.ts +66 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/defaults/typography.override.ts +115 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/outline.clsx.ts +10 -0
- package/templates/auth-chat/apps/fe/src/styles/overrides/uiOverrides.override.ts +60 -0
- package/templates/auth-chat/apps/fe/src/styles/theme.css +2177 -0
- package/templates/auth-chat/apps/fe/src/types/i18next.d.ts +12 -0
- package/templates/auth-chat/apps/fe/src/types/table.d.ts +17 -0
- package/templates/auth-chat/apps/fe/src/types/ui.d.ts +26 -0
- package/templates/auth-chat/apps/fe/src/types/vite-env.d.ts +20 -0
- package/templates/auth-chat/apps/fe/src/utils/date.utils.ts +17 -0
- package/templates/auth-chat/apps/fe/src/utils/number.utils.ts +12 -0
- package/templates/auth-chat/apps/fe/src/utils/string.utils.ts +5 -0
- package/templates/auth-chat/apps/fe/src/vite-env.d.ts +1 -0
- package/templates/auth-chat/apps/fe/tsconfig.app.json +32 -0
- package/templates/auth-chat/apps/fe/tsconfig.json +9 -0
- package/templates/auth-chat/apps/fe/tsconfig.node.json +31 -0
- package/templates/auth-chat/apps/fe/vite.config.ts +94 -0
- package/templates/auth-chat/openapi.json +1016 -0
- package/templates/auth-chat/oxfmt.config.js +23 -0
- package/templates/auth-chat/package.json +6 -13
- package/templates/auth-chat/rulesync.jsonc +18 -0
- package/templates/auth-chat/tsconfig.json +2 -4
- package/templates/backend/README.md +2 -2
- package/templates/backend/api/_lib.ts +359 -0
- package/templates/backend/api/aliens/labels.ts +19 -0
- package/templates/backend/api/files/presigned-url.ts +48 -0
- package/templates/backend/api/files/upload.ts +29 -0
- package/templates/backend/api/planets/[id]/like.ts +36 -0
- package/templates/backend/api/planets/[id].ts +56 -13
- package/templates/backend/api/planets/paginate.ts +36 -0
- package/templates/backend/api/planets.ts +52 -44
- package/templates/backend/database.ts +33 -13
- package/templates/backend/package.json +1 -1
- package/templates/catalog.json +2 -2
- package/templates/empty/package.json +1 -1
- package/templates/space/package.json +1 -1
- package/templates/auth-chat/index.html +0 -201
- package/templates/auth-chat/src/main.tsx +0 -282
- package/templates/auth-chat/vite.config.ts +0 -7
- package/templates/backend/api/health.ts +0 -7
- package/templates/backend/api/launch.ts +0 -29
- package/templates/backend/api/me.ts +0 -14
- package/templates/backend/api/motto.ts +0 -9
- package/templates/backend/api/rockets.ts +0 -43
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* oxlint-disable import/no-nodejs-modules */
|
|
2
|
+
import type { OpenAPICodegenConfig } from "@povio/openapi-codegen-cli";
|
|
3
|
+
import { resolveConfigSync } from "@povio/resolve-config";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
|
|
6
|
+
const COMPACT_OPENAPI_INPUT = "../../openapi.json";
|
|
7
|
+
const repoRoot = resolve(process.cwd(), "../..");
|
|
8
|
+
const env = resolveConfigSync({ cwd: repoRoot, module: "spa", target: "resolved" }) as Record<
|
|
9
|
+
string,
|
|
10
|
+
string | undefined
|
|
11
|
+
>;
|
|
12
|
+
|
|
13
|
+
function resolveLiveOpenApiInput(apiUrl = env.VITE_PUBLIC_API_URL) {
|
|
14
|
+
return `${apiUrl?.replace(/\/+$/, "")}/openapi.json`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function resolveOpenApiInput() {
|
|
18
|
+
return process.env.OPENAPI_INPUT || (process.env.OPENAPI_LIVE === "true" ? resolveLiveOpenApiInput() : COMPACT_OPENAPI_INPUT);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const config: OpenAPICodegenConfig = {
|
|
22
|
+
input: resolveOpenApiInput(),
|
|
23
|
+
output: "src/openapi",
|
|
24
|
+
tsPath: "@/openapi",
|
|
25
|
+
restClientImportPath: "@/clients/app-rest-client",
|
|
26
|
+
clearOutput: true,
|
|
27
|
+
excludeRedundantZodSchemas: false,
|
|
28
|
+
checkAcl: false,
|
|
29
|
+
acl: false,
|
|
30
|
+
replaceOptionalWithNullish: true,
|
|
31
|
+
infiniteQueries: true,
|
|
32
|
+
mutationDefaultOnError: true,
|
|
33
|
+
modelsInCommon: true,
|
|
34
|
+
axiosRequestConfig: true,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default config;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fe",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "Auth chat starter frontend",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "bunx --bun vite",
|
|
9
|
+
"build": "bunx --bun vite build",
|
|
10
|
+
"clean": "rimraf dist src/openapi",
|
|
11
|
+
"lint": "oxlint --type-aware . ../../api ../../database.ts --fix",
|
|
12
|
+
"lint:check": "oxlint --type-aware . ../../api ../../database.ts --quiet",
|
|
13
|
+
"format": "oxfmt -c \"../../oxfmt.config.js\" . ../../api ../../database.ts",
|
|
14
|
+
"format:check": "oxfmt -c \"../../oxfmt.config.js\" --check . ../../api ../../database.ts",
|
|
15
|
+
"ts:check": "tsc -b --noEmit",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"check": "bun ts:check && bun lint:check && bun format:check",
|
|
18
|
+
"openapi:gen": "openapi-codegen generate && oxfmt -c \"../../oxfmt.config.js\" ./src/openapi",
|
|
19
|
+
"openapi:check": "openapi-codegen check"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@casl/ability": "^6.8.1",
|
|
23
|
+
"@casl/react": "^5.0.1",
|
|
24
|
+
"@fontsource-variable/geist": "^5.2.8",
|
|
25
|
+
"@fontsource-variable/inter": "^5.2.8",
|
|
26
|
+
"@internationalized/date": "^3.11.0",
|
|
27
|
+
"@povio/openapi-codegen-cli": "3.1.0",
|
|
28
|
+
"@povio/resolve-config": "1.3.0",
|
|
29
|
+
"@povio/ui": "3.4.0-rc.12",
|
|
30
|
+
"@sentry/react": "^10.38.0",
|
|
31
|
+
"@tanstack/devtools-vite": "^0.3.11",
|
|
32
|
+
"@tanstack/react-devtools": "^0.8.1",
|
|
33
|
+
"@tanstack/react-form": "^1.33.2",
|
|
34
|
+
"@tanstack/react-query": "^5.90.21",
|
|
35
|
+
"@tanstack/react-query-devtools": "~5.90.0",
|
|
36
|
+
"@tanstack/react-router": "^1.136.8",
|
|
37
|
+
"@tanstack/react-router-devtools": "^1.136.8",
|
|
38
|
+
"@tanstack/react-table": "^8.21.3",
|
|
39
|
+
"@tanstack/router-core": "^1.136.8",
|
|
40
|
+
"@tanstack/router-plugin": "^1.136.8",
|
|
41
|
+
"axios": "^1.13.2",
|
|
42
|
+
"class-variance-authority": "^0.7.1",
|
|
43
|
+
"clsx": "^2.1.1",
|
|
44
|
+
"i18next": "^25.7.3",
|
|
45
|
+
"loglevel": "^1.9.2",
|
|
46
|
+
"lucide-react": "^1.28.0",
|
|
47
|
+
"luxon": "^3.7.2",
|
|
48
|
+
"react": "19.2.4",
|
|
49
|
+
"react-aria": "^3.46.0",
|
|
50
|
+
"react-aria-components": "^1.15.1",
|
|
51
|
+
"react-dom": "19.2.4",
|
|
52
|
+
"react-i18next": "^16.5.1",
|
|
53
|
+
"web-vitals": "^5.1.0",
|
|
54
|
+
"zod": "^4.4.3",
|
|
55
|
+
"zustand": "^5.0.9"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@axe-core/react": "^4.11.0",
|
|
59
|
+
"@povio/react-scan": "0.0.0",
|
|
60
|
+
"@povio/vite-plugin-react-scan": "0.0.2",
|
|
61
|
+
"@tailwindcss/vite": "^4.2.1",
|
|
62
|
+
"@types/luxon": "^3.7.1",
|
|
63
|
+
"@types/node": "^24.10.9",
|
|
64
|
+
"@types/react": "^19.2.7",
|
|
65
|
+
"@types/react-dom": "^19.2.3",
|
|
66
|
+
"@typescript/native": "npm:typescript@^7.0.2",
|
|
67
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
68
|
+
"babel-plugin-react-compiler": "1.0.0",
|
|
69
|
+
"oxfmt": "^0.45.0",
|
|
70
|
+
"oxlint": "1.60.0",
|
|
71
|
+
"oxlint-tsgolint": "0.21.0",
|
|
72
|
+
"react-icons-sprite": "^1.1.1",
|
|
73
|
+
"rimraf": "^6.1.2",
|
|
74
|
+
"tailwindcss": "^4.2.4",
|
|
75
|
+
"tailwindcss-react-aria-components": "^2.1.0",
|
|
76
|
+
"tsx": "^4.22.1",
|
|
77
|
+
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
78
|
+
"vite": "^8.0.0",
|
|
79
|
+
"vite-plugin-devtools-json": "^1.0.0",
|
|
80
|
+
"vitest": "^3.2.4"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="239.36" height="239.36"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="239.36" height="239.36"><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 239.36 239.36"><defs><style>.cls-1{fill:#3c60ad;}.cls-2{fill:none;}.cls-3{clip-path:url(#clip-path);}.cls-4{mask:url(#mask);}.cls-5{fill:#fff;}</style><clipPath id="clip-path"><rect class="cls-2" width="239.36" height="239.36"></rect></clipPath><mask id="mask" x="0" y="0" width="239.36" height="239.36" maskUnits="userSpaceOnUse"><g id="mask0_21778_2258" data-name="mask0 21778 2258"><path class="cls-1" d="M0,29.92A29.93,29.93,0,0,1,29.92,0H209.44a29.93,29.93,0,0,1,29.92,29.92V209.44a29.93,29.93,0,0,1-29.92,29.92H29.92A29.93,29.93,0,0,1,0,209.44Z"></path></g></mask></defs><g class="cls-3"><g class="cls-4"><path class="cls-5" d="M0,29.92A29.93,29.93,0,0,1,29.92,0H209.44a29.93,29.93,0,0,1,29.92,29.92V209.44a29.93,29.93,0,0,1-29.92,29.92H29.92A29.93,29.93,0,0,1,0,209.44Z"></path><path d="M119.8,49.55c26.68,0,48.41,22.8,48.5,50.63,0,28.18-21.73,51.06-48.5,51.06A46.64,46.64,0,0,1,83.31,133.4v56.54h-12V100.27C71.29,72.35,93,49.55,119.8,49.55Zm0,12.29c-20.15,0-36.49,17.22-36.49,38.43,0,21.46,16.34,39,36.49,39s36.39-17.5,36.48-39C156.28,79.06,139.94,61.84,119.8,61.84Z"></path></g></g></svg></svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
|
|
2
|
+
@media (prefers-color-scheme: dark) { :root { filter: none; } }
|
|
3
|
+
</style></svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Povio",
|
|
3
|
+
"short_name": "Povio",
|
|
4
|
+
"icons": [
|
|
5
|
+
{
|
|
6
|
+
"src": "/web-app-manifest-192x192.png",
|
|
7
|
+
"sizes": "192x192",
|
|
8
|
+
"type": "image/png",
|
|
9
|
+
"purpose": "maskable"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"src": "/web-app-manifest-512x512.png",
|
|
13
|
+
"sizes": "512x512",
|
|
14
|
+
"type": "image/png",
|
|
15
|
+
"purpose": "maskable"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"theme_color": "#ffffff",
|
|
19
|
+
"background_color": "#ffffff",
|
|
20
|
+
"display": "standalone"
|
|
21
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
{
|
|
2
|
+
"appName": "Auth chat",
|
|
3
|
+
"appDescription": "Shared chat room with invite email",
|
|
4
|
+
"shared": {
|
|
5
|
+
"notFound": {
|
|
6
|
+
"head": {
|
|
7
|
+
"title": "Page not found",
|
|
8
|
+
"description": "The page you are looking for doesn't exist."
|
|
9
|
+
},
|
|
10
|
+
"heading": "Page not found",
|
|
11
|
+
"subheading": "The page you are looking for doesn't exist.",
|
|
12
|
+
"homeBtn": "Go to home"
|
|
13
|
+
},
|
|
14
|
+
"errorFallback": {
|
|
15
|
+
"heading": "Something went wrong",
|
|
16
|
+
"subheading": "Error: {{error}}",
|
|
17
|
+
"retryBtn": "Try again"
|
|
18
|
+
},
|
|
19
|
+
"apiErrors": {
|
|
20
|
+
"requestFailed": "Request failed: {{error}}",
|
|
21
|
+
"unknown": "An unknown error occurred."
|
|
22
|
+
},
|
|
23
|
+
"seedData": {
|
|
24
|
+
"actionButton": "Reset seed data",
|
|
25
|
+
"confirmation": {
|
|
26
|
+
"heading": "Reset seed data?",
|
|
27
|
+
"description": "This will reset all local data to the initial seed state.",
|
|
28
|
+
"confirm": "Reset",
|
|
29
|
+
"cancel": "Cancel"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"actions": {
|
|
33
|
+
"back": "Back"
|
|
34
|
+
},
|
|
35
|
+
"fakeMailbox": {
|
|
36
|
+
"title": "Fake mailbox",
|
|
37
|
+
"open": "Open fake mailbox",
|
|
38
|
+
"close": "Close fake mailbox",
|
|
39
|
+
"empty": "No emails yet.",
|
|
40
|
+
"from": "From",
|
|
41
|
+
"to": "To",
|
|
42
|
+
"cc": "Cc",
|
|
43
|
+
"bcc": "Bcc",
|
|
44
|
+
"replyTo": "Reply to",
|
|
45
|
+
"openPopup": "Open popup",
|
|
46
|
+
"popupBlocked": {
|
|
47
|
+
"heading": "Email popup was blocked",
|
|
48
|
+
"description": "Your browser blocked the automatic email window. Allow popups for this site or open this message now.",
|
|
49
|
+
"open": "Open email",
|
|
50
|
+
"cancel": "Keep unread"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"auth": {
|
|
55
|
+
"wrapper": {
|
|
56
|
+
"title": "Administration portal",
|
|
57
|
+
"description": "Tiny",
|
|
58
|
+
"watermark": "© {{year}} Tiny • Developed and maintained by Povio"
|
|
59
|
+
},
|
|
60
|
+
"shared": {
|
|
61
|
+
"errors": {
|
|
62
|
+
"invalidCredentials": "Invalid email or password.",
|
|
63
|
+
"userAlreadyExists": "An account with this email already exists.",
|
|
64
|
+
"identityNotFound": "We could not find this account.",
|
|
65
|
+
"notConfirmed": "This account has not been confirmed yet."
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"login": {
|
|
69
|
+
"head": {
|
|
70
|
+
"title": "Login",
|
|
71
|
+
"description": "Login to your account"
|
|
72
|
+
},
|
|
73
|
+
"form": {
|
|
74
|
+
"title": "Login",
|
|
75
|
+
"email": "Email",
|
|
76
|
+
"emailPlaceholder": "Enter your email",
|
|
77
|
+
"password": "Password",
|
|
78
|
+
"passwordPlaceholder": "Enter your password",
|
|
79
|
+
"submit": "Login",
|
|
80
|
+
"submitLoading": "Logging in...",
|
|
81
|
+
"demoLogin": "Login as demo user",
|
|
82
|
+
"noAccount": "Don't have an account?",
|
|
83
|
+
"registerLink": "Register",
|
|
84
|
+
"loginFailed": "Login failed",
|
|
85
|
+
"resetSeedData": "Reset seed data"
|
|
86
|
+
},
|
|
87
|
+
"confirmations": {
|
|
88
|
+
"resetSeed": {
|
|
89
|
+
"heading": "Reset seed data?",
|
|
90
|
+
"description": "This will reset all local data to the initial seed state.",
|
|
91
|
+
"confirm": "Reset",
|
|
92
|
+
"cancel": "Cancel"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"register": {
|
|
97
|
+
"head": {
|
|
98
|
+
"title": "Register",
|
|
99
|
+
"description": "Create a new account"
|
|
100
|
+
},
|
|
101
|
+
"form": {
|
|
102
|
+
"title": "Register",
|
|
103
|
+
"description": "Create a new account",
|
|
104
|
+
"email": "Email",
|
|
105
|
+
"emailPlaceholder": "Enter your email",
|
|
106
|
+
"name": "Name",
|
|
107
|
+
"namePlaceholder": "Enter your name",
|
|
108
|
+
"password": "Password",
|
|
109
|
+
"passwordPlaceholder": "Enter your password",
|
|
110
|
+
"confirmPassword": "Confirm password",
|
|
111
|
+
"confirmPasswordPlaceholder": "Confirm your password",
|
|
112
|
+
"confirmPasswordRequired": "Confirm password is required",
|
|
113
|
+
"passwordsDoNotMatch": "Passwords do not match",
|
|
114
|
+
"passwordRequirements": "Password must be at least 12 characters long.",
|
|
115
|
+
"submit": "Register",
|
|
116
|
+
"registrationFailed": "Registration failed",
|
|
117
|
+
"hasAccount": "Already have an account?",
|
|
118
|
+
"loginLink": "Login"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"setPassword": {
|
|
122
|
+
"form": {
|
|
123
|
+
"title": "Set your password",
|
|
124
|
+
"welcome": "Welcome, {{firstName}} {{lastName}}. Please set your password to complete your account.",
|
|
125
|
+
"tokenNote": "Enter the invitation token you received by email.",
|
|
126
|
+
"token": "Invitation token",
|
|
127
|
+
"tokenPlaceholder": "Enter your invitation token",
|
|
128
|
+
"tokenChecking": "Checking token...",
|
|
129
|
+
"tokenError": "{{error}}",
|
|
130
|
+
"invalidToken": "Invalid or expired token",
|
|
131
|
+
"email": "Email",
|
|
132
|
+
"password": "Password",
|
|
133
|
+
"passwordPlaceholder": "Enter your password",
|
|
134
|
+
"confirmPassword": "Confirm password",
|
|
135
|
+
"confirmPasswordPlaceholder": "Confirm your password",
|
|
136
|
+
"passwordRequirements": "Password must be at least 8 characters long.",
|
|
137
|
+
"submit": "Set password",
|
|
138
|
+
"setPasswordFailed": "Setting password failed",
|
|
139
|
+
"hasPassword": "Already have a password?",
|
|
140
|
+
"loginLink": "Login"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"layout": {
|
|
145
|
+
"header": {
|
|
146
|
+
"logo": "Tiny",
|
|
147
|
+
"openMenu": "Open menu",
|
|
148
|
+
"closeMenu": "Close menu",
|
|
149
|
+
"nav": {
|
|
150
|
+
"home": "Chat"
|
|
151
|
+
},
|
|
152
|
+
"profile": "Profile",
|
|
153
|
+
"logout": "Logout"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"profile": {
|
|
157
|
+
"head": {
|
|
158
|
+
"title": "Profile",
|
|
159
|
+
"description": "Your profile"
|
|
160
|
+
},
|
|
161
|
+
"form": {
|
|
162
|
+
"title": "Profile",
|
|
163
|
+
"description": "Update your profile details",
|
|
164
|
+
"email": "Email",
|
|
165
|
+
"emailPlaceholder": "Enter your email",
|
|
166
|
+
"name": "Name",
|
|
167
|
+
"namePlaceholder": "Enter your name",
|
|
168
|
+
"submit": "Save",
|
|
169
|
+
"submitLoading": "Saving...",
|
|
170
|
+
"notifications": {
|
|
171
|
+
"success": "Profile updated",
|
|
172
|
+
"error": "Failed to update profile"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"chat": {
|
|
177
|
+
"head": {
|
|
178
|
+
"title": "Chat",
|
|
179
|
+
"description": "Shared chat room"
|
|
180
|
+
},
|
|
181
|
+
"title": "Chat",
|
|
182
|
+
"roomTitle": "Room",
|
|
183
|
+
"empty": "No messages yet. Say hello.",
|
|
184
|
+
"composer": {
|
|
185
|
+
"label": "Message",
|
|
186
|
+
"placeholder": "Write a message",
|
|
187
|
+
"submit": "Send",
|
|
188
|
+
"submitLoading": "Sending...",
|
|
189
|
+
"error": "Could not send the message."
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"invite": {
|
|
193
|
+
"title": "Invite",
|
|
194
|
+
"description": "Send an email inviting someone to this chat. They should open the App URL and sign in.",
|
|
195
|
+
"email": "Email",
|
|
196
|
+
"emailPlaceholder": "name@example.com",
|
|
197
|
+
"submit": "Send invite",
|
|
198
|
+
"submitLoading": "Sending...",
|
|
199
|
+
"success": "Invite sent.",
|
|
200
|
+
"error": "Could not send the invite."
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
{
|
|
2
|
+
"appName": "Auth chat",
|
|
3
|
+
"appDescription": "Skupni klepet s povabilom po e-pošti",
|
|
4
|
+
"shared": {
|
|
5
|
+
"notFound": {
|
|
6
|
+
"head": {
|
|
7
|
+
"title": "Stran ni bila najdena",
|
|
8
|
+
"description": "Stran, ki jo iščete, ne obstaja."
|
|
9
|
+
},
|
|
10
|
+
"heading": "Stran ni bila najdena",
|
|
11
|
+
"subheading": "Stran, ki jo iščete, ne obstaja.",
|
|
12
|
+
"homeBtn": "Na domačo stran"
|
|
13
|
+
},
|
|
14
|
+
"errorFallback": {
|
|
15
|
+
"heading": "Nekaj je šlo narobe",
|
|
16
|
+
"subheading": "Napaka: {{error}}",
|
|
17
|
+
"retryBtn": "Poskusi znova"
|
|
18
|
+
},
|
|
19
|
+
"apiErrors": {
|
|
20
|
+
"requestFailed": "Zahteva ni uspela: {{error}}",
|
|
21
|
+
"unknown": "Prišlo je do neznane napake."
|
|
22
|
+
},
|
|
23
|
+
"seedData": {
|
|
24
|
+
"actionButton": "Ponastavi začetne podatke",
|
|
25
|
+
"confirmation": {
|
|
26
|
+
"heading": "Ponastaviti začetne podatke?",
|
|
27
|
+
"description": "Vsi lokalni podatki bodo ponastavljeni na začetno stanje.",
|
|
28
|
+
"confirm": "Ponastavi",
|
|
29
|
+
"cancel": "Prekliči"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"actions": {
|
|
33
|
+
"back": "Nazaj"
|
|
34
|
+
},
|
|
35
|
+
"fakeMailbox": {
|
|
36
|
+
"title": "Lažni poštni predal",
|
|
37
|
+
"open": "Odpri lažni poštni predal",
|
|
38
|
+
"close": "Zapri lažni poštni predal",
|
|
39
|
+
"empty": "Ni prejetih e-poštnih sporočil.",
|
|
40
|
+
"from": "Od",
|
|
41
|
+
"to": "Za",
|
|
42
|
+
"cc": "Kp",
|
|
43
|
+
"bcc": "Skp",
|
|
44
|
+
"replyTo": "Odgovori na",
|
|
45
|
+
"openPopup": "Odpri pojavno okno",
|
|
46
|
+
"popupBlocked": {
|
|
47
|
+
"heading": "Pojavno okno e-pošte je blokirano",
|
|
48
|
+
"description": "Brskalnik je blokiral samodejno okno e-pošte. Dovolite pojavna okna za to stran ali sporočilo odprite zdaj.",
|
|
49
|
+
"open": "Odpri e-pošto",
|
|
50
|
+
"cancel": "Pusti neprebrano"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"auth": {
|
|
55
|
+
"wrapper": {
|
|
56
|
+
"title": "Administrativni portal",
|
|
57
|
+
"description": "Tiny",
|
|
58
|
+
"watermark": "© {{year}} Tiny • Razvija in vzdržuje Povio"
|
|
59
|
+
},
|
|
60
|
+
"shared": {
|
|
61
|
+
"errors": {
|
|
62
|
+
"invalidCredentials": "Neveljaven e-poštni naslov ali geslo.",
|
|
63
|
+
"userAlreadyExists": "Račun s tem e-poštnim naslovom že obstaja.",
|
|
64
|
+
"identityNotFound": "Tega računa ni bilo mogoče najti.",
|
|
65
|
+
"notConfirmed": "Ta račun še ni potrjen."
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"login": {
|
|
69
|
+
"head": {
|
|
70
|
+
"title": "Prijava",
|
|
71
|
+
"description": "Prijavite se v svoj račun"
|
|
72
|
+
},
|
|
73
|
+
"form": {
|
|
74
|
+
"title": "Prijava",
|
|
75
|
+
"email": "E-pošta",
|
|
76
|
+
"emailPlaceholder": "Vnesite svoj e-poštni naslov",
|
|
77
|
+
"password": "Geslo",
|
|
78
|
+
"passwordPlaceholder": "Vnesite svoje geslo",
|
|
79
|
+
"submit": "Prijava",
|
|
80
|
+
"submitLoading": "Prijavljanje...",
|
|
81
|
+
"demoLogin": "Prijava kot demo uporabnik",
|
|
82
|
+
"noAccount": "Nimate računa?",
|
|
83
|
+
"registerLink": "Registracija",
|
|
84
|
+
"loginFailed": "Prijava ni uspela",
|
|
85
|
+
"resetSeedData": "Ponastavi začetne podatke"
|
|
86
|
+
},
|
|
87
|
+
"confirmations": {
|
|
88
|
+
"resetSeed": {
|
|
89
|
+
"heading": "Ponastaviti začetne podatke?",
|
|
90
|
+
"description": "Vsi lokalni podatki bodo ponastavljeni na začetno stanje.",
|
|
91
|
+
"confirm": "Ponastavi",
|
|
92
|
+
"cancel": "Prekliči"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"register": {
|
|
97
|
+
"head": {
|
|
98
|
+
"title": "Registracija",
|
|
99
|
+
"description": "Ustvarite nov račun"
|
|
100
|
+
},
|
|
101
|
+
"form": {
|
|
102
|
+
"title": "Registracija",
|
|
103
|
+
"description": "Ustvarite nov račun",
|
|
104
|
+
"email": "E-pošta",
|
|
105
|
+
"emailPlaceholder": "Vnesite svoj e-poštni naslov",
|
|
106
|
+
"name": "Ime",
|
|
107
|
+
"namePlaceholder": "Vnesite svoje ime",
|
|
108
|
+
"password": "Geslo",
|
|
109
|
+
"passwordPlaceholder": "Vnesite svoje geslo",
|
|
110
|
+
"confirmPassword": "Potrdite geslo",
|
|
111
|
+
"confirmPasswordPlaceholder": "Potrdite svoje geslo",
|
|
112
|
+
"confirmPasswordRequired": "Potrditev gesla je obvezna",
|
|
113
|
+
"passwordsDoNotMatch": "Gesli se ne ujemata",
|
|
114
|
+
"passwordRequirements": "Geslo mora vsebovati vsaj 12 znakov.",
|
|
115
|
+
"submit": "Registriraj se",
|
|
116
|
+
"registrationFailed": "Registracija ni uspela",
|
|
117
|
+
"hasAccount": "Že imate račun?",
|
|
118
|
+
"loginLink": "Prijava"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"setPassword": {
|
|
122
|
+
"form": {
|
|
123
|
+
"title": "Nastavite svoje geslo",
|
|
124
|
+
"welcome": "Dobrodošli, {{firstName}} {{lastName}}. Nastavite geslo, da dokončate nastavitev računa.",
|
|
125
|
+
"tokenNote": "Vnesite povabilni žeton, ki ste ga prejeli po e-pošti.",
|
|
126
|
+
"token": "Povabilni žeton",
|
|
127
|
+
"tokenPlaceholder": "Vnesite svoj povabilni žeton",
|
|
128
|
+
"tokenChecking": "Preverjanje žetona...",
|
|
129
|
+
"tokenError": "{{error}}",
|
|
130
|
+
"invalidToken": "Neveljaven ali potekel žeton",
|
|
131
|
+
"email": "E-pošta",
|
|
132
|
+
"password": "Geslo",
|
|
133
|
+
"passwordPlaceholder": "Vnesite svoje geslo",
|
|
134
|
+
"confirmPassword": "Potrdite geslo",
|
|
135
|
+
"confirmPasswordPlaceholder": "Potrdite svoje geslo",
|
|
136
|
+
"passwordRequirements": "Geslo mora vsebovati vsaj 8 znakov.",
|
|
137
|
+
"submit": "Nastavi geslo",
|
|
138
|
+
"setPasswordFailed": "Nastavitev gesla ni uspela",
|
|
139
|
+
"hasPassword": "Že imate geslo?",
|
|
140
|
+
"loginLink": "Prijava"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"layout": {
|
|
145
|
+
"header": {
|
|
146
|
+
"logo": "Tiny",
|
|
147
|
+
"openMenu": "Odpri meni",
|
|
148
|
+
"closeMenu": "Zapri meni",
|
|
149
|
+
"nav": {
|
|
150
|
+
"home": "Klepet"
|
|
151
|
+
},
|
|
152
|
+
"profile": "Profil",
|
|
153
|
+
"logout": "Odjava"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"profile": {
|
|
157
|
+
"head": {
|
|
158
|
+
"title": "Profil",
|
|
159
|
+
"description": "Vaš profil"
|
|
160
|
+
},
|
|
161
|
+
"form": {
|
|
162
|
+
"title": "Profil",
|
|
163
|
+
"description": "Posodobite podatke profila",
|
|
164
|
+
"email": "E-pošta",
|
|
165
|
+
"emailPlaceholder": "Vnesite svoj e-poštni naslov",
|
|
166
|
+
"name": "Ime",
|
|
167
|
+
"namePlaceholder": "Vnesite svoje ime",
|
|
168
|
+
"submit": "Shrani",
|
|
169
|
+
"submitLoading": "Shranjevanje...",
|
|
170
|
+
"notifications": {
|
|
171
|
+
"success": "Profil posodobljen",
|
|
172
|
+
"error": "Posodobitev profila ni uspela"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"chat": {
|
|
177
|
+
"head": {
|
|
178
|
+
"title": "Klepet",
|
|
179
|
+
"description": "Skupni klepet"
|
|
180
|
+
},
|
|
181
|
+
"title": "Klepet",
|
|
182
|
+
"roomTitle": "Soba",
|
|
183
|
+
"empty": "Še ni sporočil. Pozdravite.",
|
|
184
|
+
"composer": {
|
|
185
|
+
"label": "Sporočilo",
|
|
186
|
+
"placeholder": "Napišite sporočilo",
|
|
187
|
+
"submit": "Pošlji",
|
|
188
|
+
"submitLoading": "Pošiljanje...",
|
|
189
|
+
"error": "Sporočila ni bilo mogoče poslati."
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"invite": {
|
|
193
|
+
"title": "Povabi",
|
|
194
|
+
"description": "Pošljite e-pošto z vabilom v ta klepet. Prejemnik naj odpre App URL in se prijavi.",
|
|
195
|
+
"email": "E-pošta",
|
|
196
|
+
"emailPlaceholder": "ime@example.com",
|
|
197
|
+
"submit": "Pošlji vabilo",
|
|
198
|
+
"submitLoading": "Pošiljanje...",
|
|
199
|
+
"success": "Vabilo je poslano.",
|
|
200
|
+
"error": "Vabila ni bilo mogoče poslati."
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RestClient } from "@povio/openapi-codegen-cli";
|
|
2
|
+
|
|
3
|
+
import { AuthorizationHeaderInterceptor } from "@/clients/rest/interceptors/authorization-header.interceptor";
|
|
4
|
+
import { RefreshTokenInterceptor } from "@/clients/rest/interceptors/refresh-token.interceptor";
|
|
5
|
+
import { ResponseInterceptor } from "@/clients/rest/interceptors/response.interceptor";
|
|
6
|
+
import { AppConfig } from "@/config/app.config";
|
|
7
|
+
import { AppErrorHandler } from "@/clients/rest/app-error-handler";
|
|
8
|
+
|
|
9
|
+
export const AppRestClient = new RestClient({
|
|
10
|
+
config: {
|
|
11
|
+
baseURL: AppConfig.api.url,
|
|
12
|
+
},
|
|
13
|
+
errorHandler: AppErrorHandler,
|
|
14
|
+
interceptors: [AuthorizationHeaderInterceptor, RefreshTokenInterceptor, ResponseInterceptor],
|
|
15
|
+
});
|