@julianoczkowski/create-trimble-app 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +191 -0
  2. package/bin/create-trimble-app.js +9 -0
  3. package/package.json +67 -0
  4. package/src/cli.js +134 -0
  5. package/src/frameworks.js +28 -0
  6. package/src/scaffold.js +209 -0
  7. package/src/utils/file.js +47 -0
  8. package/src/utils/git.js +140 -0
  9. package/src/utils/install.js +25 -0
  10. package/src/utils/logger.js +124 -0
  11. package/templates/angular/.cursor/commands/remove-dev-content.md +394 -0
  12. package/templates/angular/.cursor/mcp.json +13 -0
  13. package/templates/angular/.cursor/rules/modus-angular-20.mdc +82 -0
  14. package/templates/angular/.cursor/rules/modus-angular-accordion-state-management-short.mdc +45 -0
  15. package/templates/angular/.cursor/rules/modus-angular-accordion-state-management.mdc +322 -0
  16. package/templates/angular/.cursor/rules/modus-angular-best-practices.mdc +472 -0
  17. package/templates/angular/.cursor/rules/modus-angular-border-usage-short.mdc +48 -0
  18. package/templates/angular/.cursor/rules/modus-angular-border-usage.mdc +286 -0
  19. package/templates/angular/.cursor/rules/modus-angular-button-group-usage-short.mdc +47 -0
  20. package/templates/angular/.cursor/rules/modus-angular-button-group-usage.mdc +263 -0
  21. package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion-short.mdc +36 -0
  22. package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion.mdc +92 -0
  23. package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing-short.mdc +34 -0
  24. package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing.mdc +185 -0
  25. package/templates/angular/.cursor/rules/modus-angular-color-usage-short.mdc +56 -0
  26. package/templates/angular/.cursor/rules/modus-angular-color-usage.mdc +208 -0
  27. package/templates/angular/.cursor/rules/modus-angular-components-reference.mdc +114 -0
  28. package/templates/angular/.cursor/rules/modus-angular-design-system.mdc +273 -0
  29. package/templates/angular/.cursor/rules/modus-angular-development-workflow-short.mdc +43 -0
  30. package/templates/angular/.cursor/rules/modus-angular-development-workflow.mdc +145 -0
  31. package/templates/angular/.cursor/rules/modus-angular-essentials.mdc +272 -0
  32. package/templates/angular/.cursor/rules/modus-angular-forms-validation-short.mdc +56 -0
  33. package/templates/angular/.cursor/rules/modus-angular-forms-validation.mdc +124 -0
  34. package/templates/angular/.cursor/rules/modus-angular-icon-names.mdc +70 -0
  35. package/templates/angular/.cursor/rules/modus-angular-icons-short.mdc +40 -0
  36. package/templates/angular/.cursor/rules/modus-angular-icons.mdc +137 -0
  37. package/templates/angular/.cursor/rules/modus-angular-implementation-guides-short.mdc +36 -0
  38. package/templates/angular/.cursor/rules/modus-angular-implementation-guides.mdc +301 -0
  39. package/templates/angular/.cursor/rules/modus-angular-integration-short.mdc +60 -0
  40. package/templates/angular/.cursor/rules/modus-angular-integration.mdc +1096 -0
  41. package/templates/angular/.cursor/rules/modus-angular-master.mdc +164 -0
  42. package/templates/angular/.cursor/rules/modus-angular-modal-usage-short.mdc +51 -0
  43. package/templates/angular/.cursor/rules/modus-angular-modal-usage.mdc +115 -0
  44. package/templates/angular/.cursor/rules/modus-angular-navbar-usage-short.mdc +49 -0
  45. package/templates/angular/.cursor/rules/modus-angular-navbar-usage.mdc +146 -0
  46. package/templates/angular/.cursor/rules/modus-angular-no-emojis.mdc +66 -0
  47. package/templates/angular/.cursor/rules/modus-angular-opacity-utilities-short.mdc +43 -0
  48. package/templates/angular/.cursor/rules/modus-angular-opacity-utilities.mdc +160 -0
  49. package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu-short.mdc +51 -0
  50. package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu.mdc +83 -0
  51. package/templates/angular/.cursor/rules/modus-angular-semantic-html-short.mdc +36 -0
  52. package/templates/angular/.cursor/rules/modus-angular-semantic-html.mdc +81 -0
  53. package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage-short.mdc +50 -0
  54. package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage.mdc +136 -0
  55. package/templates/angular/.cursor/rules/modus-angular-table-usage-short.mdc +52 -0
  56. package/templates/angular/.cursor/rules/modus-angular-table-usage.mdc +151 -0
  57. package/templates/angular/.cursor/rules/modus-angular-tailwind-usage-short.mdc +44 -0
  58. package/templates/angular/.cursor/rules/modus-angular-tailwind-usage.mdc +242 -0
  59. package/templates/angular/.cursor/rules/modus-angular-themes-short.mdc +54 -0
  60. package/templates/angular/.cursor/rules/modus-angular-themes.mdc +222 -0
  61. package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage-short.mdc +52 -0
  62. package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage.mdc +130 -0
  63. package/templates/angular/.cursor/rules/ux/gestalt-laws-detailed.mdc +514 -0
  64. package/templates/angular/.cursor/rules/ux/ux-ui-foundations.mdc +235 -0
  65. package/templates/angular/.cursor/skills/run-lint-checks/SKILL.md +169 -0
  66. package/templates/angular/.editorconfig +17 -0
  67. package/templates/angular/.github/dependabot.yml +19 -0
  68. package/templates/angular/.github/workflows/a11y-check.yml +135 -0
  69. package/templates/angular/.github/workflows/ci.yml +44 -0
  70. package/templates/angular/.husky/pre-commit +32 -0
  71. package/templates/angular/.postcssrc.json +5 -0
  72. package/templates/angular/.vscode/extensions.json +4 -0
  73. package/templates/angular/.vscode/launch.json +20 -0
  74. package/templates/angular/.vscode/tasks.json +42 -0
  75. package/templates/angular/CLAUDE.md +148 -0
  76. package/templates/angular/README.md +92 -0
  77. package/templates/angular/amplify.yml +25 -0
  78. package/templates/angular/angular.json +106 -0
  79. package/templates/angular/data/modusIcons.ts +861 -0
  80. package/templates/angular/package-lock.json +11030 -0
  81. package/templates/angular/package.json +66 -0
  82. package/templates/angular/public/angular-icon.svg +12 -0
  83. package/templates/angular/public/favicon.ico +0 -0
  84. package/templates/angular/public/modus-icons.css +49 -0
  85. package/templates/angular/public/vite.svg +1 -0
  86. package/templates/angular/scripts/README.md +410 -0
  87. package/templates/angular/scripts/check-border-violations.js +352 -0
  88. package/templates/angular/scripts/check-icon-names.js +402 -0
  89. package/templates/angular/scripts/check-inline-styles.js +292 -0
  90. package/templates/angular/scripts/check-modus-colors.js +282 -0
  91. package/templates/angular/scripts/check-modus-icons.js +263 -0
  92. package/templates/angular/scripts/check-opacity-utilities.js +426 -0
  93. package/templates/angular/scripts/check-semantic-html.js +452 -0
  94. package/templates/angular/scripts/check-typescript.js +109 -0
  95. package/templates/angular/src/app/app.config.ts +29 -0
  96. package/templates/angular/src/app/app.css +0 -0
  97. package/templates/angular/src/app/app.html +4 -0
  98. package/templates/angular/src/app/app.routes.ts +351 -0
  99. package/templates/angular/src/app/app.spec.ts +27 -0
  100. package/templates/angular/src/app/app.ts +47 -0
  101. package/templates/angular/src/app/components/README.md +77 -0
  102. package/templates/angular/src/app/components/index.ts +53 -0
  103. package/templates/angular/src/app/components/modus-accordion.component.ts +50 -0
  104. package/templates/angular/src/app/components/modus-alert.component.ts +133 -0
  105. package/templates/angular/src/app/components/modus-autocomplete.component.ts +262 -0
  106. package/templates/angular/src/app/components/modus-avatar.component.ts +75 -0
  107. package/templates/angular/src/app/components/modus-badge.component.ts +84 -0
  108. package/templates/angular/src/app/components/modus-breadcrumbs.component.ts +65 -0
  109. package/templates/angular/src/app/components/modus-button-group.component.ts +82 -0
  110. package/templates/angular/src/app/components/modus-button.component.ts +292 -0
  111. package/templates/angular/src/app/components/modus-card.component.ts +73 -0
  112. package/templates/angular/src/app/components/modus-checkbox.component.ts +117 -0
  113. package/templates/angular/src/app/components/modus-chip.component.ts +97 -0
  114. package/templates/angular/src/app/components/modus-collapse.component.ts +118 -0
  115. package/templates/angular/src/app/components/modus-date.component.ts +165 -0
  116. package/templates/angular/src/app/components/modus-dropdown-menu.component.ts +108 -0
  117. package/templates/angular/src/app/components/modus-file-dropzone.component.ts +121 -0
  118. package/templates/angular/src/app/components/modus-handle.component.ts +96 -0
  119. package/templates/angular/src/app/components/modus-icon.component.ts +81 -0
  120. package/templates/angular/src/app/components/modus-input-feedback.component.ts +54 -0
  121. package/templates/angular/src/app/components/modus-input-label.component.ts +62 -0
  122. package/templates/angular/src/app/components/modus-loader.component.ts +48 -0
  123. package/templates/angular/src/app/components/modus-logo.component.ts +115 -0
  124. package/templates/angular/src/app/components/modus-menu-item.component.ts +116 -0
  125. package/templates/angular/src/app/components/modus-menu.component.ts +58 -0
  126. package/templates/angular/src/app/components/modus-modal.component.ts +70 -0
  127. package/templates/angular/src/app/components/modus-navbar.component.ts +303 -0
  128. package/templates/angular/src/app/components/modus-number-input.component.ts +174 -0
  129. package/templates/angular/src/app/components/modus-pagination.component.ts +74 -0
  130. package/templates/angular/src/app/components/modus-panel.component.ts +61 -0
  131. package/templates/angular/src/app/components/modus-progress.component.ts +62 -0
  132. package/templates/angular/src/app/components/modus-radio.component.ts +102 -0
  133. package/templates/angular/src/app/components/modus-rating.component.ts +80 -0
  134. package/templates/angular/src/app/components/modus-select.component.ts +131 -0
  135. package/templates/angular/src/app/components/modus-side-navigation.component.ts +90 -0
  136. package/templates/angular/src/app/components/modus-skeleton.component.ts +54 -0
  137. package/templates/angular/src/app/components/modus-slider.component.ts +132 -0
  138. package/templates/angular/src/app/components/modus-stepper.component.ts +65 -0
  139. package/templates/angular/src/app/components/modus-switch.component.ts +118 -0
  140. package/templates/angular/src/app/components/modus-table.component.ts +204 -0
  141. package/templates/angular/src/app/components/modus-tabs.component.ts +82 -0
  142. package/templates/angular/src/app/components/modus-text-input.component.ts +221 -0
  143. package/templates/angular/src/app/components/modus-textarea.component.ts +168 -0
  144. package/templates/angular/src/app/components/modus-theme-switcher.component.ts +45 -0
  145. package/templates/angular/src/app/components/modus-time-input.component.ts +172 -0
  146. package/templates/angular/src/app/components/modus-toast.component.ts +63 -0
  147. package/templates/angular/src/app/components/modus-toolbar.component.ts +43 -0
  148. package/templates/angular/src/app/components/modus-tooltip.component.ts +83 -0
  149. package/templates/angular/src/app/components/modus-typography.component.ts +79 -0
  150. package/templates/angular/src/app/components/modus-utility-panel.component.ts +275 -0
  151. package/templates/angular/src/app/components/theme-demo.component.ts +1242 -0
  152. package/templates/angular/src/app/data/component-demos.ts +360 -0
  153. package/templates/angular/src/app/data/modus-icons.ts +806 -0
  154. package/templates/angular/src/app/demos/accordion/accordion-demo.component.ts +212 -0
  155. package/templates/angular/src/app/demos/alert/alert-demo.component.ts +108 -0
  156. package/templates/angular/src/app/demos/autocomplete/autocomplete-demo.component.ts +174 -0
  157. package/templates/angular/src/app/demos/avatar/avatar-demo.component.ts +149 -0
  158. package/templates/angular/src/app/demos/badge/badge-demo.component.ts +148 -0
  159. package/templates/angular/src/app/demos/breadcrumbs/breadcrumbs-demo.component.ts +96 -0
  160. package/templates/angular/src/app/demos/button/button-demo.component.ts +256 -0
  161. package/templates/angular/src/app/demos/button-group/button-group-demo.component.ts +215 -0
  162. package/templates/angular/src/app/demos/card/card-demo.component.ts +180 -0
  163. package/templates/angular/src/app/demos/checkbox/checkbox-demo.component.ts +71 -0
  164. package/templates/angular/src/app/demos/chip/chip-demo.component.ts +183 -0
  165. package/templates/angular/src/app/demos/date/date-demo.component.ts +193 -0
  166. package/templates/angular/src/app/demos/dropdown/dropdown-demo.component.ts +196 -0
  167. package/templates/angular/src/app/demos/file-dropzone/file-dropzone-demo.component.ts +176 -0
  168. package/templates/angular/src/app/demos/handle/handle-demo.component.ts +265 -0
  169. package/templates/angular/src/app/demos/icon/icon-demo.component.ts +65 -0
  170. package/templates/angular/src/app/demos/input-feedback/input-feedback-demo.component.ts +189 -0
  171. package/templates/angular/src/app/demos/input-label/input-label-demo.component.ts +330 -0
  172. package/templates/angular/src/app/demos/loader/loader-demo.component.ts +143 -0
  173. package/templates/angular/src/app/demos/logo/logo-demo.component.ts +191 -0
  174. package/templates/angular/src/app/demos/menu/menu-demo.component.ts +72 -0
  175. package/templates/angular/src/app/demos/modal/modal-demo.component.ts +278 -0
  176. package/templates/angular/src/app/demos/navbar/navbar-demo.component.ts +135 -0
  177. package/templates/angular/src/app/demos/number-input/number-input-demo.component.ts +175 -0
  178. package/templates/angular/src/app/demos/pagination/pagination-demo.component.ts +134 -0
  179. package/templates/angular/src/app/demos/panel/panel-demo.component.ts +235 -0
  180. package/templates/angular/src/app/demos/progress/progress-demo.component.ts +169 -0
  181. package/templates/angular/src/app/demos/radio/radio-demo.component.ts +161 -0
  182. package/templates/angular/src/app/demos/rating/rating-demo.component.ts +97 -0
  183. package/templates/angular/src/app/demos/select/select-demo.component.ts +107 -0
  184. package/templates/angular/src/app/demos/shared/demo-example-clean.component.ts +41 -0
  185. package/templates/angular/src/app/demos/shared/demo-example.component.ts +42 -0
  186. package/templates/angular/src/app/demos/shared/demo-page.component.ts +97 -0
  187. package/templates/angular/src/app/demos/shared/index.ts +3 -0
  188. package/templates/angular/src/app/demos/side-navigation/side-navigation-demo.component.ts +524 -0
  189. package/templates/angular/src/app/demos/skeleton/skeleton-demo.component.ts +112 -0
  190. package/templates/angular/src/app/demos/slider/slider-demo.component.ts +76 -0
  191. package/templates/angular/src/app/demos/stepper/stepper-demo.component.ts +79 -0
  192. package/templates/angular/src/app/demos/switch/switch-demo.component.ts +113 -0
  193. package/templates/angular/src/app/demos/table/table-demo.component.ts +405 -0
  194. package/templates/angular/src/app/demos/tabs/tabs-demo.component.ts +318 -0
  195. package/templates/angular/src/app/demos/text-input/text-input-demo.component.ts +160 -0
  196. package/templates/angular/src/app/demos/textarea/textarea-demo.component.ts +95 -0
  197. package/templates/angular/src/app/demos/theme-switcher/theme-switcher-demo.component.ts +38 -0
  198. package/templates/angular/src/app/demos/time-input/time-input-demo.component.ts +130 -0
  199. package/templates/angular/src/app/demos/toast/toast-demo.component.ts +258 -0
  200. package/templates/angular/src/app/demos/toolbar/toolbar-demo.component.ts +54 -0
  201. package/templates/angular/src/app/demos/tooltip/tooltip-demo.component.ts +163 -0
  202. package/templates/angular/src/app/demos/utility-panel/utility-panel-demo.component.ts +197 -0
  203. package/templates/angular/src/app/dev/dev-config.ts +119 -0
  204. package/templates/angular/src/app/dev/dev-panel/dev-panel.component.ts +215 -0
  205. package/templates/angular/src/app/dev/dev-panel.service.ts +63 -0
  206. package/templates/angular/src/app/dev/index.ts +8 -0
  207. package/templates/angular/src/app/dev/theme-switcher-dropdown/theme-switcher-dropdown.component.ts +134 -0
  208. package/templates/angular/src/app/dev-pages/color-palette/color-palette.component.ts +229 -0
  209. package/templates/angular/src/app/dev-pages/components-gallery/components-gallery.component.ts +486 -0
  210. package/templates/angular/src/app/dev-pages/icons/icons.component.ts +149 -0
  211. package/templates/angular/src/app/pages/home/home.component.ts +251 -0
  212. package/templates/angular/src/app/services/README.md +57 -0
  213. package/templates/angular/src/app/services/theme.service.ts +163 -0
  214. package/templates/angular/src/environments/environment.development.ts +8 -0
  215. package/templates/angular/src/environments/environment.ts +8 -0
  216. package/templates/angular/src/index.html +14 -0
  217. package/templates/angular/src/main.ts +6 -0
  218. package/templates/angular/src/styles.css +1328 -0
  219. package/templates/angular/tsconfig.app.json +15 -0
  220. package/templates/angular/tsconfig.json +35 -0
  221. package/templates/angular/tsconfig.spec.json +14 -0
  222. package/templates/config.json +23 -0
  223. package/templates/react/.cursor/commands/remove-dev-content.md +311 -0
  224. package/templates/react/.cursor/mcp.json +13 -0
  225. package/templates/react/.cursor/rules/README.md +240 -0
  226. package/templates/react/.cursor/rules/border-usage-guidelines-short.mdc +22 -0
  227. package/templates/react/.cursor/rules/border-usage-guidelines.mdc +380 -0
  228. package/templates/react/.cursor/rules/chrome-devtools-testing-react-short.mdc +23 -0
  229. package/templates/react/.cursor/rules/development-workflow-react-short.mdc +23 -0
  230. package/templates/react/.cursor/rules/development-workflow-react.mdc +292 -0
  231. package/templates/react/.cursor/rules/implementation-guides-react-short.mdc +23 -0
  232. package/templates/react/.cursor/rules/implementation-guides-react.mdc +446 -0
  233. package/templates/react/.cursor/rules/modus-accordion-state-management-react-short.mdc +23 -0
  234. package/templates/react/.cursor/rules/modus-accordion-state-management-react.mdc +445 -0
  235. package/templates/react/.cursor/rules/modus-button-group-usage-react-short.mdc +23 -0
  236. package/templates/react/.cursor/rules/modus-button-group-usage-react.mdc +117 -0
  237. package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react-short.mdc +23 -0
  238. package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react.mdc +492 -0
  239. package/templates/react/.cursor/rules/modus-color-usage-react-short.mdc +23 -0
  240. package/templates/react/.cursor/rules/modus-color-usage-react.mdc +420 -0
  241. package/templates/react/.cursor/rules/modus-components-reference.mdc +366 -0
  242. package/templates/react/.cursor/rules/modus-icon-names.mdc +63 -0
  243. package/templates/react/.cursor/rules/modus-icons-react-short.mdc +24 -0
  244. package/templates/react/.cursor/rules/modus-icons-react.mdc +402 -0
  245. package/templates/react/.cursor/rules/modus-modal-implementation-react-short.mdc +23 -0
  246. package/templates/react/.cursor/rules/modus-modal-implementation-react.mdc +831 -0
  247. package/templates/react/.cursor/rules/modus-navbar-side-navigation-react-short.mdc +23 -0
  248. package/templates/react/.cursor/rules/modus-navbar-side-navigation-react.mdc +247 -0
  249. package/templates/react/.cursor/rules/modus-no-emojis-react-short.mdc +23 -0
  250. package/templates/react/.cursor/rules/modus-opacity-utilities-react-short.mdc +70 -0
  251. package/templates/react/.cursor/rules/modus-opacity-utilities-react.mdc +208 -0
  252. package/templates/react/.cursor/rules/modus-react-best-practices-short.mdc +23 -0
  253. package/templates/react/.cursor/rules/modus-react-best-practices.mdc +508 -0
  254. package/templates/react/.cursor/rules/modus-react-essentials.mdc +209 -0
  255. package/templates/react/.cursor/rules/modus-react-integration-short.mdc +23 -0
  256. package/templates/react/.cursor/rules/modus-react-integration.mdc +509 -0
  257. package/templates/react/.cursor/rules/modus-react-key-warnings-short.mdc +23 -0
  258. package/templates/react/.cursor/rules/modus-react-key-warnings.mdc +805 -0
  259. package/templates/react/.cursor/rules/modus-react-master.mdc +160 -0
  260. package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react-short.mdc +23 -0
  261. package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react.mdc +442 -0
  262. package/templates/react/.cursor/rules/modus-semantic-html-react-short.mdc +23 -0
  263. package/templates/react/.cursor/rules/modus-semantic-html-react.mdc +427 -0
  264. package/templates/react/.cursor/rules/modus-tailwind-usage-react-short.mdc +23 -0
  265. package/templates/react/.cursor/rules/modus-tailwind-usage-react.mdc +642 -0
  266. package/templates/react/.cursor/rules/modus-themes-react-short.mdc +23 -0
  267. package/templates/react/.cursor/rules/modus-themes-react.mdc +506 -0
  268. package/templates/react/.cursor/rules/ux/gestalt-laws-detailed.mdc +456 -0
  269. package/templates/react/.cursor/rules/ux/ux-ui-foundations.mdc +211 -0
  270. package/templates/react/.cursor/skills/create-modus-form-component/SKILL.md +518 -0
  271. package/templates/react/.cursor/skills/create-modus-wrapper-component/SKILL.md +252 -0
  272. package/templates/react/.cursor/skills/fix-modus-component-event-issues/SKILL.md +345 -0
  273. package/templates/react/.cursor/skills/handle-modus-checkbox-value-bug/SKILL.md +202 -0
  274. package/templates/react/.cursor/skills/implement-modus-modal-with-refs/SKILL.md +386 -0
  275. package/templates/react/.cursor/skills/integrate-modus-icons/SKILL.md +300 -0
  276. package/templates/react/.cursor/skills/run-lint-checks/SKILL.md +235 -0
  277. package/templates/react/.cursor/skills/set-up-modus-event-listeners/SKILL.md +284 -0
  278. package/templates/react/.cursor/skills/style-modus-components-with-tailwind/SKILL.md +382 -0
  279. package/templates/react/.env.development +3 -0
  280. package/templates/react/.env.production +3 -0
  281. package/templates/react/.github/CODEOWNERS +28 -0
  282. package/templates/react/.github/ISSUE_TEMPLATE/bug_report.yml +176 -0
  283. package/templates/react/.github/ISSUE_TEMPLATE/config.yml +20 -0
  284. package/templates/react/.github/ISSUE_TEMPLATE/documentation.yml +115 -0
  285. package/templates/react/.github/ISSUE_TEMPLATE/feature_request.yml +171 -0
  286. package/templates/react/.github/ISSUE_TEMPLATE/question.yml +139 -0
  287. package/templates/react/.github/copilot-instructions.md +80 -0
  288. package/templates/react/.github/instructions/components.instructions.md +82 -0
  289. package/templates/react/.github/instructions/demos.instructions.md +82 -0
  290. package/templates/react/.github/instructions/pages.instructions.md +76 -0
  291. package/templates/react/.github/instructions/styles.instructions.md +77 -0
  292. package/templates/react/.github/instructions/typescript.instructions.md +101 -0
  293. package/templates/react/.github/pull_request_template.md +188 -0
  294. package/templates/react/.github/workflows/ci.yml +43 -0
  295. package/templates/react/.github/workflows/claude-code-review.yml +44 -0
  296. package/templates/react/.github/workflows/claude.yml +50 -0
  297. package/templates/react/.husky/pre-commit +28 -0
  298. package/templates/react/.vscode/extensions.json +8 -0
  299. package/templates/react/CLAUDE.md +119 -0
  300. package/templates/react/CODE_OF_CONDUCT.md +79 -0
  301. package/templates/react/CONTRIBUTING.md +65 -0
  302. package/templates/react/LICENSE +21 -0
  303. package/templates/react/README.md +728 -0
  304. package/templates/react/SECURITY.md +50 -0
  305. package/templates/react/eslint.config.js +23 -0
  306. package/templates/react/index.html +13 -0
  307. package/templates/react/package-lock.json +5209 -0
  308. package/templates/react/package.json +49 -0
  309. package/templates/react/postcss.config.js +6 -0
  310. package/templates/react/public/react.svg +1 -0
  311. package/templates/react/public/vite.svg +1 -0
  312. package/templates/react/readme_assets/getting_started_header.png +0 -0
  313. package/templates/react/readme_assets/hero.png +0 -0
  314. package/templates/react/readme_assets/modus_comp.png +0 -0
  315. package/templates/react/readme_assets/modus_figma_mcp.png +0 -0
  316. package/templates/react/readme_assets/teaser_comp.gif +0 -0
  317. package/templates/react/scripts/README.md +343 -0
  318. package/templates/react/scripts/check-border-violations.js +483 -0
  319. package/templates/react/scripts/check-icon-names.js +486 -0
  320. package/templates/react/scripts/check-inline-styles.js +364 -0
  321. package/templates/react/scripts/check-modus-colors.js +247 -0
  322. package/templates/react/scripts/check-modus-icons.js +256 -0
  323. package/templates/react/scripts/check-opacity-utilities.js +481 -0
  324. package/templates/react/scripts/check-semantic-html.js +476 -0
  325. package/templates/react/scripts/check-typescript.js +109 -0
  326. package/templates/react/src/App.css +42 -0
  327. package/templates/react/src/App.tsx +54 -0
  328. package/templates/react/src/assets/react.svg +1 -0
  329. package/templates/react/src/components/DemoExample.tsx +61 -0
  330. package/templates/react/src/components/DemoPage.tsx +81 -0
  331. package/templates/react/src/components/ModusAccordion.tsx +89 -0
  332. package/templates/react/src/components/ModusAlert.tsx +85 -0
  333. package/templates/react/src/components/ModusAutocomplete.tsx +207 -0
  334. package/templates/react/src/components/ModusAvatar.tsx +50 -0
  335. package/templates/react/src/components/ModusBadge.tsx +82 -0
  336. package/templates/react/src/components/ModusBreadcrumbs.tsx +75 -0
  337. package/templates/react/src/components/ModusButton.tsx +244 -0
  338. package/templates/react/src/components/ModusButtonGroup.tsx +91 -0
  339. package/templates/react/src/components/ModusCard.tsx +70 -0
  340. package/templates/react/src/components/ModusCheckbox.tsx +168 -0
  341. package/templates/react/src/components/ModusChip.tsx +93 -0
  342. package/templates/react/src/components/ModusDate.tsx +154 -0
  343. package/templates/react/src/components/ModusDropdownMenu.tsx +148 -0
  344. package/templates/react/src/components/ModusFileDropzone.tsx +140 -0
  345. package/templates/react/src/components/ModusHandle.tsx +101 -0
  346. package/templates/react/src/components/ModusIcon.tsx +49 -0
  347. package/templates/react/src/components/ModusInputFeedback.tsx +52 -0
  348. package/templates/react/src/components/ModusInputLabel.tsx +50 -0
  349. package/templates/react/src/components/ModusLoader.tsx +42 -0
  350. package/templates/react/src/components/ModusLogo.tsx +102 -0
  351. package/templates/react/src/components/ModusMenu.tsx +119 -0
  352. package/templates/react/src/components/ModusMenuItem.tsx +86 -0
  353. package/templates/react/src/components/ModusModal.tsx +145 -0
  354. package/templates/react/src/components/ModusNavbar.tsx +504 -0
  355. package/templates/react/src/components/ModusNumberInput.tsx +230 -0
  356. package/templates/react/src/components/ModusPagination.tsx +94 -0
  357. package/templates/react/src/components/ModusPanel.tsx +92 -0
  358. package/templates/react/src/components/ModusProgress.tsx +70 -0
  359. package/templates/react/src/components/ModusProvider.tsx +18 -0
  360. package/templates/react/src/components/ModusRadio.tsx +114 -0
  361. package/templates/react/src/components/ModusRating.tsx +108 -0
  362. package/templates/react/src/components/ModusSelect.tsx +171 -0
  363. package/templates/react/src/components/ModusSideNavigation.tsx +149 -0
  364. package/templates/react/src/components/ModusSkeleton.tsx +42 -0
  365. package/templates/react/src/components/ModusSlider.tsx +128 -0
  366. package/templates/react/src/components/ModusStepper.tsx +85 -0
  367. package/templates/react/src/components/ModusSwitch.tsx +130 -0
  368. package/templates/react/src/components/ModusTable.tsx +309 -0
  369. package/templates/react/src/components/ModusTabs.tsx +114 -0
  370. package/templates/react/src/components/ModusTextInput.tsx +179 -0
  371. package/templates/react/src/components/ModusTextarea.tsx +164 -0
  372. package/templates/react/src/components/ModusThemeSwitcher.tsx +58 -0
  373. package/templates/react/src/components/ModusTimeInput.tsx +176 -0
  374. package/templates/react/src/components/ModusToast.tsx +207 -0
  375. package/templates/react/src/components/ModusToolbar.tsx +70 -0
  376. package/templates/react/src/components/ModusTooltip.tsx +97 -0
  377. package/templates/react/src/components/ModusUtilityPanel.tsx +198 -0
  378. package/templates/react/src/components/ThemeSwitcherDropdown.tsx +117 -0
  379. package/templates/react/src/components/ThemeToggleSimple.tsx +157 -0
  380. package/templates/react/src/config/routes.ts +196 -0
  381. package/templates/react/src/contexts/ThemeContext.tsx +81 -0
  382. package/templates/react/src/contexts/ThemeContextData.tsx +89 -0
  383. package/templates/react/src/data/modusIcons.ts +865 -0
  384. package/templates/react/src/demos/accordion-demo/page.tsx +236 -0
  385. package/templates/react/src/demos/alert-demo/page.tsx +94 -0
  386. package/templates/react/src/demos/autocomplete-demo/page.tsx +166 -0
  387. package/templates/react/src/demos/avatar-demo/page.tsx +135 -0
  388. package/templates/react/src/demos/badge-demo/page.tsx +174 -0
  389. package/templates/react/src/demos/breadcrumbs-demo/page.tsx +88 -0
  390. package/templates/react/src/demos/button-demo/page.tsx +261 -0
  391. package/templates/react/src/demos/button-group-demo/page.tsx +231 -0
  392. package/templates/react/src/demos/card-demo/page.tsx +241 -0
  393. package/templates/react/src/demos/checkbox-demo/page.tsx +79 -0
  394. package/templates/react/src/demos/chip-demo/page.tsx +197 -0
  395. package/templates/react/src/demos/date-demo/page.tsx +179 -0
  396. package/templates/react/src/demos/dropdown-demo/page.tsx +150 -0
  397. package/templates/react/src/demos/file-dropzone-demo/page.tsx +186 -0
  398. package/templates/react/src/demos/handle-demo/page.tsx +313 -0
  399. package/templates/react/src/demos/icon-demo/page.tsx +72 -0
  400. package/templates/react/src/demos/input-feedback-demo/page.tsx +202 -0
  401. package/templates/react/src/demos/input-label-demo/page.tsx +392 -0
  402. package/templates/react/src/demos/loader-demo/page.tsx +138 -0
  403. package/templates/react/src/demos/logo-demo/page.tsx +292 -0
  404. package/templates/react/src/demos/menu-demo/page.tsx +70 -0
  405. package/templates/react/src/demos/modal-demo/page.tsx +332 -0
  406. package/templates/react/src/demos/navbar-demo/page.tsx +141 -0
  407. package/templates/react/src/demos/number-input-demo/page.tsx +180 -0
  408. package/templates/react/src/demos/pagination-demo/page.tsx +147 -0
  409. package/templates/react/src/demos/panel-demo/page.tsx +376 -0
  410. package/templates/react/src/demos/progress-demo/page.tsx +185 -0
  411. package/templates/react/src/demos/radio-demo/page.tsx +242 -0
  412. package/templates/react/src/demos/rating-demo/page.tsx +97 -0
  413. package/templates/react/src/demos/select-demo/page.tsx +111 -0
  414. package/templates/react/src/demos/side-navigation-demo/page.tsx +775 -0
  415. package/templates/react/src/demos/skeleton-demo/page.tsx +107 -0
  416. package/templates/react/src/demos/slider-demo/page.tsx +78 -0
  417. package/templates/react/src/demos/stepper-demo/page.tsx +86 -0
  418. package/templates/react/src/demos/switch-demo/page.tsx +146 -0
  419. package/templates/react/src/demos/table-demo/page.tsx +489 -0
  420. package/templates/react/src/demos/tabs-demo/page.tsx +187 -0
  421. package/templates/react/src/demos/text-input-demo/page.tsx +151 -0
  422. package/templates/react/src/demos/textarea-demo/page.tsx +73 -0
  423. package/templates/react/src/demos/theme-switcher-demo/page.tsx +26 -0
  424. package/templates/react/src/demos/time-input-demo/page.tsx +148 -0
  425. package/templates/react/src/demos/toast-demo/page.tsx +302 -0
  426. package/templates/react/src/demos/toolbar-demo/page.tsx +49 -0
  427. package/templates/react/src/demos/tooltip-demo/page.tsx +209 -0
  428. package/templates/react/src/demos/typography-test/page.tsx +28 -0
  429. package/templates/react/src/demos/utility-panel-demo/page.tsx +197 -0
  430. package/templates/react/src/dev/DevPanel.tsx +219 -0
  431. package/templates/react/src/dev/DevPanelContext.ts +14 -0
  432. package/templates/react/src/dev/DevPanelProvider.tsx +63 -0
  433. package/templates/react/src/dev/DevRoutes.tsx +98 -0
  434. package/templates/react/src/dev/config.ts +127 -0
  435. package/templates/react/src/dev/index.ts +8 -0
  436. package/templates/react/src/dev/useDevPanel.ts +17 -0
  437. package/templates/react/src/dev-pages/ColorPalettePage.tsx +347 -0
  438. package/templates/react/src/dev-pages/ComponentsGalleryPage.tsx +489 -0
  439. package/templates/react/src/dev-pages/IconsPage.tsx +137 -0
  440. package/templates/react/src/dev-pages/index.ts +3 -0
  441. package/templates/react/src/hooks/useTheme.ts +15 -0
  442. package/templates/react/src/index.css +635 -0
  443. package/templates/react/src/main.tsx +14 -0
  444. package/templates/react/src/pages/HomePage.tsx +283 -0
  445. package/templates/react/src/vite-env.d.ts +9 -0
  446. package/templates/react/tailwind.config.js +58 -0
  447. package/templates/react/tsconfig.app.json +27 -0
  448. package/templates/react/tsconfig.json +7 -0
  449. package/templates/react/tsconfig.node.json +25 -0
  450. package/templates/react/vite.config.ts +18 -0
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "angular-vite",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "ng": "ng",
7
+ "start": "ng serve",
8
+ "build": "ng build",
9
+ "watch": "ng build --watch --configuration development",
10
+ "test": "ng test",
11
+ "type-check": "node scripts/check-typescript.js",
12
+ "lint:colors": "node scripts/check-modus-colors.js",
13
+ "lint:styles": "node scripts/check-inline-styles.js",
14
+ "lint:borders": "node scripts/check-border-violations.js",
15
+ "lint:opacity": "node scripts/check-opacity-utilities.js",
16
+ "lint:icons": "node scripts/check-modus-icons.js",
17
+ "lint:icon-names": "node scripts/check-icon-names.js",
18
+ "lint:all": "npm run type-check && npm run lint:colors && npm run lint:styles && npm run lint:borders && npm run lint:opacity && npm run lint:icons && npm run lint:icon-names",
19
+ "prepare": "husky"
20
+ },
21
+ "prettier": {
22
+ "printWidth": 100,
23
+ "singleQuote": true,
24
+ "overrides": [
25
+ {
26
+ "files": "*.html",
27
+ "options": {
28
+ "parser": "angular"
29
+ }
30
+ }
31
+ ]
32
+ },
33
+ "private": true,
34
+ "dependencies": {
35
+ "@angular/common": "^20.3.0",
36
+ "@angular/compiler": "^20.3.0",
37
+ "@angular/core": "^20.3.0",
38
+ "@angular/forms": "^20.3.0",
39
+ "@angular/platform-browser": "^20.3.0",
40
+ "@angular/router": "^20.3.0",
41
+ "@tailwindcss/postcss": "^4.1.16",
42
+ "@trimble-oss/modus-icons": "^1.18.0",
43
+ "@trimble-oss/moduswebcomponents": "^1.0.6",
44
+ "@trimble-oss/moduswebcomponents-angular": "^1.0.6-ng19",
45
+ "postcss": "^8.5.6",
46
+ "rxjs": "~7.8.0",
47
+ "tailwindcss": "^4.1.16",
48
+ "tslib": "^2.3.0",
49
+ "zone.js": "~0.15.0"
50
+ },
51
+ "devDependencies": {
52
+ "@angular/build": "^20.3.8",
53
+ "@angular/cli": "^20.3.8",
54
+ "@angular/compiler-cli": "^20.3.0",
55
+ "@types/jasmine": "~5.1.0",
56
+ "glob": "^11.0.0",
57
+ "husky": "^9.1.7",
58
+ "jasmine-core": "~5.9.0",
59
+ "karma": "~6.4.0",
60
+ "karma-chrome-launcher": "~3.2.0",
61
+ "karma-coverage": "~2.2.0",
62
+ "karma-jasmine": "~5.1.0",
63
+ "karma-jasmine-html-reporter": "~2.1.0",
64
+ "typescript": "~5.9.2"
65
+ }
66
+ }
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+ <svg width="800px" height="800px" viewBox="-8 0 272 272" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
4
+ <g>
5
+ <path d="M0.0996108949,45.522179 L125.908171,0.697276265 L255.103502,44.7252918 L234.185214,211.175097 L125.908171,271.140856 L19.3245136,211.971984 L0.0996108949,45.522179 Z" fill="#E23237">
6
+
7
+ <path d="M255.103502,44.7252918 L125.908171,0.697276265 L125.908171,271.140856 L234.185214,211.274708 L255.103502,44.7252918 L255.103502,44.7252918 Z" fill="#B52E31">
8
+
9
+ <path d="M126.107393,32.27393 L126.107393,32.27393 L47.7136187,206.692607 L76.9992218,206.194553 L92.7377432,166.848249 L126.207004,166.848249 L126.306615,166.848249 L163.063035,166.848249 L180.29572,206.692607 L208.286381,207.190661 L126.107393,32.27393 L126.107393,32.27393 Z M126.306615,88.155642 L152.803113,143.5393 L127.402335,143.5393 L126.107393,143.5393 L102.997665,143.5393 L126.306615,88.155642 L126.306615,88.155642 Z" fill="#FFFFFF">
10
+
11
+ </g>
12
+ </svg>
@@ -0,0 +1,49 @@
1
+ /*!
2
+ * Modus Icons - Field Systems
3
+ * Custom configuration for Modus Web Components compatibility
4
+ */
5
+
6
+ @font-face {
7
+ font-family: 'modus-icons';
8
+ src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
9
+ format('woff2');
10
+ font-style: normal;
11
+ font-weight: normal;
12
+ font-display: swap;
13
+ }
14
+
15
+ @font-face {
16
+ font-family: 'modus-icons-outlined';
17
+ src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
18
+ format('woff2');
19
+ font-style: normal;
20
+ font-weight: normal;
21
+ font-display: swap;
22
+ }
23
+
24
+ @font-face {
25
+ font-family: 'modus-icons-solid';
26
+ src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
27
+ format('woff2');
28
+ font-style: normal;
29
+ font-weight: normal;
30
+ font-display: swap;
31
+ }
32
+
33
+ .modus-icons-outlined {
34
+ font-family: 'modus-icons-outlined';
35
+ font-style: normal;
36
+ font-weight: normal;
37
+ }
38
+
39
+ .modus-icons-solid {
40
+ font-family: 'modus-icons-solid';
41
+ font-style: normal;
42
+ font-weight: normal;
43
+ }
44
+
45
+ .modus-icons {
46
+ font-family: 'modus-icons';
47
+ font-style: normal;
48
+ font-weight: normal;
49
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1,410 @@
1
+ # Modus Design System Linting Scripts for Angular + Tailwind v4
2
+
3
+ This directory contains comprehensive linting scripts for enforcing Modus Design System compliance in the Angular + Tailwind v4 codebase. These scripts ensure consistent styling, proper component usage, and adherence to design system standards.
4
+
5
+ ## Available Linting Scripts
6
+
7
+ ### 1. TypeScript Type Checking (`check-typescript.js`)
8
+
9
+ **Purpose**: Enhanced TypeScript type checking with improved developer experience and clear error reporting.
10
+
11
+ **What it provides:**
12
+
13
+ - Clear success/failure messages with emojis
14
+ - Grouped error reporting by file
15
+ - Helpful error resolution tips
16
+ - Consistent UX with other linting scripts
17
+ - Pre-commit integration for type safety
18
+
19
+ **Usage:**
20
+
21
+ ```bash
22
+ npm run type-check
23
+ ```
24
+
25
+ **Success Output:**
26
+
27
+ ```
28
+ 🔍 TypeScript Type Check for Angular App
29
+
30
+ 🔍 Running TypeScript type checking...
31
+
32
+ ✅ All TypeScript files are type-safe!
33
+ 🎯 No type errors found in the codebase.
34
+
35
+ 🎉 Type checking completed successfully!
36
+ ```
37
+
38
+ **Error Output:**
39
+
40
+ ```
41
+ ❌ Found 3 TypeScript errors:
42
+
43
+ 📄 app/components/my.component.ts:
44
+ 15:8 - TS2322: Type 'string' is not assignable to type 'number'
45
+ 22:12 - TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'
46
+
47
+ 💡 TypeScript Error Resolution Tips:
48
+ • Check for missing type annotations
49
+ • Verify import/export statements
50
+ • Ensure proper interface definitions
51
+ • Check for null/undefined handling
52
+ • Verify component prop types
53
+ ```
54
+
55
+ ### 2. Color Compliance (`check-modus-colors.js`)
56
+
57
+ **Purpose**: Ensures only approved Modus colors are used throughout the codebase.
58
+
59
+ **What it detects:**
60
+
61
+ - Tailwind color classes (`red-400`, `blue-500`, etc.)
62
+ - Hardcoded hex colors (`#ff0000`, `#ffffff`, etc.)
63
+ - RGB/RGBA values
64
+ - Background, text, and border color violations
65
+ - Raw Modus CSS variables (should use design system colors)
66
+
67
+ **What it suggests:**
68
+
69
+ - Proper design system Tailwind classes (`bg-background`, `text-foreground`, etc.)
70
+ - Design system compliant alternatives
71
+ - Links to official documentation
72
+
73
+ **Usage:**
74
+
75
+ ```bash
76
+ npm run lint:colors
77
+ ```
78
+
79
+ ### 3. Inline Styles Compliance (`check-inline-styles.js`)
80
+
81
+ **Purpose**: Detects inline styles that should be replaced with Tailwind classes for better maintainability and design system consistency.
82
+
83
+ **What it detects:**
84
+
85
+ - Angular style attribute binding (`[style.*]`)
86
+ - Regular style attributes (`style=""`)
87
+ - Background colors (`backgroundColor`, `background`)
88
+ - Text colors (`color`)
89
+ - Spacing (`margin`, `padding`)
90
+ - Typography (`fontSize`, `fontWeight`, `lineHeight`, `textAlign`)
91
+ - Layout properties (`display`, `flexDirection`, `justifyContent`, `alignItems`)
92
+ - Positioning (`position`, `top`, `left`, `right`, `bottom`)
93
+ - Sizing (`width`, `height`, `maxWidth`, `minHeight`)
94
+
95
+ **What it suggests:**
96
+
97
+ - Equivalent Tailwind utility classes
98
+ - Design system compliant alternatives
99
+ - Performance and maintainability improvements
100
+
101
+ **Usage:**
102
+
103
+ ```bash
104
+ npm run lint:styles
105
+ ```
106
+
107
+ **Exceptions:**
108
+
109
+ - Border-related styles are allowed due to Tailwind v4 + Modus conflicts
110
+ - Dynamic values (template expressions) are allowed
111
+
112
+ ### 4. Icon Usage Compliance (`check-modus-icons.js`)
113
+
114
+ **Purpose**: Ensures only Modus Icons are used, preventing non-design-system icon libraries.
115
+
116
+ **What it detects:**
117
+
118
+ - Font Awesome icons (`fa-*`, `fas-*`, `far-*`, etc.)
119
+ - Material Icons (`material-icons`, `material-symbols`)
120
+ - Heroicons (`heroicons`)
121
+ - Lucide icons (`lucide`, `lucide-react`)
122
+ - React Icons imports (`react-icons`, `@heroicons`, `lucide-react`)
123
+ - Other icon libraries (`@ant-design/icons`, `@mui/icons-material`, `@tabler/icons`, `@phosphor-icons`)
124
+ - Custom SVG icons (non-Modus)
125
+ - Generic icon components (`<Icon>`, `<Icons>`, `<IconButton>`)
126
+
127
+ **What it suggests:**
128
+
129
+ - Modus Icons alternatives
130
+ - Proper Modus Icons usage patterns
131
+ - Design system compliance
132
+
133
+ **Usage:**
134
+
135
+ ```bash
136
+ npm run lint:icons
137
+ ```
138
+
139
+ ### 5. Border Violations Compliance (`check-border-violations.js`)
140
+
141
+ **Purpose**: Detects incorrect border patterns that violate Tailwind v4 + Modus design system rules.
142
+
143
+ **What it detects:**
144
+
145
+ - Border classes with Tailwind color classes (`border-red-500`, `border-gray-300`, etc.)
146
+ - Border classes with hardcoded hex colors
147
+ - Directional borders with Tailwind colors (`border-t-red-500`, etc.)
148
+ - Inline border styles that should use utility classes
149
+
150
+ **What it suggests:**
151
+
152
+ - Border utility classes: `border-default`, `border-thick`, `border-dashed`
153
+ - Design system colors: `border-primary`, `border-success`, `border-warning`, `border-error`
154
+ - Specific side borders: `border-top-default`, `border-bottom-default`, `border-left-default`, `border-right-default`
155
+
156
+ **Usage:**
157
+
158
+ ```bash
159
+ npm run lint:borders
160
+ ```
161
+
162
+ ### 6. Opacity Utilities (`check-opacity-utilities.js`)
163
+
164
+ **Purpose**: Validates opacity usage with design system colors to ensure custom opacity utilities are used instead of Tailwind's `/80` syntax.
165
+
166
+ **What it checks:**
167
+
168
+ - Tailwind opacity syntax with design system colors (e.g., `text-foreground/80`)
169
+ - Suggests custom opacity utilities (e.g., `text-foreground-80`)
170
+ - Validates all opacity levels: 20, 40, 60, 80
171
+ - Checks text, background, and border opacity usage
172
+
173
+ **Usage:**
174
+
175
+ ```bash
176
+ npm run lint:opacity
177
+ ```
178
+
179
+ **Success Output:**
180
+
181
+ ```
182
+ 🔍 Checking for Tailwind opacity syntax violations...
183
+
184
+ ✅ No Tailwind opacity syntax violations found!
185
+ All design system colors are using custom opacity utilities.
186
+ ```
187
+
188
+ **Error Output:**
189
+
190
+ ```
191
+ ❌ Found 3 Tailwind opacity syntax violations:
192
+
193
+ 📁 src/app/components/my.component.html
194
+ src/app/components/my.component.html:43:38
195
+ Found Tailwind opacity syntax: text-foreground/80
196
+ Use custom opacity utility: text-foreground-80
197
+ Tailwind /80 syntax doesn't work with CSS variables. Use our custom opacity utilities instead.
198
+ ```
199
+
200
+ **Key Features:**
201
+
202
+ - Detects Tailwind opacity syntax with design system colors
203
+ - Provides specific suggestions for each violation
204
+ - Supports all design system color combinations
205
+ - Explains why the syntax doesn't work
206
+ - Integrates with existing lint suite
207
+
208
+ ### 7. Icon Names Validation (`check-icon-names.js`)
209
+
210
+ **Purpose**: Validates that all Modus icon names used in the codebase are correct and exist in the official Modus Icons list.
211
+
212
+ **What it checks:**
213
+
214
+ - `<modus-icon>` component usage with invalid icon names
215
+ - Direct icon class usage with invalid names
216
+ - Icon names in string literals and template literals
217
+ - Provides suggestions for similar/partial matches
218
+ - Validates against complete official icon list (700+ icons)
219
+
220
+ **Usage:**
221
+
222
+ ```bash
223
+ npm run lint:icon-names
224
+ ```
225
+
226
+ **Success Output:**
227
+
228
+ ```
229
+ 🔍 Validating Modus icon names...
230
+
231
+ ✅ All Modus icon names are valid!
232
+ Found 710 valid Modus icons across 25 categories.
233
+ ```
234
+
235
+ **Error Output:**
236
+
237
+ ```
238
+ ❌ Found 3 invalid Modus icon names:
239
+
240
+ 📁 src/app/components/my.component.html
241
+ src/app/components/my.component.html:15:19
242
+ Invalid Modus icon name: visibility
243
+ Did you mean: visibility_off, visibility_on, visibility_part_outline
244
+ The icon "visibility" is not found in the official Modus Icons list.
245
+ ```
246
+
247
+ **Key Features:**
248
+
249
+ - Validates against complete official Modus Icons list
250
+ - Provides intelligent suggestions using Levenshtein distance
251
+ - Supports multiple icon usage patterns (Angular components, direct class usage)
252
+ - Shows icon categories and counts
253
+ - Integrates with existing lint suite
254
+ - Helps prevent typos and invalid icon names
255
+
256
+ ## Comprehensive Linting
257
+
258
+ Run all linting checks at once:
259
+
260
+ ```bash
261
+ # Run all design system compliance checks
262
+ npm run lint:all
263
+ ```
264
+
265
+ ## Pre-commit Integration
266
+
267
+ All scripts run automatically before each commit via pre-commit hooks to ensure design system consistency:
268
+
269
+ ```bash
270
+ # Automatic check on commit (pre-commit hook)
271
+ git commit -m "your changes"
272
+ ```
273
+
274
+ The pre-commit hooks will:
275
+
276
+ 1. ✅ Run TypeScript type checking for type safety
277
+ 2. ✅ Check for inline styles that should use Tailwind classes
278
+ 3. ✅ Verify only approved Modus colors are used
279
+ 4. ✅ Ensure only Modus Icons are used
280
+ 5. ✅ Detect border violations (Tailwind color classes in borders)
281
+ 6. ✅ Validate opacity utilities usage
282
+ 7. ✅ Validate Modus icon names are correct
283
+
284
+ ## Modus Color System (9 Colors Only)
285
+
286
+ ### Base Colors (5 total):
287
+
288
+ 1. **Background**: `bg-background` → `var(--modus-wc-color-base-page)` - #fff (light) / #000 (dark)
289
+ 2. **Card**: `bg-card` → `var(--modus-wc-color-base-100)` - #f1f1f6 (light) / #252a2e (dark)
290
+ 3. **Muted**: `bg-muted` → `var(--modus-wc-color-base-200)` - #cbcdd6 (light) / #464b52 (dark)
291
+ 4. **Secondary**: `bg-secondary` → `var(--modus-wc-color-base-300)` - #b7b9c3 (light) / #353a40 (dark)
292
+ 5. **Foreground**: `text-foreground` → `var(--modus-wc-color-base-content)` - #171c1e (light) / #cbcdd6 (dark)
293
+
294
+ ### Status Colors (4 total - same in both themes):
295
+
296
+ 6. **Primary/Info**: `bg-primary` → `var(--modus-wc-color-info)` - #0063a3
297
+ 7. **Success**: `bg-success` → `var(--modus-wc-color-success)` - #1e8a44
298
+ 8. **Error**: `bg-error` → `var(--modus-wc-color-error)` - #da212c
299
+ 9. **Warning**: `bg-warning` → `var(--modus-wc-color-warning)` - #fbad26
300
+
301
+ ### Component Props:
302
+
303
+ - **Buttons**: `color="primary"`, `color="secondary"`, `color="warning"`, `color="danger"`
304
+ - **Alerts**: `type="info"`, `type="success"`, `type="warning"`, `type="error"`
305
+
306
+ **Note**: All colors are defined locally in `src/styles.css` for LLM context awareness. Use Tailwind classes (`bg-background`, `text-foreground`, etc.) instead of raw Modus CSS variables.
307
+
308
+ ## Angular-Specific Patterns
309
+
310
+ ### Template Syntax
311
+
312
+ - Use `class=""` instead of `className=""` (React pattern)
313
+ - Use `[style.*]` for dynamic styles (only if truly dynamic)
314
+ - Use Tailwind classes for static styles
315
+ - Use `<modus-icon>` Angular component or `<i class="modus-icons">`
316
+
317
+ ### File Patterns
318
+
319
+ - Component files: `src/app/**/*.ts`
320
+ - Template files: `src/app/**/*.html`
321
+ - Styles: `src/**/*.css`, `src/**/*.scss`
322
+
323
+ ### Icon Usage
324
+
325
+ ```html
326
+ <!-- ✅ CORRECT: Angular modus-icon component -->
327
+ <modus-icon name="add" size="md" [decorative]="true" />
328
+
329
+ <!-- ✅ CORRECT: Direct icon class -->
330
+ <i class="modus-icons text-lg" aria-hidden="true">add</i>
331
+
332
+ <!-- ❌ WRONG: React syntax -->
333
+ <ModusIcon name="add" size="md" decorative />
334
+ ```
335
+
336
+ ---
337
+
338
+ ## 🪝 Pre-commit Hooks
339
+
340
+ This project uses **Husky** to automatically run all linting scripts before commits:
341
+
342
+ ### Setup
343
+
344
+ ```bash
345
+ # Install dependencies (includes Husky)
346
+ npm install
347
+
348
+ # Husky is automatically initialized via the "prepare" script
349
+ ```
350
+
351
+ ### What Runs on Pre-commit
352
+
353
+ The pre-commit hook (`.husky/pre-commit`) runs each linting script individually with clear step messages:
354
+
355
+ 1. **📝 TypeScript Type Check** - `npm run type-check`
356
+ 2. **🎨 Design System Colors** - `npm run lint:colors`
357
+ 3. **💅 Inline Styles** - `npm run lint:styles`
358
+ 4. **🔲 Border Patterns** - `npm run lint:borders`
359
+ 5. **🌈 Opacity Utilities** - `npm run lint:opacity`
360
+ 6. **🎨 Modus Icons Usage** - `npm run lint:icons`
361
+ 7. **🏷️ Icon Names Validation** - `npm run lint:icon-names`
362
+
363
+ ### Behavior
364
+
365
+ - ✅ **Commit allowed** if all checks pass
366
+ - ❌ **Commit blocked** if any check fails
367
+ - 📋 **Clear error messages** guide you to fix issues
368
+
369
+ ### Manual Testing
370
+
371
+ ```bash
372
+ # Test the pre-commit hook manually
373
+ ./.husky/pre-commit
374
+
375
+ # Run individual checks
376
+ npm run lint:colors
377
+ npm run lint:icons
378
+ npm run type-check
379
+ ```
380
+
381
+ ## 🚀 GitHub Actions CI
382
+
383
+ The project includes a comprehensive CI workflow (`.github/workflows/ci.yml`) that runs on:
384
+ - **Push to main branch**
385
+ - **Pull requests to main branch**
386
+
387
+ ### CI Pipeline Steps
388
+
389
+ 1. **🔧 Setup** - Checkout code, setup Node.js 20, install dependencies
390
+ 2. **📝 Type Checking** - Run TypeScript type validation
391
+ 3. **🎨 Modus Linting Suite** - Run all design system compliance checks:
392
+ - Color compliance
393
+ - Inline styles validation
394
+ - Border patterns check
395
+ - Opacity utilities validation
396
+ - Modus icons usage validation
397
+ - Icon names validation
398
+ 4. **🏗️ Build** - Compile the Angular application
399
+ 5. **🧪 Tests** - Run unit tests (if available)
400
+
401
+ ### Workflow Features
402
+
403
+ - **✅ Parallel execution** where possible for faster CI
404
+ - **🛡️ Quality gates** - Build fails if any check fails
405
+ - **📊 Clear reporting** - Each step shows detailed results
406
+ - **🔄 Automatic triggers** - Runs on every push and PR
407
+
408
+ ---
409
+
410
+ **All scripts are updated for Angular + Tailwind v4 and work with the design system defined in `src/styles.css`.**