create-vitnode-app 0.0.10-canary.2 → 0.0.10-canary.21

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 (82) hide show
  1. package/dist/index.cjs +31 -31
  2. package/package.json +8 -8
  3. package/templates/basic/README.md +3 -1
  4. package/templates/basic/apps/backend/src/app.module.ts +1 -3
  5. package/templates/basic/apps/backend/src/database/database.service.ts +1 -1
  6. package/templates/basic/apps/backend/src/main.ts +1 -2
  7. package/templates/basic/apps/backend/tsconfig.json +2 -1
  8. package/templates/basic/apps/backend/uploads/public/assets/favicon.ico +0 -0
  9. package/templates/basic/apps/frontend/global.d.ts +3 -3
  10. package/templates/basic/apps/frontend/next.config.ts +1 -1
  11. package/templates/basic/apps/frontend/public/sw.js +3 -0
  12. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/[...slug]/page.tsx +10 -0
  13. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/layout.tsx +1 -5
  14. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/{(vitnode)/page.tsx → page.tsx} +4 -6
  15. package/templates/basic/apps/frontend/src/app/[locale]/(main)/layout.tsx +1 -8
  16. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/[...slug]/page.tsx +12 -0
  17. package/templates/basic/apps/frontend/src/app/{[locale]/(main)/global.css → global.css} +2 -7
  18. package/templates/basic/apps/frontend/src/app/layout.tsx +2 -0
  19. package/templates/basic/apps/frontend/src/middleware.ts +1 -1
  20. package/templates/basic/apps/frontend/src/plugins/admin/langs/en.json +109 -36
  21. package/templates/basic/apps/frontend/src/plugins/core/langs/en.json +28 -17
  22. package/templates/basic/apps/frontend/src/plugins/welcome/langs/en.json +2 -4
  23. package/templates/basic/apps/frontend/src/plugins/welcome/templates/default-page.tsx +1 -1
  24. package/templates/basic/apps/frontend/tsconfig.json +20 -6
  25. package/templates/basic/apps/shared/plugins/welcome/example.dto.ts +0 -0
  26. package/templates/basic/apps/shared/tsconfig.json +15 -0
  27. package/templates/basic/turbo.json +6 -7
  28. package/templates/docker/apps/backend/DockerFile +31 -0
  29. package/templates/docker/apps/frontend/DockerFile +37 -0
  30. package/templates/docker/deploy.sh +213 -0
  31. package/templates/docker/docker-compose.yml +54 -0
  32. package/templates/eslint/apps/shared/eslint.config.mjs +4 -0
  33. package/templates/basic/.npmrc_template +0 -1
  34. package/templates/basic/apps/frontend/codegen.ts +0 -10
  35. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/[...slug]/page.tsx +0 -5
  36. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/legal/[code]/page.tsx +0 -12
  37. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/legal/page.tsx +0 -10
  38. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/login/layout.tsx +0 -9
  39. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/login/page.tsx +0 -10
  40. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/profile/[id]/page.tsx +0 -5
  41. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/register/confirm-email/page.tsx +0 -12
  42. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/register/layout.tsx +0 -9
  43. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/register/page.tsx +0 -10
  44. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/settings/devices/page.tsx +0 -10
  45. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/settings/files/page.tsx +0 -12
  46. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/settings/layout.tsx +0 -13
  47. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/(vitnode)/settings/page.tsx +0 -5
  48. package/templates/basic/apps/frontend/src/app/[locale]/(main)/(layout)/error.tsx +0 -9
  49. package/templates/basic/apps/frontend/src/app/[locale]/(main)/not-found.tsx +0 -5
  50. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/[...slug]/page.tsx +0 -7
  51. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/advanced/files/page.tsx +0 -12
  52. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/dashboard/page.tsx +0 -5
  53. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/diagnostic/page.tsx +0 -10
  54. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/langs/page.tsx +0 -12
  55. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/[code]/dev/layout.tsx +0 -12
  56. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/[code]/dev/nav/page.tsx +0 -7
  57. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/[code]/dev/page.tsx +0 -7
  58. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/[code]/dev/permissions-admin/page.tsx +0 -7
  59. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/layout.tsx +0 -9
  60. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/plugins/page.tsx +0 -12
  61. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/ai/page.tsx +0 -10
  62. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/authorization/page.tsx +0 -10
  63. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/email/layout.tsx +0 -9
  64. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/email/logs/page.tsx +0 -12
  65. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/email/page.tsx +0 -10
  66. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/legal/page.tsx +0 -12
  67. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/main/page.tsx +0 -10
  68. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/metadata/page.tsx +0 -10
  69. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/settings/security/page.tsx +0 -10
  70. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/styles/editor/page.tsx +0 -10
  71. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/core/styles/nav/page.tsx +0 -10
  72. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/members/groups/page.tsx +0 -12
  73. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/members/staff/administrators/page.tsx +0 -12
  74. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/members/users/[id]/page.tsx +0 -12
  75. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/members/users/layout.tsx +0 -9
  76. package/templates/basic/apps/frontend/src/app/[locale]/admin/(auth)/(vitnode)/members/users/page.tsx +0 -12
  77. package/templates/basic/apps/frontend/src/app/[locale]/admin/(vitnode)/core/styles/theme-editor/page.tsx +0 -10
  78. package/templates/basic/apps/frontend/src/app/[locale]/admin/(vitnode)/install/page.tsx +0 -11
  79. package/templates/basic/apps/frontend/src/app/[locale]/admin/global.css +0 -94
  80. package/templates/basic/apps/frontend/src/app/[locale]/admin/layout.tsx +0 -10
  81. package/templates/basic/apps/frontend/src/graphql/types.ts +0 -1381
  82. /package/templates/basic/apps/frontend/src/app/[locale]/admin/{(vitnode)/page.tsx → page.tsx} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-vitnode-app",
