@team-codeme/crud-forge 0.0.0-stage → 1.0.1

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 (415) hide show
  1. package/.cursor/agents/generator-engineer.md +31 -0
  2. package/.cursor/agents/keycloak-engineer.md +33 -0
  3. package/.cursor/agents/qa-engineer.md +32 -0
  4. package/.cursor/agents/security-reviewer.md +30 -0
  5. package/.cursor/mcp.json +13 -0
  6. package/.cursor/rules/crudforge-precautions.mdc +16 -0
  7. package/.cursor/rules/playwright-browser.mdc +30 -0
  8. package/.cursor/rules/readme-todo-sync.mdc +13 -0
  9. package/.env.qa.example +19 -0
  10. package/.github/workflows/qa-live.yml +32 -0
  11. package/.github/workflows/qa.yml +27 -0
  12. package/.vscode/settings.json +32 -0
  13. package/QA/IAM-PLAN.md +25 -0
  14. package/QA/IAM-RESULTS.md +39 -0
  15. package/QA/IAM-TESTCASES.md +36 -0
  16. package/QA/IAM-TODO.md +7 -0
  17. package/QA/KEYCLOAK-BOOTSTRAP.md +105 -0
  18. package/QA/PLAN.md +43 -0
  19. package/QA/RESULTS.md +59 -0
  20. package/QA/TESTCASES.md +65 -0
  21. package/QA/TODO.md +14 -0
  22. package/QA/pmb-dev/README.md +49 -0
  23. package/QA/pmb-dev/config/config.yml +152 -0
  24. package/QA/pmb-dev/gdl/i.gdl +17 -0
  25. package/README.md +851 -2
  26. package/Todo.md +207 -0
  27. package/assets/branding/crudforge-logo.png +0 -0
  28. package/assets/branding/crudforge-mark.png +0 -0
  29. package/branding/poster-crudforge.jpg +0 -0
  30. package/chat/last-chat/Investigating Mock Data Configuration.md +428 -0
  31. package/cli.js +167 -0
  32. package/config/default-config.yml +245 -0
  33. package/docs/performance/README.md +217 -0
  34. package/docs/performance/after.json +111 -0
  35. package/docs/performance/before.json +111 -0
  36. package/docs/quality/README.md +276 -0
  37. package/e2e/crudforge.e2e.yml +47 -0
  38. package/e2e/crudforge.field-profile.yml +33 -0
  39. package/e2e/crudforge.iam-live.yml +124 -0
  40. package/e2e/crudforge.iam.yml +62 -0
  41. package/e2e/tests/field-profile.spec.js +152 -0
  42. package/e2e/tests/generated-crud.spec.js +251 -0
  43. package/e2e/tests/iam-live.spec.js +149 -0
  44. package/e2e/tests/iam-pack.spec.js +151 -0
  45. package/e2e/tests/list-state.spec.js +73 -0
  46. package/features.csv +27 -0
  47. package/fuse-starter-pack/branding/crudforge-mark-source.jpg +0 -0
  48. package/fuse-starter-pack/branding/crudforge-mark-source.png +0 -0
  49. package/fuse-starter-pack/branding/crudforge-mark.png +0 -0
  50. package/fuse-starter-pack/branding/crudforge-wordmark-source.jpg +0 -0
  51. package/fuse-starter-pack/branding/crudforge-wordmark-source.png +0 -0
  52. package/fuse-starter-pack/branding/crudforge-wordmark.png +0 -0
  53. package/fuse-starter-pack/fuse-v21.1/Dockerfile +14 -0
  54. package/fuse-starter-pack/fuse-v21.1/LICENSE.md +6 -0
  55. package/fuse-starter-pack/fuse-v21.1/README.md +59 -0
  56. package/fuse-starter-pack/fuse-v21.1/angular.json +113 -0
  57. package/fuse-starter-pack/fuse-v21.1/eslint.config.ts +150 -0
  58. package/fuse-starter-pack/fuse-v21.1/nginx.conf +23 -0
  59. package/fuse-starter-pack/fuse-v21.1/nginx.dev.conf +18 -0
  60. package/fuse-starter-pack/fuse-v21.1/package-lock.json +11513 -0
  61. package/fuse-starter-pack/fuse-v21.1/package.json +69 -0
  62. package/fuse-starter-pack/fuse-v21.1/postcss.config.json +5 -0
  63. package/fuse-starter-pack/fuse-v21.1/prettier.config.ts +15 -0
  64. package/fuse-starter-pack/fuse-v21.1/proxy.conf.json +8 -0
  65. package/fuse-starter-pack/fuse-v21.1/proxy.dev.conf.json +8 -0
  66. package/fuse-starter-pack/fuse-v21.1/public/favicon.png +0 -0
  67. package/fuse-starter-pack/fuse-v21.1/public/fonts/geist/Geist-Italic.woff2 +0 -0
  68. package/fuse-starter-pack/fuse-v21.1/public/fonts/geist/Geist.woff2 +0 -0
  69. package/fuse-starter-pack/fuse-v21.1/public/fonts/geist/GeistMono-Italic.woff2 +0 -0
  70. package/fuse-starter-pack/fuse-v21.1/public/fonts/geist/GeistMono.woff2 +0 -0
  71. package/fuse-starter-pack/fuse-v21.1/public/i18n/en.json +8 -0
  72. package/fuse-starter-pack/fuse-v21.1/public/i18n/es.json +8 -0
  73. package/fuse-starter-pack/fuse-v21.1/public/images/flags/ES.svg +79 -0
  74. package/fuse-starter-pack/fuse-v21.1/public/images/flags/US.svg +14 -0
  75. package/fuse-starter-pack/fuse-v21.1/public/images/flags/where-to-find-other-flags.txt +5 -0
  76. package/fuse-starter-pack/fuse-v21.1/public/images/logo/logo-mark.png +0 -0
  77. package/fuse-starter-pack/fuse-v21.1/public/images/logo/logo.png +0 -0
  78. package/fuse-starter-pack/fuse-v21.1/push.sh +27 -0
  79. package/fuse-starter-pack/fuse-v21.1/src/app/app.config.server.ts +10 -0
  80. package/fuse-starter-pack/fuse-v21.1/src/app/app.config.ts +64 -0
  81. package/fuse-starter-pack/fuse-v21.1/src/app/app.routes.server.ts +8 -0
  82. package/fuse-starter-pack/fuse-v21.1/src/app/app.routes.ts +39 -0
  83. package/fuse-starter-pack/fuse-v21.1/src/app/app.ts +22 -0
  84. package/fuse-starter-pack/fuse-v21.1/src/app/core/icons/index.ts +1 -0
  85. package/fuse-starter-pack/fuse-v21.1/src/app/core/icons/lucide.ts +1 -0
  86. package/fuse-starter-pack/fuse-v21.1/src/app/core/icons/provider.ts +23 -0
  87. package/fuse-starter-pack/fuse-v21.1/src/app/core/local-storage/index.ts +2 -0
  88. package/fuse-starter-pack/fuse-v21.1/src/app/core/local-storage/local-storage.ts +109 -0
  89. package/fuse-starter-pack/fuse-v21.1/src/app/core/local-storage/provider.ts +15 -0
  90. package/fuse-starter-pack/fuse-v21.1/src/app/core/media/index.ts +2 -0
  91. package/fuse-starter-pack/fuse-v21.1/src/app/core/media/media.ts +64 -0
  92. package/fuse-starter-pack/fuse-v21.1/src/app/core/media/provider.ts +15 -0
  93. package/fuse-starter-pack/fuse-v21.1/src/app/core/theming/index.ts +3 -0
  94. package/fuse-starter-pack/fuse-v21.1/src/app/core/theming/models/theming.ts +13 -0
  95. package/fuse-starter-pack/fuse-v21.1/src/app/core/theming/palette.ts +209 -0
  96. package/fuse-starter-pack/fuse-v21.1/src/app/core/theming/provider.ts +24 -0
  97. package/fuse-starter-pack/fuse-v21.1/src/app/core/theming/theming.ts +129 -0
  98. package/fuse-starter-pack/fuse-v21.1/src/app/core/transloco/transloco-http-loader.ts +12 -0
  99. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/data/navigation.ts +176 -0
  100. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/layout.ts +77 -0
  101. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/language-switcher.ts +91 -0
  102. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/navigation.ts +238 -0
  103. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/notifications.ts +252 -0
  104. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/scheme-switcher.ts +58 -0
  105. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/sidebar.ts +31 -0
  106. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/layout/ui/user.ts +132 -0
  107. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/academy/data/academy.ts +753 -0
  108. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/academy/data/model.ts +27 -0
  109. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/academy/features/course.ts +318 -0
  110. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/academy/features/courses.ts +228 -0
  111. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/academy/routes.ts +14 -0
  112. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/contacts/data/contacts.ts +4372 -0
  113. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/contacts/data/model.ts +34 -0
  114. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/contacts/features/contact.ts +239 -0
  115. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/contacts/features/contacts.ts +185 -0
  116. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/contacts/routes.ts +16 -0
  117. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/file-manager/data/file-manager.ts +261 -0
  118. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/file-manager/data/model.ts +12 -0
  119. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/file-manager/features/file-manager.ts +131 -0
  120. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/file-manager/routes.ts +15 -0
  121. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/file-manager/ui/list.ts +164 -0
  122. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/help-center/features/faq.ts +288 -0
  123. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/help-center/features/guide.ts +134 -0
  124. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/help-center/features/home.ts +219 -0
  125. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/help-center/features/support.ts +161 -0
  126. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/help-center/routes.ts +33 -0
  127. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/notes/data/model.ts +18 -0
  128. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/notes/data/notes.ts +324 -0
  129. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/notes/features/note.ts +152 -0
  130. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/notes/features/notes.ts +118 -0
  131. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/notes/routes.ts +16 -0
  132. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/tasks/data/model.ts +17 -0
  133. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/tasks/data/tasks.ts +562 -0
  134. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/tasks/features/task.ts +195 -0
  135. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/tasks/features/tasks.ts +271 -0
  136. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/apps/tasks/routes.ts +16 -0
  137. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/data/analytics.ts +1620 -0
  138. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/data/finance.ts +1065 -0
  139. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/data/project.ts +376 -0
  140. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/features/analytics/analytics.ts +1096 -0
  141. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/features/finance/finance.ts +658 -0
  142. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/features/project/budget-table.ts +188 -0
  143. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/features/project/project.ts +565 -0
  144. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/dashboards/routes.ts +23 -0
  145. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/features/changelog/changelog.ts +932 -0
  146. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/features/getting-started/building.ts +33 -0
  147. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/features/getting-started/development.ts +42 -0
  148. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/features/getting-started/installation.ts +47 -0
  149. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/layout.ts +9 -0
  150. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/documentation/routes.ts +45 -0
  151. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/error/features/error-page.ts +70 -0
  152. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/error/routes.ts +21 -0
  153. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/notifications/features/notifications.ts +262 -0
  154. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/notifications/routes.ts +10 -0
  155. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/features/account.ts +238 -0
  156. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/features/notifications.ts +134 -0
  157. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/features/plan-and-billing.ts +238 -0
  158. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/features/security.ts +211 -0
  159. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/features/team.ts +188 -0
  160. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/layout.ts +109 -0
  161. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/settings/routes.ts +37 -0
  162. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/modules/extras/welcome/welcome.component.ts +22 -0
  163. package/fuse-starter-pack/fuse-v21.1/src/app/domains/admin/routes.ts +95 -0
  164. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/forgot-password/forgot-password.html +54 -0
  165. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/forgot-password/forgot-password.ts +51 -0
  166. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/reset-password/reset-password.html +82 -0
  167. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/reset-password/reset-password.ts +69 -0
  168. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/sign-in/sign-in.html +132 -0
  169. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/sign-in/sign-in.ts +54 -0
  170. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/sign-up/sign-up.html +183 -0
  171. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/features/sign-up/sign-up.ts +56 -0
  172. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/layout.ts +9 -0
  173. package/fuse-starter-pack/fuse-v21.1/src/app/domains/auth/routes.ts +34 -0
  174. package/fuse-starter-pack/fuse-v21.1/src/app/domains/coming-soon/features/coming-soon.ts +156 -0
  175. package/fuse-starter-pack/fuse-v21.1/src/app/domains/coming-soon/layout.ts +9 -0
  176. package/fuse-starter-pack/fuse-v21.1/src/app/domains/coming-soon/routes.ts +16 -0
  177. package/fuse-starter-pack/fuse-v21.1/src/app/domains/website/layout/layout.ts +9 -0
  178. package/fuse-starter-pack/fuse-v21.1/src/app/domains/website/modules/home/features/home.ts +23 -0
  179. package/fuse-starter-pack/fuse-v21.1/src/app/domains/website/modules/home/routes.ts +10 -0
  180. package/fuse-starter-pack/fuse-v21.1/src/app/domains/website/routes.ts +30 -0
  181. package/fuse-starter-pack/fuse-v21.1/src/environments/environment.mock.ts +5 -0
  182. package/fuse-starter-pack/fuse-v21.1/src/environments/environment.prod.ts +5 -0
  183. package/fuse-starter-pack/fuse-v21.1/src/environments/environment.ts +5 -0
  184. package/fuse-starter-pack/fuse-v21.1/src/index.html +66 -0
  185. package/fuse-starter-pack/fuse-v21.1/src/main.server.ts +11 -0
  186. package/fuse-starter-pack/fuse-v21.1/src/main.ts +5 -0
  187. package/fuse-starter-pack/fuse-v21.1/src/server.ts +70 -0
  188. package/fuse-starter-pack/fuse-v21.1/src/styles/base/base.css +63 -0
  189. package/fuse-starter-pack/fuse-v21.1/src/styles/base/typography.css +54 -0
  190. package/fuse-starter-pack/fuse-v21.1/src/styles/components/a.css +18 -0
  191. package/fuse-starter-pack/fuse-v21.1/src/styles/components/input.css +22 -0
  192. package/fuse-starter-pack/fuse-v21.1/src/styles/components/kbd.css +55 -0
  193. package/fuse-starter-pack/fuse-v21.1/src/styles/components/material.css +1149 -0
  194. package/fuse-starter-pack/fuse-v21.1/src/styles/styles.css +31 -0
  195. package/fuse-starter-pack/fuse-v21.1/src/styles/tailwind/theme.css +147 -0
  196. package/fuse-starter-pack/fuse-v21.1/src/styles/tailwind/utilities.css +563 -0
  197. package/fuse-starter-pack/fuse-v21.1/src/styles/tailwind/variants.css +4 -0
  198. package/fuse-starter-pack/fuse-v21.1/src/styles/third-party/lucide-icons.css +12 -0
  199. package/fuse-starter-pack/fuse-v21.1/tsconfig.app.json +16 -0
  200. package/fuse-starter-pack/fuse-v21.1/tsconfig.json +37 -0
  201. package/fuse-starter-pack/fuse-v21.1/tsconfig.spec.json +10 -0
  202. package/generator/README.md +12 -0
  203. package/generator/issues/.gitkeep +0 -0
  204. package/package.json +56 -4
  205. package/playwright.config.js +29 -0
  206. package/playwright.field-profile.config.js +6 -0
  207. package/playwright.iam-live.config.js +31 -0
  208. package/playwright.iam.config.js +29 -0
  209. package/playwright.list-state.config.js +6 -0
  210. package/playwright.performance.config.js +1 -0
  211. package/run-config-tests.sh +5 -0
  212. package/scripts/e2e-paths.js +89 -0
  213. package/scripts/e2e-prepare-field-profile.js +17 -0
  214. package/scripts/e2e-prepare-iam-live.js +135 -0
  215. package/scripts/e2e-prepare-iam.js +65 -0
  216. package/scripts/e2e-prepare.js +72 -0
  217. package/scripts/e2e-serve-iam-live.js +28 -0
  218. package/scripts/e2e-serve-iam.js +28 -0
  219. package/scripts/e2e-serve.js +28 -0
  220. package/scripts/performance/generate.js +17 -0
  221. package/scripts/performance/measure.js +55 -0
  222. package/scripts/postinstall.js +9 -0
  223. package/scripts/prepare-quality-apps.js +34 -0
  224. package/scripts/run-config-tests.js +63 -0
  225. package/src/assets/logo-with-lable.jpeg +0 -0
  226. package/src/assets/logo.jpeg +0 -0
  227. package/src/commands/bootstrap.js +92 -0
  228. package/src/commands/doctor.js +403 -0
  229. package/src/commands/generate.js +301 -0
  230. package/src/commands/init-config.js +310 -0
  231. package/src/commands/keycloak-options.js +182 -0
  232. package/src/commands/validate.js +52 -0
  233. package/src/config/auth-config.js +183 -0
  234. package/src/config/default-values.js +235 -0
  235. package/src/config/env-refs.js +71 -0
  236. package/src/config/field-preferences.js +99 -0
  237. package/src/config/input-sources.js +104 -0
  238. package/src/config/load-config.js +166 -0
  239. package/src/config/proxy-routes.js +44 -0
  240. package/src/generator/access-control-tools.js +334 -0
  241. package/src/generator/ai-docs.js +691 -0
  242. package/src/generator/application-tests.js +252 -0
  243. package/src/generator/auth-pack.js +965 -0
  244. package/src/generator/embed-config.js +431 -0
  245. package/src/generator/entity-layout.js +30 -0
  246. package/src/generator/fuse-build.js +57 -0
  247. package/src/generator/fuse-runtime.js +344 -0
  248. package/src/generator/generated-banner.js +137 -0
  249. package/src/generator/index.js +874 -0
  250. package/src/generator/project-output.js +126 -0
  251. package/src/generator/team-pack.js +220 -0
  252. package/src/index.js +68 -0
  253. package/src/parser/gdl-parser.js +169 -0
  254. package/src/parser/jdl-parser.js +171 -0
  255. package/src/presets/pmb-test.js +139 -0
  256. package/src/presets/static-source.js +73 -0
  257. package/src/presets/store.js +96 -0
  258. package/src/provision/admin-service.js +148 -0
  259. package/src/provision/bootstrap.js +147 -0
  260. package/src/provision/http.js +123 -0
  261. package/src/provision/keycloak-admin-rest.js +335 -0
  262. package/src/provision/state.js +51 -0
  263. package/src/provision/token.js +52 -0
  264. package/src/templates/angular/auth/access-control.service.ts.ejs +179 -0
  265. package/src/templates/angular/auth/access-ctrl.pipe.ts.ejs +20 -0
  266. package/src/templates/angular/auth/auth.guard.ts.ejs +27 -0
  267. package/src/templates/angular/auth/auth.interceptor.ts.ejs +53 -0
  268. package/src/templates/angular/auth/auth.service.ts.ejs +594 -0
  269. package/src/templates/angular/auth/auth.utils.ts.ejs +28 -0
  270. package/src/templates/angular/auth/current-user.ts.ejs +24 -0
  271. package/src/templates/angular/auth/disabled-account-overlay.component.css.ejs +95 -0
  272. package/src/templates/angular/auth/disabled-account-overlay.component.html.ejs +33 -0
  273. package/src/templates/angular/auth/disabled-account-overlay.component.ts.ejs +23 -0
  274. package/src/templates/angular/auth/fuse-account.ts.ejs +234 -0
  275. package/src/templates/angular/auth/fuse-user.ts.ejs +264 -0
  276. package/src/templates/angular/auth/has-permission.directive.ts.ejs +51 -0
  277. package/src/templates/angular/auth/index.ts.ejs +24 -0
  278. package/src/templates/angular/auth/keycloak-admin.service.ts.ejs +670 -0
  279. package/src/templates/angular/auth/landing.guard.ts.ejs +61 -0
  280. package/src/templates/angular/auth/no-auth.guard.ts.ejs +19 -0
  281. package/src/templates/angular/auth/permission-attribute.util.ts.ejs +182 -0
  282. package/src/templates/angular/auth/sign-in.ts.ejs +60 -0
  283. package/src/templates/angular/entity/_entity_.model.ts.ejs +64 -0
  284. package/src/templates/angular/entity/_entity_.routes.ts.ejs +9 -0
  285. package/src/templates/angular/entity/components/forms/form/_entity_-form.component.html.ejs +168 -0
  286. package/src/templates/angular/entity/components/forms/form/_entity_-form.component.ts.ejs +175 -0
  287. package/src/templates/angular/entity/components/forms/form-page/_entity_-form-page.component.html.ejs +10 -0
  288. package/src/templates/angular/entity/components/forms/form-page/_entity_-form-page.component.ts.ejs +86 -0
  289. package/src/templates/angular/entity/components/forms/update/_entity_-form.service.ts.ejs +136 -0
  290. package/src/templates/angular/entity/components/interaction/actions/_entity_-actions.component.html.ejs +68 -0
  291. package/src/templates/angular/entity/components/interaction/actions/_entity_-actions.component.ts.ejs +69 -0
  292. package/src/templates/angular/entity/components/interaction/filter/_entity_-filter.component.html.ejs +111 -0
  293. package/src/templates/angular/entity/components/interaction/filter/_entity_-filter.component.ts.ejs +102 -0
  294. package/src/templates/angular/entity/components/presentation/card/_entity_-card.component.css.ejs +33 -0
  295. package/src/templates/angular/entity/components/presentation/card/_entity_-card.component.html.ejs +29 -0
  296. package/src/templates/angular/entity/components/presentation/card/_entity_-card.component.ts.ejs +93 -0
  297. package/src/templates/angular/entity/components/presentation/detail/_entity_-detail.component.css.ejs +54 -0
  298. package/src/templates/angular/entity/components/presentation/detail/_entity_-detail.component.html.ejs +58 -0
  299. package/src/templates/angular/entity/components/presentation/detail/_entity_-detail.component.ts.ejs +47 -0
  300. package/src/templates/angular/entity/components/presentation/list/_entity_-list.component.html.ejs +419 -0
  301. package/src/templates/angular/entity/components/presentation/list/_entity_-list.component.scss.ejs +48 -0
  302. package/src/templates/angular/entity/components/presentation/list/_entity_-list.component.ts.ejs +592 -0
  303. package/src/templates/angular/entity/service/_entity_.service.ts.ejs +153 -0
  304. package/src/templates/angular/entity/settings/_entity_.settings.ts.ejs +49 -0
  305. package/src/templates/angular/enums/_enum_.model.ts.ejs +11 -0
  306. package/src/templates/angular/iam/change-password.component.html.ejs +39 -0
  307. package/src/templates/angular/iam/change-password.component.ts.ejs +44 -0
  308. package/src/templates/angular/iam/no-access.component.ts.ejs +17 -0
  309. package/src/templates/angular/iam/role-list.component.html.ejs +331 -0
  310. package/src/templates/angular/iam/role-list.component.scss.ejs +107 -0
  311. package/src/templates/angular/iam/role-list.component.ts.ejs +597 -0
  312. package/src/templates/angular/iam/role-management/role-header.component.html.ejs +51 -0
  313. package/src/templates/angular/iam/role-management/role-header.component.ts.ejs +45 -0
  314. package/src/templates/angular/iam/role-management/role-inheritance.component.html.ejs +15 -0
  315. package/src/templates/angular/iam/role-management/role-inheritance.component.ts.ejs +19 -0
  316. package/src/templates/angular/iam/role-management/role-permissions-panel.component.css.ejs +24 -0
  317. package/src/templates/angular/iam/role-management/role-permissions-panel.component.html.ejs +108 -0
  318. package/src/templates/angular/iam/role-management/role-permissions-panel.component.ts.ejs +122 -0
  319. package/src/templates/angular/iam/role-management/role-users.component.html.ejs +104 -0
  320. package/src/templates/angular/iam/role-management/role-users.component.ts.ejs +53 -0
  321. package/src/templates/angular/iam/role-management/user-select-dialog.component.html.ejs +113 -0
  322. package/src/templates/angular/iam/role-management/user-select-dialog.component.ts.ejs +157 -0
  323. package/src/templates/angular/iam/role-permission-matrix.component.html.ejs +355 -0
  324. package/src/templates/angular/iam/role-permission-matrix.component.scss.ejs +217 -0
  325. package/src/templates/angular/iam/role-permission-matrix.component.ts.ejs +800 -0
  326. package/src/templates/angular/iam/screen-catalog.ts.ejs +147 -0
  327. package/src/templates/angular/iam/shared/confirm-dialog.component.ts.ejs +83 -0
  328. package/src/templates/angular/iam/shared/matrix-hierarchy.util.ts.ejs +196 -0
  329. package/src/templates/angular/iam/shared/permission-matrix-sound.ts.ejs +59 -0
  330. package/src/templates/angular/iam/shared/role-display.util.ts.ejs +43 -0
  331. package/src/templates/angular/iam/shared/role-permission-skeleton.component.ts.ejs +54 -0
  332. package/src/templates/angular/iam/shared/screen-matrix.util.ts.ejs +554 -0
  333. package/src/templates/angular/iam/shared/screen-navigation-map.ts.ejs +187 -0
  334. package/src/templates/angular/iam/shared/screen-navigation.registry.ts.ejs +64 -0
  335. package/src/templates/angular/iam/shared/text-highlight.pipe.ts.ejs +39 -0
  336. package/src/templates/angular/iam/user-access-matrix.component.html.ejs +212 -0
  337. package/src/templates/angular/iam/user-access-matrix.component.scss.ejs +34 -0
  338. package/src/templates/angular/iam/user-access-matrix.component.ts.ejs +239 -0
  339. package/src/templates/angular/iam/user-detail.component.html.ejs +143 -0
  340. package/src/templates/angular/iam/user-detail.component.ts.ejs +108 -0
  341. package/src/templates/angular/iam/user-form.component.html.ejs +63 -0
  342. package/src/templates/angular/iam/user-form.component.ts.ejs +100 -0
  343. package/src/templates/angular/iam/user-list.component.html.ejs +369 -0
  344. package/src/templates/angular/iam/user-list.component.scss.ejs +242 -0
  345. package/src/templates/angular/iam/user-list.component.ts.ejs +446 -0
  346. package/src/templates/angular/iam/user-management.routes.ts.ejs +47 -0
  347. package/src/templates/angular/iam/user-permission-matrix.component.html.ejs +231 -0
  348. package/src/templates/angular/iam/user-permission-matrix.component.scss.ejs +216 -0
  349. package/src/templates/angular/iam/user-permission-matrix.component.ts.ejs +516 -0
  350. package/src/templates/angular/shared/base/audit-user-name.pipe.ts.ejs +69 -0
  351. package/src/templates/angular/shared/base/base-filter.component.ts.ejs +245 -0
  352. package/src/templates/angular/shared/base/base-form.component.ts.ejs +109 -0
  353. package/src/templates/angular/shared/base/base-list.component.ts.ejs +507 -0
  354. package/src/templates/angular/shared/base/filter-types.ts.ejs +55 -0
  355. package/src/templates/angular/shared/base/input-format.directive.ts.ejs +47 -0
  356. package/src/templates/angular/shared/base/input-format.ts.ejs +15 -0
  357. package/src/templates/angular/shared/confirm-with-input-dialog.component.ts.ejs +91 -0
  358. package/src/templates/angular/shared/confirmation-dialog.component.ts.ejs +80 -0
  359. package/src/templates/angular/shared/list-styles.css.ejs +103 -0
  360. package/src/templates/angular/shared/loading-overlay.component.ts.ejs +24 -0
  361. package/src/templates/angular/shared/resizable.directive.ts.ejs +115 -0
  362. package/src/templates/angular/shared/snackbar-styles.css.ejs +11 -0
  363. package/src/templates/fuse-packs/access-control-tools/access-control-sync.js +819 -0
  364. package/src/templates/fuse-packs/access-control-tools/build-rename-map.js +67 -0
  365. package/src/templates/fuse-packs/access-control-tools/inject-qa-ids.js +14 -0
  366. package/src/templates/fuse-packs/access-control-tools/lib/hierarchy-scanner.js +628 -0
  367. package/src/templates/fuse-packs/access-control-tools/lib/hierarchy-scanner.test.js +323 -0
  368. package/src/templates/fuse-packs/access-control-tools/lib/html-scanner.js +362 -0
  369. package/src/templates/fuse-packs/access-control-tools/lib/id-rules.duplicate.test.js +136 -0
  370. package/src/templates/fuse-packs/access-control-tools/lib/id-rules.js +1095 -0
  371. package/src/templates/fuse-packs/access-control-tools/lib/ts-component-index.js +482 -0
  372. package/src/templates/fuse-packs/access-control-tools/output/.gitkeep +0 -0
  373. package/src/templates/fuse-packs/access-control-tools/run.sh +223 -0
  374. package/src/templates/fuse-packs/access-control-tools/scan-access-control.js +14 -0
  375. package/src/templates/fuse-packs/iam-assets/sound/apple-play.mp3 +0 -0
  376. package/src/templates/fuse-packs/iam-assets/sound/remove.mp3 +0 -0
  377. package/src/templates/generator/README.md +12 -0
  378. package/src/templates/testing/ci.cjs +45 -0
  379. package/src/templates/testing/mock.cjs +149 -0
  380. package/src/templates/testing/playwright.config.cjs +25 -0
  381. package/src/templates/testing/serve.cjs +22 -0
  382. package/src/templates/testing/smoke.spec.cjs +180 -0
  383. package/src/utils/branding.js +39 -0
  384. package/src/utils/colors.js +18 -0
  385. package/src/utils/diff.js +109 -0
  386. package/src/utils/merger.js +115 -0
  387. package/src/validator/backend-diagnostics.js +30 -0
  388. package/src/validator/blueprint-validator.js +276 -0
  389. package/src/validator/diagnostics.js +608 -0
  390. package/src/validator/pattern.js +28 -0
  391. package/test/auth-interceptor.js +84 -0
  392. package/test/auth-provision-checks.js +297 -0
  393. package/test/field-preferences.js +145 -0
  394. package/test/fixtures/field-profile.gdl +7 -0
  395. package/test/fixtures/mock.jdl +17 -0
  396. package/test/fixtures/mock.png +0 -0
  397. package/test/fixtures/performance/config.yml +33 -0
  398. package/test/fixtures/performance/large.gdl +199 -0
  399. package/test/fixtures/performance/small.gdl +7 -0
  400. package/test/fixtures/quality/custom.yml +22 -0
  401. package/test/fixtures/quality/go-duck.yml +22 -0
  402. package/test/fixtures/quality/jhipster.yml +30 -0
  403. package/test/fixtures/quality/representative.gdl +14 -0
  404. package/test/list-state.js +138 -0
  405. package/test/micro-functions-layout.js +95 -0
  406. package/test/performance-generation.js +32 -0
  407. package/test/pmb-preset.js +127 -0
  408. package/test/project-workflow.js +111 -0
  409. package/test/quality-features.js +250 -0
  410. package/test/verify-commands.js +83 -0
  411. package/test/verify.js +959 -0
  412. package/test-files/GDL/example.gdl +15 -0
  413. package/test-files/JDL/example.jdl +15 -0
  414. package/test-files/config/crudforge.config.yml +127 -0
  415. package/test-run.sh +272 -0
