@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,235 @@
1
+ ---
2
+ description: UI/UX Foundations for AI Agents with Modus 2 + Tailwind v4
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # UI/UX Foundations for AI Agents
8
+
9
+ **Scope**: Modus 2 Angular Components + Tailwind v4 (Real Config Alignment)
10
+
11
+ > This file is grounded in your **real Modus 2 Angular + Tailwind v4 setup**. It uses the exact variables, color tokens, and CSS conventions from your implementation.
12
+
13
+ ---
14
+
15
+ # Foundation & Setup
16
+
17
+ ## 1 Color System — From Angular Design System
18
+
19
+ ### Semantic Mapping
20
+
21
+ Use Tailwind v4 tokens defined in your `src/styles.css`. **Do not use arbitrary colors.**
22
+
23
+ | Purpose | Tailwind Token | CSS Variable (from src/styles.css) |
24
+ | ---------- | -------------------------------------------- | ---------------------------------------------------------- |
25
+ | Background | `bg-background` | `--background` → `var(--modus-wc-color-base-page)` |
26
+ | Foreground | `text-foreground` | `--foreground` → `var(--modus-wc-color-base-content)` |
27
+ | Card | `bg-card` | `--card` → `var(--modus-wc-color-base-100)` |
28
+ | Card Text | `text-card-foreground` | `--card-foreground` → `var(--modus-wc-color-base-content)` |
29
+ | Primary | `bg-primary` / `text-primary-foreground` | `--primary` → `var(--modus-wc-color-info)` |
30
+ | Secondary | `bg-secondary` / `text-secondary-foreground` | `--secondary` → `var(--modus-wc-color-base-300)` |
31
+ | Muted | `bg-muted` / `text-muted-foreground` | `--muted` → `var(--modus-wc-color-base-200)` |
32
+ | Success | `bg-success` / `text-success-foreground` | `--success` → `var(--modus-wc-color-success)` |
33
+ | Warning | `bg-warning` / `text-warning-foreground` | `--warning` → `var(--modus-wc-color-warning)` |
34
+ | Error | `bg-error` / `text-error-foreground` | `--error` → `var(--modus-wc-color-error)` |
35
+ | Border | `border-border` | `--border` → `var(--modus-wc-color-base-200)` |
36
+ | Ring | `ring` | `--ring` → `var(--modus-wc-color-info)` |
37
+
38
+ **Rules:**
39
+
40
+ - Never use `#hex`, RGB, or inline color CSS.
41
+ - All visual hierarchy comes from semantic tokens.
42
+ - Respect light/dark context (CSS variables auto-handle switching).
43
+ - Use custom border utilities (`.border-default`, `.border-primary`, etc.) for Tailwind v4 compatibility.
44
+ - Use opacity utilities (`.text-foreground-80`, `.bg-primary-20`, etc.) for transparency.
45
+
46
+ ## 2 Tailwind v4 Configuration
47
+
48
+ Tailwind v4 reads CSS variables directly from `src/styles.css`. No separate `tailwind.config.js` is required.
49
+
50
+ All colors are defined in `src/styles.css` under `:root`:
51
+
52
+ ```css
53
+ :root {
54
+ --background: var(--modus-wc-color-base-page);
55
+ --foreground: var(--modus-wc-color-base-content);
56
+ --card: var(--modus-wc-color-base-100);
57
+ --card-foreground: var(--modus-wc-color-base-content);
58
+ --muted: var(--modus-wc-color-base-200);
59
+ --muted-foreground: var(--modus-wc-color-base-content);
60
+ --secondary: var(--modus-wc-color-base-300);
61
+ --secondary-foreground: var(--modus-wc-color-base-content);
62
+ --primary: var(--modus-wc-color-info);
63
+ --primary-foreground: var(--modus-wc-color-base-page);
64
+ --success: var(--modus-wc-color-success);
65
+ --success-foreground: var(--modus-wc-color-base-page);
66
+ --warning: var(--modus-wc-color-warning);
67
+ --warning-foreground: var(--modus-wc-color-base-content);
68
+ --error: var(--modus-wc-color-error);
69
+ --error-foreground: var(--modus-wc-color-base-page);
70
+ --border: var(--modus-wc-color-base-200);
71
+ --ring: var(--modus-wc-color-info);
72
+ }
73
+ ```
74
+
75
+ **Custom Utilities Available:**
76
+
77
+ - Border utilities: `.border-default`, `.border-thick`, `.border-primary`, `.border-success`, `.border-warning`, `.border-error`
78
+ - Opacity utilities: `.text-foreground-80`, `.bg-primary-20`, etc. (20%, 40%, 60%, 80% variants for all colors)
79
+
80
+ ---
81
+
82
+ # Component System
83
+
84
+ ## 3 Example Component System — Modus 2 Angular Wrappers
85
+
86
+ **REFERENCE**: For more information reference `docs/angular-design-system.mdc`
87
+
88
+ | Component | Angular Component | Inputs/Props | Usage Rule |
89
+ | --------- | -------------------- | ---------------------------------- | -------------------------------------------------------------------------- |
90
+ | Button | `<modus-button>` | `color`, `variant`, `size`, `icon` | One primary action per surface. Use `color="primary"` for primary actions. |
91
+ | Card | `<modus-card>` | `bordered`, `padding`, `layout` | For grouping or sectioning. Use `bg-card` + `border-border` in slots. |
92
+ | Input | `<modus-text-input>` | `label`, `error`, `disabled` | Must have a visible `label`. Use error state + ARIA bindings. |
93
+ | Select | `<modus-select>` | `options`, `placeholder` | Never rely on placeholder as label. |
94
+ | Table | `<modus-table>` | `columns`, `data`, `sortable` | Include empty and loading states. |
95
+ | Modal | `<modus-modal>` | `isOpen`, `onClose`, `title` | Trap focus. ESC closes. Max 3 actions. |
96
+ | Tabs | `<modus-tabs>` | `tabs`, `activeKey` | Keyboard accessible. |
97
+ | Tooltip | `<modus-tooltip>` | `text`, `position` | Short contextual hints only. |
98
+ | Icon | `<modus-icon>` | `name`, `size`, `variant` | Follows real Modus naming (kebab-case, outlined default). |
99
+
100
+ ## 4 Iconography
101
+
102
+ **REFERENCE**: For complete icon usage guidelines see `docs/angular-design-system.mdc`
103
+
104
+ ### Import (already handled globally)
105
+
106
+ Modus icons are imported via the Modus Web Components CDN in `src/styles.css`:
107
+
108
+ ```css
109
+ @import '@trimble-oss/moduswebcomponents/modus-wc-styles.css';
110
+ ```
111
+
112
+ ### Supported Usage Patterns
113
+
114
+ #### A) Angular Component (preferred)
115
+
116
+ ```html
117
+ <!-- Informational icon (announced by screen reader) -->
118
+ <modus-icon name="user-add" size="lg" [decorative]="false" ariaLabel="Add user" />
119
+
120
+ <!-- Decorative icon (not announced) -->
121
+ <modus-icon name="chevron-right" size="md" [decorative]="true" />
122
+ ```
123
+
124
+ - **Inputs:** `name` (kebab-case), `size`: `'sm' | 'md' | 'lg'`, `decorative`: boolean.
125
+ - **Accessibility:** If `[decorative]="false"`, include `ariaLabel`.
126
+ - **Do not** pass numeric pixel sizes.
127
+
128
+ #### B) Bare `<i>` Glyph (CDN font)
129
+
130
+ ```html
131
+ <!-- Decorative icon -->
132
+ <i class="modus-icons text-lg" aria-hidden="true">user-add</i>
133
+
134
+ <!-- Informational icon -->
135
+ <i class="modus-icons text-md" role="img" aria-label="Settings">settings</i>
136
+ ```
137
+
138
+ - Size using Tailwind text utilities (`text-sm`, `text-md`, `text-lg`).
139
+ - Keep color semantic (`text-foreground`, `text-muted-foreground`, etc.).
140
+
141
+ ### Rules
142
+
143
+ - Naming: **kebab-case** (`file-upload`, `user-add`).
144
+ - Style: outlined default; filled for active/selected states only.
145
+ - One icon per control.
146
+ - In buttons: icon left, `mr-2` or `ml-2` between icon and label, aligned baseline.
147
+
148
+ ---
149
+
150
+ # Design Principles
151
+
152
+ ## 5 Gestalt Laws in Practice (UI Layout Rules)
153
+
154
+ **REFERENCE**: For more information referance `.cursor/rules/ux/gestalt-laws-detailed.mdc`
155
+
156
+ | Law | Implementation |
157
+ | ------------------- | ------------------------------------------------------------------------------ |
158
+ | **Proximity** | `gap-2` within a group; `gap-6`–`gap-8` between groups. |
159
+ | **Similarity** | Same purpose = same variant, same size. |
160
+ | **Common Region** | Group with `<modus-card>` and `class="p-6 bg-card border-default rounded-lg"`. |
161
+ | **Figure/Ground** | Use `bg-card` over `bg-background` with shadow or border. |
162
+ | **Continuity** | Maintain alignment using `flex`, `items-start`, `justify-between`. |
163
+ | **Hick's** | Max 3 visible CTAs per context. Overflow extra in menu. |
164
+ | **Fitts's** | Keep primary CTAs near edited content, 44×44px minimum. |
165
+ | **Serial Position** | Primary actions at start or end of flow. |
166
+ | **Prägnanz** | Remove unnecessary divs, borders, or text. Prefer whitespace. |
167
+
168
+ ---
169
+
170
+ # Implementation Examples
171
+
172
+ ## 6 Example Snippets
173
+
174
+ ### Form Card
175
+
176
+ ```html
177
+ <modus-card class="bg-card border-default rounded-lg">
178
+ <div slot="title" class="text-foreground text-lg font-medium">Profile</div>
179
+ <div slot="actions">
180
+ <modus-button color="primary">Save</modus-button>
181
+ </div>
182
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-6">
183
+ <div class="flex flex-col gap-2">
184
+ <label for="email" class="text-sm text-muted-foreground">Email</label>
185
+ <modus-text-input id="email" name="email" type="email" required />
186
+ <div class="text-xs text-muted-foreground">Used for notifications</div>
187
+ </div>
188
+ </div>
189
+ </modus-card>
190
+ ```
191
+
192
+ ### Toolbar
193
+
194
+ ```html
195
+ <div class="flex items-center justify-between gap-4 border-bottom-default pb-4">
196
+ <div class="flex items-center gap-2">
197
+ <modus-icon name="filter-list" size="md" [decorative]="true" />
198
+ <modus-select placeholder="Sort by" [options]="sortOptions" />
199
+ </div>
200
+ <modus-button color="primary" icon="plus" iconPosition="left">New</modus-button>
201
+ </div>
202
+ ```
203
+
204
+ ---
205
+
206
+ # AI Guidelines
207
+
208
+ ## 7 AI Output Contract
209
+
210
+ - Use `<modus-icon size="sm|md|lg">`, never numeric.
211
+ - Use `[decorative]` and `ariaLabel` correctly in Angular templates.
212
+ - Accept either `<modus-icon>` or `<i class="modus-icons">` per context.
213
+ - All Tailwind utilities must use semantic tokens from `src/styles.css`.
214
+ - Use custom border utilities (`.border-default`, `.border-primary`, etc.) for Tailwind v4 compatibility.
215
+ - Use opacity utilities (`.text-foreground-80`, `.bg-primary-20`, etc.) instead of arbitrary values.
216
+ - Accessibility attributes required for all interactive elements.
217
+ - All motion ≤250ms; respect `prefers-reduced-motion`.
218
+ - Use Tailwind classes (`mr-2`, `ml-2`) instead of inline styles (`[style.margin-right.px]`).
219
+
220
+ ## 8 PR / QA Checklist
221
+
222
+ - [ ] All UI uses `<modus-*>` Angular components.
223
+ - [ ] Tailwind tokens match design system in `src/styles.css`.
224
+ - [ ] Custom border utilities used for borders (`.border-default`, `.border-primary`, etc.).
225
+ - [ ] Opacity utilities used for transparency (`.text-foreground-80`, `.bg-primary-20`, etc.).
226
+ - [ ] No inline styles except for truly dynamic values.
227
+ - [ ] ARIA, labels, keyboard, and focus verified.
228
+ - [ ] Empty/loading/error states present.
229
+ - [ ] Only one primary CTA per surface.
230
+ - [ ] Spacing follows 4/8 rhythm (`gap-2`, `gap-4`, `gap-8`).
231
+ - [ ] Colors from design system variables only (`--background`, `--primary`, etc. from `src/styles.css`).
232
+ - [ ] No raw Modus variables (`var(--modus-wc-color-*)`) used directly in templates.
233
+ - [ ] No theme attributes; dark/light handled via root vars.
234
+
235
+ ---
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: run-lint-checks
3
+ description: Run comprehensive lint checks for Angular + Vite project to ensure design system compliance, type safety, and code quality. Use when making code changes, before completing tasks, or when the user requests lint checks.
4
+ ---
5
+
6
+ # Run Lint Checks
7
+
8
+ Automatically run all linting and quality checks for the Angular + Vite project to ensure design system compliance, type safety, and code quality.
9
+
10
+ ## When to Use
11
+
12
+ - **Before completing any task** - Always run lint checks before marking tasks as complete
13
+ - **After making code changes** - Run checks after modifying TypeScript, HTML, CSS, or SCSS files
14
+ - **Before committing code** - Ensure all quality gates pass before committing
15
+ - **When user requests** - Run checks when explicitly requested by the user
16
+ - **During code review** - Verify code quality and design system compliance
17
+
18
+ ## Instructions
19
+
20
+ ### Mandatory Pre-Completion Checklist
21
+
22
+ **CRITICAL**: Before marking any development task as complete, you MUST:
23
+
24
+ 1. Run all lint checks using `npm run lint:all`
25
+ 2. Fix any violations found
26
+ 3. Verify TypeScript type checking passes
27
+ 4. Ensure all design system compliance checks pass
28
+
29
+ ### Running Lint Checks
30
+
31
+ Execute the comprehensive lint check command:
32
+
33
+ ```bash
34
+ npm run lint:all
35
+ ```
36
+
37
+ This command runs all checks in sequence:
38
+ - TypeScript type checking (`npm run type-check`)
39
+ - Color compliance (`npm run lint:colors`)
40
+ - Inline styles validation (`npm run lint:styles`)
41
+ - Border violations (`npm run lint:borders`)
42
+ - Opacity utilities (`npm run lint:opacity`)
43
+ - Icon usage (`npm run lint:icons`)
44
+ - Icon name validation (`npm run lint:icon-names`)
45
+
46
+ ### Individual Lint Commands
47
+
48
+ If you need to run checks individually:
49
+
50
+ ```bash
51
+ # TypeScript type checking
52
+ npm run type-check
53
+
54
+ # Design system color compliance
55
+ npm run lint:colors
56
+
57
+ # Inline styles validation
58
+ npm run lint:styles
59
+
60
+ # Border pattern violations
61
+ npm run lint:borders
62
+
63
+ # Opacity utilities validation
64
+ npm run lint:opacity
65
+
66
+ # Modus icons library validation
67
+ npm run lint:icons
68
+
69
+ # Icon name validation
70
+ npm run lint:icon-names
71
+ ```
72
+
73
+ ### Handling Violations
74
+
75
+ When violations are found:
76
+
77
+ 1. **Read the error messages carefully** - Each lint script provides specific file locations and violation details
78
+ 2. **Fix violations immediately** - Don't proceed until all violations are resolved
79
+ 3. **Re-run checks** - After fixing, run `npm run lint:all` again to verify
80
+ 4. **Document fixes** - If a fix requires architectural changes, explain the reasoning
81
+
82
+ ### Common Violations to Fix
83
+
84
+ #### Inline Styles
85
+ ```typescript
86
+ // ❌ VIOLATION
87
+ template: `<div style="background-color: var(--modus-wc-color-base-page)">`
88
+ template: `<div [style.margin-right.px]="8">`
89
+
90
+ // ✅ CORRECT
91
+ template: `<div class="bg-background mr-2 text-foreground">`
92
+ ```
93
+
94
+ #### Color Usage
95
+ ```typescript
96
+ // ❌ VIOLATION
97
+ template: `<div style="background-color: #ffffff">`
98
+ template: `<div class="bg-blue-500 text-red-400">`
99
+
100
+ // ✅ CORRECT
101
+ template: `<div class="bg-background text-foreground">`
102
+ ```
103
+
104
+ #### Icon Usage
105
+ ```typescript
106
+ // ❌ VIOLATION
107
+ template: `<i class="fa fa-home"></i>`
108
+ template: `<mat-icon>home</mat-icon>`
109
+
110
+ // ✅ CORRECT
111
+ template: `<i class="modus-icons">home</i>`
112
+ template: `<modus-icon name="home" />`
113
+ ```
114
+
115
+ #### Border Violations
116
+ ```html
117
+ <!-- ❌ VIOLATION -->
118
+ <div class="border border-red-500">Error message</div>
119
+
120
+ <!-- ✅ CORRECT -->
121
+ <div class="border-destructive">Error message</div>
122
+ ```
123
+
124
+ #### Opacity Violations
125
+ ```html
126
+ <!-- ❌ VIOLATION -->
127
+ <div class="text-foreground/80">Text with opacity</div>
128
+
129
+ <!-- ✅ CORRECT -->
130
+ <div class="text-foreground-80">Text with opacity</div>
131
+ ```
132
+
133
+ ## Quality Gates
134
+
135
+ All of these must pass before code is considered complete:
136
+
137
+ - [ ] `npm run type-check` - 0 TypeScript errors
138
+ - [ ] `npm run lint:colors` - 0 color violations
139
+ - [ ] `npm run lint:styles` - 0 inline style violations
140
+ - [ ] `npm run lint:borders` - 0 border violations
141
+ - [ ] `npm run lint:opacity` - 0 opacity violations
142
+ - [ ] `npm run lint:icons` - 0 icon violations
143
+ - [ ] `npm run lint:icon-names` - 0 invalid icon names
144
+
145
+ ## Integration with Development Workflow
146
+
147
+ This skill integrates with the project's development workflow:
148
+
149
+ 1. **During Development**: Run checks periodically to catch issues early
150
+ 2. **Before Completion**: Always run `npm run lint:all` before marking tasks complete
151
+ 3. **Pre-Commit**: All checks must pass before committing code
152
+ 4. **CI/CD**: These same checks run in CI/CD pipelines
153
+
154
+ ## Error Handling
155
+
156
+ If lint checks fail:
157
+
158
+ 1. **Don't skip or ignore violations** - All violations must be fixed
159
+ 2. **Provide clear error messages** - Show the user exactly what failed and where
160
+ 3. **Suggest fixes** - When possible, provide specific guidance on how to fix violations
161
+ 4. **Re-run after fixes** - Always verify fixes by running checks again
162
+
163
+ ## Notes
164
+
165
+ - Lint checks are fast and should be run frequently during development
166
+ - Some violations may require architectural changes - discuss these with the user if needed
167
+ - The `lint:all` command stops on first failure - fix issues sequentially
168
+ - All lint scripts are located in `scripts/` directory
169
+ - These checks enforce the Modus Design System compliance requirements
@@ -0,0 +1,17 @@
1
+ # Editor configuration, see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.ts]
12
+ quote_type = single
13
+ ij_typescript_use_double_quotes = false
14
+
15
+ [*.md]
16
+ max_line_length = off
17
+ trim_trailing_whitespace = false
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: npm
4
+ directory: '/'
5
+ groups:
6
+ all-dependencies:
7
+ patterns:
8
+ - '*'
9
+ update-types:
10
+ - 'minor'
11
+ - 'patch'
12
+ schedule:
13
+ interval: monthly
14
+ versioning-strategy: increase
15
+
16
+ - package-ecosystem: github-actions
17
+ directory: '/'
18
+ schedule:
19
+ interval: weekly
@@ -0,0 +1,135 @@
1
+ name: Check Accessibility
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ a11y-check:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout code
12
+ uses: actions/checkout@v4
13
+
14
+ - name: Use Node.js 20
15
+ uses: actions/setup-node@v4
16
+ with:
17
+ node-version: "20"
18
+ cache: "npm"
19
+
20
+ - name: Install dependencies
21
+ run: npm ci
22
+
23
+ - name: Build Angular application
24
+ run: npm run build
25
+
26
+ - name: Install Puppeteer and axe-core
27
+ run: npm install --save-dev puppeteer axe-core
28
+
29
+ - name: Install http-server
30
+ run: npm install --save-dev http-server
31
+
32
+ - name: Start server and run accessibility tests
33
+ run: |
34
+ # Start http-server in background
35
+ npx http-server dist/angular-vite/browser -p 4200 > /dev/null 2>&1 &
36
+ SERVER_PID=$!
37
+
38
+ # Wait for server to be ready
39
+ sleep 5
40
+
41
+ # Run accessibility tests
42
+ node << EOF
43
+ const puppeteer = require('puppeteer');
44
+ const axeCore = require('axe-core');
45
+
46
+ (async () => {
47
+ try {
48
+ const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
49
+ const page = await browser.newPage();
50
+
51
+ // Helper function to delay (replaces deprecated waitForTimeout)
52
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
53
+
54
+ // Routes to test for accessibility
55
+ const routes = [
56
+ '/',
57
+ '/theme-demo',
58
+ '/button-demo'
59
+ ];
60
+
61
+ let hasViolations = false;
62
+
63
+ // Configure axe-core to disable specific rules
64
+ const axeConfig = {
65
+ runOnly: {
66
+ type: 'tag',
67
+ values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22a', 'wcag22aa', 'best-practice']
68
+ },
69
+ rules: {
70
+ 'document-title': { enabled: false },
71
+ 'html-has-lang': { enabled: false },
72
+ 'landmark-one-main': { enabled: false },
73
+ 'page-has-heading-one': { enabled: false },
74
+ 'region': { enabled: false }
75
+ }
76
+ };
77
+
78
+ for (const route of routes) {
79
+ const url = \`http://localhost:4200\${route}\`;
80
+ console.log(\`Checking accessibility for: \${url}\`);
81
+
82
+ try {
83
+ await page.goto(url, { waitUntil: 'networkidle0', timeout: 30000 });
84
+
85
+ // Wait for Angular to render
86
+ await delay(1000);
87
+
88
+ await page.evaluate(axeCore.source);
89
+ const results = await page.evaluate((config) => {
90
+ return axe.run(document, config);
91
+ }, axeConfig);
92
+
93
+ if (results.violations.length > 0) {
94
+ console.error(\`❌ Accessibility violations found in \${route}:\`);
95
+ results.violations.forEach(violation => {
96
+ console.error(\` - \${violation.id}: \${violation.description}\`);
97
+ if (violation.nodes.length > 0) {
98
+ violation.nodes.forEach(node => {
99
+ console.error(\` * \${node.html}\`);
100
+ });
101
+ }
102
+ });
103
+ hasViolations = true;
104
+ } else {
105
+ console.log(\`✅ No violations found in \${route}\`);
106
+ }
107
+ } catch (error) {
108
+ console.error(\`❌ Error checking \${route}: \${error.message}\`);
109
+ hasViolations = true;
110
+ }
111
+ }
112
+
113
+ await browser.close();
114
+
115
+ if (hasViolations) {
116
+ console.error('❌ Accessibility tests failed. Please fix the issues before merging.');
117
+ process.exit(1);
118
+ } else {
119
+ console.log('✅ All accessibility tests passed!');
120
+ }
121
+ } catch (error) {
122
+ console.error('❌ An error occurred:', error);
123
+ process.exit(1);
124
+ }
125
+ })();
126
+ EOF
127
+
128
+ # Cleanup: Kill the server
129
+ kill $SERVER_PID 2>/dev/null || true
130
+
131
+ - name: Check test results
132
+ if: failure()
133
+ run: |
134
+ echo "❌ Accessibility tests failed. Please fix the issues before merging."
135
+ exit 1
@@ -0,0 +1,44 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build-and-test:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout repository
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Use Node.js 20
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: "20"
21
+ cache: "npm"
22
+
23
+ - name: Install dependencies
24
+ run: npm ci
25
+ # Note: .npmrc contains legacy-peer-deps=true to handle Angular 20.x + Modus compatibility
26
+
27
+ - name: Run type checks
28
+ run: npm run type-check
29
+
30
+ - name: Run Modus linting suite
31
+ run: |
32
+ npm run lint:colors
33
+ npm run lint:styles
34
+ npm run lint:borders
35
+ npm run lint:opacity
36
+ npm run lint:icons
37
+ npm run lint:icon-names
38
+
39
+ - name: Build application
40
+ run: npm run build
41
+
42
+ - name: Run tests (if available)
43
+ run: npm run test -- --watch=false --browsers=ChromeHeadless
44
+ continue-on-error: true
@@ -0,0 +1,32 @@
1
+ # Run all linting checks before commit
2
+ echo "🔍 Running pre-commit checks..."
3
+
4
+ # TypeScript type checking
5
+ echo "📝 Checking TypeScript types..."
6
+ npm run type-check
7
+
8
+ # Design system colors compliance
9
+ echo "🎨 Checking design system colors..."
10
+ npm run lint:colors
11
+
12
+ # Inline styles compliance
13
+ echo "💅 Checking inline styles..."
14
+ npm run lint:styles
15
+
16
+ # Border violations compliance
17
+ echo "🔲 Checking border patterns..."
18
+ npm run lint:borders
19
+
20
+ # Opacity utilities compliance
21
+ echo "🌈 Checking opacity utilities..."
22
+ npm run lint:opacity
23
+
24
+ # Modus Icons compliance
25
+ echo "🎨 Checking Modus Icons usage..."
26
+ npm run lint:icons
27
+
28
+ # Icon names validation
29
+ echo "🏷️ Checking icon names..."
30
+ npm run lint:icon-names
31
+
32
+ echo "✅ All pre-commit checks passed!"
@@ -0,0 +1,5 @@
1
+ {
2
+ "plugins": {
3
+ "@tailwindcss/postcss": {}
4
+ }
5
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3
+ "recommendations": ["angular.ng-template"]
4
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3
+ "version": "0.2.0",
4
+ "configurations": [
5
+ {
6
+ "name": "ng serve",
7
+ "type": "chrome",
8
+ "request": "launch",
9
+ "preLaunchTask": "npm: start",
10
+ "url": "http://localhost:4200/"
11
+ },
12
+ {
13
+ "name": "ng test",
14
+ "type": "chrome",
15
+ "request": "launch",
16
+ "preLaunchTask": "npm: test",
17
+ "url": "http://localhost:9876/debug.html"
18
+ }
19
+ ]
20
+ }