create-carlonicora-app 1.0.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 (149) hide show
  1. package/LICENSE +675 -0
  2. package/README.md +104 -0
  3. package/bin/cli.js +3 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +92 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/git.d.ts +7 -0
  9. package/dist/git.d.ts.map +1 -0
  10. package/dist/git.js +80 -0
  11. package/dist/git.js.map +1 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/prompts.d.ts +5 -0
  17. package/dist/prompts.d.ts.map +1 -0
  18. package/dist/prompts.js +30 -0
  19. package/dist/prompts.js.map +1 -0
  20. package/dist/replacer.d.ts +9 -0
  21. package/dist/replacer.d.ts.map +1 -0
  22. package/dist/replacer.js +11 -0
  23. package/dist/replacer.js.map +1 -0
  24. package/dist/scaffold.d.ts +3 -0
  25. package/dist/scaffold.d.ts.map +1 -0
  26. package/dist/scaffold.js +79 -0
  27. package/dist/scaffold.js.map +1 -0
  28. package/dist/types/index.d.ts +16 -0
  29. package/dist/types/index.d.ts.map +1 -0
  30. package/dist/types/index.js +2 -0
  31. package/dist/types/index.js.map +1 -0
  32. package/dist/utils/files.d.ts +6 -0
  33. package/dist/utils/files.d.ts.map +1 -0
  34. package/dist/utils/files.js +103 -0
  35. package/dist/utils/files.js.map +1 -0
  36. package/dist/utils/logger.d.ts +12 -0
  37. package/dist/utils/logger.d.ts.map +1 -0
  38. package/dist/utils/logger.js +35 -0
  39. package/dist/utils/logger.js.map +1 -0
  40. package/dist/utils/validation.d.ts +6 -0
  41. package/dist/utils/validation.d.ts.map +1 -0
  42. package/dist/utils/validation.js +63 -0
  43. package/dist/utils/validation.js.map +1 -0
  44. package/package.json +52 -0
  45. package/template/.env.example +159 -0
  46. package/template/.github/workflows/check-library-updates.yml +71 -0
  47. package/template/.github/workflows/dev.yml +63 -0
  48. package/template/.github/workflows/pull-request.yml +55 -0
  49. package/template/.gitmodules +6 -0
  50. package/template/.husky/pre-commit +1 -0
  51. package/template/.husky/pre-push +1 -0
  52. package/template/.prettierignore +1 -0
  53. package/template/.prettierrc +13 -0
  54. package/template/.releaserc +134 -0
  55. package/template/.vscode/settings.json +16 -0
  56. package/template/CHANGELOG.md +0 -0
  57. package/template/CLAUDE.md +34 -0
  58. package/template/DOCKER.md +1591 -0
  59. package/template/Dockerfile +228 -0
  60. package/template/README.md +1 -0
  61. package/template/apps/api/.prettierrc +12 -0
  62. package/template/apps/api/eslint.config.mjs +54 -0
  63. package/template/apps/api/jest.config.js +29 -0
  64. package/template/apps/api/nest-cli.json +15 -0
  65. package/template/apps/api/package.json +155 -0
  66. package/template/apps/api/src/config/config.ts +17 -0
  67. package/template/apps/api/src/config/enums/job.name.ts +6 -0
  68. package/template/apps/api/src/config/enums/queue.id.ts +3 -0
  69. package/template/apps/api/src/config/interfaces/config.interface.ts +3 -0
  70. package/template/apps/api/src/features/features.modules.ts +6 -0
  71. package/template/apps/api/src/i18n/en/notifications.json +3 -0
  72. package/template/apps/api/src/main.ts +23 -0
  73. package/template/apps/api/src/neo4j.migrations/20250901_001.ts +33 -0
  74. package/template/apps/api/src/neo4j.migrations/20250901_002.ts +90 -0
  75. package/template/apps/api/src/neo4j.migrations/20250901_003.ts +57 -0
  76. package/template/apps/api/src/neo4j.migrations/20250901_004.ts +32 -0
  77. package/template/apps/api/src/neo4j.migrations/queries/migration.queries.ts +49 -0
  78. package/template/apps/api/src/types/langchain.d.ts +56 -0
  79. package/template/apps/api/tsconfig.build.json +4 -0
  80. package/template/apps/api/tsconfig.json +38 -0
  81. package/template/apps/web/.swcrc +26 -0
  82. package/template/apps/web/components.json +21 -0
  83. package/template/apps/web/eslint.config.mjs +33 -0
  84. package/template/apps/web/global.d.ts +7 -0
  85. package/template/apps/web/messages/en.json +249 -0
  86. package/template/apps/web/next.config.js +50 -0
  87. package/template/apps/web/package.json +146 -0
  88. package/template/apps/web/playwright.config.ts +86 -0
  89. package/template/apps/web/postcss.config.mjs +5 -0
  90. package/template/apps/web/public/sw.js +32 -0
  91. package/template/apps/web/src/app/[locale]/(admin)/administration/companies/[id]/page.tsx +46 -0
  92. package/template/apps/web/src/app/[locale]/(admin)/administration/companies/page.tsx +23 -0
  93. package/template/apps/web/src/app/[locale]/(admin)/layout.tsx +49 -0
  94. package/template/apps/web/src/app/[locale]/(auth)/activation/[code]/page.tsx +13 -0
  95. package/template/apps/web/src/app/[locale]/(auth)/auth/page.tsx +11 -0
  96. package/template/apps/web/src/app/[locale]/(auth)/invitation/[code]/page.tsx +7 -0
  97. package/template/apps/web/src/app/[locale]/(auth)/layout.tsx +9 -0
  98. package/template/apps/web/src/app/[locale]/(auth)/login/page.tsx +6 -0
  99. package/template/apps/web/src/app/[locale]/(auth)/logout/page.tsx +5 -0
  100. package/template/apps/web/src/app/[locale]/(auth)/register/page.tsx +6 -0
  101. package/template/apps/web/src/app/[locale]/(auth)/reset/[code]/page.tsx +7 -0
  102. package/template/apps/web/src/app/[locale]/(main)/(foundations)/notifications/page.tsx +9 -0
  103. package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/[id]/page.tsx +23 -0
  104. package/template/apps/web/src/app/[locale]/(main)/(foundations)/roles/page.tsx +12 -0
  105. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/error.tsx +14 -0
  106. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/loading.tsx +21 -0
  107. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/[id]/page.tsx +46 -0
  108. package/template/apps/web/src/app/[locale]/(main)/(foundations)/users/page.tsx +17 -0
  109. package/template/apps/web/src/app/[locale]/(main)/error.tsx +62 -0
  110. package/template/apps/web/src/app/[locale]/(main)/layout.tsx +40 -0
  111. package/template/apps/web/src/app/[locale]/(main)/page.tsx +41 -0
  112. package/template/apps/web/src/app/[locale]/layout.tsx +54 -0
  113. package/template/apps/web/src/app/globals.css +256 -0
  114. package/template/apps/web/src/config/BootstrapProvider.tsx +13 -0
  115. package/template/apps/web/src/config/Bootstrapper.ts +77 -0
  116. package/template/apps/web/src/config/env.ts +51 -0
  117. package/template/apps/web/src/config/middleware-env.ts +14 -0
  118. package/template/apps/web/src/enums/feature.ids.ts +3 -0
  119. package/template/apps/web/src/features/common/components/containers/IndexContainer.tsx +11 -0
  120. package/template/apps/web/src/features/common/components/details/LayoutDetails.tsx +33 -0
  121. package/template/apps/web/src/features/common/components/navigations/CommonSidebar.tsx +233 -0
  122. package/template/apps/web/src/features/common/components/navigations/CreationDropDown.tsx +117 -0
  123. package/template/apps/web/src/features/common/components/navigations/UserSidebarFooter.tsx +115 -0
  124. package/template/apps/web/src/features/common/components/navigations/VersionDisplay.tsx +18 -0
  125. package/template/apps/web/src/features/common/contexts/ErrorContext.tsx +62 -0
  126. package/template/apps/web/src/i18n/request.ts +13 -0
  127. package/template/apps/web/src/i18n/routing.ts +9 -0
  128. package/template/apps/web/src/i18n/useDateFnsLocale.ts +15 -0
  129. package/template/apps/web/src/proxy.ts +107 -0
  130. package/template/apps/web/src/server-actions/auth-cookies.ts +134 -0
  131. package/template/apps/web/src/types/modules.d.ts +10 -0
  132. package/template/apps/web/src/utils/metadata.ts +50 -0
  133. package/template/apps/web/src/utils/revalidation.ts +7 -0
  134. package/template/apps/web/tsconfig.json +51 -0
  135. package/template/docker-compose.yml +211 -0
  136. package/template/package.json +72 -0
  137. package/template/packages/nestjs-neo4jsonapi/.gitkeep +0 -0
  138. package/template/packages/nextjs-jsonapi/.gitkeep +0 -0
  139. package/template/packages/shared/package.json +23 -0
  140. package/template/packages/shared/src/const/roles.id.ts +5 -0
  141. package/template/packages/shared/src/const/system.roles.id.ts +4 -0
  142. package/template/packages/shared/src/index.ts +1 -0
  143. package/template/packages/shared/tsconfig.json +10 -0
  144. package/template/packages/shared/tsup.config.ts +16 -0
  145. package/template/pnpm-workspace.yaml +3 -0
  146. package/template/tsconfig.base.json +62 -0
  147. package/template/tsconfig.json +12 -0
  148. package/template/turbo.json +88 -0
  149. package/template/versions.production.json +4 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * This migration creates the initial set of modules in the database.