3
- "version": "0.0.10-canary.2",
3
+ "version": "0.0.10-canary.21",
4
4
  "description": "Create a new VitNode app in seconds.",
5
5
  "author": "VitNode Team",
6
6
  "license": "MIT",
@@ -27,22 +27,22 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "figlet": "^1.8.0",
30
- "picocolors": "^1.1.0",
30
+ "picocolors": "^1.1.1",
31
31
  "prompts": "^2.4.2",
32
32
  "validate-npm-package-name": "^6.0.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/cross-spawn": "^6.0.6",
36
36
  "@types/figlet": "^1.7.0",
37
- "@types/node": "^22.7.5",
37
+ "@types/node": "^22.10.1",
38
38
  "@types/prompts": "^2.4.9",
39
39
  "@types/validate-npm-package-name": "^4.0.2",
40
40
  "commander": "^12.1.0",
41
- "cross-spawn": "^7.0.3",
42
- "ora": "^8.1.0",
43
- "tsup": "^8.3.0",
44
- "typescript": "^5.6.3",
45
- "eslint-config-typescript-vitnode": "0.0.10-canary.2"
41
+ "cross-spawn": "^7.0.6",
42
+ "ora": "^8.1.1",
43
+ "tsup": "^8.3.5",
44
+ "typescript": "^5.7.2",
45
+ "eslint-config-typescript-vitnode": "0.0.10-canary.21"
46
46
  },
