@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,1065 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { add, format, startOfDay, sub } from 'date-fns';
3
+
4
+ export type Transaction = {
5
+ id: string;
6
+ transactionId: string;
7
+ name: string;
8
+ amount: number;
9
+ status: string;
10
+ date: string;
11
+ };
12
+
13
+ @Injectable({ providedIn: 'root' })
14
+ export class FinanceDashboardService {
15
+ // Data
16
+ private now = new Date();
17
+
18
+ private recentTransactions: Transaction[] = [
19
+ {
20
+ id: '1b6fd296-bc6a-4d45-bf4f-e45519a58cf5',
21
+ transactionId: '528651571NT',
22
+ name: 'Morgan Page',
23
+ amount: +1358.75,
24
+ status: 'completed',
25
+ date: sub(this.now, { months: 1, days: 3 }).toDateString(),
26
+ },
27
+ {
28
+ id: '2dec6074-98bd-4623-9526-6480e4776569',
29
+ transactionId: '421436904YT',
30
+ name: 'Nita Hebert',
31
+ amount: -1042.82,
32
+ status: 'completed',
33
+ date: sub(this.now, { months: 2, days: 2 }).toDateString(),
34
+ },
35
+ {
36
+ id: 'ae7c065f-4197-4021-a799-7a221822ad1d',
37
+ transactionId: '685377421YT',
38
+ name: 'Marsha Chambers',
39
+ amount: +1828.16,
40
+ status: 'pending',
41
+ date: sub(this.now, { months: 2, days: 12 }).toDateString(),
42
+ },
43
+ {
44
+ id: '0c43dd40-74f6-49d5-848a-57a4a45772ab',
45
+ transactionId: '884960091RT',
46
+ name: 'Charmaine Jackson',
47
+ amount: +1647.55,
48
+ status: 'completed',
49
+ date: sub(this.now, { months: 2, days: 24 }).toDateString(),
50
+ },
51
+ {
52
+ id: 'e5c9f0ed-a64c-4bfe-a113-29f80b4e162c',
53
+ transactionId: '361402213NT',
54
+ name: 'Maura Carey',
55
+ amount: -927.43,
56
+ status: 'completed',
57
+ date: sub(this.now, { months: 3, days: 4 }).toDateString(),
58
+ },
59
+ ];
60
+
61
+ data = {
62
+ accountBalance: {
63
+ growRate: 38.33,
64
+ ami: 45332,
65
+ series: [
66
+ {
67
+ name: 'Predicted',
68
+ data: [
69
+ {
70
+ x: add(sub(this.now, { months: 12 }), { days: 1 }),
71
+ y: 48.84,
72
+ },
73
+ {
74
+ x: add(sub(this.now, { months: 12 }), { days: 4 }),
75
+ y: 53.51,
76
+ },
77
+ {
78
+ x: add(sub(this.now, { months: 12 }), { days: 7 }),
79
+ y: 52.93,
80
+ },
81
+ {
82
+ x: add(sub(this.now, { months: 12 }), { days: 10 }),
83
+ y: 49.08,
84
+ },
85
+ {
86
+ x: add(sub(this.now, { months: 12 }), { days: 13 }),
87
+ y: 50.27,
88
+ },
89
+ {
90
+ x: add(sub(this.now, { months: 12 }), { days: 16 }),
91
+ y: 48.37,
92
+ },
93
+ {
94
+ x: add(sub(this.now, { months: 12 }), { days: 19 }),
95
+ y: 44.84,
96
+ },
97
+ {
98
+ x: add(sub(this.now, { months: 12 }), { days: 22 }),
99
+ y: 40.71,
100
+ },
101
+ {
102
+ x: add(sub(this.now, { months: 12 }), { days: 25 }),
103
+ y: 41.24,
104
+ },
105
+ {
106
+ x: add(sub(this.now, { months: 12 }), { days: 28 }),
107
+ y: 45.63,
108
+ },
109
+ {
110
+ x: add(sub(this.now, { months: 11 }), { days: 1 }),
111
+ y: 38.2,
112
+ },
113
+ {
114
+ x: add(sub(this.now, { months: 11 }), { days: 4 }),
115
+ y: 39.68,
116
+ },
117
+ {
118
+ x: add(sub(this.now, { months: 11 }), { days: 7 }),
119
+ y: 41.02,
120
+ },
121
+ {
122
+ x: add(sub(this.now, { months: 11 }), { days: 10 }),
123
+ y: 39.41,
124
+ },
125
+ {
126
+ x: add(sub(this.now, { months: 11 }), { days: 13 }),
127
+ y: 35.66,
128
+ },
129
+ {
130
+ x: add(sub(this.now, { months: 11 }), { days: 16 }),
131
+ y: 38.53,
132
+ },
133
+ {
134
+ x: add(sub(this.now, { months: 11 }), { days: 19 }),
135
+ y: 38.53,
136
+ },
137
+ {
138
+ x: add(sub(this.now, { months: 11 }), { days: 22 }),
139
+ y: 40.69,
140
+ },
141
+ {
142
+ x: add(sub(this.now, { months: 11 }), { days: 25 }),
143
+ y: 38.79,
144
+ },
145
+ {
146
+ x: add(sub(this.now, { months: 11 }), { days: 28 }),
147
+ y: 42.98,
148
+ },
149
+ {
150
+ x: add(sub(this.now, { months: 10 }), { days: 1 }),
151
+ y: 43.55,
152
+ },
153
+ {
154
+ x: add(sub(this.now, { months: 10 }), { days: 4 }),
155
+ y: 40.65,
156
+ },
157
+ {
158
+ x: add(sub(this.now, { months: 10 }), { days: 7 }),
159
+ y: 36.5,
160
+ },
161
+ {
162
+ x: add(sub(this.now, { months: 10 }), { days: 10 }),
163
+ y: 33.79,
164
+ },
165
+ {
166
+ x: add(sub(this.now, { months: 10 }), { days: 13 }),
167
+ y: 31.91,
168
+ },
169
+ {
170
+ x: add(sub(this.now, { months: 10 }), { days: 16 }),
171
+ y: 29.68,
172
+ },
173
+ {
174
+ x: add(sub(this.now, { months: 10 }), { days: 19 }),
175
+ y: 29.57,
176
+ },
177
+ {
178
+ x: add(sub(this.now, { months: 10 }), { days: 22 }),
179
+ y: 33.13,
180
+ },
181
+ {
182
+ x: add(sub(this.now, { months: 10 }), { days: 25 }),
183
+ y: 37.08,
184
+ },
185
+ {
186
+ x: add(sub(this.now, { months: 10 }), { days: 28 }),
187
+ y: 35.86,
188
+ },
189
+ {
190
+ x: add(sub(this.now, { months: 9 }), { days: 1 }),
191
+ y: 39.65,
192
+ },
193
+ {
194
+ x: add(sub(this.now, { months: 9 }), { days: 4 }),
195
+ y: 39.01,
196
+ },
197
+ {
198
+ x: add(sub(this.now, { months: 9 }), { days: 7 }),
199
+ y: 34.1,
200
+ },
201
+ {
202
+ x: add(sub(this.now, { months: 9 }), { days: 10 }),
203
+ y: 37.48,
204
+ },
205
+ {
206
+ x: add(sub(this.now, { months: 9 }), { days: 13 }),
207
+ y: 39.29,
208
+ },
209
+ {
210
+ x: add(sub(this.now, { months: 9 }), { days: 16 }),
211
+ y: 38.46,
212
+ },
213
+ {
214
+ x: add(sub(this.now, { months: 9 }), { days: 19 }),
215
+ y: 37.71,
216
+ },
217
+ {
218
+ x: add(sub(this.now, { months: 9 }), { days: 22 }),
219
+ y: 40.15,
220
+ },
221
+ {
222
+ x: add(sub(this.now, { months: 9 }), { days: 25 }),
223
+ y: 35.89,
224
+ },
225
+ {
226
+ x: add(sub(this.now, { months: 9 }), { days: 28 }),
227
+ y: 31.5,
228
+ },
229
+ {
230
+ x: add(sub(this.now, { months: 8 }), { days: 1 }),
231
+ y: 30.5,
232
+ },
233
+ {
234
+ x: add(sub(this.now, { months: 8 }), { days: 4 }),
235
+ y: 25.74,
236
+ },
237
+ {
238
+ x: add(sub(this.now, { months: 8 }), { days: 7 }),
239
+ y: 28.23,
240
+ },
241
+ {
242
+ x: add(sub(this.now, { months: 8 }), { days: 10 }),
243
+ y: 28.48,
244
+ },
245
+ {
246
+ x: add(sub(this.now, { months: 8 }), { days: 13 }),
247
+ y: 30.0,
248
+ },
249
+ {
250
+ x: add(sub(this.now, { months: 8 }), { days: 16 }),
251
+ y: 32.16,
252
+ },
253
+ {
254
+ x: add(sub(this.now, { months: 8 }), { days: 19 }),
255
+ y: 32.99,
256
+ },
257
+ {
258
+ x: add(sub(this.now, { months: 8 }), { days: 22 }),
259
+ y: 37.68,
260
+ },
261
+ {
262
+ x: add(sub(this.now, { months: 8 }), { days: 25 }),
263
+ y: 35.24,
264
+ },
265
+ {
266
+ x: add(sub(this.now, { months: 8 }), { days: 28 }),
267
+ y: 39.18,
268
+ },
269
+ {
270
+ x: add(sub(this.now, { months: 7 }), { days: 1 }),
271
+ y: 41.45,
272
+ },
273
+ {
274
+ x: add(sub(this.now, { months: 7 }), { days: 4 }),
275
+ y: 43.78,
276
+ },
277
+ {
278
+ x: add(sub(this.now, { months: 7 }), { days: 7 }),
279
+ y: 39.41,
280
+ },
281
+ {
282
+ x: add(sub(this.now, { months: 7 }), { days: 10 }),
283
+ y: 39.32,
284
+ },
285
+ {
286
+ x: add(sub(this.now, { months: 7 }), { days: 13 }),
287
+ y: 43.8,
288
+ },
289
+ {
290
+ x: add(sub(this.now, { months: 7 }), { days: 16 }),
291
+ y: 42.43,
292
+ },
293
+ {
294
+ x: add(sub(this.now, { months: 7 }), { days: 19 }),
295
+ y: 43.67,
296
+ },
297
+ {
298
+ x: add(sub(this.now, { months: 7 }), { days: 22 }),
299
+ y: 38.79,
300
+ },
301
+ {
302
+ x: add(sub(this.now, { months: 7 }), { days: 25 }),
303
+ y: 43.57,
304
+ },
305
+ {
306
+ x: add(sub(this.now, { months: 7 }), { days: 28 }),
307
+ y: 41.81,
308
+ },
309
+ {
310
+ x: add(sub(this.now, { months: 6 }), { days: 1 }),
311
+ y: 46.19,
312
+ },
313
+ {
314
+ x: add(sub(this.now, { months: 6 }), { days: 4 }),
315
+ y: 47.69,
316
+ },
317
+ {
318
+ x: add(sub(this.now, { months: 6 }), { days: 7 }),
319
+ y: 49.01,
320
+ },
321
+ {
322
+ x: add(sub(this.now, { months: 6 }), { days: 10 }),
323
+ y: 46.4,
324
+ },
325
+ {
326
+ x: add(sub(this.now, { months: 6 }), { days: 13 }),
327
+ y: 51.28,
328
+ },
329
+ {
330
+ x: add(sub(this.now, { months: 6 }), { days: 16 }),
331
+ y: 50.15,
332
+ },
333
+ {
334
+ x: add(sub(this.now, { months: 6 }), { days: 19 }),
335
+ y: 53.6,
336
+ },
337
+ {
338
+ x: add(sub(this.now, { months: 6 }), { days: 22 }),
339
+ y: 56.08,
340
+ },
341
+ {
342
+ x: add(sub(this.now, { months: 6 }), { days: 25 }),
343
+ y: 52.72,
344
+ },
345
+ {
346
+ x: add(sub(this.now, { months: 6 }), { days: 28 }),
347
+ y: 56.6,
348
+ },
349
+ {
350
+ x: add(sub(this.now, { months: 5 }), { days: 1 }),
351
+ y: 58.36,
352
+ },
353
+ {
354
+ x: add(sub(this.now, { months: 5 }), { days: 4 }),
355
+ y: 56.59,
356
+ },
357
+ {
358
+ x: add(sub(this.now, { months: 5 }), { days: 7 }),
359
+ y: 55.75,
360
+ },
361
+ {
362
+ x: add(sub(this.now, { months: 5 }), { days: 10 }),
363
+ y: 54.74,
364
+ },
365
+ {
366
+ x: add(sub(this.now, { months: 5 }), { days: 13 }),
367
+ y: 54.27,
368
+ },
369
+ {
370
+ x: add(sub(this.now, { months: 5 }), { days: 16 }),
371
+ y: 58.65,
372
+ },
373
+ {
374
+ x: add(sub(this.now, { months: 5 }), { days: 19 }),
375
+ y: 57.0,
376
+ },
377
+ {
378
+ x: add(sub(this.now, { months: 5 }), { days: 22 }),
379
+ y: 60.52,
380
+ },
381
+ {
382
+ x: add(sub(this.now, { months: 5 }), { days: 25 }),
383
+ y: 57.6,
384
+ },
385
+ {
386
+ x: add(sub(this.now, { months: 5 }), { days: 28 }),
387
+ y: 56.48,
388
+ },
389
+ {
390
+ x: add(sub(this.now, { months: 4 }), { days: 1 }),
391
+ y: 54.35,
392
+ },
393
+ {
394
+ x: add(sub(this.now, { months: 4 }), { days: 4 }),
395
+ y: 52.39,
396
+ },
397
+ {
398
+ x: add(sub(this.now, { months: 4 }), { days: 7 }),
399
+ y: 54.52,
400
+ },
401
+ {
402
+ x: add(sub(this.now, { months: 4 }), { days: 10 }),
403
+ y: 54.16,
404
+ },
405
+ {
406
+ x: add(sub(this.now, { months: 4 }), { days: 13 }),
407
+ y: 51.95,
408
+ },
409
+ {
410
+ x: add(sub(this.now, { months: 4 }), { days: 16 }),
411
+ y: 51.19,
412
+ },
413
+ {
414
+ x: add(sub(this.now, { months: 4 }), { days: 19 }),
415
+ y: 46.35,
416
+ },
417
+ {
418
+ x: add(sub(this.now, { months: 4 }), { days: 22 }),
419
+ y: 48.33,
420
+ },
421
+ {
422
+ x: add(sub(this.now, { months: 4 }), { days: 25 }),
423
+ y: 45.84,
424
+ },
425
+ {
426
+ x: add(sub(this.now, { months: 4 }), { days: 28 }),
427
+ y: 48.22,
428
+ },
429
+ {
430
+ x: add(sub(this.now, { months: 3 }), { days: 1 }),
431
+ y: 45.82,
432
+ },
433
+ {
434
+ x: add(sub(this.now, { months: 3 }), { days: 4 }),
435
+ y: 43.48,
436
+ },
437
+ {
438
+ x: add(sub(this.now, { months: 3 }), { days: 7 }),
439
+ y: 41.32,
440
+ },
441
+ {
442
+ x: add(sub(this.now, { months: 3 }), { days: 10 }),
443
+ y: 40.99,
444
+ },
445
+ {
446
+ x: add(sub(this.now, { months: 3 }), { days: 13 }),
447
+ y: 38.49,
448
+ },
449
+ {
450
+ x: add(sub(this.now, { months: 3 }), { days: 16 }),
451
+ y: 40.1,
452
+ },
453
+ {
454
+ x: add(sub(this.now, { months: 3 }), { days: 19 }),
455
+ y: 44.86,
456
+ },
457
+ {
458
+ x: add(sub(this.now, { months: 3 }), { days: 22 }),
459
+ y: 44.03,
460
+ },
461
+ {
462
+ x: add(sub(this.now, { months: 3 }), { days: 25 }),
463
+ y: 41.41,
464
+ },
465
+ {
466
+ x: add(sub(this.now, { months: 3 }), { days: 28 }),
467
+ y: 37.8,
468
+ },
469
+ {
470
+ x: add(sub(this.now, { months: 2 }), { days: 1 }),
471
+ y: 35.24,
472
+ },
473
+ {
474
+ x: add(sub(this.now, { months: 2 }), { days: 4 }),
475
+ y: 32.12,
476
+ },
477
+ {
478
+ x: add(sub(this.now, { months: 2 }), { days: 7 }),
479
+ y: 35.68,
480
+ },
481
+ {
482
+ x: add(sub(this.now, { months: 2 }), { days: 10 }),
483
+ y: 38.0,
484
+ },
485
+ {
486
+ x: add(sub(this.now, { months: 2 }), { days: 13 }),
487
+ y: 37.96,
488
+ },
489
+ {
490
+ x: add(sub(this.now, { months: 2 }), { days: 16 }),
491
+ y: 38.7,
492
+ },
493
+ {
494
+ x: add(sub(this.now, { months: 2 }), { days: 19 }),
495
+ y: 37.45,
496
+ },
497
+ {
498
+ x: add(sub(this.now, { months: 2 }), { days: 22 }),
499
+ y: 37.51,
500
+ },
501
+ {
502
+ x: add(sub(this.now, { months: 2 }), { days: 25 }),
503
+ y: 33.1,
504
+ },
505
+ {
506
+ x: add(sub(this.now, { months: 2 }), { days: 28 }),
507
+ y: 35.09,
508
+ },
509
+ {
510
+ x: add(sub(this.now, { months: 1 }), { days: 1 }),
511
+ y: 31.87,
512
+ },
513
+ {
514
+ x: add(sub(this.now, { months: 1 }), { days: 4 }),
515
+ y: 29.18,
516
+ },
517
+ {
518
+ x: add(sub(this.now, { months: 1 }), { days: 7 }),
519
+ y: 31.91,
520
+ },
521
+ {
522
+ x: add(sub(this.now, { months: 1 }), { days: 10 }),
523
+ y: 34.37,
524
+ },
525
+ {
526
+ x: add(sub(this.now, { months: 1 }), { days: 13 }),
527
+ y: 32.91,
528
+ },
529
+ {
530
+ x: add(sub(this.now, { months: 1 }), { days: 16 }),
531
+ y: 33.17,
532
+ },
533
+ {
534
+ x: add(sub(this.now, { months: 1 }), { days: 19 }),
535
+ y: 37.16,
536
+ },
537
+ {
538
+ x: add(sub(this.now, { months: 1 }), { days: 22 }),
539
+ y: 32.6,
540
+ },
541
+ {
542
+ x: add(sub(this.now, { months: 1 }), { days: 25 }),
543
+ y: 36.94,
544
+ },
545
+ {
546
+ x: add(sub(this.now, { months: 1 }), { days: 28 }),
547
+ y: 35.98,
548
+ },
549
+ ],
550
+ },
551
+ {
552
+ name: 'Actual',
553
+ data: [
554
+ {
555
+ x: add(sub(this.now, { months: 12 }), { days: 1 }),
556
+ y: 20.21,
557
+ },
558
+ {
559
+ x: add(sub(this.now, { months: 12 }), { days: 4 }),
560
+ y: 17.49,
561
+ },
562
+ {
563
+ x: add(sub(this.now, { months: 12 }), { days: 7 }),
564
+ y: 16.54,
565
+ },
566
+ {
567
+ x: add(sub(this.now, { months: 12 }), { days: 10 }),
568
+ y: 19.0,
569
+ },
570
+ {
571
+ x: add(sub(this.now, { months: 12 }), { days: 13 }),
572
+ y: 16.47,
573
+ },
574
+ {
575
+ x: add(sub(this.now, { months: 12 }), { days: 16 }),
576
+ y: 13.15,
577
+ },
578
+ {
579
+ x: add(sub(this.now, { months: 12 }), { days: 19 }),
580
+ y: 18.07,
581
+ },
582
+ {
583
+ x: add(sub(this.now, { months: 12 }), { days: 22 }),
584
+ y: 17.93,
585
+ },
586
+ {
587
+ x: add(sub(this.now, { months: 12 }), { days: 25 }),
588
+ y: 18.92,
589
+ },
590
+ {
591
+ x: add(sub(this.now, { months: 12 }), { days: 28 }),
592
+ y: 18.46,
593
+ },
594
+ {
595
+ x: add(sub(this.now, { months: 11 }), { days: 1 }),
596
+ y: 18.04,
597
+ },
598
+ {
599
+ x: add(sub(this.now, { months: 11 }), { days: 4 }),
600
+ y: 17.78,
601
+ },
602
+ {
603
+ x: add(sub(this.now, { months: 11 }), { days: 7 }),
604
+ y: 20.15,
605
+ },
606
+ {
607
+ x: add(sub(this.now, { months: 11 }), { days: 10 }),
608
+ y: 18.92,
609
+ },
610
+ {
611
+ x: add(sub(this.now, { months: 11 }), { days: 13 }),
612
+ y: 17.08,
613
+ },
614
+ {
615
+ x: add(sub(this.now, { months: 11 }), { days: 16 }),
616
+ y: 17.11,
617
+ },
618
+ {
619
+ x: add(sub(this.now, { months: 11 }), { days: 19 }),
620
+ y: 15.7,
621
+ },
622
+ {
623
+ x: add(sub(this.now, { months: 11 }), { days: 22 }),
624
+ y: 15.07,
625
+ },
626
+ {
627
+ x: add(sub(this.now, { months: 11 }), { days: 25 }),
628
+ y: 14.51,
629
+ },
630
+ {
631
+ x: add(sub(this.now, { months: 11 }), { days: 28 }),
632
+ y: 15.22,
633
+ },
634
+ {
635
+ x: add(sub(this.now, { months: 10 }), { days: 1 }),
636
+ y: 19.77,
637
+ },
638
+ {
639
+ x: add(sub(this.now, { months: 10 }), { days: 4 }),
640
+ y: 23.67,
641
+ },
642
+ {
643
+ x: add(sub(this.now, { months: 10 }), { days: 7 }),
644
+ y: 27.98,
645
+ },
646
+ {
647
+ x: add(sub(this.now, { months: 10 }), { days: 10 }),
648
+ y: 30.8,
649
+ },
650
+ {
651
+ x: add(sub(this.now, { months: 10 }), { days: 13 }),
652
+ y: 28.56,
653
+ },
654
+ {
655
+ x: add(sub(this.now, { months: 10 }), { days: 16 }),
656
+ y: 27.45,
657
+ },
658
+ {
659
+ x: add(sub(this.now, { months: 10 }), { days: 19 }),
660
+ y: 27.5,
661
+ },
662
+ {
663
+ x: add(sub(this.now, { months: 10 }), { days: 22 }),
664
+ y: 27.28,
665
+ },
666
+ {
667
+ x: add(sub(this.now, { months: 10 }), { days: 25 }),
668
+ y: 24.36,
669
+ },
670
+ {
671
+ x: add(sub(this.now, { months: 10 }), { days: 28 }),
672
+ y: 22.89,
673
+ },
674
+ {
675
+ x: add(sub(this.now, { months: 9 }), { days: 1 }),
676
+ y: 28.04,
677
+ },
678
+ {
679
+ x: add(sub(this.now, { months: 9 }), { days: 4 }),
680
+ y: 27.77,
681
+ },
682
+ {
683
+ x: add(sub(this.now, { months: 9 }), { days: 7 }),
684
+ y: 30.24,
685
+ },
686
+ {
687
+ x: add(sub(this.now, { months: 9 }), { days: 10 }),
688
+ y: 26.57,
689
+ },
690
+ {
691
+ x: add(sub(this.now, { months: 9 }), { days: 13 }),
692
+ y: 22.18,
693
+ },
694
+ {
695
+ x: add(sub(this.now, { months: 9 }), { days: 16 }),
696
+ y: 19.64,
697
+ },
698
+ {
699
+ x: add(sub(this.now, { months: 9 }), { days: 19 }),
700
+ y: 16.74,
701
+ },
702
+ {
703
+ x: add(sub(this.now, { months: 9 }), { days: 22 }),
704
+ y: 17.21,
705
+ },
706
+ {
707
+ x: add(sub(this.now, { months: 9 }), { days: 25 }),
708
+ y: 20.05,
709
+ },
710
+ {
711
+ x: add(sub(this.now, { months: 9 }), { days: 28 }),
712
+ y: 16.13,
713
+ },
714
+ {
715
+ x: add(sub(this.now, { months: 8 }), { days: 1 }),
716
+ y: 10.71,
717
+ },
718
+ {
719
+ x: add(sub(this.now, { months: 8 }), { days: 4 }),
720
+ y: 7.99,
721
+ },
722
+ {
723
+ x: add(sub(this.now, { months: 8 }), { days: 7 }),
724
+ y: 11.33,
725
+ },
726
+ {
727
+ x: add(sub(this.now, { months: 8 }), { days: 10 }),
728
+ y: 15.36,
729
+ },
730
+ {
731
+ x: add(sub(this.now, { months: 8 }), { days: 13 }),
732
+ y: 20.16,
733
+ },
734
+ {
735
+ x: add(sub(this.now, { months: 8 }), { days: 16 }),
736
+ y: 22.56,
737
+ },
738
+ {
739
+ x: add(sub(this.now, { months: 8 }), { days: 19 }),
740
+ y: 19.34,
741
+ },
742
+ {
743
+ x: add(sub(this.now, { months: 8 }), { days: 22 }),
744
+ y: 18.32,
745
+ },
746
+ {
747
+ x: add(sub(this.now, { months: 8 }), { days: 25 }),
748
+ y: 20.75,
749
+ },
750
+ {
751
+ x: add(sub(this.now, { months: 8 }), { days: 28 }),
752
+ y: 17.09,
753
+ },
754
+ {
755
+ x: add(sub(this.now, { months: 7 }), { days: 1 }),
756
+ y: 18.31,
757
+ },
758
+ {
759
+ x: add(sub(this.now, { months: 7 }), { days: 4 }),
760
+ y: 14.34,
761
+ },
762
+ {
763
+ x: add(sub(this.now, { months: 7 }), { days: 7 }),
764
+ y: 9.93,
765
+ },
766
+ {
767
+ x: add(sub(this.now, { months: 7 }), { days: 10 }),
768
+ y: 10.64,
769
+ },
770
+ {
771
+ x: add(sub(this.now, { months: 7 }), { days: 13 }),
772
+ y: 6.18,
773
+ },
774
+ {
775
+ x: add(sub(this.now, { months: 7 }), { days: 16 }),
776
+ y: 10.32,
777
+ },
778
+ {
779
+ x: add(sub(this.now, { months: 7 }), { days: 19 }),
780
+ y: 12.8,
781
+ },
782
+ {
783
+ x: add(sub(this.now, { months: 7 }), { days: 22 }),
784
+ y: 13.44,
785
+ },
786
+ {
787
+ x: add(sub(this.now, { months: 7 }), { days: 25 }),
788
+ y: 18.35,
789
+ },
790
+ {
791
+ x: add(sub(this.now, { months: 7 }), { days: 28 }),
792
+ y: 22.87,
793
+ },
794
+ {
795
+ x: add(sub(this.now, { months: 6 }), { days: 1 }),
796
+ y: 26.92,
797
+ },
798
+ {
799
+ x: add(sub(this.now, { months: 6 }), { days: 4 }),
800
+ y: 22.5,
801
+ },
802
+ {
803
+ x: add(sub(this.now, { months: 6 }), { days: 7 }),
804
+ y: 18.14,
805
+ },
806
+ {
807
+ x: add(sub(this.now, { months: 6 }), { days: 10 }),
808
+ y: 19.06,
809
+ },
810
+ {
811
+ x: add(sub(this.now, { months: 6 }), { days: 13 }),
812
+ y: 19.73,
813
+ },
814
+ {
815
+ x: add(sub(this.now, { months: 6 }), { days: 16 }),
816
+ y: 18.82,
817
+ },
818
+ {
819
+ x: add(sub(this.now, { months: 6 }), { days: 19 }),
820
+ y: 23.33,
821
+ },
822
+ {
823
+ x: add(sub(this.now, { months: 6 }), { days: 22 }),
824
+ y: 20.48,
825
+ },
826
+ {
827
+ x: add(sub(this.now, { months: 6 }), { days: 25 }),
828
+ y: 25.47,
829
+ },
830
+ {
831
+ x: add(sub(this.now, { months: 6 }), { days: 28 }),
832
+ y: 28.84,
833
+ },
834
+ {
835
+ x: add(sub(this.now, { months: 5 }), { days: 1 }),
836
+ y: 27.71,
837
+ },
838
+ {
839
+ x: add(sub(this.now, { months: 5 }), { days: 4 }),
840
+ y: 25.22,
841
+ },
842
+ {
843
+ x: add(sub(this.now, { months: 5 }), { days: 7 }),
844
+ y: 25.43,
845
+ },
846
+ {
847
+ x: add(sub(this.now, { months: 5 }), { days: 10 }),
848
+ y: 24.13,
849
+ },
850
+ {
851
+ x: add(sub(this.now, { months: 5 }), { days: 13 }),
852
+ y: 20.02,
853
+ },
854
+ {
855
+ x: add(sub(this.now, { months: 5 }), { days: 16 }),
856
+ y: 18.38,
857
+ },
858
+ {
859
+ x: add(sub(this.now, { months: 5 }), { days: 19 }),
860
+ y: 18.3,
861
+ },
862
+ {
863
+ x: add(sub(this.now, { months: 5 }), { days: 22 }),
864
+ y: 18.72,
865
+ },
866
+ {
867
+ x: add(sub(this.now, { months: 5 }), { days: 25 }),
868
+ y: 22.46,
869
+ },
870
+ {
871
+ x: add(sub(this.now, { months: 5 }), { days: 28 }),
872
+ y: 21.71,
873
+ },
874
+ {
875
+ x: add(sub(this.now, { months: 4 }), { days: 1 }),
876
+ y: 29.88,
877
+ },
878
+ {
879
+ x: add(sub(this.now, { months: 4 }), { days: 4 }),
880
+ y: 26.94,
881
+ },
882
+ {
883
+ x: add(sub(this.now, { months: 4 }), { days: 7 }),
884
+ y: 28.06,
885
+ },
886
+ {
887
+ x: add(sub(this.now, { months: 4 }), { days: 10 }),
888
+ y: 30.4,
889
+ },
890
+ {
891
+ x: add(sub(this.now, { months: 4 }), { days: 13 }),
892
+ y: 28.98,
893
+ },
894
+ {
895
+ x: add(sub(this.now, { months: 4 }), { days: 16 }),
896
+ y: 30.13,
897
+ },
898
+ {
899
+ x: add(sub(this.now, { months: 4 }), { days: 19 }),
900
+ y: 27.6,
901
+ },
902
+ {
903
+ x: add(sub(this.now, { months: 4 }), { days: 22 }),
904
+ y: 30.21,
905
+ },
906
+ {
907
+ x: add(sub(this.now, { months: 4 }), { days: 25 }),
908
+ y: 26.88,
909
+ },
910
+ {
911
+ x: add(sub(this.now, { months: 4 }), { days: 28 }),
912
+ y: 25.72,
913
+ },
914
+ {
915
+ x: add(sub(this.now, { months: 3 }), { days: 1 }),
916
+ y: 27.89,
917
+ },
918
+ {
919
+ x: add(sub(this.now, { months: 3 }), { days: 4 }),
920
+ y: 30.69,
921
+ },
922
+ {
923
+ x: add(sub(this.now, { months: 3 }), { days: 7 }),
924
+ y: 31.42,
925
+ },
926
+ {
927
+ x: add(sub(this.now, { months: 3 }), { days: 10 }),
928
+ y: 36.14,
929
+ },
930
+ {
931
+ x: add(sub(this.now, { months: 3 }), { days: 13 }),
932
+ y: 32.02,
933
+ },
934
+ {
935
+ x: add(sub(this.now, { months: 3 }), { days: 16 }),
936
+ y: 27.3,
937
+ },
938
+ {
939
+ x: add(sub(this.now, { months: 3 }), { days: 19 }),
940
+ y: 29.51,
941
+ },
942
+ {
943
+ x: add(sub(this.now, { months: 3 }), { days: 22 }),
944
+ y: 32.67,
945
+ },
946
+ {
947
+ x: add(sub(this.now, { months: 3 }), { days: 25 }),
948
+ y: 28.82,
949
+ },
950
+ {
951
+ x: add(sub(this.now, { months: 3 }), { days: 28 }),
952
+ y: 28.85,
953
+ },
954
+ {
955
+ x: add(sub(this.now, { months: 2 }), { days: 1 }),
956
+ y: 29.15,
957
+ },
958
+ {
959
+ x: add(sub(this.now, { months: 2 }), { days: 4 }),
960
+ y: 27.9,
961
+ },
962
+ {
963
+ x: add(sub(this.now, { months: 2 }), { days: 7 }),
964
+ y: 30.71,
965
+ },
966
+ {
967
+ x: add(sub(this.now, { months: 2 }), { days: 10 }),
968
+ y: 28.02,
969
+ },
970
+ {
971
+ x: add(sub(this.now, { months: 2 }), { days: 13 }),
972
+ y: 23.82,
973
+ },
974
+ {
975
+ x: add(sub(this.now, { months: 2 }), { days: 16 }),
976
+ y: 18.83,
977
+ },
978
+ {
979
+ x: add(sub(this.now, { months: 2 }), { days: 19 }),
980
+ y: 14.48,
981
+ },
982
+ {
983
+ x: add(sub(this.now, { months: 2 }), { days: 22 }),
984
+ y: 11.76,
985
+ },
986
+ {
987
+ x: add(sub(this.now, { months: 2 }), { days: 25 }),
988
+ y: 12.75,
989
+ },
990
+ {
991
+ x: add(sub(this.now, { months: 2 }), { days: 28 }),
992
+ y: 11.36,
993
+ },
994
+ {
995
+ x: add(sub(this.now, { months: 1 }), { days: 1 }),
996
+ y: 11.6,
997
+ },
998
+ {
999
+ x: add(sub(this.now, { months: 1 }), { days: 4 }),
1000
+ y: 15.24,
1001
+ },
1002
+ {
1003
+ x: add(sub(this.now, { months: 1 }), { days: 7 }),
1004
+ y: 13.05,
1005
+ },
1006
+ {
1007
+ x: add(sub(this.now, { months: 1 }), { days: 10 }),
1008
+ y: 17.25,
1009
+ },
1010
+ {
1011
+ x: add(sub(this.now, { months: 1 }), { days: 13 }),
1012
+ y: 18.5,
1013
+ },
1014
+ {
1015
+ x: add(sub(this.now, { months: 1 }), { days: 16 }),
1016
+ y: 23.04,
1017
+ },
1018
+ {
1019
+ x: add(sub(this.now, { months: 1 }), { days: 19 }),
1020
+ y: 21.87,
1021
+ },
1022
+ {
1023
+ x: add(sub(this.now, { months: 1 }), { days: 22 }),
1024
+ y: 25.97,
1025
+ },
1026
+ {
1027
+ x: add(sub(this.now, { months: 1 }), { days: 25 }),
1028
+ y: 22.46,
1029
+ },
1030
+ {
1031
+ x: add(sub(this.now, { months: 1 }), { days: 28 }),
1032
+ y: 17.67,
1033
+ },
1034
+ ],
1035
+ },
1036
+ ],
1037
+ },
1038
+ budget: {
1039
+ expenses: 11763.34,
1040
+ expensesLimit: 20000,
1041
+ savings: 10974.12,
1042
+ savingsGoal: 250000,
1043
+ bills: 1789.22,
1044
+ billsLimit: 1000,
1045
+ },
1046
+ previousStatement: {
1047
+ status: 'paid',
1048
+ date: format(sub(startOfDay(this.now), { days: 15 }), 'PP'),
1049
+ limit: 34500,
1050
+ spent: 27221.21,
1051
+ minimum: 7331.94,
1052
+ },
1053
+ currentStatement: {
1054
+ status: 'pending',
1055
+ date: format(
1056
+ add(sub(startOfDay(this.now), { days: 15 }), { months: 1 }),
1057
+ 'PP'
1058
+ ),
1059
+ limit: 34500,
1060
+ spent: 39819.41,
1061
+ minimum: 9112.51,
1062
+ },
1063
+ recentTransactions: this.recentTransactions,
1064
+ };
1065
+ }