3
+ */
4
+
5
+ import { Action, MigrationInterface } from "@carlonicora/nestjs-neo4jsonapi";
6
+ import { moduleQuery } from "src/neo4j.migrations/queries/migration.queries";
7
+
8
+ export const migration: MigrationInterface[] = [
9
+ {
10
+ query: moduleQuery,
11
+ queryParams: {
12
+ moduleName: "Auth",
13
+ moduleId: "035fe8a6-d467-40c0-9d1d-6a87f0dd286e",
14
+ featureId: null,
15
+ isCore: true,
16
+ permissions: JSON.stringify([
17
+ { type: Action.Create, value: true },
18
+ { type: Action.Read, value: true },
19
+ { type: Action.Update, value: true },
20
+ { type: Action.Delete, value: true },
21
+ ]),
22
+ },
23
+ },
24
+ {
25
+ query: moduleQuery,
26
+ queryParams: {
27
+ moduleName: "Company",
28
+ moduleId: "f9e77c8f-bfd1-4fd4-80b0-e1d891ab7113",
29
+ featureId: null,
30
+ isCore: true,
31
+ permissions: JSON.stringify([{ type: Action.Read, value: true }]),
32
+ },
33
+ },
34
+ {
35
+ query: moduleQuery,
36
+ queryParams: {
37
+ moduleName: "Feature",
38
+ moduleId: "025fdd23-2803-4360-9fd9-eaa3612c2e23",
39
+ featureId: null,
40
+ isCore: true,
41
+ permissions: JSON.stringify([{ type: Action.Read, value: true }]),
42
+ },
43
+ },
44
+ {
45
+ query: moduleQuery,
46
+ queryParams: {
47
+ moduleName: "Notification",
48
+ moduleId: "9259d704-c670-4e77-a3a1-a728ffc5be3d",
49
+ featureId: null,
50
+ isCore: true,
51
+ permissions: JSON.stringify([
52
+ { type: Action.Read, value: true },
53
+ { type: Action.Update, value: true },
54
+ ]),
55
+ },
56
+ },
57
+ {
58
+ query: moduleQuery,
59
+ queryParams: {
60
+ moduleName: "Role",
61
+ moduleId: "9f6416e6-7b9b-4e1a-a99f-833191eca8a9",
62
+ featureId: null,
63
+ isCore: true,
64
+ permissions: JSON.stringify([{ type: Action.Read, value: true }]),
65
+ },
66
+ },
67
+ {
68
+ query: moduleQuery,
69
+ queryParams: {
70
+ moduleName: "S3",
71
+ moduleId: "db41ba46-e171-4324-8845-99353eba8568",
72
+ featureId: null,
73
+ isCore: true,
74
+ permissions: JSON.stringify([{ type: Action.Read, value: true }]),
75
+ },
76
+ },
77
+ {
78
+ query: moduleQuery,
79
+ queryParams: {
80
+ moduleName: "User",
81
+ moduleId: "04cfc677-0fd2-4f5e-adf4-2483a00c0277",
82
+ featureId: null,
83
+ isCore: true,
84
+ permissions: JSON.stringify([
85
+ { type: Action.Read, value: true },
86
+ { type: Action.Update, value: "id" },
87
+ ]),
88
+ },
89
+ },
90
+ ];
@@ -0,0 +1,57 @@
1
+ /**
2
+ * This migration creates the initial permissions for modules and features.
3
+ * A module can belong to a feature, and a role can have permissions on a module or a feature.
4
+ */
5
+
6
+ import { Action, MigrationInterface } from "@carlonicora/nestjs-neo4jsonapi";
7
+ import { permissionQuery } from "src/neo4j.migrations/queries/migration.queries";
8
+
9
+ export const migration: MigrationInterface[] = [
10
+ ...[
11
+ "f9e77c8f-bfd1-4fd4-80b0-e1d891ab7113",
12
+ "db41ba46-e171-4324-8845-99353eba8568",
13
+ "04cfc677-0fd2-4f5e-adf4-2483a00c0277",
14
+ ].map((moduleId) => ({
15
+ query: permissionQuery,
16
+ queryParams: {
17
+ roleId: "53394cb8-1e87-11ef-8b48-bed54b8f8aba",
18
+ moduleId,
19
+ permissions: JSON.stringify([
20
+ { type: Action.Create, value: true },
21
+ { type: Action.Read, value: true },
22
+ { type: Action.Update, value: true },
23
+ { type: Action.Delete, value: true },
24
+ ]),
25
+ },
26
+ })),
27
+ ...[
28
+ "f9e77c8f-bfd1-4fd4-80b0-e1d891ab7113",
29
+ "db41ba46-e171-4324-8845-99353eba8568",
30
+ "04cfc677-0fd2-4f5e-adf4-2483a00c0277",
31
+ ].map((moduleId) => ({
32
+ query: permissionQuery,
33
+ queryParams: {
34
+ roleId: "2e1eee00-6cba-4506-9059-ccd24e4ea5b0",
35
+ moduleId: moduleId,
36
+ permissions: JSON.stringify([
37
+ { type: Action.Create, value: true },
38
+ { type: Action.Read, value: true },
39
+ { type: Action.Update, value: true },
40
+ { type: Action.Delete, value: true },
41
+ ]),
42
+ },
43
+ })),
44
+ ...["78567a47-baa8-47ed-890f-de48574a9cba", "e029e271-2896-43ad-87ef-19ab35363936"].map((moduleId) => ({
45
+ query: permissionQuery,
46
+ queryParams: {
47
+ roleId: "2e1eee00-6cba-4506-9059-ccd24e4ea5b0",
48
+ moduleId,
49
+ permissions: JSON.stringify([
50
+ { type: Action.Create, value: true },
51
+ { type: Action.Read, value: true },
52
+ { type: Action.Update, value: true },
53
+ { type: Action.Delete, value: true },
54
+ ]),
55
+ },
56
+ })),
57
+ ];
@@ -0,0 +1,32 @@
1
+ /**
2
+ * This migration creates the initial administrator user in the database.
3
+ */
4
+
5
+ import { MigrationInterface } from "@carlonicora/nestjs-neo4jsonapi";
6
+
7
+ export const migration: MigrationInterface[] = [
8
+ {
9
+ query: `
10
+ MERGE (u:User {id: $id})
11
+ ON CREATE SET u.name = $name,
12
+ u.email = $email,
13
+ u.password = $password,
14
+ u.isActive = $isActive,
15
+ u.isDeleted = $isDeleted,
16
+ u.createdAt = datetime(),
17
+ u.updatedAt = datetime()
18
+ WITH u
19
+ MATCH (r:Role {id: $adminRoleId})
20
+ MERGE (u)-[:MEMBER_OF]->(r)
21
+ `,
22
+ queryParams: {
23
+ id: "a63553fb-5d3c-11ee-9dc3-0242ac120003",
24
+ name: "Administrator",
25
+ email: "admin@{{name}}.com",
26
+ password: "$2a$10$ZDt9V644BLOC.HTBDrzFlOcg5WWaHIFcDaoPhSVaiEA9xGyp0NtOq",
27
+ isActive: true,
28
+ isDeleted: false,
29
+ adminRoleId: "53394cb8-1e87-11ef-8b48-bed54b8f8aba",
30
+ },
31
+ },
32
+ ];
@@ -0,0 +1,49 @@
1
+ export const featureQuery = `
2
+ MERGE (feature:Feature {id: $featureId})
3
+ ON CREATE SET
4
+ feature.name=$featureName,
5
+ feature.isProduction=$isProduction,
6
+ feature.createdAt = datetime(),
7
+ feature.updatedAt = datetime()
8
+ ON MATCH SET
9
+ feature.name=$featureName,
10
+ feature.isProduction=$isProduction,
11
+ feature.updatedAt = datetime()
12
+ RETURN feature
13
+ `;
14
+
15
+ export const moduleQuery = `
16
+ MERGE (module:Module {id: $moduleId})
17
+ ON CREATE SET
18
+ module.name=$moduleName,
19
+ module.permissions = $permissions,
20
+ module.isCore = $isCore,
21
+ module.createdAt = datetime(),
22
+ module.updatedAt = datetime()
23
+ ON MATCH SET
24
+ module.name = $moduleName,
25
+ module.isCore = $isCore,
26
+ module.updatedAt = CASE WHEN module.permissions <> $permissions THEN datetime() ELSE module.updatedAt END,
27
+ module.permissions = CASE WHEN module.permissions <> $permissions THEN $permissions ELSE module.permissions END
28
+ WITH module
29
+
30
+ MATCH (feature:Feature) WHERE $featureId IS NOT NULL AND feature.id = $featureId
31
+ WITH module, feature
32
+ WHERE feature IS NOT NULL
33
+ MERGE (module)-[:IN_FEATURE]->(feature)
34
+ `;
35
+
36
+ export const roleQuery = `
37
+ MERGE (role:Role {id: $roleId})
38
+ ON CREATE SET role.name=$roleName, role.isSelectable=$isSelectable, role.createdAt = datetime(), role.updatedAt = datetime()
39
+ ON MATCH SET role.name=$roleName, role.isSelectable=$isSelectable, role.createdAt = datetime(), role.updatedAt = datetime()
40
+ RETURN role
41
+ `;
42
+
43
+ export const permissionQuery = `
44
+ MATCH (role:Role {id: $roleId})
45
+ MATCH (module:Module {id: $moduleId})
46
+ MERGE (role)-[permissions:HAS_PERMISSIONS]->(module)
47
+ ON CREATE SET permissions.permissions = $permissions
48
+ ON MATCH SET permissions.permissions = $permissions
49
+ `;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Ambient type declarations for LangChain v1.0 modules
3
+ *
4
+ * These declarations help TypeScript resolve LangChain modules when using
5
+ * classic "node" module resolution (required for NestJS CommonJS compatibility).
6
+ *
7
+ * LangChain v1.0 uses modern package.json exports which aren't fully supported
8
+ * by the legacy "node" resolution strategy, but work fine at runtime.
9
+ */
10
+
11
+ // Core modules
12
+ declare module "@langchain/core/documents" {
13
+ export * from "@langchain/core/dist/documents";
14
+ }
15
+
16
+ declare module "@langchain/core/prompts" {
17
+ export * from "@langchain/core/dist/prompts/index";
18
+ }
19
+
20
+ declare module "@langchain/core/embeddings" {
21
+ export * from "@langchain/core/dist/embeddings";
22
+ }
23
+
24
+ declare module "@langchain/core/language_models/chat_models" {
25
+ export * from "@langchain/core/dist/language_models/chat_models";
26
+ }
27
+
28
+ declare module "@langchain/core/output_parsers" {
29
+ export * from "@langchain/core/dist/output_parsers/index";
30
+ }
31
+
32
+ declare module "@langchain/core/messages" {
33
+ export * from "@langchain/core/dist/messages/index";
34
+ }
35
+
36
+ declare module "@langchain/core/document_loaders/base" {
37
+ export * from "@langchain/core/dist/document_loaders/base";
38
+ }
39
+
40
+ // Community modules
41
+ declare module "@langchain/community/document_loaders/web/recursive_url" {
42
+ export * from "@langchain/community/dist/document_loaders/web/recursive_url";
43
+ }
44
+
45
+ declare module "@langchain/community/document_loaders/fs/csv" {
46
+ export * from "@langchain/community/dist/document_loaders/fs/csv";
47
+ }
48
+
49
+ declare module "@langchain/community/document_loaders/fs/docx" {
50
+ export * from "@langchain/community/dist/document_loaders/fs/docx";
51
+ }
52
+
53
+ // Text splitters
54
+ declare module "@langchain/textsplitters" {
55
+ export * from "@langchain/textsplitters/dist/index";
56
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
4
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "target": "ES2021",
5
+ "outDir": "./dist",
6
+ "baseUrl": "./",
7
+ "incremental": true,
8
+ "importHelpers": true,
9
+ // Override strict settings for API (keeping existing behavior)
10
+ "strict": false,
11
+ "strictNullChecks": false,
12
+ "noImplicitAny": false,
13
+ "strictBindCallApply": false,
14
+ "strictFunctionTypes": false,
15
+ "strictPropertyInitialization": false,
16
+ "noImplicitThis": false,
17
+ "alwaysStrict": false,
18
+ "forceConsistentCasingInFileNames": false,
19
+ "noFallthroughCasesInSwitch": false,
20
+ "noUnusedLocals": false,
21
+ "noUnusedParameters": false,
22
+ "noImplicitReturns": false,
23
+ "paths": {
24
+ "src/*": ["src/*"],
25
+ "@langchain/core/*": ["node_modules/@langchain/core/dist/*"],
26
+ "@langchain/community/*": ["node_modules/@langchain/community/dist/*"],
27
+ "@langchain/textsplitters": ["node_modules/@langchain/textsplitters/dist/index"]
28
+ }
29
+ },
30
+ "ts-node": {
31
+ "transpileOnly": false,
32
+ "compilerOptions": {
33
+ "module": "commonjs"
34
+ }
35
+ },
36
+ "include": ["src/**/*", "test/**/*", "templates"],
37
+ "exclude": ["dist", "node_modules"]
38
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "jsc": {
3
+ "target": "es2022",
4
+ "parser": {
5
+ "syntax": "typescript", // or "ecmascript" for JavaScript
6
+ "tsx": true, // true if using JSX/TSX
7
+ "dynamicImport": true,
8
+ "decorators": true
9
+ },
10
+ "transform": {
11
+ "react": {
12
+ "runtime": "automatic", // for the new JSX transform
13
+ "pragma": "React.createElement",
14
+ "pragmaFrag": "React.Fragment",
15
+ "throwIfNamespace": true,
16
+ "development": false,
17
+ "useBuiltins": true
18
+ }
19
+ },
20
+ "keepClassNames": true
21
+ },
22
+ "module": {
23
+ "type": "commonjs" // or "es6" for ES modules
24
+ },
25
+ "sourceMaps": true // if you want source maps generated
26
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/app/globals.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "utils": "@/lib/utils",
16
+ "ui": "@/components/ui",
17
+ "lib": "@/lib",
18
+ "hooks": "@/hooks"
19
+ },
20
+ "iconLibrary": "lucide"
21
+ }
@@ -0,0 +1,33 @@
1
+ import nextVitals from "eslint-config-next/core-web-vitals";
2
+ import nextTs from "eslint-config-next/typescript";
3
+
4
+ const eslintConfig = [
5
+ ...nextVitals,
6
+ ...nextTs,
7
+ {
8
+ rules: {
9
+ "@typescript-eslint/no-explicit-any": "off",
10
+ "@typescript-eslint/no-require-imports": "off",
11
+ "@typescript-eslint/no-unused-vars": "off",
12
+ "@typescript-eslint/no-unused-expressions": "warn",
13
+ "@typescript-eslint/no-empty-object-type": "off",
14
+ "@next/next/no-assign-module-variable": "warn",
15
+ "react-hooks/exhaustive-deps": "off",
16
+ "react-hooks/rules-of-hooks": "off",
17
+ // Disable React Compiler rules (not needed unless using React Compiler)
18
+ "react-hooks/set-state-in-effect": "off",
19
+ "react-hooks/preserve-manual-memoization": "off",
20
+ "react-hooks/purity": "off",
21
+ "react-hooks/refs": "off",
22
+ "react-hooks/incompatible-library": "off",
23
+ "react-hooks/static-components": "off",
24
+ "react-hooks/immutability": "off",
25
+ "react-hooks/use-memo": "off",
26
+ },
27
+ },
28
+ {
29
+ ignores: [".next/**", "out/**", "build/**", "next-env.d.ts", "node_modules/**"],
30
+ },
31
+ ];
32
+
33
+ export default eslintConfig;
@@ -0,0 +1,7 @@
1
+ import it from "./messages/it.json";
2
+
3
+ type Messages = typeof it;
4
+
5
+ declare global {
6
+ interface IntlMessages extends Messages {}
7
+ }
@@ -0,0 +1,249 @@
1
+ {
2
+ "foundations": {
3
+ "auth": {
4
+ "accept_invitation": "Accept Invitation",
5
+ "account_activated": "Account Activated",
6
+ "account_activated_description": "Your account is ready. Log in to access Phlow",
7
+ "activation_description": "Your account has been successfully activated. You will be redirected to the login page shortly.",
8
+ "activation_wait": "Please wait while your account is being activated...",
9
+ "add_email_to_reset": "Please add your email to reset your password.",
10
+ "buttons": {
11
+ "forgot_password": "Forgot Password?",
12
+ "login": "Login",
13
+ "logout": "Logout",
14
+ "register": "Register",
15
+ "reset_password": "Reset Password"
16
+ },
17
+ "errors": {
18
+ "activating_account": "An error occurred while activating your account.",
19
+ "invalid_invitation_code": "Invalid invitation code",
20
+ "invalid_password_reset_code": "Invalid password reset code",
21
+ "password_invalid_format": "Password must contain at least one number and one special character (non-alphanumeric)",
22
+ "password_reset_error": "An error occurred while resetting the password.",
23
+ "password_retype_required": "Password retype is required",
24
+ "password_too_short": "Password must be at least 8 characters long"
25
+ },
26
+ "fields": {
27
+ "retype_password": {
28
+ "error": "Password retype is required",
29
+ "error_not_match": "Passwords do not match",
30
+ "label": "Repeat Password",
31
+ "placeholder": "Repeat Password"
32
+ }
33
+ },
34
+ "forgot_password": "Forgot Password?",
35
+ "login": "Login",
36
+ "login_description": "Login to Phlow",
37
+ "password_reset": "Reset Password",
38
+ "register": "Register",
39
+ "register_confirmation": "Thank you for registering. Please check your email for the confirmation link.",
40
+ "register_description": "Registering for Phlow creates a company. If you want to join an existing company, please contact the company administrators.",
41
+ "reset_confirmation": "If your email is registered in our system, you will receive an email with instructions to reset your password.",
42
+ "reset_password": "You can reset your account password from this page.",
43
+ "reset_success": "Password Reset Successful",
44
+ "reset_success_description": "Your password has been successfully reset. You will be redirected to the login page shortly.",
45
+ "select_password": "Please add your preferred password to access Phlow."
46
+ },
47
+ "company": {
48
+ "click_drag_logo": "Click or drag a logo to upload it",
49
+ "features_and_modules": "Features and Modules",
50
+ "fields": {
51
+ "name": {
52
+ "error": "The company name is required",
53
+ "label": "Company Name",
54
+ "placeholder": "Enter Company Name"
55
+ }
56
+ }
57
+ },
58
+ "content": {
59
+ "news": "Recent Relevant Contents",
60
+ "latest": "Latest Contents",
61
+ "fields": {
62
+ "name": {
63
+ "label": "Name"
64
+ }
65
+ }
66
+ },
67
+ "notification": {
68
+ "archived": "Archived",
69
+ "buttons": {
70
+ "archive": "Archive Notification"
71
+ },
72
+ "empty": "No notifications available",
73
+ "inbox": "Inbox"
74
+ },
75
+ "role": {
76
+ "fields": {
77
+ "description": {
78
+ "label": "Description"
79
+ },
80
+ "name": {
81
+ "label": "Role Name"
82
+ }
83
+ },
84
+ "remove_user": {
85
+ "description_allowed": "Are you sure you want to remove the {role} role from {user}?",
86
+ "description_not_allowed": "You cannot remove the {role} role from {user} because they are the only user in that role and it requires at least one user!",
87
+ "subtitle_allowed": "Remove a role from a user",
88
+ "subtitle_not_allowed": "Cannot remove user from role",
89
+ "title": "Remove Role from User"
90
+ },
91
+ "roles": "{role, select, 2e1eee006cba45069059ccd24e4ea5b0 {System Administrator} other {N/A}}",
92
+ "roles_descriptions": "{role, select, 2e1eee006cba45069059ccd24e4ea5b0 {Has FULL ACCESS to the data and features of the company.} other {N/A}}"
93
+ },
94
+ "user": {
95
+ "buttons": {
96
+ "reactivate": "Reactivate User",
97
+ "resend_activation": "Resend Activation Email"
98
+ },
99
+ "deleted": "Deleted User",
100
+ "errors": {
101
+ "deleted": "Deleted User",
102
+ "email_exists": "Another user with this email already exists",
103
+ "inactive": "Inactive User"
104
+ },
105
+ "fields": {
106
+ "bio": {
107
+ "label": "Bio",
108
+ "placeholder": "Enter user's Bio"
109
+ },
110
+ "name": {
111
+ "error": "The name is required",
112
+ "label": "Name",
113
+ "placeholder": "Enter Name"
114
+ },
115
+ "password": {
116
+ "error": "The password is required",
117
+ "label": "Password",
118
+ "placeholder": "Enter Password"
119
+ },
120
+ "phone": {
121
+ "label": "Phone Number",
122
+ "placeholder": "Enter user's Phone Number"
123
+ },
124
+ "title": {
125
+ "label": "Title",
126
+ "placeholder": "Enter user's Title"
127
+ }
128
+ },
129
+ "reactivate": {
130
+ "description": "Are you sure you want to reactivate {name}'s account? The user will be able to log in to Phlow again and interact with the law firm's knowledge.",
131
+ "subtitle": "Are you sure you want to reactivate this user?",
132
+ "title": "Reactivate User"
133
+ },
134
+ "resend_activation": {
135
+ "description": "Are you sure you want to resend the activation email to {email}?",
136
+ "email_sent": "Email Sent",
137
+ "email_sent_description": "The activation email has been sent to {email}",
138
+ "subtitle": "Are you sure you want to resend the activation email to this user?",
139
+ "title": "Resend Activation Email"
140
+ },
141
+ "send_activation_email": "Send Activation Email"
142
+ }
143
+ },
144
+ "generic": {
145
+ "avatar": "Avatar",
146
+ "blocknote": {
147
+ "placeholder": "Type text or enter '/' for commands"
148
+ },
149
+ "buttons": {
150
+ "cancel": "Cancel",
151
+ "confirm_create": "Create",
152
+ "confirm_delete": "Confirm Deletion",
153
+ "confirm_update": "Update",
154
+ "create": "Create New",
155
+ "delete": "Delete",
156
+ "is_deleting": "Deleting...",
157
+ "remove": "Remove",
158
+ "select_date": "Select Date",
159
+ "show_less": "Show less",
160
+ "show_more": "Show more"
161
+ },
162
+ "create": "New",
163
+ "create_new": "Create New",
164
+ "dashboard": "Phlow - {companyName}",
165
+ "date": {
166
+ "create": "Creation",
167
+ "update": "Last Updated"
168
+ },
169
+ "delete": {
170
+ "confirmation": "Please type the name of the {type} to confirm deletion",
171
+ "description": "Deleting this {type} will result in the loss of all associated data. This action cannot be undone.",
172
+ "subtitle": "Are you sure you want to delete this {type}?",
173
+ "title": "Delete {type}"
174
+ },
175
+ "description": "Phlow is an expertise and knowledge development platform.",
176
+ "edit": {
177
+ "create": {
178
+ "description": "Create a new {type}",
179
+ "title": "New {type}"
180
+ },
181
+ "update": {
182
+ "description": "Update the existing {type} {name}",
183
+ "title": "Update {type}"
184
+ }
185
+ },
186
+ "errors": {
187
+ "create": "Creation Error",
188
+ "delete": "Deletion Error",
189
+ "error": "Error",
190
+ "file": "File Error",
191
+ "file_large": "The file appears to be too large to upload. Please try a smaller file.",
192
+ "file_max": "The file is too large. The maximum size is {size}MB",
193
+ "file_no_select": "No file selected",
194
+ "invalid_email": "Invalid email address",
195
+ "missing_company_name": "The company name is required",
196
+ "missing_name": "Name is required",
197
+ "update": "Update Error",
198
+ "upload": "Upload Error",
199
+ "upload_description": "An error occurred while uploading the file. Please try again.",
200
+ "valid_url": "Please enter a valid URL"
201
+ },
202
+ "fields": {
203
+ "email": {
204
+ "error": "The email address is required",
205
+ "label": "Email",
206
+ "placeholder": "Add email address"
207
+ }
208
+ },
209
+ "hide_password": "Hide Password",
210
+ "home": "Home Page",
211
+ "levels": "{level, select, 1 {Not aware} 2 {Aware} 3 {Skilled} 4 {Expert} 5 {Strategist} other {N/A}}",
212
+ "loading": "Loading...",
213
+ "my_profile": "My Profile",
214
+ "permissions": "Users",
215
+ "pick_date_time": "Pick date & time",
216
+ "query_knowledge": "Query Knowledge",
217
+ "recent_pages": "Recent Pages",
218
+ "relationships": {
219
+ "author": {
220
+ "error": "Author is required",
221
+ "label": "Author",
222
+ "placeholder": "Select Author"
223
+ }
224
+ },
225
+ "relevance": "Relevance",
226
+ "relevant": "Relevant Contents",
227
+ "relevant_users": "Relevant Users",
228
+ "remove_item": "Remove item",
229
+ "search": {
230
+ "button": "Search...",
231
+ "no_results": "No {type} found",
232
+ "placeholder": "Search {type}...",
233
+ "placeholder_global": "Search...",
234
+ "recent_searches": "Recent Searches"
235
+ },
236
+ "settings": "Settings",
237
+ "settings_sidebar": "{item, select, company {Law Firm} crm {Customer Relationship Management} tariff {Legal Tariff} quote {Quotes} other {N/A}}",
238
+ "show_password": "Show Password",
239
+ "sidebar": "{type, select, expertise {Expertise} knowledge {Knowledge} other {N/A}}",
240
+ "theme": "Change Theme",
241
+ "title": "Phlow"
242
+ },
243
+ "types": {
244
+ "companies": "{count, plural, =1 {Company} other {Companies}}",
245
+ "notifications": "{count, plural, =1 {Notification} other {Notifications}}",
246
+ "roles": "{count, plural, =1 {System Role} other {System Roles}}",
247
+ "users": "{count, plural, =1 {User} other {Users}}"
248
+ }
249
+ }