47
47
  "scripts": {
48
48
  "lint": "eslint .",
@@ -13,7 +13,7 @@
13
13
 
14
14
  # VitNode App
15
15
 
16
- This is a basic template for a VitNode app.
16
+ This is a basic template for a [VitNode](https://vitnode.com/) app.
17
17
 
18
18
  ## Getting Started
19
19
 
@@ -25,6 +25,8 @@ pnpm i
25
25
  npm i
26
26
  ```
27
27
 
28
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
29
+
28
30
  ## Development
29
31
 
30
32
  To start the development server, you need to create a `.env` file in the root of the project from `.env.example`.
@@ -1,6 +1,5 @@
1
1
  import { Module } from '@nestjs/common';
2
- import { join } from 'path';
3
- import { VitNodeCoreModule } from 'vitnode-backend';
2
+ import { VitNodeCoreModule } from 'vitnode-backend/app.module';
4
3
 
5
4
  import { DATABASE_ENVS, schemaDatabase } from './database/config';
6
5
  import { DatabaseModule } from './database/database.module';
@@ -9,7 +8,6 @@ import { PluginsModule } from './plugins/plugins.module';
9
8
  @Module({
10
9
  imports: [
11
10
  VitNodeCoreModule.register({
12
- pathToEnvFile: join(process.cwd(), '..', '..', '.env'),
13
11
  database: {
14
12
  config: DATABASE_ENVS,
15
13
  schemaDatabase,
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@nestjs/common';
2
- import { InternalDatabaseService } from 'vitnode-backend';
2
+ import { InternalDatabaseService } from 'vitnode-backend/utils/database/internal_database.service';
3
3
 
4
4
  import { schemaDatabase } from './config';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { INestApplication } from '@nestjs/common';
2
2
  import { NestFactory } from '@nestjs/core';
3
- import { nestjsMainApp } from 'vitnode-backend';
3
+ import { nestjsMainApp } from 'vitnode-backend/main';
4
4
 
5
5
  import { AppModule } from './app.module';
6
6
 
@@ -9,5 +9,4 @@ async function bootstrap() {
9
9
 
10
10
  void nestjsMainApp(app, {});
11
11
  }
12
-
13
12
  void bootstrap();
@@ -3,7 +3,8 @@
3
3
  "extends": "eslint-config-typescript-vitnode/tsconfig.nest.json",
4
4
  "compilerOptions": {
5
5
  "target": "ESNext",
6
- "module": "commonjs",
6
+ "module": "es2015",
7
+ "moduleResolution": "bundler",
7
8
  "baseUrl": "./",
8
9
  "outDir": "./dist",
9
10
  "paths": {
@@ -1,6 +1,6 @@
1
- import core from '@/plugins/core/langs/en.json';
2
- import admin from '@/plugins/admin/langs/en.json';
3
- import welcome from '@/plugins/welcome/langs/en.json';
1
+ import type core from '@/plugins/core/langs/en.json';
2
+ import type admin from '@/plugins/admin/langs/en.json';
3
+ import type welcome from '@/plugins/welcome/langs/en.json';
4
4
 
5
5
  type Messages = typeof core & typeof admin & typeof welcome;
6
6
 
@@ -1,4 +1,4 @@
1
- import { NextConfig } from 'next';
1
+ import type { NextConfig } from 'next';
2
2
  import VitNodeConfig from 'vitnode-frontend/next.config';
3
3
 
4
4
  const nextConfig: NextConfig = {};
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+
3
+ self.addEventListener('install', () => {});
@@ -0,0 +1,10 @@
1
+ import {
2
+ DynamicView,
3
+ generateMetadataDynamic,
4
+ } from 'vitnode-frontend/views/theme/views/dynamic-view';
5
+
6
+ export const generateMetadata = generateMetadataDynamic;
7
+
8
+ export default function Page(props: React.ComponentProps<typeof DynamicView>) {
9
+ return <DynamicView {...props} />;
10
+ }
@@ -1,9 +1,5 @@
1
1
  import { ThemeLayout } from 'vitnode-frontend/views/theme/layout/theme-layout';
2
2
 
3
- export default function LocaleLayout({
4
- children,
5
- }: {
6
- children: React.ReactNode;
7
- }) {
3
+ export default function Layout({ children }: { children: React.ReactNode }) {
8
4
  return <ThemeLayout>{children}</ThemeLayout>;
9
5
  }
@@ -1,18 +1,16 @@
1
- // ! DO NOT TOUCH THIS FILE!!! IT IS GENERATED BY VITNODE-CLI
1
+ // ! DO NOT TOUCH THIS FILE!!!
2
2
  // ! If you remove this then default page plugin will not work
3
3
  import React from 'react';
4
- import { getSessionData } from 'vitnode-frontend/graphql/get-session-data';
4
+ import { getMiddlewareData } from 'vitnode-frontend/api/get-middleware-data';
5
5
  import { generateMetadataDefaultPage } from 'vitnode-frontend/views/theme/views/default-page';
6
6
 
7
7
  export const generateMetadata = generateMetadataDefaultPage;
8
8
 
9
9
  export default async function Page() {
10
- const {
11
- core_sessions__authorization: { plugin_default },
12
- } = await getSessionData();
10
+ const { plugin_code_default } = await getMiddlewareData();
13
11
 
14
12
  const PageFromTheme = React.lazy(async () =>
15
- import(`@/plugins/${plugin_default}/templates/default-page`).then(
13
+ import(`@/plugins/${plugin_code_default}/templates/default-page`).then(
16
14
  module => ({
17
15
  default: module.default,
18
16
  }),
@@ -1,12 +1,5 @@
1
- import { TranslationsProvider } from 'vitnode-frontend/components/translations-provider';
2
1
  import { AuthLayout } from 'vitnode-frontend/views/layout/auth/auth-layout';
3
2
 
4
- import './global.css';
5
-
6
3
  export default function Layout({ children }: { children: React.ReactNode }) {
7
- return (
8
- <TranslationsProvider namespaces={[]}>
9
- <AuthLayout>{children}</AuthLayout>
10
- </TranslationsProvider>
11
- );
4
+ return <AuthLayout>{children}</AuthLayout>;
12
5
  }
@@ -0,0 +1,12 @@
1
+ import {
2
+ DynamicAdminView,
3
+ generateMetadataDynamic,
4
+ } from 'vitnode-frontend/admin/dynamic-admin-view';
5
+
6
+ export const generateMetadata = generateMetadataDynamic;
7
+
8
+ export default function Page(
9
+ props: React.ComponentProps<typeof DynamicAdminView>,
10
+ ) {
11
+ return <DynamicAdminView {...props} />;
12
+ }
@@ -11,11 +11,6 @@
11
11
  @apply bg-background text-foreground;
12
12
  }
13
13
 
14
- a {
15
- @apply text-primary;
16
- @apply cursor-pointer;
17
- }
18
-
19
14
  :root {
20
15
  --background: 220 40% 98%;
21
16
  --foreground: 213deg 5% 8%;
@@ -60,7 +55,7 @@
60
55
  --secondary-foreground: 0 0% 98%;
61
56
  --muted: 228 11% 12%;
62
57
  --muted-foreground: 216 0% 68%;
63
- --accent: 228 11% 14%;
58
+ --accent: 225 10% 10%;
64
59
  --accent-foreground: 0 0% 98%;
65
60
  --destructive: 359 78% 55%;
66
61
  --destructive-foreground: 210 40% 98%;
@@ -78,7 +73,7 @@
78
73
  }
79
74
  }
80
75
 
81
- @layer utilities {
76
+ @layer components {
82
77
  .underline-strike-through {
83
78
  text-decoration: underline line-through;
84
79
  }
@@ -1,3 +1,5 @@
1
+ import './global.css';
2
+
1
3
  export default async function RootLayout({
2
4
  children,
3
5
  }: {
@@ -3,5 +3,5 @@ import { createMiddleware } from 'vitnode-frontend/middleware';
3
3
  export default createMiddleware();
4
4
 
5
5
  export const config = {
6
- matcher: '/((?!_next|robots.txt|sitemap.xml|sitemap).*)',
6
+ matcher: '/((?!_next|robots.txt|sitemap.xml|sitemap|api|sw.js).*)',
7
7
  };
@@ -8,9 +8,11 @@
8
8
  "diagnostic_tools": "Diagnostic Tools",
9
9
  "home_page": "Home Page",
10
10
  "mobile_not_supported": "Mobile devices are not supported.",
11
+ "require_email_service": "The email service is disabled.",
11
12
  "search": {
12
13
  "placeholder": "Search...",
13
14
  "no_results": "No results found.",
15
+ "desc": "Search Engine for AdminCP",
14
16
  "pages": "Pages"
15
17
  }
16
18
  },
@@ -57,8 +59,7 @@
57
59
  }
58
60
  },
59
61
  "email": {
60
- "hello": "Hello",
61
- "footer": "You're receiving this email because your account activity triggered this email. Please do not reply to this email. If you have any questions, please contact us at:"
62
+ "hello": "Hello"
62
63
  },
63
64
  "settings": {
64
65
  "main": {
@@ -73,9 +74,6 @@
73
74
  "description": {
74
75
  "label": "Description Site"
75
76
  },
76
- "copyright": {
77
- "label": "Copyright Site"
78
- },
79
77
  "contact_email": {
80
78
  "label": "Contact Email",
81
79
  "desc": "This email address will be applied to the contact form and other contact points on your website."
@@ -149,17 +147,46 @@
149
147
  }
150
148
  },
151
149
  "authorization": {
152
- "force_login": {
153
- "title": "Force Login",
154
- "desc": "Force users to log in before they can access your website."
155
- },
156
- "lock_register": {
157
- "title": "Lock Register",
158
- "desc": "Don't allow users to register on your website."
150
+ "title": "Authorization",
151
+ "desc": "Manage authorization settings for your website.",
152
+ "settings": {
153
+ "title": "Settings",
154
+ "force_login": {
155
+ "title": "Force Login",
156
+ "desc": "Force users to log in before they can access your website."
157
+ },
158
+ "lock_register": {
159
+ "title": "Lock Register",
160
+ "desc": "Don't allow users to register on your website."
161
+ },
162
+ "require_confirm_email": {
163
+ "title": "Require Confirm Email",
164
+ "desc": "Require users to confirm their email address before they can access your site."
165
+ }
159
166
  },
160
- "require_confirm_email": {
161
- "title": "Require Confirm Email",
162
- "desc": "Require users to confirm their email address before they can access your site."
167
+ "methods": {
168
+ "title": "Login Methods",
169
+ "name": "Name",
170
+ "enabled": "Enabled",
171
+ "create": {
172
+ "title": "Create Method",
173
+ "desc": "New login method for your website.",
174
+ "provider": "Provider",
175
+ "client_id": "Client ID",
176
+ "client_secret": "Client Secret",
177
+ "success": "Login method has been created.",
178
+ "your_callback_url": "Your callback URL"
179
+ },
180
+ "edit": {
181
+ "title": "Edit Method",
182
+ "success": "Login method has been updated."
183
+ },
184
+ "delete": {
185
+ "desc": "This action will delete the login method <name></name>.",
186
+ "warn": "If you delete this login method, users who use this method to log in will not be able to log in.",
187
+ "success": "Login method has been deleted.",
188
+ "submit": "Yes, delete login method"
189
+ }
163
190
  }
164
191
  },
165
192
  "legal": {
@@ -215,12 +242,24 @@
215
242
  "prompt_placeholder": "Ask a question...",
216
243
  "submit": "Ask"
217
244
  }
218
- }
219
- },
220
- "metadata": {
221
- "manifest": {
222
- "title": "Manifest",
223
- "desc": "The web app manifest provides information about an application (such as name, author, icon, and description) in a JSON text file. The manifest is used to install the web application (PWA) to the home screen of a device.",
245
+ },
246
+ "metadata": {
247
+ "title": "Metadata",
248
+ "desc": "Share your website with the world by adding metadata to your website.",
249
+ "theme_color": "Theme Color",
250
+ "background_color": "Background Color",
251
+ "start_url": {
252
+ "label": "Start URL",
253
+ "desc": "When user launches the app, this is the page that will be loaded."
254
+ },
255
+ "icon": {
256
+ "label": "Icon",
257
+ "desc": "Represent your website on devices (PWA). Recommended size: 512x512px."
258
+ },
259
+ "favicon": {
260
+ "label": "Favicon",
261
+ "desc": "Icon in browser tab. Recommended size: 32x32px."
262
+ },
224
263
  "display": {
225
264
  "label": "Display",
226
265
  "desc": "The display property controls how the app is displayed.",
@@ -232,7 +271,7 @@
232
271
  "title": "Standalone",
233
272
  "desc": "Without any browser UI."
234
273
  },
235
- "minimal-ui": {
274
+ "minimal": {
236
275
  "title": "Minimal UI",
237
276
  "desc": "Minimal browser UI."
238
277
  },
@@ -240,21 +279,12 @@
240
279
  "title": "Browser",
241
280
  "desc": "With browser UI."
242
281
  }
243
- },
244
- "start_url": {
245
- "label": "Start URL",
246
- "desc": "When user launches the app, this is the page that will be loaded."
247
- },
248
- "theme_color": {
249
- "label": "Theme Color"
250
- },
251
- "background_color": {
252
- "label": "Background Color"
253
282
  }
254
283
  }
255
284
  },
256
285
  "plugins": {
257
286
  "title": "Plugins",
287
+ "desc": "Extend the functionality of your app with plugins.",
258
288
  "upload_new_version": "Upload New Version",
259
289
  "set_default": "Set as default",
260
290
  "get_help": "Get help",
@@ -279,6 +309,7 @@
279
309
  "link_url_with_link": "Link URL: <link></link>",
280
310
  "create": {
281
311
  "title": "Create Navigation",
312
+ "desc": "Create a new navigation for your plugin.",
282
313
  "code": {
283
314
  "label": "Code",
284
315
  "desc": "Should be unique. Min 3-50 characters.",
@@ -379,7 +410,7 @@
379
410
  "delete": {
380
411
  "submit": "Yes, delete plugin",
381
412
  "desc": "This action will delete <name></name> plugin created by <author></author> and all data associated with it.",
382
- "info": "You may see the errors while the system is changing files. After the process is complete, you need to restart the server to apply the changes."
413
+ "info": "After the process is complete, you need to restart the server to apply the changes."
383
414
  },
384
415
  "download": {
385
416
  "title": "Download Plugin",
@@ -397,11 +428,26 @@
397
428
  }
398
429
  },
399
430
  "styles": {
431
+ "theme-editor": {
432
+ "save": "Save",
433
+ "desktop": "Desktop",
434
+ "tablet": "Tablet",
435
+ "mobile": "Mobile",
436
+ "logos": {
437
+ "title": "Logos",
438
+ "text": "Logo Text",
439
+ "logo_light": "Logo Light",
440
+ "logo_dark": "Logo Dark",
441
+ "width": "Width",
442
+ "title_mobile": "Logos (Mobile)"
443
+ }
444
+ },
400
445
  "nav": {
401
446
  "title": "Navigation",
402
447
  "href": "URL: {href}",
403
448
  "create": {
404
449
  "title": "Create Navigation",
450
+ "desc": "Create a new navigation for your website.",
405
451
  "success": "Navigation has been created.",
406
452
  "name": {
407
453
  "label": "Name"
@@ -457,7 +503,7 @@
457
503
  "time_24": "24h Format",
458
504
  "locale": "Locale",
459
505
  "name": "Name",
460
- "created": "Created",
506
+ "updated": "Updated",
461
507
  "enabled": "Enabled"
462
508
  },
463
509
  "actions": {
@@ -470,7 +516,8 @@
470
516
  "code": {
471
517
  "label": "Code",
472
518
  "placeholder": "en",
473
- "desc": "This code uses as a language identifier in your URL, like: /en/page"
519
+ "desc": "This code uses as a language identifier in your URL, like: /en/page",
520
+ "already_exists": "Language with this code already exists."
474
521
  },
475
522
  "timezone": {
476
523
  "label": "Timezone"
@@ -516,6 +563,30 @@
516
563
  "submit": "Yes, delete file"
517
564
  }
518
565
  }
566
+ },
567
+ "security": {
568
+ "spam": {
569
+ "title": "Spam Protection",
570
+ "captcha": {
571
+ "title": "Captcha",
572
+ "type": {
573
+ "title": "Type",
574
+ "none": {
575
+ "title": "None"
576
+ },
577
+ "recaptcha_desc": "Read more on <link>Google reCAPTCHA</link>.",
578
+ "recaptcha_v2_invisible": "reCAPTCHA v2 Invisible",
579
+ "recaptcha_v2_checkbox": "reCAPTCHA v2 Checkbox",
580
+ "recaptcha_v3": "reCAPTCHA v3",
581
+ "cloudflare_turnstile": {
582
+ "title": "Cloudflare Turnstile",
583
+ "desc": "Read more on <link>Cloudflare Turnstile</link>."
584
+ }
585
+ },
586
+ "site_key": "Site Key",
587
+ "secret_key": "Secret Key"
588
+ }
589
+ }
519
590
  }
520
591
  },
521
592
  "members": {
@@ -549,6 +620,7 @@
549
620
  },
550
621
  "edit": {
551
622
  "title": "Edit User",
623
+ "group": "Group",
552
624
  "success": "User has been updated."
553
625
  },
554
626
  "delete": {
@@ -565,6 +637,7 @@
565
637
  },
566
638
  "groups": {
567
639
  "title": "Groups",
640
+ "desc": "Manage groups on your website.",
568
641
  "name": "Name",
569
642
  "updated": "Updated",
570
643
  "search_placeholder": "Search by name...",
@@ -632,7 +705,7 @@
632
705
  "success": "Permissions has been deleted"
633
706
  }
634
707
  },
635
- "administrators": {
708
+ "admin": {
636
709
  "title": "Administrators",
637
710
  "desc": "Manage access to the administrator panel (AdminCP).",
638
711
  "administrator": "Administrator",