@@ -0,0 +1,33 @@
1
+ import { Component } from '@angular/core';
2
+ import { MatButtonModule } from '@angular/material/button';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+
5
+ @Component({
6
+ selector: 'docs-building',
7
+ standalone: true,
8
+ imports: [MatIconModule, MatButtonModule],
9
+ template: `
10
+ <div
11
+ class="@container mx-auto flex w-full max-w-7xl flex-auto flex-col overflow-hidden"
12
+ >
13
+ <!-- Header -->
14
+ <div class="flex items-center gap-x-4 px-6 py-4 lg:px-10 lg:py-8">
15
+ <div class="text-xl font-medium tracking-tighter sm:text-2xl">
16
+ Building
17
+ </div>
18
+ </div>
19
+
20
+ <!-- Content -->
21
+ <div class="prose max-w-3xl flex-auto px-6 pb-4 lg:px-10 lg:pb-8">
22
+ <p>
23
+ To build and serve the application locally, run the following command:
24
+ </p>
25
+ <pre><code>ng build</code></pre>
26
+ <p>
27
+ This command compiles the application and prepares it for deployment.
28
+ </p>
29
+ </div>
30
+ </div>
31
+ `,
32
+ })
33
+ export default class DocsBuilding {}
@@ -0,0 +1,42 @@
1
+ import { Component } from '@angular/core';
2
+ import { MatButtonModule } from '@angular/material/button';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+
5
+ @Component({
6
+ selector: 'docs-development',
7
+ standalone: true,
8
+ imports: [MatIconModule, MatButtonModule],
9
+ template: `
10
+ <div
11
+ class="@container mx-auto flex w-full max-w-7xl flex-auto flex-col overflow-hidden"
12
+ >
13
+ <!-- Header -->
14
+ <div class="flex items-center gap-x-4 px-6 py-4 lg:px-10 lg:py-8">
15
+ <div class="text-xl font-medium tracking-tighter sm:text-2xl">
16
+ Installation
17
+ </div>
18
+ </div>
19
+
20
+ <!-- Content -->
21
+ <div class="prose max-w-3xl flex-auto px-6 pb-4 lg:px-10 lg:pb-8">
22
+ <p>
23
+ After the installation process finishes, run the following command
24
+ while still in your workspace directory:
25
+ </p>
26
+ <pre><code>ng serve</code></pre>
27
+ <p>
28
+ The <code>ng serve</code> command launches the server, watches your
29
+ files, and rebuilds the app as you make changes to those files.
30
+ </p>
31
+
32
+ <h2>Alternate command</h2>
33
+ <pre><code>npm start</code></pre>
34
+ <p class="mb-12">
35
+ Alias for <code>ng serve</code> with a predefined port to avoid
36
+ conflicts with other Angular applications running on the same machine.
37
+ </p>
38
+ </div>
39
+ </div>
40
+ `,
41
+ })
42
+ export default class DocsDevelopment {}
@@ -0,0 +1,47 @@
1
+ import { Component } from '@angular/core';
2
+ import { MatButtonModule } from '@angular/material/button';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+
5
+ @Component({
6
+ selector: 'docs-installation',
7
+ standalone: true,
8
+ imports: [MatIconModule, MatButtonModule],
9
+ template: `
10
+ <div
11
+ class="@container mx-auto flex w-full max-w-7xl flex-auto flex-col overflow-hidden"
12
+ >
13
+ <!-- Header -->
14
+ <div class="flex items-center gap-x-4 px-6 py-4 lg:px-10 lg:py-8">
15
+ <div class="text-xl font-medium tracking-tighter sm:text-2xl">
16
+ Installation
17
+ </div>
18
+ </div>
19
+
20
+ <!-- Content -->
21
+ <div class="prose max-w-3xl flex-auto px-6 pb-4 lg:px-10 lg:pb-8">
22
+ <h4>1. Unzip</h4>
23
+ <p>
24
+ Unzip the file you have downloaded from Themeforest and then unzip the
25
+ fuse-vX.X.X.zip file inside it.
26
+ </p>
27
+
28
+ <h4>2. Run the installation command</h4>
29
+ <p>
30
+ After you unzip the file, open a terminal and navigate to the folder
31
+ where you unzipped the file. Make sure you are in the same folder with
32
+ the <strong>package.json</strong> file before you run the installation
33
+ command.
34
+ </p>
35
+ <p>To complete the installation, enter the following command:</p>
36
+ <pre><code>npm install</code></pre>
37
+ <p>
38
+ This command will take some time and install all the required
39
+ libraries into the
40
+ <strong>node_modules</strong> directory in order for you to start
41
+ developing.
42
+ </p>
43
+ </div>
44
+ </div>
45
+ `,
46
+ })
47
+ export default class DocsInstallation {}
@@ -0,0 +1,9 @@
1
+ import { Component } from '@angular/core';
2
+ import { RouterOutlet } from '@angular/router';
3
+
4
+ @Component({
5
+ selector: 'documentation-layout',
6
+ imports: [RouterOutlet],
7
+ template: `<router-outlet />`,
8
+ })
9
+ export default class DocumentationLayout {}
@@ -0,0 +1,45 @@
1
+ import { Routes } from '@angular/router';
2
+
3
+ const routes: Routes = [
4
+ {
5
+ path: '',
6
+ loadComponent: () => import('./layout'),
7
+ children: [
8
+ {
9
+ path: '',
10
+ pathMatch: 'full',
11
+ redirectTo: 'getting-started/introduction',
12
+ },
13
+ {
14
+ path: 'getting-started',
15
+ children: [
16
+ {
17
+ path: '',
18
+ pathMatch: 'full',
19
+ redirectTo: 'introduction',
20
+ },
21
+ {
22
+ path: 'installation',
23
+ loadComponent: () =>
24
+ import('./features/getting-started/installation'),
25
+ },
26
+ {
27
+ path: 'development',
28
+ loadComponent: () =>
29
+ import('./features/getting-started/development'),
30
+ },
31
+ {
32
+ path: 'building',
33
+ loadComponent: () => import('./features/getting-started/building'),
34
+ },
35
+ ],
36
+ },
37
+ {
38
+ path: 'changelog',
39
+ loadComponent: () => import('./features/changelog/changelog'),
40
+ },
41
+ ],
42
+ },
43
+ ];
44
+
45
+ export default routes;
@@ -0,0 +1,70 @@
1
+ import { Component, Input, isDevMode, OnInit } from '@angular/core';
2
+ import { MatButton } from '@angular/material/button';
3
+ import { RouterLink } from '@angular/router';
4
+
5
+ @Component({
6
+ selector: 'error-page',
7
+ imports: [MatButton, RouterLink],
8
+ template: `
9
+ <div
10
+ class="flex flex-auto flex-col items-center justify-center p-6 text-center sm:p-10"
11
+ >
12
+ @if (errorCode) {
13
+ <div class="text-lg font-semibold text-primary-600">{{ errorCode }}</div>
14
+ }
15
+ <div class="mt-2 text-4xl font-bold md:text-[64px]/24">
16
+ {{ title }}
17
+ </div>
18
+ <div class="mt-2 font-medium text-neutral-500 md:mt-0 md:text-lg">
19
+ {{ message }}
20
+ </div>
21
+
22
+ @if (errorDetails && isDevMode) {
23
+ <div class="mt-4 p-4 text-left font-mono text-sm text-red-500 bg-red-50 border border-red-200 rounded-md max-w-3xl overflow-auto dark:bg-red-900/10 dark:border-red-500/20">
24
+ <strong>Debug Details:</strong><br/>
25
+ {{ errorDetails }}
26
+ </div>
27
+ }
28
+
29
+ <div class="mt-8 flex flex-col items-center gap-3 sm:flex-row">
30
+ @if (showRetryAction) {
31
+ <button
32
+ matButton
33
+ (click)="retry()"
34
+ >
35
+ Retry
36
+ </button>
37
+ }
38
+
39
+ @if (showHomeAction) {
40
+ <a
41
+ matButton="filled"
42
+ [routerLink]="homeRoute"
43
+ >
44
+ {{ homeActionLabel }}
45
+ </a>
46
+ }
47
+ </div>
48
+ </div>
49
+ `,
50
+ })
51
+ export default class ErrorPage implements OnInit {
52
+ @Input() errorCode?: string | number = '404';
53
+ @Input() title: string = 'Page not found';
54
+ @Input() message: string = 'Sorry, we couldn’t find the page you’re looking for.';
55
+ @Input() errorDetails?: string;
56
+ @Input() showHomeAction: boolean = true;
57
+ @Input() homeActionLabel: string = 'Back to Dashboard';
58
+ @Input() homeRoute: string = '/admin';
59
+ @Input() showRetryAction: boolean = false;
60
+
61
+ public isDevMode: boolean = false;
62
+
63
+ ngOnInit(): void {
64
+ this.isDevMode = isDevMode();
65
+ }
66
+
67
+ retry(): void {
68
+ window.location.reload();
69
+ }
70
+ }
@@ -0,0 +1,21 @@
1
+ import { Routes } from '@angular/router';
2
+
3
+ const routes: Routes = [
4
+ {
5
+ path: '404',
6
+ loadComponent: () => import('./features/error-page'),
7
+ data: { errorCode: 404, title: 'Page not found' }
8
+ },
9
+ {
10
+ path: '500',
11
+ loadComponent: () => import('./features/error-page'),
12
+ data: { errorCode: 500, title: 'Internal server error', message: 'Something went wrong on our end.' }
13
+ },
14
+ {
15
+ path: '403',
16
+ loadComponent: () => import('./features/error-page'),
17
+ data: { errorCode: 403, title: 'Access denied', message: 'You do not have permission to view this page.' }
18
+ },
19
+ ];
20
+
21
+ export default routes;
@@ -0,0 +1,262 @@
1
+ import { Component } from '@angular/core';
2
+ import { MatButton } from '@angular/material/button';
3
+ import { MatIcon } from '@angular/material/icon';
4
+
5
+ @Component({
6
+ selector: 'notifications',
7
+ imports: [MatButton, MatIcon],
8
+ template: `
9
+ <div
10
+ class="@container mx-auto flex w-full max-w-5xl flex-auto flex-col gap-4 p-6 sm:gap-8 lg:p-10"
11
+ >
12
+ <!-- Header -->
13
+ <div class="flex flex-col justify-between gap-y-0.5">
14
+ <div class="text-xl font-semibold tracking-tighter sm:text-2xl">
15
+ Notifications
16
+ </div>
17
+
18
+ <div class="font-medium text-neutral-500">
19
+ Application wide activities are listed here as individual items,
20
+ starting with the most recent.
21
+ </div>
22
+ </div>
23
+
24
+ <!-- Timeline -->
25
+ <div class="flex flex-col gap-y-16">
26
+ <!-- Section -->
27
+ <div class="flex flex-col items-start">
28
+ <div
29
+ class="mb-8 rounded-md bg-primary-600 px-3 py-1.5 text-md font-medium text-white"
30
+ >
31
+ Yesterday
32
+ </div>
33
+
34
+ <!-- Item -->
35
+ <div class="relative flex gap-x-4 pb-12">
36
+ <div
37
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
38
+ ></div>
39
+ <div
40
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
41
+ >
42
+ <mat-icon
43
+ class="text-white"
44
+ svgIcon="star"
45
+ />
46
+ </div>
47
+ <div class="flex flex-col">
48
+ <div class="text-md font-medium">
49
+ Your submission has been accepted
50
+ </div>
51
+ <div class="text-neutral-500">Mar 31, 7:30 PM</div>
52
+ <div
53
+ class="mt-4 flex flex-col gap-y-2 rounded-md bg-neutral-100 px-4 py-3"
54
+ >
55
+ <p class="font-medium">
56
+ Congratulations! Your submission has been accepted.
57
+ </p>
58
+ <p>
59
+ Hello Brian, we are pleased to inform you that your submission
60
+ has been accepted. Let us know if you have any questions or
61
+ need further assistance.
62
+ </p>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ <!-- Item -->
68
+ <div class="relative flex gap-x-4 pb-12">
69
+ <div
70
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
71
+ ></div>
72
+ <div
73
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
74
+ >
75
+ <mat-icon
76
+ class="text-white"
77
+ svgIcon="star"
78
+ />
79
+ </div>
80
+ <div class="flex flex-col">
81
+ <div class="text-md font-medium">
82
+ Leo Gill added you to Top Secret Project group and assigned you
83
+ as a Project Manager
84
+ </div>
85
+ <div class="text-neutral-500">Mar 31, 7:05 PM</div>
86
+ </div>
87
+ </div>
88
+
89
+ <!-- Item -->
90
+ <div class="relative flex gap-x-4 pb-12">
91
+ <div
92
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
93
+ ></div>
94
+ <div
95
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
96
+ >
97
+ <mat-icon
98
+ class="text-white"
99
+ svgIcon="mail"
100
+ />
101
+ </div>
102
+ <div class="flex flex-col">
103
+ <div class="text-md font-medium">
104
+ You have 15 unread mails across 3 mailboxes
105
+ </div>
106
+ <div class="text-neutral-500">Mar 31, 4:55 PM</div>
107
+ </div>
108
+ </div>
109
+
110
+ <!-- Item -->
111
+ <div class="relative flex gap-x-4">
112
+ <div
113
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
114
+ ></div>
115
+ <div
116
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
117
+ >
118
+ <mat-icon
119
+ class="text-white"
120
+ svgIcon="box"
121
+ />
122
+ </div>
123
+ <div class="flex flex-col">
124
+ <div class="text-md font-medium">
125
+ Your container is ready to publish
126
+ </div>
127
+ <div class="text-neutral-500">Mar 31, 2:55 PM</div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+
132
+ <!-- Section -->
133
+ <div class="flex flex-col items-start">
134
+ <div
135
+ class="mb-8 rounded-md bg-primary-600 px-3 py-1.5 text-md font-medium text-white"
136
+ >
137
+ 2 days ago
138
+ </div>
139
+
140
+ <!-- Item -->
141
+ <div class="relative flex gap-x-4 pb-12">
142
+ <div
143
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
144
+ ></div>
145
+ <div
146
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
147
+ >
148
+ <mat-icon
149
+ class="text-white"
150
+ svgIcon="message-circle"
151
+ />
152
+ </div>
153
+ <div class="flex flex-col">
154
+ <div class="text-md font-medium">
155
+ Tina Harris started a chat with you
156
+ </div>
157
+ <div class="text-neutral-500">Mar 30, 7:30 PM</div>
158
+ </div>
159
+ </div>
160
+
161
+ <!-- Item -->
162
+ <div class="relative flex gap-x-4">
163
+ <div
164
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
165
+ ></div>
166
+ <div
167
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
168
+ >
169
+ <mat-icon
170
+ class="text-white"
171
+ svgIcon="message-circle-dashed"
172
+ />
173
+ </div>
174
+ <div class="flex flex-col">
175
+ <div class="text-md font-medium">
176
+ Sophie Stone sent you a direct message
177
+ </div>
178
+ <div class="text-neutral-500">Mar 30, 7:05 PM</div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+
183
+ <!-- Section -->
184
+ <div class="flex flex-col items-start">
185
+ <div
186
+ class="mb-8 rounded-md bg-primary-600 px-3 py-1.5 text-md font-medium text-white"
187
+ >
188
+ 3 days ago
189
+ </div>
190
+
191
+ <!-- Item -->
192
+ <div class="relative flex gap-x-4 pb-12">
193
+ <div
194
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
195
+ ></div>
196
+ <div
197
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
198
+ >
199
+ <mat-icon
200
+ class="text-white"
201
+ svgIcon="user-round-check"
202
+ />
203
+ </div>
204
+ <div class="flex flex-col">
205
+ <div class="text-md font-medium">
206
+ Roger Murray accepted your friend request
207
+ </div>
208
+ <div class="text-neutral-500">Mar 29, 7:05 PM</div>
209
+ </div>
210
+ </div>
211
+
212
+ <!-- Item -->
213
+ <div class="relative flex gap-x-4 pb-12">
214
+ <div
215
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
216
+ ></div>
217
+ <div
218
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
219
+ >
220
+ <mat-icon
221
+ class="text-white"
222
+ svgIcon="mail"
223
+ />
224
+ </div>
225
+ <div class="flex flex-col">
226
+ <div class="text-md font-medium">
227
+ You have 4 unread mails across 2 mailboxes
228
+ </div>
229
+ <div class="text-neutral-500">Mar 29, 4:55 PM</div>
230
+ </div>
231
+ </div>
232
+
233
+ <!-- Item -->
234
+ <div class="relative flex gap-x-4">
235
+ <div
236
+ class="absolute inset-y-0 left-5 -z-10 w-0.5 -translate-x-px bg-neutral-200"
237
+ ></div>
238
+ <div
239
+ class="flex size-10 shrink-0 items-center justify-center rounded-full bg-neutral-500"
240
+ >
241
+ <mat-icon
242
+ class="text-white"
243
+ svgIcon="star"
244
+ />
245
+ </div>
246
+ <div class="flex flex-col">
247
+ <div class="text-md font-medium">
248
+ Your submission has been accepted! Sign-up for the final
249
+ assigment will be ready in 2 days
250
+ </div>
251
+ <div class="text-neutral-500">Mar 29, 2:55 PM</div>
252
+ </div>
253
+ </div>
254
+ </div>
255
+
256
+ <!-- Load more -->
257
+ <button matButton="outlined">Load more</button>
258
+ </div>
259
+ </div>
260
+ `,
261
+ })
262
+ export default class Notifications {}
@@ -0,0 +1,10 @@
1
+ import { Routes } from '@angular/router';
2
+
3
+ const routes: Routes = [
4
+ {
5
+ path: '',
6
+ loadComponent: () => import('./features/notifications'),
7
+ },
8
+ ];
9
+
10
+ export default routes;