@team-codeme/crud-forge 0.0.0-stage → 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 (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,753 @@
1
+ import { Injectable } from '@angular/core';
2
+ import {
3
+ Category,
4
+ Course,
5
+ } from '@/app/domains/admin/modules/apps/academy/data/model';
6
+
7
+ @Injectable({ providedIn: 'root' })
8
+ export class AcademyService {
9
+ private demoContent = `
10
+ <p class="lead">
11
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aperiam lab et fugiat id magnam minus nemo quam
12
+ voluptatem. Culpa deleniti explica nisi quod soluta.
13
+ </p>
14
+ <p>
15
+ Alias animi labque, deserunt distinctio eum excepturi fuga iure labore magni molestias mollitia natus, officia pofro
16
+ quis sunt temporibus veritatis voluptatem, voluptatum. Aut blanditiis esse et illum maxim, obcaecati possimus
17
+ voluptate! Accusamus <em>adipisci</em> amet aperiam, assumenda consequuntur fugiat inventore iusto magnam molestias
18
+ natus necessitatibus, nulla pariatur.
19
+ </p>
20
+ <p>
21
+ Amet distinctio enim itaque minima minus nesciunt recusandae soluta voluptatibus:
22
+ </p>
23
+ <blockquote>
24
+ <p>
25
+ Ad aliquid amet asperiores lab distinctio doloremque <code>eaque</code>, exercitationem explicabo, minus mollitia
26
+ natus necessitatibus odio omnis pofro rem.
27
+ </p>
28
+ </blockquote>
29
+ <p>
30
+ Alias architecto asperiores, dignissimos illum ipsam ipsum itaque, natus necessitatibus officiis, perferendis quae
31
+ sed ullam veniam vitae voluptas! Magni, nisi, quis! A <code>accusamus</code> animi commodi, consectetur distinctio
32
+ eaque, eos excepturi illum laboriosam maiores nam natus nulla officiis perspiciatis rem <em>reprehenderit</em> sed
33
+ tenetur veritatis.
34
+ </p>
35
+ <p>
36
+ Consectetur <code>dicta enim</code> error eveniet expedita, facere in itaque labore <em>natus</em> quasi? Ad consectetur
37
+ eligendi facilis magni quae quis, quo temporibus voluptas voluptate voluptatem!
38
+ </p>
39
+ <p>
40
+ Adipisci alias animi <code>debitis</code> eos et impedit maiores, modi nam nobis officia optio perspiciatis, rerum.
41
+ Accusantium esse nostrum odit quis quo:
42
+ </p>
43
+ <pre><code>h1 a {
44
+ display: block;
45
+ width: 300px;
46
+ height: 80px;
47
+ }</code></pre>
48
+ <p>
49
+ Accusantium aut autem, lab deleniti eaque fugiat fugit id ipsa iste molestiae,
50
+ <a>necessitatibus nemo quasi</a>
51
+ .
52
+ </p>
53
+ <hr>
54
+ <h2>
55
+ Accusantium aspernatur autem enim
56
+ </h2>
57
+ <p>
58
+ Blanditiis, fugit voluptate! Assumenda blanditiis consectetur, labque cupiditate ducimus eaque earum, fugiat illum
59
+ ipsa, necessitatibus omnis quaerat reiciendis totam. Architecto, <strong>facere</strong> illum molestiae nihil nulla
60
+ quibusdam quidem vel! Atque <em>blanditiis deserunt</em>.
61
+ </p>
62
+ <p>
63
+ Debitis deserunt doloremque labore laboriosam magni minus odit:
64
+ </p>
65
+ <ol>
66
+ <li>Asperiores dicta esse maiores nobis officiis.</li>
67
+ <li>Accusamus aliquid debitis dolore illo ipsam molettiae possimus.</li>
68
+ <li>Magnam mollitia pariatur perspiciatis quasi quidem tenetur voluptatem! Adipisci aspernatur assumenda dicta.</li>
69
+ </ol>
70
+ <p>
71
+ Animi fugit incidunt iure magni maiores molestias.
72
+ </p>
73
+ <h3>
74
+ Consequatur iusto soluta
75
+ </h3>
76
+ <p>
77
+ Aliquid asperiores corporis — deserunt dolorum ducimus eius eligendi explicabo quaerat suscipit voluptas.
78
+ </p>
79
+ <p>
80
+ Deserunt dolor eos et illum laborum magni molestiae mollitia:
81
+ </p>
82
+ <blockquote>
83
+ <p>Autem beatae consectetur consequatur, facere, facilis fugiat id illo, impedit numquam optio quis sunt ducimus illo.</p>
84
+ </blockquote>
85
+ <p>
86
+ Adipisci consequuntur doloribus facere in ipsam maxime molestias pofro quam:
87
+ </p>
88
+ <figure>
89
+ <img
90
+ src="images/pages/help-center/image-1.jpg"
91
+ alt="">
92
+ <figcaption>
93
+ Accusamus blanditiis labque delectus esse et eum excepturi, impedit ipsam iste maiores minima mollitia, nihil obcaecati
94
+ placeat quaerat qui quidem sint unde!
95
+ </figcaption>
96
+ </figure>
97
+ <p>
98
+ A beatae lab deleniti explicabo id inventore magni nisi omnis placeat praesentium quibusdam:
99
+ </p>
100
+ <ul>
101
+ <li>Dolorem eaque laboriosam omnis praesentium.</li>
102
+ <li>Atque debitis delectus distinctio doloremque.</li>
103
+ <li>Fuga illo impedit minima mollitia neque obcaecati.</li>
104
+ </ul>
105
+ <p>
106
+ Consequ eius eum excepturi explicabo.
107
+ </p>
108
+ <h2>
109
+ Adipisicing elit atque impedit?
110
+ </h2>
111
+ <h3>
112
+ Atque distinctio doloremque ea qui quo, repellendus.
113
+ </h3>
114
+ <p>
115
+ Delectus deserunt explicabo facilis numquam quasi! Laboriosam, magni, quisquam. Aut, blanditiis commodi distinctio, facere fuga
116
+ hic itaque iure labore laborum maxime nemo neque provident quos recusandae sequi veritatis illum inventore iure qui rerum sapiente.
117
+ </p>
118
+ <h3>
119
+ Accusamus iusto sint aperiam consectetur …
120
+ </h3>
121
+ <p>
122
+ Aliquid assumenda ipsa nam odit pofro quaerat, quasi recusandae sint! Aut, esse explicabo facilis fugit illum iure magni
123
+ necessitatibus odio quas.
124
+ </p>
125
+ <ul>
126
+ <li>
127
+ <p><strong>Dolore natus placeat rem atque dignissimos laboriosam.</strong></p>
128
+ <p>
129
+ Amet repudiandae voluptates architecto dignissimos repellendus voluptas dignissimos eveniet itaque maiores natus.
130
+ </p>
131
+ <p>
132
+ Accusamus aliquam debitis delectus dolorem ducimus enim eos, exercitationem fugiat id iusto nostrum quae quos
133
+ recusandae reiciendis rerum sequi temporibus veniam vero? Accusantium culpa, cupiditate ducimus eveniet id maiores modi
134
+ mollitia nisi aliquid dolorum ducimus et illo in.
135
+ </p>
136
+ </li>
137
+ <li>
138
+ <p><strong>Ab amet deleniti dolor, et hic optio placeat.</strong></p>
139
+ <p>
140
+ Accusantium ad alias beatae, consequatur consequuntur eos error eveniet expedita fuga laborum libero maxime nulla pofro
141
+ praesentium rem rerum saepe soluta ullam vero, voluptas? Architecto at debitis, doloribus harum iure libero natus odio
142
+ optio soluta veritatis voluptate.
143
+ </p>
144
+ </li>
145
+ <li>
146
+ <p><strong>At aut consectetur nam necessitatibus neque nesciunt.</strong></p>
147
+ <p>
148
+ Aut dignissimos labore nobis nostrum optio! Dolor id minima velit voluptatibus. Aut consequuntur eum exercitationem
149
+ fuga, harum id impedit molestiae natus neque numquam perspiciatis quam rem voluptatum.
150
+ </p>
151
+ </li>
152
+ </ul>
153
+ <p>
154
+ Animi aperiam autem labque dolore enim ex expedita harum hic id impedit ipsa laborum modi mollitia non perspiciatis quae ratione.
155
+ </p>
156
+ <h2>
157
+ Alias eos excepturi facilis fugit.
158
+ </h2>
159
+ <p>
160
+ Alias asperiores, aspernatur corporis
161
+ <a>delectus</a>
162
+ est
163
+ <a>facilis</a>
164
+ inventore dolore
165
+ ipsa nobis nostrum officia quia, veritatis vero! At dolore est nesciunt numquam quam. Ab animi <em>architecto</em> aut, dignissimos
166
+ eos est eum explicabo.
167
+ </p>
168
+ <p>
169
+ Adipisci autem consequuntur <code>labque cupiditate</code> dolor ducimus fuga neque nesciunt:
170
+ </p>
171
+ <pre><code>export const settings = {
172
+ purge: [],
173
+ theme: {
174
+ extend: {},
175
+ },
176
+ variants: {},
177
+ plugins: [],
178
+ }</code></pre>
179
+ <p>
180
+ Aliquid aspernatur eius fugit hic iusto.
181
+ </p>
182
+ <h3>
183
+ Dolorum ducimus expedita?
184
+ </h3>
185
+ <p>
186
+ Culpa debitis explicabo maxime minus quaerat reprehenderit temporibus! Asperiores, cupiditate ducimus esse est expedita fuga hic
187
+ ipsam necessitatibus placeat possimus? Amet animi aut consequuntur earum eveniet.
188
+ </p>
189
+ <ol>
190
+ <li>
191
+ <strong>Aspernatur at beatae corporis debitis.</strong>
192
+ <ul>
193
+ <li>
194
+ Aperiam assumenda commodi lab dicta eius, “fugit ipsam“ itaque iure molestiae nihil numquam, officia omnis quia
195
+ repellendus sapiente sed.
196
+ </li>
197
+ <li>
198
+ Nulla odio quod saepe accusantium, adipisci autem blanditiis lab doloribus.
199
+ </li>
200
+ <li>
201
+ Explicabo facilis iusto molestiae nisi nostrum obcaecati officia.
202
+ </li>
203
+ </ul>
204
+ </li>
205
+ <li>
206
+ <strong>Nobis odio officiis optio quae quis quisquam quos rem.</strong>
207
+ <ul>
208
+ <li>Modi pariatur quod totam. Deserunt doloribus eveniet, expedita.</li>
209
+ <li>Ad beatae dicta et fugit libero optio quaerat rem repellendus./</li>
210
+ <li>Architecto atque consequuntur corporis id iste magni.</li>
211
+ </ul>
212
+ </li>
213
+ <li>
214
+ <strong>Deserunt non placeat unde veniam veritatis? Odio quod.</strong>
215
+ <ul>
216
+ <li>Inventore iure magni quod repellendus tempora. Magnam neque, quia. Adipisci amet.</li>
217
+ <li>Consectetur adipisicing elit.</li>
218
+ <li>labque eum expedita illo inventore iusto laboriosam nesciunt non, odio provident.</li>
219
+ </ul>
220
+ </li>
221
+ </ol>
222
+ <p>
223
+ A aliquam architecto consequatur labque dicta doloremque <code>&lt;li&gt;</code> doloribus, ducimus earum, est <code>&lt;p&gt;</code>
224
+ eveniet explicabo fuga fugit ipsum minima minus molestias nihil nisi non qui sunt vel voluptatibus? A dolorum illum nihil quidem.
225
+ </p>
226
+ <ul>
227
+ <li>
228
+ <p>
229
+ <strong>Laboriosam nesciunt obcaecati optio qui.</strong>
230
+ </p>
231
+ <p>
232
+ Doloremque magni molestias reprehenderit.
233
+ </p>
234
+ <ul>
235
+ <li>Accusamus aperiam blanditiis <code>&lt;p&gt;</code> commodi</li>
236
+ <li>Dolorum ea explicabo fugiat in ipsum</li>
237
+ </ul>
238
+ </li>
239
+ <li>
240
+ <p>
241
+ <strong>Commodi dolor dolorem dolores eum expedita libero.</strong>
242
+ </p>
243
+ <p>
244
+ Accusamus alias consectetur dolores et, excepturi fuga iusto possimus.
245
+ </p>
246
+ <ul>
247
+ <li>
248
+ <p>
249
+ Accusantium ad alias atque aut autem consequuntur deserunt dignissimos eaque iure <code>&lt;p&gt;</code> maxime.
250
+ </p>
251
+ <p>
252
+ Dolorum in nisi numquam omnis quam sapiente sit vero.
253
+ </p>
254
+ </li>
255
+ <li>
256
+ <p>
257
+ Adipisci lab in nisi odit soluta sunt vitae commodi excepturi.
258
+ </p>
259
+ </li>
260
+ </ul>
261
+ </li>
262
+ <li>
263
+ <p>
264
+ Assumenda deserunt distinctio dolor iste mollitia nihil non?
265
+ </p>
266
+ </li>
267
+ </ul>
268
+ <p>
269
+ Consectetur adipisicing elit dicta dolor iste.
270
+ </p>
271
+ <h2>
272
+ Consectetur ea natus officia omnis reprehenderit.
273
+ </h2>
274
+ <p>
275
+ Distinctio impedit quaerat sed! Accusamus
276
+ <a>aliquam aspernatur enim expedita explicabo</a>
277
+ . Libero molestiae
278
+ odio quasi unde ut? Ab exercitationem id numquam odio quisquam!
279
+ </p>
280
+ <p>
281
+ Explicabo facilis nemo quidem natus tempore:
282
+ </p>
283
+ <table class="table table-striped table-bordered">
284
+ <thead>
285
+ <tr>
286
+ <th>Wrestler</th>
287
+ <th>Origin</th>
288
+ <th>Finisher</th>
289
+ </tr>
290
+ </thead>
291
+ <tbody>
292
+ <tr>
293
+ <td>Bret “The Hitman” Hart</td>
294
+ <td>Calgary, AB</td>
295
+ <td>Sharpshooter</td>
296
+ </tr>
297
+ <tr>
298
+ <td>Stone Cold Steve Austin</td>
299
+ <td>Austin, TX</td>
300
+ <td>Stone Cold Stunner</td>
301
+ </tr>
302
+ <tr>
303
+ <td>Randy Savage</td>
304
+ <td>Sarasota, FL</td>
305
+ <td>Elbow Drop</td>
306
+ </tr>
307
+ <tr>
308
+ <td>Vader</td>
309
+ <td>Boulder, CO</td>
310
+ <td>Vader Bomb</td>
311
+ </tr>
312
+ <tr>
313
+ <td>Razor Ramon</td>
314
+ <td>Chuluota, FL</td>
315
+ <td>Razor’s Edge</td>
316
+ </tr>
317
+ </tbody>
318
+ </table>
319
+ <p>
320
+ A aliquid autem lab doloremque, ea earum eum fuga fugit illo ipsa minus natus nisi <code>&lt;span&gt;</code> obcaecati pariatur
321
+ perferendis pofro <code>suscipit tempore</code>.
322
+ </p>
323
+ <h3>
324
+ Ad alias atque culpa <code>illum</code> earum optio
325
+ </h3>
326
+ <p>
327
+ Architecto consequatur eveniet illo in iure laborum minus omnis quibusdam sequi temporibus? Ab aliquid <em>“atque dolores molestiae
328
+ nemo perferendis”</em> reprehenderit saepe.
329
+ </p>
330
+ <p>
331
+ Accusantium aliquid eligendi est fuga natus, <code>quos</code> vel? Adipisci aperiam asperiores aspernatur consectetur cupiditate
332
+ <a><code>@distinctio/doloribus</code></a>
333
+ et exercitationem expedita, facere facilis illum, impedit inventore
334
+ ipsa iure iusto magnam, magni minus nesciunt non officia possimus quod reiciendis.
335
+ </p>
336
+ <h4>
337
+ Cupiditate explicabo <code>hic</code> maiores
338
+ </h4>
339
+ <p>
340
+ Aliquam amet consequuntur distinctio <code>ea</code> est <code>excepturi</code> facere illum maiores nisi nobis non odit officiis
341
+ quisquam, similique tempora temporibus, tenetur ullam <code>voluptates</code> adipisci aperiam deleniti <code>doloremque</code>
342
+ ducimus <code>eos</code>.
343
+ </p>
344
+ <p>
345
+ Ducimus qui quo tempora. lab enim explicabo <code>hic</code> inventore qui soluta voluptates voluptatum? Asperiores consectetur
346
+ delectus dolorem fugiat ipsa pariatur, quas <code>quos</code> repellendus <em>repudiandae</em> sunt aut blanditiis.
347
+ </p>
348
+ <h3>
349
+ Asperiores aspernatur autem error praesentium quidem.
350
+ </h3>
351
+ <h4>
352
+ Ad blanditiis commodi, doloribus id iste <code>repudiandae</code> vero vitae.
353
+ </h4>
354
+ <p>
355
+ Atque consectetur lab debitis enim est et, facere fugit impedit, possimus quaerat quibusdam.
356
+ </p>
357
+ <p>
358
+ Dolorem nihil placeat quibusdam veniam? Amet architecto at consequatur eligendi eveniet excepturi hic illo impedit in iste magni maxime
359
+ modi nisi nulla odio placeat quidem, quos rem repellat similique suscipit voluptate voluptates nobis omnis quo repellendus.
360
+ </p>
361
+ <p>
362
+ Assumenda, eum, minima! Autem consectetur fugiat iste sit! Nobis omnis quo repellendus.
363
+ </p>
364
+ `;
365
+ private demoSteps = [
366
+ {
367
+ order: 0,
368
+ title: 'Introduction',
369
+ subtitle: 'Introducing the library and how it works',
370
+ content: `<h2>Introduction</h2> ${this.demoContent}`,
371
+ },
372
+ {
373
+ order: 1,
374
+ title: 'Get the sample code',
375
+ subtitle: 'Where to find the sample code and how to access it',
376
+ content: `<h2>Get the sample code</h2> ${this.demoContent}`,
377
+ },
378
+ {
379
+ order: 2,
380
+ title: 'Create a Firebase project and Set up your app',
381
+ subtitle:
382
+ 'How to create a basic Firebase project and how to run it locally',
383
+ content: `<h2>Create a Firebase project and Set up your app</h2> ${this.demoContent}`,
384
+ },
385
+ {
386
+ order: 3,
387
+ title: 'Install the Firebase Command Line Interface',
388
+ subtitle: 'Setting up the Firebase CLI to access command line tools',
389
+ content: `<h2>Install the Firebase Command Line Interface</h2> ${this.demoContent}`,
390
+ },
391
+ {
392
+ order: 4,
393
+ title: 'Deploy and run the web app',
394
+ subtitle: 'How to build, push and run the project remotely',
395
+ content: `<h2>Deploy and run the web app</h2> ${this.demoContent}`,
396
+ },
397
+ {
398
+ order: 5,
399
+ title: 'The Functions Directory',
400
+ subtitle: 'Introducing the Functions and Functions Directory',
401
+ content: `<h2>The Functions Directory</h2> ${this.demoContent}`,
402
+ },
403
+ {
404
+ order: 6,
405
+ title: 'Import the Cloud Functions and Firebase Admin modules',
406
+ subtitle: 'Create your first Function and run it to administer your app',
407
+ content: `<h2>Import the Cloud Functions and Firebase Admin modules</h2> ${this.demoContent}`,
408
+ },
409
+ {
410
+ order: 7,
411
+ title: 'Welcome New Users',
412
+ subtitle: 'How to create a welcome message for the new users',
413
+ content: `<h2>Welcome New Users</h2> ${this.demoContent}`,
414
+ },
415
+ {
416
+ order: 8,
417
+ title: 'Images moderation',
418
+ subtitle: 'How to moderate images; crop, resize, optimize',
419
+ content: `<h2>Images moderation</h2> ${this.demoContent}`,
420
+ },
421
+ {
422
+ order: 9,
423
+ title: 'New Message Notifications',
424
+ subtitle: 'How to create and push a notification to a user',
425
+ content: `<h2>New Message Notifications</h2> ${this.demoContent}`,
426
+ },
427
+ {
428
+ order: 10,
429
+ title: 'Congratulations!',
430
+ subtitle: 'Nice work, you have created your first application',
431
+ content: `<h2>Congratulations!</h2> ${this.demoContent}`,
432
+ },
433
+ ];
434
+ private categories: Category[] = [
435
+ {
436
+ id: '9a67dff7-3c38-4052-a335-0cef93438ff6',
437
+ title: 'Web',
438
+ slug: 'web',
439
+ },
440
+ {
441
+ id: 'a89672f5-e00d-4be4-9194-cb9d29f82165',
442
+ title: 'Firebase',
443
+ slug: 'firebase',
444
+ },
445
+ {
446
+ id: '02f42092-bb23-4552-9ddb-cfdcc235d48f',
447
+ title: 'Cloud',
448
+ slug: 'cloud',
449
+ },
450
+ {
451
+ id: '5648a630-979f-4403-8c41-fc9790dea8cd',
452
+ title: 'Android',
453
+ slug: 'android',
454
+ },
455
+ ];
456
+ private courses: Course[] = [
457
+ {
458
+ id: '694e4e5f-f25f-470b-bd0e-26b1d4f64028',
459
+ title: 'Basics of Angular',
460
+ slug: 'basics-of-angular',
461
+ description: 'Introductory course for Angular and framework basics',
462
+ category: 'web',
463
+ duration: 30,
464
+ totalSteps: 11,
465
+ updatedAt: 'Jun 28, 2021',
466
+ featured: true,
467
+ steps: this.demoSteps,
468
+ progress: {
469
+ currentStep: 3,
470
+ completed: 2,
471
+ },
472
+ },
473
+ {
474
+ id: 'f924007a-2ee9-470b-a316-8d21ed78277f',
475
+ title: 'Basics of TypeScript',
476
+ slug: 'basics-of-typeScript',
477
+ description: 'Beginner course for Typescript and its basics',
478
+ category: 'web',
479
+ duration: 60,
480
+ totalSteps: 11,
481
+ updatedAt: 'Nov 01, 2021',
482
+ featured: true,
483
+ steps: this.demoSteps,
484
+ progress: {
485
+ currentStep: 5,
486
+ completed: 3,
487
+ },
488
+ },
489
+ {
490
+ id: '0c06e980-abb5-4ba7-ab65-99a228cab36b',
491
+ title: 'Android N: Quick Settings',
492
+ slug: 'android-n-quick-settings',
493
+ description: 'Step by step guide for Android N: Quick Settings',
494
+ category: 'android',
495
+ duration: 120,
496
+ totalSteps: 11,
497
+ updatedAt: 'May 08, 2021',
498
+ featured: false,
499
+ steps: this.demoSteps,
500
+ progress: {
501
+ currentStep: 10,
502
+ completed: 1,
503
+ },
504
+ },
505
+ {
506
+ id: '1b9a9acc-9a36-403e-a1e7-b11780179e38',
507
+ title: 'Build an App for the Google Assistant with Firebase',
508
+ slug: 'build-an-app-for-the-google-assistant-with-firebase',
509
+ description: 'Dive deep into Google Assistant apps using Firebase',
510
+ category: 'firebase',
511
+ duration: 30,
512
+ totalSteps: 11,
513
+ updatedAt: 'Jan 09, 2021',
514
+ featured: false,
515
+ steps: this.demoSteps,
516
+ progress: {
517
+ currentStep: 4,
518
+ completed: 3,
519
+ },
520
+ },
521
+ {
522
+ id: '55eb415f-3f4e-4853-a22b-f0ae91331169',
523
+ title: 'Keep Sensitive Data Safe and Private',
524
+ slug: 'keep-sensitive-data-safe-and-private',
525
+ description: 'Learn how to keep your important data safe and private',
526
+ category: 'android',
527
+ duration: 45,
528
+ totalSteps: 11,
529
+ updatedAt: 'Jan 14, 2021',
530
+ featured: false,
531
+ steps: this.demoSteps,
532
+ progress: {
533
+ currentStep: 6,
534
+ completed: 0,
535
+ },
536
+ },
537
+ {
538
+ id: 'fad2ab23-1011-4028-9a54-e52179ac4a50',
539
+ title: "Manage Your Pivotal Cloud Foundry App's Using Apigee Edge",
540
+ slug: 'manage-your-pivotal-cloud-foundry-apps-using-apigee-Edge',
541
+ description: 'Introductory course for Pivotal Cloud Foundry App',
542
+ category: 'cloud',
543
+ duration: 90,
544
+ totalSteps: 11,
545
+ updatedAt: 'Jun 24, 2021',
546
+ featured: false,
547
+ steps: this.demoSteps,
548
+ progress: {
549
+ currentStep: 6,
550
+ completed: 0,
551
+ },
552
+ },
553
+ {
554
+ id: 'c4bc107b-edc4-47a7-a7a8-4fb09732e794',
555
+ title: 'Build a PWA Using Workbox',
556
+ slug: 'build-a-pwa-using-workbox',
557
+ description: 'Step by step guide for building a PWA using Workbox',
558
+ category: 'web',
559
+ duration: 120,
560
+ totalSteps: 11,
561
+ updatedAt: 'Nov 19, 2021',
562
+ featured: false,
563
+ steps: this.demoSteps,
564
+ progress: {
565
+ currentStep: 0,
566
+ completed: 0,
567
+ },
568
+ },
569
+ {
570
+ id: '1449f945-d032-460d-98e3-406565a22293',
571
+ title: 'Cloud Functions for Firebase',
572
+ slug: 'cloud-functions-for-firebase',
573
+ description: 'Beginners guide of Firebase Cloud Functions',
574
+ category: 'firebase',
575
+ duration: 45,
576
+ totalSteps: 11,
577
+ updatedAt: 'Jul 11, 2021',
578
+ featured: false,
579
+ steps: this.demoSteps,
580
+ progress: {
581
+ currentStep: 3,
582
+ completed: 1,
583
+ },
584
+ },
585
+ {
586
+ id: 'f05e08ab-f3e3-4597-a032-6a4b69816f24',
587
+ title: 'Building a gRPC Service with Java',
588
+ slug: 'building-a-grpc-service-with-java',
589
+ description: 'Learn more about building a gRPC Service with Java',
590
+ category: 'cloud',
591
+ duration: 30,
592
+ totalSteps: 11,
593
+ updatedAt: 'Mar 13, 2021',
594
+ featured: false,
595
+ steps: this.demoSteps,
596
+ progress: {
597
+ currentStep: 0,
598
+ completed: 1,
599
+ },
600
+ },
601
+ {
602
+ id: '181728f4-87c8-45c5-b9cc-92265bcd2f4d',
603
+ title: 'Looking at Campaign Finance with BigQuery',
604
+ slug: 'looking-at-campaign-finance-with-bigquery',
605
+ description: 'Dive deep into BigQuery: Campaign Finance',
606
+ category: 'cloud',
607
+ duration: 60,
608
+ totalSteps: 11,
609
+ updatedAt: 'Nov 01, 2021',
610
+ featured: false,
611
+ steps: this.demoSteps,
612
+ progress: {
613
+ currentStep: 0,
614
+ completed: 0,
615
+ },
616
+ },
617
+ {
618
+ id: 'fcbfedbf-6187-4b3b-89d3-1a7cb4e11616',
619
+ title: 'Personalize Your iOS App with Firebase User Management',
620
+ slug: 'personalize-your-ios-app-with-firebase-user-management',
621
+ description: 'Dive deep into User Management on iOS apps using Firebase',
622
+ category: 'firebase',
623
+ duration: 90,
624
+ totalSteps: 11,
625
+ updatedAt: 'Aug 08, 2021',
626
+ featured: false,
627
+ steps: this.demoSteps,
628
+ progress: {
629
+ currentStep: 0,
630
+ completed: 0,
631
+ },
632
+ },
633
+ {
634
+ id: '5213f6a1-1dd7-4b1d-b6e9-ffb7af534f28',
635
+ title: 'Customize Network Topology with Subnetworks',
636
+ slug: 'customize-network-topology-with-subnetworks',
637
+ description: 'Dive deep into Network Topology with Subnetworks',
638
+ category: 'web',
639
+ duration: 45,
640
+ totalSteps: 11,
641
+ updatedAt: 'May 12, 2021',
642
+ featured: false,
643
+ steps: this.demoSteps,
644
+ progress: {
645
+ currentStep: 0,
646
+ completed: 0,
647
+ },
648
+ },
649
+ {
650
+ id: '02992ac9-d1a3-4167-b70e-8a1d5b5ba253',
651
+ title: 'Building Beautiful UIs with Flutter',
652
+ slug: 'building-beautiful-uis-with-flutter',
653
+ description:
654
+ "Dive deep into Flutter's hidden secrets for creating beautiful UIs",
655
+ category: 'web',
656
+ duration: 90,
657
+ totalSteps: 11,
658
+ updatedAt: 'Sep 18, 2021',
659
+ featured: false,
660
+ steps: this.demoSteps,
661
+ progress: {
662
+ currentStep: 8,
663
+ completed: 2,
664
+ },
665
+ },
666
+ {
667
+ id: '2139512f-41fb-4a4a-841a-0b4ac034f9b4',
668
+ title: 'Firebase Android',
669
+ slug: 'firebase-android',
670
+ description: 'Beginners guide of Firebase for Android',
671
+ category: 'android',
672
+ duration: 45,
673
+ totalSteps: 11,
674
+ updatedAt: 'Apr 24, 2021',
675
+ featured: false,
676
+ steps: this.demoSteps,
677
+ progress: {
678
+ currentStep: 0,
679
+ completed: 0,
680
+ },
681
+ },
682
+ {
683
+ id: '65e0a0e0-d8c0-4117-a3cb-eb74f8e28809',
684
+ title: 'Simulating a Thread Network Using OpenThread',
685
+ slug: 'simulating-a-thread-network-using-openthread',
686
+ description:
687
+ 'Introductory course for OpenThread and Simulating a Thread Network',
688
+ category: 'web',
689
+ duration: 45,
690
+ totalSteps: 11,
691
+ updatedAt: 'Jun 05, 2021',
692
+ featured: false,
693
+ steps: this.demoSteps,
694
+ progress: {
695
+ currentStep: 0,
696
+ completed: 0,
697
+ },
698
+ },
699
+ {
700
+ id: 'c202ebc9-9be3-433a-9d38-7003b3ed7b7a',
701
+ title: 'Your First Progressive Web App',
702
+ slug: 'your-first-progressive-web-app',
703
+ description: 'Step by step guide for creating a PWA from scratch',
704
+ category: 'web',
705
+ duration: 30,
706
+ totalSteps: 11,
707
+ updatedAt: 'Oct 14, 2021',
708
+ featured: false,
709
+ steps: this.demoSteps,
710
+ progress: {
711
+ currentStep: 0,
712
+ completed: 0,
713
+ },
714
+ },
715
+ {
716
+ id: '980ae7da-9f77-4e30-aa98-1b1ea594e775',
717
+ title: 'Launch Cloud Datalab',
718
+ slug: 'launch-cloud-datalab',
719
+ description: 'From start to finish: Launch Cloud Datalab',
720
+ category: 'cloud',
721
+ duration: 60,
722
+ totalSteps: 11,
723
+ updatedAt: 'Dec 16, 2021',
724
+ featured: false,
725
+ steps: this.demoSteps,
726
+ progress: {
727
+ currentStep: 0,
728
+ completed: 0,
729
+ },
730
+ },
731
+ {
732
+ id: 'c9748ea9-4117-492c-bdb2-55085b515978',
733
+ title: 'Cloud Firestore',
734
+ slug: 'cloud-firestore',
735
+ description: 'Step by step guide for setting up Cloud Firestore',
736
+ category: 'firebase',
737
+ duration: 90,
738
+ totalSteps: 11,
739
+ updatedAt: 'Apr 04, 2021',
740
+ featured: false,
741
+ steps: this.demoSteps,
742
+ progress: {
743
+ currentStep: 2,
744
+ completed: 0,
745
+ },
746
+ },
747
+ ];
748
+
749
+ data = {
750
+ categories: this.categories,
751
+ courses: this.courses,
752
+ };
753
+ }