@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,1149 @@
1
+ #fuse {
2
+ /* ------------------------------------------------------------------------ */
3
+ /* Typography */
4
+ /* ------------------------------------------------------------------------ */
5
+ --mat-sys-body-large: 400 1rem / 1.5rem var(--font-sans);
6
+ --mat-sys-body-large-font: var(--font-sans);
7
+ --mat-sys-body-large-line-height: 1.5rem;
8
+ --mat-sys-body-large-size: 1rem;
9
+ --mat-sys-body-large-tracking: 0.031rem;
10
+ --mat-sys-body-large-weight: 400;
11
+
12
+ --mat-sys-body-medium: 400 0.8125rem / 1.25rem var(--font-sans);
13
+ --mat-sys-body-medium-font: var(--font-sans);
14
+ --mat-sys-body-medium-line-height: 1.25rem;
15
+ --mat-sys-body-medium-size: 0.8125rem;
16
+ --mat-sys-body-medium-tracking: 0.016rem;
17
+ --mat-sys-body-medium-weight: 400;
18
+
19
+ --mat-sys-body-small: 400 0.75rem / 1rem var(--font-sans);
20
+ --mat-sys-body-small-font: var(--font-sans);
21
+ --mat-sys-body-small-line-height: 1rem;
22
+ --mat-sys-body-small-size: 0.75rem;
23
+ --mat-sys-body-small-tracking: 0.025rem;
24
+ --mat-sys-body-small-weight: 400;
25
+
26
+ --mat-sys-display-large: 400 3.562rem / 4rem var(--font-display);
27
+ --mat-sys-display-large-font: var(--font-display);
28
+ --mat-sys-display-large-line-height: 4rem;
29
+ --mat-sys-display-large-size: 3.562rem;
30
+ --mat-sys-display-large-tracking: -0.016rem;
31
+ --mat-sys-display-large-weight: 400;
32
+
33
+ --mat-sys-display-medium: 400 2.812rem / 3.25rem var(--font-display);
34
+ --mat-sys-display-medium-font: var(--font-display);
35
+ --mat-sys-display-medium-line-height: 3.25rem;
36
+ --mat-sys-display-medium-size: 2.812rem;
37
+ --mat-sys-display-medium-tracking: 0;
38
+ --mat-sys-display-medium-weight: 400;
39
+
40
+ --mat-sys-display-small: 400 2.25rem / 2.75rem var(--font-display);
41
+ --mat-sys-display-small-font: var(--font-display);
42
+ --mat-sys-display-small-line-height: 2.75rem;
43
+ --mat-sys-display-small-size: 2.25rem;
44
+ --mat-sys-display-small-tracking: 0;
45
+ --mat-sys-display-small-weight: 400;
46
+
47
+ --mat-sys-headline-large: 400 2rem / 2.5rem var(--font-display);
48
+ --mat-sys-headline-large-font: var(--font-display);
49
+ --mat-sys-headline-large-line-height: 2.5rem;
50
+ --mat-sys-headline-large-size: 2rem;
51
+ --mat-sys-headline-large-tracking: 0;
52
+ --mat-sys-headline-large-weight: 400;
53
+
54
+ --mat-sys-headline-medium: 400 1.75rem / 2.25rem var(--font-display);
55
+ --mat-sys-headline-medium-font: var(--font-display);
56
+ --mat-sys-headline-medium-line-height: 2.25rem;
57
+ --mat-sys-headline-medium-size: 1.75rem;
58
+ --mat-sys-headline-medium-tracking: 0;
59
+ --mat-sys-headline-medium-weight: 400;
60
+
61
+ --mat-sys-headline-small: 400 1.5rem / 2rem var(--font-display);
62
+ --mat-sys-headline-small-font: var(--font-display);
63
+ --mat-sys-headline-small-line-height: 2rem;
64
+ --mat-sys-headline-small-size: 1.5rem;
65
+ --mat-sys-headline-small-tracking: 0;
66
+ --mat-sys-headline-small-weight: 400;
67
+
68
+ --mat-sys-label-large: 500 0.8125rem / 1.25rem var(--font-sans);
69
+ --mat-sys-label-large-font: var(--font-sans);
70
+ --mat-sys-label-large-line-height: 1.25rem;
71
+ --mat-sys-label-large-size: 0.8125rem;
72
+ --mat-sys-label-large-tracking: 0.006rem;
73
+ --mat-sys-label-large-weight: 600;
74
+ --mat-sys-label-large-weight-prominent: 700;
75
+
76
+ --mat-sys-label-medium: 500 0.75rem / 1rem var(--font-sans);
77
+ --mat-sys-label-medium-font: var(--font-sans);
78
+ --mat-sys-label-medium-line-height: 1rem;
79
+ --mat-sys-label-medium-size: 0.75rem;
80
+ --mat-sys-label-medium-tracking: 0.031rem;
81
+ --mat-sys-label-medium-weight: 500;
82
+ --mat-sys-label-medium-weight-prominent: 700;
83
+
84
+ --mat-sys-label-small: 500 0.688rem / 1rem var(--font-sans);
85
+ --mat-sys-label-small-font: var(--font-sans);
86
+ --mat-sys-label-small-line-height: 1rem;
87
+ --mat-sys-label-small-size: 0.688rem;
88
+ --mat-sys-label-small-tracking: 0.031rem;
89
+ --mat-sys-label-small-weight: 500;
90
+
91
+ --mat-sys-title-large: 400 1.375rem / 1.75rem var(--font-sans);
92
+ --mat-sys-title-large-font: var(--font-sans);
93
+ --mat-sys-title-large-line-height: 1.75rem;
94
+ --mat-sys-title-large-size: 1.375rem;
95
+ --mat-sys-title-large-tracking: 0;
96
+ --mat-sys-title-large-weight: 400;
97
+
98
+ --mat-sys-title-medium: 500 1rem / 1.5rem var(--font-sans);
99
+ --mat-sys-title-medium-font: var(--font-sans);
100
+ --mat-sys-title-medium-line-height: 1.5rem;
101
+ --mat-sys-title-medium-size: 1rem;
102
+ --mat-sys-title-medium-tracking: 0.009rem;
103
+ --mat-sys-title-medium-weight: 500;
104
+
105
+ --mat-sys-title-small: 500 0.8125rem / 1.25rem var(--font-sans);
106
+ --mat-sys-title-small-font: var(--font-sans);
107
+ --mat-sys-title-small-line-height: 1.25rem;
108
+ --mat-sys-title-small-size: 0.8125rem;
109
+ --mat-sys-title-small-tracking: 0.006rem;
110
+ --mat-sys-title-small-weight: 500;
111
+
112
+ /* ------------------------------------------------------------------------ */
113
+ /* Color */
114
+ /* ------------------------------------------------------------------------ */
115
+
116
+ /* Background */
117
+ --mat-sys-background: light-dark(
118
+ var(--color-neutral-100),
119
+ var(--color-neutral-900)
120
+ );
121
+ --mat-sys-on-background: light-dark(
122
+ var(--color-neutral-950),
123
+ var(--color-white)
124
+ );
125
+
126
+ /* Surface */
127
+ --mat-sys-surface: light-dark(
128
+ var(--color-neutral-100),
129
+ var(--color-neutral-900)
130
+ );
131
+ --mat-sys-surface-dim: light-dark(
132
+ var(--color-neutral-100),
133
+ var(--color-neutral-950)
134
+ );
135
+ --mat-sys-surface-bright: light-dark(
136
+ var(--color-white),
137
+ var(--color-neutral-900)
138
+ );
139
+ --mat-sys-surface-tint: light-dark(
140
+ var(--color-primary-50),
141
+ var(--color-primary-950)
142
+ );
143
+ --mat-sys-surface-variant: light-dark(
144
+ var(--color-neutral-50),
145
+ var(--color-neutral-800)
146
+ );
147
+ --mat-sys-surface-container-lowest: light-dark(
148
+ var(--color-white),
149
+ var(--color-neutral-950)
150
+ );
151
+ --mat-sys-surface-container-low: light-dark(
152
+ var(--color-neutral-50),
153
+ var(--color-neutral-900)
154
+ );
155
+ --mat-sys-surface-container: light-dark(
156
+ var(--color-neutral-100),
157
+ var(--color-neutral-800)
158
+ );
159
+ --mat-sys-surface-container-high: light-dark(
160
+ var(--color-neutral-200),
161
+ var(--color-neutral-700)
162
+ );
163
+ --mat-sys-surface-container-highest: light-dark(
164
+ var(--color-neutral-300),
165
+ var(--color-neutral-600)
166
+ );
167
+ --mat-sys-on-surface: light-dark(
168
+ var(--color-neutral-950),
169
+ var(--color-white)
170
+ );
171
+ --mat-sys-on-surface-variant: var(--color-neutral-500);
172
+
173
+ /* Primary */
174
+ --mat-sys-primary: var(--color-primary-600);
175
+ --mat-sys-primary-container: light-dark(
176
+ var(--color-primary-50),
177
+ var(--color-primary-950)
178
+ );
179
+ --mat-sys-primary-fixed: var(--color-primary-600);
180
+ --mat-sys-primary-fixed-dim: var(--color-primary-500);
181
+ --mat-sys-on-primary: var(--color-primary-50);
182
+ --mat-sys-on-primary-container: light-dark(
183
+ var(--color-primary-950),
184
+ var(--color-primary-50)
185
+ );
186
+ --mat-sys-on-primary-fixed: var(--color-primary-50);
187
+ --mat-sys-on-primary-fixed-variant: var(--color-primary-50);
188
+
189
+ /* Secondary */
190
+ /*--mat-sys-secondary: light-dark(${hexFromArgb(theme.light.secondary)}, ${hexFromArgb(theme.dark.secondary)});*/
191
+ /*--mat-sys-secondary-container: light-dark(${hexFromArgb(theme.light.secondaryContainer)}, ${hexFromArgb(theme.dark.secondaryContainer)});*/
192
+ /*--mat-sys-secondary-fixed: light-dark(${hexFromArgb(theme.light.secondaryFixed)}, ${hexFromArgb(theme.dark.secondaryFixed)});*/
193
+ /*--mat-sys-secondary-fixed-dim: light-dark(${hexFromArgb(theme.light.secondaryFixedDim)}, ${hexFromArgb(theme.dark.secondaryFixedDim)});*/
194
+ /*--mat-sys-on-secondary: light-dark(${hexFromArgb(theme.light.onSecondary)}, ${hexFromArgb(theme.dark.onSecondary)});*/
195
+ /*--mat-sys-on-secondary-container: light-dark(${hexFromArgb(theme.light.onSecondaryContainer)}, ${hexFromArgb(theme.dark.onSecondaryContainer)});*/
196
+ /*--mat-sys-on-secondary-fixed: light-dark(${hexFromArgb(theme.light.onSecondaryFixed)}, ${hexFromArgb(theme.dark.onSecondaryFixed)});*/
197
+ /*--mat-sys-on-secondary-fixed-variant: light-dark(${hexFromArgb(theme.light.onSecondaryFixedVariant)}, ${hexFromArgb(theme.dark.onSecondaryFixedVariant)});*/
198
+
199
+ /* Tertiary */
200
+ /*--mat-sys-tertiary: light-dark(${hexFromArgb(theme.light.tertiary)}, ${hexFromArgb(theme.dark.tertiary)});*/
201
+ /*--mat-sys-tertiary-container: light-dark(${hexFromArgb(theme.light.tertiaryContainer)}, ${hexFromArgb(theme.dark.tertiaryContainer)});*/
202
+ /*--mat-sys-tertiary-fixed: light-dark(${hexFromArgb(theme.light.tertiaryFixed)}, ${hexFromArgb(theme.dark.tertiaryFixed)});*/
203
+ /*--mat-sys-tertiary-fixed-dim: light-dark(${hexFromArgb(theme.light.tertiaryFixedDim)}, ${hexFromArgb(theme.dark.tertiaryFixedDim)});*/
204
+ /*--mat-sys-on-tertiary: light-dark(${hexFromArgb(theme.light.onTertiary)}, ${hexFromArgb(theme.dark.onTertiary)});*/
205
+ /*--mat-sys-on-tertiary-container: light-dark(${hexFromArgb(theme.light.onTertiaryContainer)}, ${hexFromArgb(theme.dark.onTertiaryContainer)});*/
206
+ /*--mat-sys-on-tertiary-fixed: light-dark(${hexFromArgb(theme.light.onTertiaryFixed)}, ${hexFromArgb(theme.dark.onTertiaryFixed)});*/
207
+ /*--mat-sys-on-tertiary-fixed-variant: light-dark(${hexFromArgb(theme.light.onTertiaryFixedVariant)}, ${hexFromArgb(theme.dark.onTertiaryFixedVariant)});*/
208
+
209
+ /* Error */
210
+ --mat-sys-error: var(--color-error-600);
211
+ --mat-sys-error-container: light-dark(
212
+ var(--color-error-50),
213
+ var(--color-error-950)
214
+ );
215
+ --mat-sys-on-error: var(--color-error-50);
216
+ --mat-sys-on-error-container: light-dark(
217
+ var(--color-error-950),
218
+ var(--color-error-50)
219
+ );
220
+
221
+ /* Others */
222
+ --mat-sys-outline: light-dark(
223
+ var(--color-neutral-300),
224
+ var(--color-neutral-700)
225
+ );
226
+ --mat-sys-outline-variant: light-dark(
227
+ var(--color-neutral-300),
228
+ var(--color-neutral-700)
229
+ );
230
+ --mat-sys-scrim: light-dark(var(--color-neutral-950), var(--color-black));
231
+ --mat-sys-shadow: var(--color-black);
232
+
233
+ /* Inverse */
234
+ --mat-sys-inverse-primary: var(--color-primary-600);
235
+ --mat-sys-inverse-surface: light-dark(
236
+ var(--color-neutral-900),
237
+ var(--color-neutral-100)
238
+ );
239
+ --mat-sys-inverse-on-surface: light-dark(
240
+ var(--color-white),
241
+ var(--color-neutral-950)
242
+ );
243
+
244
+ /* Angular Material fixed color extensions */
245
+ --mat-sys-neutral-variant20: var(--color-neutral-900);
246
+ --mat-sys-neutral10: var(--color-neutral-950);
247
+
248
+ /* Angular Material shadow extensions */
249
+ --mat-sys-level0:
250
+ 0px 0px 0px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
251
+ 0px 0px 0px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
252
+ 0px 0px 0px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
253
+ --mat-sys-level1:
254
+ 0px 2px 1px -1px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
255
+ 0px 1px 1px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
256
+ 0px 1px 3px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
257
+ --mat-sys-level2:
258
+ 0px 3px 3px -2px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
259
+ 0px 3px 4px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
260
+ 0px 1px 8px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
261
+ --mat-sys-level3:
262
+ 0px 3px 5px -1px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
263
+ 0px 6px 10px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
264
+ 0px 1px 18px 0px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
265
+ --mat-sys-level4:
266
+ 0px 5px 5px -3px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
267
+ 0px 8px 10px 1px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
268
+ 0px 3px 14px 2px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
269
+ --mat-sys-level5:
270
+ 0px 7px 8px -4px color-mix(in srgb, var(--mat-sys-shadow), transparent 80%),
271
+ 0px 12px 17px 2px color-mix(in srgb, var(--mat-sys-shadow), transparent 86%),
272
+ 0px 5px 22px 4px color-mix(in srgb, var(--mat-sys-shadow), transparent 88%);
273
+
274
+ /* ------------------------------------------------------------------------ */
275
+ /* Size */
276
+ /* ------------------------------------------------------------------------ */
277
+ --mat-sys-corner-extra-large: 28px;
278
+ --mat-sys-corner-extra-large-top: 28px 28px 0 0;
279
+ --mat-sys-corner-extra-small: 4px;
280
+ --mat-sys-corner-extra-small-top: 4px 4px 0 0;
281
+ --mat-sys-corner-full: 9999px;
282
+ --mat-sys-corner-large: 16px;
283
+ --mat-sys-corner-large-end: 0 16px 16px 0;
284
+ --mat-sys-corner-large-start: 16px 0 0 16px;
285
+ --mat-sys-corner-large-top: 16px 16px 0 0;
286
+ --mat-sys-corner-medium: 12px;
287
+ --mat-sys-corner-none: 0;
288
+ --mat-sys-corner-small: 8px;
289
+ --mat-sys-dragged-state-layer-opacity: 0.16;
290
+ --mat-sys-focus-state-layer-opacity: 0.12;
291
+ --mat-sys-hover-state-layer-opacity: 0.08;
292
+ --mat-sys-pressed-state-layer-opacity: 0.12;
293
+
294
+ /* ------------------------------------------------------------------------ */
295
+ /* Disable touch target on non-mobile devices */
296
+ /* ------------------------------------------------------------------------ */
297
+ [class^='mat-mdc-'][class$='-touch-target'] {
298
+ @apply sm:hidden;
299
+ }
300
+
301
+ /* ------------------------------------------------------------------------ */
302
+ /* Autocomplete */
303
+ /* ------------------------------------------------------------------------ */
304
+
305
+ /* ------------------------------------------------------------------------ */
306
+ /* Badge */
307
+ /* ------------------------------------------------------------------------ */
308
+
309
+ /* ------------------------------------------------------------------------ */
310
+ /* Bottom Sheet */
311
+ /* ------------------------------------------------------------------------ */
312
+ --mat-bottom-sheet-container-shape: 0.5rem;
313
+
314
+ /* ------------------------------------------------------------------------ */
315
+ /* Button */
316
+ /* ------------------------------------------------------------------------ */
317
+ --mat-button-text-container-shape: 0.5rem;
318
+ --mat-button-text-container-height: 2.25rem;
319
+ --mat-button-text-horizontal-padding: 0.75rem;
320
+ --mat-button-text-with-icon-horizontal-padding: 0.75rem;
321
+ --mat-button-text-icon-offset: 0rem;
322
+
323
+ --mat-button-outlined-container-shape: 0.5rem;
324
+ --mat-button-outlined-container-height: 2.25rem;
325
+ --mat-button-outlined-horizontal-padding: 0.75rem;
326
+ --mat-button-outlined-icon-offset: 0rem;
327
+ --mat-button-outlined-label-text-color: light-dark(
328
+ var(--color-neutral-950),
329
+ var(--color-white)
330
+ );
331
+ --mat-button-outlined-state-layer-color: light-dark(
332
+ var(--color-neutral-950),
333
+ var(--color-white)
334
+ );
335
+ --mat-button-outlined-ripple-color: light-dark(
336
+ color-mix(in oklch, var(--color-neutral-950) 10%, transparent),
337
+ color-mix(in oklch, var(--color-white) 10%, transparent)
338
+ );
339
+
340
+ --mat-button-tonal-container-shape: 0.5rem;
341
+ --mat-button-tonal-container-height: 2.25rem;
342
+ --mat-button-tonal-horizontal-padding: 0.75rem;
343
+ --mat-button-tonal-icon-offset: 0rem;
344
+
345
+ --mat-button-filled-container-shape: 0.5rem;
346
+ --mat-button-filled-container-height: 2.25rem;
347
+ --mat-button-filled-horizontal-padding: 0.75rem;
348
+ --mat-button-filled-icon-offset: 0rem;
349
+
350
+ --mat-button-protected-container-shape: 0.5rem;
351
+ --mat-button-protected-container-height: 2.25rem;
352
+ --mat-button-protected-horizontal-padding: 0.75rem;
353
+ --mat-button-protected-icon-offset: 0rem;
354
+
355
+ --mat-icon-button-container-shape: 0.5rem;
356
+ --mat-icon-button-icon-size: 1rem;
357
+ --mat-icon-button-state-layer-size: 2.25rem;
358
+
359
+ .mat-mdc-button-base {
360
+ --mat-icon-color: currentColor;
361
+
362
+ /* Text */
363
+ &.mat-mdc-button {
364
+ }
365
+
366
+ /* Tonal */
367
+ &.mat-tonal-button {
368
+ }
369
+
370
+ /* Raised */
371
+ &.mat-mdc-raised-button {
372
+ }
373
+
374
+ /* Outlined */
375
+ &.mat-mdc-outlined-button {
376
+ }
377
+
378
+ /* Filled */
379
+ &.mat-mdc-unelevated-button {
380
+ }
381
+
382
+ &.small {
383
+ --mat-button-text-container-height: 1.75rem;
384
+ --mat-button-outlined-container-height: 1.75rem;
385
+ --mat-button-tonal-container-height: 1.75rem;
386
+ --mat-button-filled-container-height: 1.75rem;
387
+ --mat-button-protected-container-height: 1.75rem;
388
+ }
389
+ }
390
+
391
+ /* ------------------------------------------------------------------------ */
392
+ /* Button Toggle */
393
+ /* ------------------------------------------------------------------------ */
394
+ --mat-button-toggle-shape: 0.5rem;
395
+ --mat-button-toggle-height: 2.125rem;
396
+
397
+ /* ------------------------------------------------------------------------ */
398
+ /* Card */
399
+ /* ------------------------------------------------------------------------ */
400
+ --mat-card-elevated-container-shape: 0.75rem;
401
+ --mat-card-elevated-container-color: light-dark(
402
+ var(--color-white),
403
+ var(--color-neutral-800)
404
+ );
405
+
406
+ --mat-card-filled-container-shape: 0.75rem;
407
+ --mat-card-filled-container-color: light-dark(
408
+ var(--color-neutral-100),
409
+ var(--color-neutral-800)
410
+ );
411
+
412
+ --mat-card-outlined-container-shape: 0.75rem;
413
+ --mat-card-outlined-container-color: light-dark(
414
+ var(--color-white),
415
+ var(--color-neutral-800)
416
+ );
417
+
418
+ mat-card {
419
+ /* Raised */
420
+ &:not(.mat-mdc-card-outlined):not(.mat-mdc-card-filled) {
421
+ }
422
+
423
+ /* Outlined */
424
+ &.mat-mdc-card-outlined {
425
+ }
426
+
427
+ /* Filled */
428
+ &.mat-mdc-card-filled {
429
+ padding: 0.5rem 0.25rem 0.25rem 0.25rem;
430
+
431
+ .mat-mdc-card-header {
432
+ padding: 0 0.25rem 0.5rem 0.75rem;
433
+ min-height: 2rem;
434
+ }
435
+
436
+ .mat-mdc-card-content {
437
+ background: light-dark(var(--color-white), var(--color-neutral-900));
438
+ border-radius: 0.5rem;
439
+ padding: 1rem;
440
+ border: 1px solid
441
+ light-dark(var(--color-neutral-200), var(--color-neutral-700));
442
+ }
443
+ }
444
+ }
445
+
446
+ /* ------------------------------------------------------------------------ */
447
+ /* Checkbox */
448
+ /* ------------------------------------------------------------------------ */
449
+ --mat-checkbox-state-layer-size: 2.25rem;
450
+
451
+ /* ------------------------------------------------------------------------ */
452
+ /* Chips */
453
+ /* ------------------------------------------------------------------------ */
454
+
455
+ /* ------------------------------------------------------------------------ */
456
+ /* Core */
457
+ /* ------------------------------------------------------------------------ */
458
+ .mat-pseudo-checkbox-minimal {
459
+ width: 1rem;
460
+ height: 1rem;
461
+
462
+ &.mat-pseudo-checkbox-checked {
463
+ &:after {
464
+ width: 0.625rem;
465
+ height: 0.25rem;
466
+ border-left-width: 0.09375rem;
467
+ border-bottom-width: 0.09375rem;
468
+ }
469
+ }
470
+ }
471
+
472
+ /* mat-option */
473
+ --mat-option-label-text-size: var(--text-base); /* 14px */
474
+ --mat-option-label-text-line-height: var(--leading-5); /* 20px */
475
+
476
+ .mat-mdc-option {
477
+ min-height: 2.25rem;
478
+ }
479
+
480
+ /* ------------------------------------------------------------------------ */
481
+ /* Datepicker */
482
+ /* ------------------------------------------------------------------------ */
483
+ --mat-datepicker-calendar-container-background-color: light-dark(
484
+ var(--color-white),
485
+ var(--color-neutral-800)
486
+ );
487
+
488
+ --mat-datepicker-calendar-container-elevation-shadow: var(--mat-sys-level2);
489
+ --mat-datepicker-calendar-container-shape: 0.5rem; /* 8px */
490
+
491
+ /* ------------------------------------------------------------------------ */
492
+ /* Dialog */
493
+ /* ------------------------------------------------------------------------ */
494
+ --mat-dialog-container-shape: 1rem;
495
+
496
+ /* ------------------------------------------------------------------------ */
497
+ /* Divider */
498
+ /* ------------------------------------------------------------------------ */
499
+
500
+ /* ------------------------------------------------------------------------ */
501
+ /* Expansion Panel */
502
+ /* ------------------------------------------------------------------------ */
503
+ --mat-expansion-header-text-size: var(--text-base);
504
+ --mat-expansion-header-text-weight: var(--font-weight-medium);
505
+
506
+ --mat-expansion-container-text-size: var(--text-base);
507
+ --mat-expansion-container-text-weight: var(--text-base--font-weight);
508
+ --mat-expansion-container-text-tracking: var(--tracking-normal);
509
+
510
+ --mat-expansion-container-shape: 0;
511
+ --mat-expansion-container-elevation-shadow: none;
512
+ --mat-expansion-container-background-color: transparent;
513
+
514
+ .mat-expansion-panel {
515
+ border-radius: 0.5rem;
516
+ }
517
+
518
+ /* ------------------------------------------------------------------------ */
519
+ /* Form Field */
520
+ /* ------------------------------------------------------------------------ */
521
+ .mat-mdc-form-field {
522
+ height: fit-content; /* Prevents the height from stretching when inside a Flex/Grid parent */
523
+
524
+ font-family: var(--form-field-font-family);
525
+ font-feature-settings: var(--form-field-font-feature-settings);
526
+ font-optical-sizing: var(--form-field-font-optical-sizing);
527
+ -webkit-font-smoothing: var(--form-field-font-smoothing);
528
+
529
+ font-size: var(--form-field-font-size);
530
+ line-height: var(--form-field-line-height);
531
+ font-weight: var(--form-field-font-weight);
532
+ letter-spacing: var(--form-field-letter-spacing);
533
+
534
+ /* Margin top for label */
535
+ &:has(.mat-mdc-text-field-wrapper:not(.mdc-text-field--no-label)) {
536
+ margin-top: calc(
537
+ var(--form-field-gap-y) + var(--form-field-label-line-height)
538
+ );
539
+ }
540
+
541
+ /* Disable focus overlay */
542
+ .mat-mdc-form-field-focus-overlay {
543
+ display: none;
544
+ }
545
+
546
+ /* Disable line ripple */
547
+ .mdc-line-ripple {
548
+ display: none;
549
+ }
550
+
551
+ .mat-mdc-text-field-wrapper {
552
+ isolation: isolate;
553
+ position: relative;
554
+ overflow: visible;
555
+ border-width: 1px;
556
+ border-style: solid;
557
+ border-color: var(--form-field-border-color);
558
+
559
+ border-radius: var(--form-field-border-radius);
560
+ background: var(--form-field-bg-color);
561
+
562
+ &:not(.mdc-text-field--disabled) {
563
+ box-shadow: 0 1px 2px 0 var(--form-field-shadow-color);
564
+ }
565
+
566
+ /* Padding */
567
+ padding: 0;
568
+ [dir='rtl'] & {
569
+ padding: 0;
570
+ }
571
+
572
+ /* Focus ring */
573
+ &:after {
574
+ content: '';
575
+ position: absolute;
576
+ inset: -1px;
577
+ z-index: -10;
578
+ pointer-events: none;
579
+ border-radius: var(--form-field-border-radius);
580
+ box-shadow: inset 0 0 0 2px var(--form-field-outline-color);
581
+ }
582
+
583
+ /* Error (invalid) */
584
+ &.mdc-text-field--invalid:not(.mdc-text-field--disabled) {
585
+ border-color: var(--form-field-border-color-error);
586
+
587
+ .mat-mdc-form-field-flex {
588
+ .mat-mdc-form-field-infix {
589
+ /* Label */
590
+ label {
591
+ color: var(--form-field-text-color-error);
592
+ }
593
+ }
594
+ }
595
+ }
596
+
597
+ /* Disabled */
598
+ &.mdc-text-field--disabled {
599
+ opacity: 50%;
600
+ }
601
+
602
+ .mat-mdc-form-field-flex {
603
+ position: static;
604
+ align-items: center;
605
+ column-gap: var(--form-field-gap-x);
606
+
607
+ /* Padding */
608
+ padding-block: calc(var(--form-field-padding-y) - 1px);
609
+ padding-inline: calc(var(--form-field-padding-x) - 1px);
610
+ [dir='rtl'] & {
611
+ padding-block: calc(var(--form-field-padding-y) - 1px);
612
+ padding-inline: calc(var(--form-field-padding-x) - 1px);
613
+ }
614
+
615
+ /* Align items (prefix, infix, and suffix) to flex-start when the input is a textarea */
616
+ &:has(.mat-mdc-form-field-textarea-control) {
617
+ align-items: flex-start;
618
+ }
619
+
620
+ .mat-mdc-form-field-infix {
621
+ position: static;
622
+ display: flex;
623
+ width: auto;
624
+ min-height: 0;
625
+ padding: 0;
626
+
627
+ /* Label */
628
+ label {
629
+ transition: none;
630
+ transform: none;
631
+
632
+ top: calc(
633
+ -1 *
634
+ (var(--form-field-label-line-height) + var(--form-field-gap-y))
635
+ );
636
+ left: 0;
637
+
638
+ font-size: var(--form-field-label-font-size);
639
+ line-height: var(--form-field-label-line-height);
640
+ font-weight: var(--form-field-label-font-weight);
641
+ letter-spacing: var(--form-field-label-letter-spacing);
642
+
643
+ color: var(--form-field-text-color);
644
+
645
+ /* RTL */
646
+ [dir='rtl'] & {
647
+ left: auto;
648
+ right: 0;
649
+ }
650
+ }
651
+
652
+ /* Native input element */
653
+ .mat-mdc-input-element {
654
+ color: var(--form-field-text-color);
655
+ caret-color: currentColor;
656
+
657
+ /* Placeholder */
658
+ &::placeholder {
659
+ transition: none;
660
+ opacity: 1;
661
+
662
+ color: var(--form-field-placeholder-color);
663
+ }
664
+
665
+ /* Textarea */
666
+ &.mat-mdc-form-field-textarea-control {
667
+ min-height: var(--form-field-line-height);
668
+ }
669
+ }
670
+ }
671
+
672
+ /* Prefix & Suffix common styles */
673
+ .mat-mdc-form-field-text-prefix,
674
+ .mat-mdc-form-field-icon-prefix,
675
+ .mat-mdc-form-field-text-suffix,
676
+ .mat-mdc-form-field-icon-suffix {
677
+ display: flex;
678
+ align-items: center;
679
+ justify-content: center;
680
+ align-self: unset;
681
+ padding: 0;
682
+ color: var(--form-field-affix-color);
683
+ height: var(--form-field-line-height);
684
+ line-height: var(--form-field-line-height);
685
+
686
+ /* Icon */
687
+ .mat-icon {
688
+ box-sizing: border-box;
689
+ padding: 0;
690
+ color: var(--form-field-affix-color);
691
+ width: var(--form-field-icon-size);
692
+ height: var(--form-field-icon-size);
693
+ font-size: var(--form-field-icon-size);
694
+
695
+ /* Margin adjustment */
696
+ margin-left: var(--form-field-icon-margin-x);
697
+ margin-right: var(--form-field-icon-margin-x);
698
+ [dir='rtl'] & {
699
+ margin-left: var(--form-field-icon-margin-x);
700
+ margin-right: var(--form-field-icon-margin-x);
701
+ }
702
+
703
+ svg {
704
+ width: var(--form-field-icon-size);
705
+ height: var(--form-field-icon-size);
706
+ }
707
+ }
708
+ }
709
+ }
710
+ }
711
+
712
+ /* Subscript */
713
+ .mat-mdc-form-field-subscript-wrapper {
714
+ font-size: var(--form-field-subscript-font-size);
715
+ line-height: var(--form-field-subscript-line-height);
716
+ font-weight: var(--form-field-subscript-font-weight);
717
+ letter-spacing: var(--form-field-subscript-letter-spacing);
718
+
719
+ display: flex;
720
+
721
+ /* Wrappers */
722
+ .mat-mdc-form-field-hint-wrapper,
723
+ .mat-mdc-form-field-error-wrapper {
724
+ position: relative;
725
+ display: flex;
726
+ flex: 1 1 auto;
727
+ padding: 0;
728
+ margin: var(--form-field-gap-y) 0 0 0;
729
+ min-height: var(--form-field-subscript-line-height);
730
+ }
731
+
732
+ /* Error */
733
+ .mat-mdc-form-field-error {
734
+ display: flex;
735
+ color: var(--form-field-text-color-error);
736
+ }
737
+
738
+ /* Hint */
739
+ .mat-mdc-form-field-hint {
740
+ display: flex;
741
+ color: var(--form-field-hint-color);
742
+ }
743
+
744
+ /* Hint spacer */
745
+ .mat-mdc-form-field-hint-spacer {
746
+ flex: 1 1 auto;
747
+ }
748
+
749
+ /* Dynamic subscript */
750
+ &.mat-mdc-form-field-subscript-dynamic-size {
751
+ .mat-mdc-form-field-hint-wrapper:not(:has(.mat-mdc-form-field-hint)),
752
+ .mat-mdc-form-field-error-wrapper:not(:has(.mat-mdc-form-field-error)) {
753
+ margin: 0;
754
+ }
755
+
756
+ .mat-mdc-form-field-hint-wrapper,
757
+ .mat-mdc-form-field-error-wrapper {
758
+ min-height: 0;
759
+ }
760
+ }
761
+ }
762
+
763
+ /* Disable default subscript spacer */
764
+ .mat-mdc-form-field-bottom-align::before {
765
+ display: none;
766
+ }
767
+
768
+ /* Fixes and adjustments for 'outline' appearance only */
769
+ /* These will ensure that our custom styles are applied correctly independent of the selected appearance */
770
+ &.mat-form-field-appearance-outline {
771
+ .mat-mdc-text-field-wrapper {
772
+ .mat-mdc-form-field-flex {
773
+ .mdc-notched-outline {
774
+ /* Disable the parts of the notch */
775
+ .mdc-notched-outline__leading,
776
+ .mdc-notched-outline__trailing {
777
+ display: none;
778
+ }
779
+
780
+ .mdc-notched-outline__notch {
781
+ border: none !important;
782
+ width: 100% !important;
783
+
784
+ /* Label */
785
+ label {
786
+ transition: none !important;
787
+ transform: none !important;
788
+ max-width: 100% !important;
789
+
790
+ top: calc(
791
+ -1 *
792
+ (
793
+ var(--form-field-label-line-height) +
794
+ var(--form-field-gap-y)
795
+ )
796
+ );
797
+ left: 0;
798
+
799
+ font-size: var(--form-field-label-font-size);
800
+ line-height: var(--form-field-label-line-height);
801
+ font-weight: var(--form-field-label-font-weight);
802
+ letter-spacing: var(--form-field-label-letter-spacing);
803
+
804
+ color: var(--form-field-text-color);
805
+ }
806
+ }
807
+ }
808
+ }
809
+ }
810
+ }
811
+ }
812
+
813
+ .mat-mdc-form-field {
814
+ /* Typography */
815
+ --form-field-font-family: var(--font-sans);
816
+ --form-field-font-feature-settings: var(--font-sans--font-feature-settings);
817
+ --form-field-font-optical-sizing: var(--font-optical-sizing);
818
+ --form-field-font-smoothing: var(--font-smoothing);
819
+
820
+ --form-field-font-size: var(--text-base); /* 14px */
821
+ --form-field-line-height: var(--leading-5); /* 20px */
822
+ --form-field-font-weight: var(--font-weight-normal);
823
+ --form-field-letter-spacing: var(--tracking-normal);
824
+
825
+ --form-field-label-font-size: var(--text-base); /* 14px */
826
+ --form-field-label-line-height: var(--leading-5); /* 20px */
827
+ --form-field-label-font-weight: var(--font-weight-medium);
828
+ --form-field-label-letter-spacing: var(--tracking-normal);
829
+
830
+ --form-field-subscript-font-size: var(--text-xs); /* 12px */
831
+ --form-field-subscript-line-height: var(--leading-4); /* 16px */
832
+ --form-field-subscript-font-weight: var(--font-weight-normal);
833
+ --form-field-subscript-letter-spacing: var(--tracking-normal);
834
+
835
+ /* Size */
836
+ --form-field-border-radius: 0.5rem; /* 8px */
837
+ --form-field-margin-top: 1.5rem; /* 24px */
838
+ --form-field-padding-y: 0.5rem; /* 8px */
839
+ --form-field-padding-x: 0.75rem; /* 12px */
840
+ --form-field-gap-y: 0.5rem; /* 8px */
841
+ --form-field-gap-x: 0.5rem; /* 8px */
842
+ --form-field-icon-size: 1rem; /* 16px */
843
+ --form-field-icon-margin-x: -0.125rem; /* -2px */
844
+
845
+ /* Color */
846
+ --form-field-text-color: light-dark(
847
+ var(--color-neutral-950),
848
+ var(--color-white)
849
+ );
850
+ --form-field-text-color-error: var(--color-error-500);
851
+ --form-field-hint-color: var(--color-neutral-500);
852
+ --form-field-placeholder-color: var(--color-neutral-500);
853
+ --form-field-affix-color: var(--color-neutral-500);
854
+
855
+ --form-field-bg-color: light-dark(
856
+ var(--color-white),
857
+ var(--color-neutral-800)
858
+ );
859
+
860
+ --form-field-border-color: light-dark(
861
+ var(--color-neutral-300),
862
+ var(--color-neutral-700)
863
+ );
864
+ --form-field-border-color-error: light-dark(
865
+ var(--color-error-600),
866
+ var(--color-error-500)
867
+ );
868
+
869
+ --form-field-shadow-color: color-mix(
870
+ in oklch,
871
+ var(--color-black),
872
+ transparent 95%
873
+ );
874
+ --form-field-outline-color: transparent;
875
+
876
+ /* Focus */
877
+ &.mat-focused {
878
+ --form-field-outline-color: var(--color-primary-600);
879
+ }
880
+
881
+ /* Suffix & Prefix */
882
+ .mat-mdc-form-field-text-prefix,
883
+ .mat-mdc-form-field-icon-prefix,
884
+ .mat-mdc-form-field-text-suffix,
885
+ .mat-mdc-form-field-icon-suffix {
886
+ /* Icon button */
887
+ .mat-mdc-icon-button {
888
+ --icon-button-size: fit-content;
889
+ --icon-button-padding: 0;
890
+ --icon-button-bg-color-hover: transparent;
891
+ --icon-button-bg-color-active: transparent;
892
+ }
893
+ }
894
+
895
+ /* Mobile font size adjustment */
896
+ @media screen and (max-width: 640px) {
897
+ --form-field-font-size: var(--text-lg); /* 16px */
898
+ }
899
+ }
900
+
901
+ /* ------------------------------------------------------------------------ */
902
+ /* Grid List */
903
+ /* ------------------------------------------------------------------------ */
904
+
905
+ /* ------------------------------------------------------------------------ */
906
+ /* Icon */
907
+ /* ------------------------------------------------------------------------ */
908
+ --mat-icon-color: currentColor;
909
+
910
+ .mat-icon {
911
+ width: 1rem;
912
+ height: 1rem;
913
+ }
914
+
915
+ /* ------------------------------------------------------------------------ */
916
+ /* Input */
917
+ /* ------------------------------------------------------------------------ */
918
+
919
+ /* ------------------------------------------------------------------------ */
920
+ /* List */
921
+ /* ------------------------------------------------------------------------ */
922
+ --mat-list-active-indicator-shape: 0.5rem;
923
+ --mat-list-list-item-one-line-container-height: 2.25rem;
924
+ --mat-list-list-item-label-text-size: var(--text-base);
925
+ --mat-list-list-item-label-text-tracking: var(--tracking-normal);
926
+ --mat-list-active-indicator-color: light-dark(
927
+ var(--color-neutral-200),
928
+ var(--color-neutral-800)
929
+ );
930
+
931
+ /* ------------------------------------------------------------------------ */
932
+ /* Menu */
933
+ /* ------------------------------------------------------------------------ */
934
+ --mat-menu-container-shape: 0.5rem;
935
+ --mat-menu-container-color: light-dark(
936
+ var(--color-white),
937
+ var(--color-neutral-800)
938
+ );
939
+ --mat-menu-divider-bottom-spacing: 0.25rem;
940
+ --mat-menu-divider-top-spacing: 0.25rem;
941
+ --mat-menu-divider-color: light-dark(
942
+ var(--color-neutral-200),
943
+ var(--color-neutral-700)
944
+ );
945
+
946
+ --mat-menu-item-icon-color: currentColor;
947
+ --mat-menu-item-icon-size: 1rem;
948
+ --mat-menu-item-label-text-size: var(--text-base);
949
+ --mat-menu-item-label-text-weight: var(--text-base--font-weight);
950
+
951
+ .mat-mdc-menu-content {
952
+ padding: 0.25rem 0;
953
+ }
954
+
955
+ .mat-mdc-menu-item {
956
+ min-height: 2rem;
957
+ }
958
+
959
+ /* ------------------------------------------------------------------------ */
960
+ /* Paginator */
961
+ /* ------------------------------------------------------------------------ */
962
+ --mat-paginator-container-background-color: light-dark(
963
+ var(--color-white),
964
+ var(--color-neutral-800)
965
+ );
966
+
967
+ /* ------------------------------------------------------------------------ */
968
+ /* Progress Bar */
969
+ /* ------------------------------------------------------------------------ */
970
+ --mat-progress-bar-track-color: light-dark(
971
+ var(--color-neutral-200),
972
+ var(--color-neutral-800)
973
+ );
974
+
975
+ .mdc-linear-progress {
976
+ border-radius: 0.5rem;
977
+ overflow: hidden;
978
+ }
979
+
980
+ /* ------------------------------------------------------------------------ */
981
+ /* Progress Spinner */
982
+ /* ------------------------------------------------------------------------ */
983
+
984
+ /* ------------------------------------------------------------------------ */
985
+ /* Radio Button */
986
+ /* ------------------------------------------------------------------------ */
987
+
988
+ /* ------------------------------------------------------------------------ */
989
+ /* Ripples */
990
+ /* ------------------------------------------------------------------------ */
991
+
992
+ /* ------------------------------------------------------------------------ */
993
+ /* Select */
994
+ /* ------------------------------------------------------------------------ */
995
+ --mat-select-trigger-text-size: var(--text-base); /* 14px */
996
+ --mat-select-trigger-text-line-height: var(--leading-5); /* 20px */
997
+
998
+ --mat-select-panel-background-color: light-dark(
999
+ var(--color-white),
1000
+ var(--color-neutral-800)
1001
+ );
1002
+
1003
+ .mat-mdc-select-arrow-wrapper {
1004
+ height: 1.25rem; /* 20px */
1005
+ transform: none;
1006
+ }
1007
+
1008
+ .mat-mdc-select-panel {
1009
+ border-radius: 0.5rem; /* 8px */
1010
+ }
1011
+
1012
+ /* Mobile font size adjustment */
1013
+ @media screen and (max-width: 640px) {
1014
+ --mat-select-trigger-text-size: var(--text-lg); /* 16px */
1015
+ }
1016
+
1017
+ /* ------------------------------------------------------------------------ */
1018
+ /* Sidenav */
1019
+ /* ------------------------------------------------------------------------ */
1020
+ --mat-sidenav-container-background-color: light-dark(
1021
+ var(--color-neutral-100),
1022
+ var(--color-neutral-950)
1023
+ );
1024
+ --mat-sidenav-sidenav-background-color: light-dark(
1025
+ var(--color-neutral-100),
1026
+ var(--color-neutral-950)
1027
+ );
1028
+ --mat-sidenav-content-background-color: light-dark(
1029
+ var(--color-white),
1030
+ var(--color-neutral-900)
1031
+ );
1032
+
1033
+ --mat-sidenav-container-text-color: light-dark(
1034
+ var(--color-neutral-950),
1035
+ var(--color-white)
1036
+ );
1037
+
1038
+ --mat-sidenav-container-shape: 0;
1039
+ --mat-sidenav-container-divider-color: transparent;
1040
+
1041
+ .mat-drawer-container {
1042
+ display: flex;
1043
+ flex: 1 1 auto;
1044
+ background: var(--mat-sidenav-container-background-color);
1045
+
1046
+ .mat-drawer {
1047
+ background: var(--mat-sidenav-sidenav-background-color);
1048
+
1049
+ .mat-drawer-inner-container {
1050
+ display: flex;
1051
+ }
1052
+ }
1053
+
1054
+ .mat-drawer-content {
1055
+ display: flex;
1056
+ flex: 1 1 auto;
1057
+ flex-direction: column;
1058
+ height: auto;
1059
+ background: var(--mat-sidenav-content-background-color);
1060
+ }
1061
+ }
1062
+
1063
+ /* ------------------------------------------------------------------------ */
1064
+ /* Slide Toggle */
1065
+ /* ------------------------------------------------------------------------ */
1066
+ --mat-slide-toggle-track-width: 2.5rem; /* 40px */
1067
+ --mat-slide-toggle-track-height: 1.5rem; /* 24px */
1068
+ --mat-slide-toggle-track-outline-width: 1px;
1069
+ --mat-slide-toggle-handle-height: 1rem; /* 16px */
1070
+
1071
+ /* with handle icon */
1072
+ --mat-slide-toggle-with-icon-handle-size: 1rem; /* 16px */
1073
+ --mat-slide-toggle-selected-with-icon-handle-horizontal-margin: 0 1.25rem; /* 0 20px */
1074
+ --mat-slide-toggle-unselected-icon-size: 0.75rem; /* 12px */
1075
+ --mat-slide-toggle-selected-icon-size: 0.75rem; /* 12px */
1076
+
1077
+ /* without handle icon */
1078
+ --mat-slide-toggle-selected-handle-size: 1rem; /* 16px */
1079
+ --mat-slide-toggle-unselected-handle-size: 1rem; /* 16px */
1080
+ --mat-slide-toggle-unselected-handle-horizontal-margin: 0 0.25rem;
1081
+ --mat-slide-toggle-selected-handle-horizontal-margin: 0 1.25rem;
1082
+
1083
+ /* handle icon colors */
1084
+ --mat-slide-toggle-unselected-icon-color: light-dark(
1085
+ color-mix(in oklch, var(--color-black) 40%, transparent),
1086
+ color-mix(in oklch, var(--color-white) 40%, transparent)
1087
+ );
1088
+ --mat-slide-toggle-selected-icon-color: var(--color-neutral-950);
1089
+
1090
+ /* ------------------------------------------------------------------------ */
1091
+ /* Slider */
1092
+ /* ------------------------------------------------------------------------ */
1093
+
1094
+ /* ------------------------------------------------------------------------ */
1095
+ /* Snackbar */
1096
+ /* ------------------------------------------------------------------------ */
1097
+
1098
+ /* ------------------------------------------------------------------------ */
1099
+ /* Sort Header */
1100
+ /* ------------------------------------------------------------------------ */
1101
+
1102
+ /* ------------------------------------------------------------------------ */
1103
+ /* Stepper */
1104
+ /* ------------------------------------------------------------------------ */
1105
+
1106
+ /* ------------------------------------------------------------------------ */
1107
+ /* Table */
1108
+ /* ------------------------------------------------------------------------ */
1109
+ --mat-table-background-color: transparent;
1110
+ --mat-table-row-item-outline-color: light-dark(
1111
+ var(--color-neutral-200),
1112
+ var(--color-neutral-800)
1113
+ );
1114
+
1115
+ /* Restore the bottom border on last row */
1116
+ .mdc-data-table__row:last-child > .mat-mdc-cell {
1117
+ border-bottom-color: var(
1118
+ --mat-table-row-item-outline-color,
1119
+ var(--mat-sys-outline, rgba(0, 0, 0, 0.12))
1120
+ );
1121
+ border-bottom-width: var(--mat-table-row-item-outline-width, 1px);
1122
+ border-bottom-style: solid;
1123
+ }
1124
+
1125
+ /* ------------------------------------------------------------------------ */
1126
+ /* Tabs */
1127
+ /* ------------------------------------------------------------------------ */
1128
+ --mat-tab-container-height: 2.25rem;
1129
+ --mat-tab-divider-color: light-dark(
1130
+ var(--color-neutral-200),
1131
+ var(--color-neutral-800)
1132
+ );
1133
+
1134
+ /* ------------------------------------------------------------------------ */
1135
+ /* Timepicker */
1136
+ /* ------------------------------------------------------------------------ */
1137
+
1138
+ /* ------------------------------------------------------------------------ */
1139
+ /* Toolbar */
1140
+ /* ------------------------------------------------------------------------ */
1141
+
1142
+ /* ------------------------------------------------------------------------ */
1143
+ /* Tooltip */
1144
+ /* ------------------------------------------------------------------------ */
1145
+
1146
+ /* ------------------------------------------------------------------------ */
1147
+ /* Tree */
1148
+ /* ------------------------------------------------------------------------ */
1149
+ }