@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,272 @@
1
+ ---
2
+ description: Comprehensive essential rules for Angular + Vite development with Modus Design System
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Angular Essentials
8
+
9
+ Comprehensive essential rules for Angular + Vite development with Modus Design System.
10
+
11
+ ## Design System Integration
12
+
13
+ ### Color Usage
14
+
15
+ - **Use design system colors only** - `bg-background`, `text-foreground`, `bg-primary`, etc.
16
+ - **Never use generic Tailwind colors** - No `bg-blue-500`, `text-gray-600`, etc.
17
+ - **Never use hardcoded values** - No hex colors, RGB values, or CSS variables directly
18
+ - **Use semantic color names** - `bg-destructive`, `text-warning`, `bg-success`
19
+ - **Follow color hierarchy** - Background > Card > Primary > Secondary > Muted
20
+ - **Test in all themes** - Ensure colors work in light and dark modes
21
+
22
+ ### Opacity Usage
23
+
24
+ - **Use custom opacity utilities, not Tailwind /80 syntax** - `text-foreground-80` not `text-foreground/80`
25
+ - **CSS variables don't work with Tailwind opacity modifiers** - Tailwind needs actual color values
26
+ - **Available opacity levels** - `80`, `60`, `40`, `20` (e.g., `text-foreground-80`, `bg-primary-60`)
27
+ - **Available utilities** - `text-*`, `bg-*`, `border-*` with opacity variants
28
+ - **All utilities defined in styles.css** - No Tailwind config changes needed
29
+ - **Respects theme switching** - Works in all 6 Modus themes
30
+
31
+ ### Border Usage
32
+
33
+ - **Use design system border utilities only** - `border-default`, `border-success`, `border-warning`, `border-destructive`, `border-primary`
34
+ - **Never use Tailwind color classes in borders** - No `border-blue-500`, `border-gray-300`, etc.
35
+ - **Use `border-thick` for emphasis** - For important borders and separators
36
+ - **Use directional borders** - `border-t`, `border-b`, `border-l`, `border-r` with design system colors
37
+ - **No inline styles for borders** - Use Tailwind classes exclusively
38
+
39
+ ### Icons
40
+
41
+ - **Use Modus icons exclusively** - `<i class="modus-icons">icon-name</i>` or `<modus-icon name="icon-name" />`
42
+ - **Never use other icon libraries** - No Font Awesome, Material Icons, Heroicons, etc.
43
+ - **Use valid icon names only** - Check Modus Icons documentation for valid names
44
+ - **Size with Tailwind classes** - `text-sm`, `text-lg`, `text-xl` for sizing
45
+ - **Color with design system** - `text-primary`, `text-foreground`, `text-foreground-60`
46
+ - **Validate icon names** - Run `npm run lint:icon-names` to verify
47
+
48
+ ### No Emojis
49
+
50
+ - **Never use emojis in code** - No emoji characters in any code files
51
+ - **Never use emojis in components** - No emoji in templates, content, or UI elements
52
+ - **Never use emojis in content** - No emoji in text, descriptions, or user-facing content
53
+ - **Use Modus icons instead** - Replace emojis with appropriate Modus icons
54
+ - **Use Unicode characters for symbols** - Use proper Unicode symbols when needed
55
+
56
+ ## Angular Integration Patterns
57
+
58
+ ### Core Integration
59
+
60
+ - **Use wrapper components** - Always use `<modus-button>`, not `<modus-wc-button>` directly
61
+ - **Signal-based API** - Use `input()`, `output()`, `signal()`, `computed()`
62
+ - **OnPush change detection** - All components use `ChangeDetectionStrategy.OnPush`
63
+ - **Event handling** - Extract `event.detail` from CustomEvent when needed
64
+ - **Modern control flow** - Use `@if`, `@for`, `@switch`, not `*ngIf`, `*ngFor`
65
+ - **inject() for DI** - Use `inject()` function, not constructor injection
66
+
67
+ ### Angular Best Practices
68
+
69
+ - **Single configurable components** - One component with variants, not multiple specific components
70
+ - **Use design system colors only** - Never use generic Tailwind colors or hardcoded values
71
+ - **Component composition pattern** - Build complex components from smaller, reusable pieces
72
+ - **Theme-aware components** - Use theme context for conditional styling and content
73
+ - **Performance optimization** - Use computed signals and lazy loading where appropriate
74
+
75
+ ### Signal Patterns
76
+
77
+ ```typescript
78
+ // Signal-based inputs
79
+ readonly color = input<ButtonColor>('primary');
80
+ readonly disabled = input<boolean>(false);
81
+
82
+ // Signal-based outputs
83
+ readonly buttonClick = output<MouseEvent | KeyboardEvent>();
84
+
85
+ // Writable signals for local state
86
+ readonly isOpen = signal(false);
87
+
88
+ // Computed for derived state
89
+ readonly isDisabled = computed(() => this.disabled() || this.loading());
90
+ ```
91
+
92
+ ## Component-Specific Rules
93
+
94
+ ### Accordion State Management
95
+
96
+ - **Let Modus components manage their own state** - Don't try to control accordion state from Angular
97
+ - **Use `expanded` for initial state only** - Set initial state, then let component handle changes
98
+ - **Use `(expandedChange)` for tracking** - Monitor state changes without controlling them
99
+ - **Use ViewChild for programmatic control** - Access component methods when needed
100
+ - **Avoid real-time synchronization** - Don't sync Angular state with accordion state
101
+
102
+ ### Checkbox Value Inversion
103
+
104
+ - **Always invert checkbox value property** - `const actualChecked = !value` from `inputChange` event
105
+ - **Use wrapper components** - Create Angular wrapper to handle inversion automatically
106
+ - **Never trust the raw value** - The `value` property is inverted (false when checked, true when unchecked)
107
+ - **Handle in event handlers** - Invert value in `(inputChange)` event handler
108
+ - **Test thoroughly** - Verify checkbox behavior matches expected state
109
+
110
+ ### Modal Implementation
111
+
112
+ - **Use document.getElementById for modal access** - Get the dialog element by ID
113
+ - **Type-safe access** - Cast to `HTMLDialogElement | null`
114
+ - **Check method existence** - `typeof dialog.showModal === 'function'`
115
+ - **Use native dialog API** - `dialog.showModal()` and `dialog.close()`
116
+ - **Never use querySelector with web component selectors**
117
+ - **Descriptive, kebab-case modal IDs**
118
+
119
+ ### Select vs Dropdown Menu
120
+
121
+ - **Prefer ModusDropdownMenu** - More reliable event handling than ModusSelect
122
+ - **Reliable itemSelect events** - ModusDropdownMenu provides consistent event handling
123
+ - **Proper state management** - Use Angular signals to track selected values and visibility
124
+ - **Programmatic control** - Use `menuVisible` property for control
125
+ - **Test thoroughly** - Verify dropdown behavior and event handling
126
+
127
+ ### Button Group Usage
128
+
129
+ - **Don't set defaults for variant/color in button wrapper** - Allows group to control
130
+ - **Inside button group**: Do NOT set variant/color on individual buttons
131
+ - **Standalone buttons**: Explicitly set variant and color
132
+ - **Group controls all button styling** via DOM manipulation
133
+
134
+ ## HTML and Styling
135
+
136
+ ### Semantic HTML
137
+
138
+ - **Use div elements only** - All content must use `<div>` elements
139
+ - **No semantic HTML elements** - Never use `h1`, `p`, `section`, `header`, `footer`, `nav`, `main`, `aside`, `article`, `span`
140
+ - **Use Tailwind classes for styling** - Apply typography and layout with Tailwind classes
141
+ - **Icon exception** - Only `<i>` elements allowed for Modus icons
142
+ - **Consistent structure** - Maintain consistent div-based component structure
143
+
144
+ ### Tailwind Usage
145
+
146
+ - **Tailwind v4 with design system** - Use Tailwind v4 with Modus Design System integration
147
+ - **No generic Tailwind colors** - Never use `bg-blue-500`, `text-gray-600`, etc.
148
+ - **Use design system colors** - `bg-background`, `text-foreground`, `bg-primary`, etc.
149
+ - **Custom utilities for borders** - Use `border-default`, `border-success`, `border-warning`, etc.
150
+ - **Custom utilities for opacity** - Use `text-foreground-80`, not `text-foreground/80`
151
+ - **Test in all themes** - Ensure Tailwind classes work in all 6 themes
152
+
153
+ ## Theming
154
+
155
+ ### Theme Implementation
156
+
157
+ - **6 Modus themes supported** - Classic Light/Dark, Modern Light/Dark, Connect Light/Dark
158
+ - **Use data-theme attribute** - `data-theme="modus-classic-light"` on document
159
+ - **Theme persistence** - Save to localStorage and restore on page load
160
+ - **Theme-aware components** - Use computed signals for theme-specific styling
161
+ - **Test all themes** - Verify components work in all 6 themes
162
+
163
+ ## Development Workflow
164
+
165
+ ### Quality Assurance
166
+
167
+ - **Run linting commands during development** - `npm run lint:all` before commits
168
+ - **Fix violations before committing** - No violations in committed code
169
+ - **Check inline styles** - `npm run lint:styles` to catch inline style violations
170
+ - **Verify design system colors** - `npm run lint:colors` for color compliance
171
+ - **Validate Modus icons** - `npm run lint:icons` for icon usage
172
+ - **Verify border usage** - `npm run lint:borders` for border compliance
173
+ - **Check opacity utilities** - `npm run lint:opacity` for opacity compliance
174
+ - **TypeScript validation** - `npm run type-check` for type errors
175
+
176
+ ### Testing
177
+
178
+ - **Use Chrome DevTools MCP** - Real-time browser debugging
179
+ - **Test before completion** - Validate all implementations in browser
180
+ - **Check console for errors** - Look for JavaScript errors and warnings
181
+ - **Test interactive elements** - Verify Modus Web Components work correctly
182
+ - **Performance testing** - Use DevTools for performance analysis
183
+ - **Test all 6 themes** - Verify components work in all themes
184
+
185
+ ### Linting Commands
186
+
187
+ ```bash
188
+ npm run lint:styles # Check inline styles
189
+ npm run lint:colors # Check color usage
190
+ npm run lint:icons # Check icon usage
191
+ npm run lint:borders # Check border violations
192
+ npm run lint:opacity # Check opacity utilities
193
+ npm run lint:icon-names # Validate icon names
194
+ npm run type-check # TypeScript validation
195
+ npm run lint:all # Run all checks
196
+ ```
197
+
198
+ ## Quick Reference
199
+
200
+ ### Correct Patterns
201
+
202
+ ```typescript
203
+ // Signal-based component
204
+ @Component({
205
+ selector: 'app-example',
206
+ template: `
207
+ <div class="bg-background text-foreground p-4">
208
+ @if (isVisible()) {
209
+ <modus-button
210
+ [color]="color()"
211
+ [disabled]="disabled()"
212
+ (buttonClick)="handleClick($event)"
213
+ >
214
+ {{ buttonText() }}
215
+ </modus-button>
216
+ }
217
+ </div>
218
+ `,
219
+ changeDetection: ChangeDetectionStrategy.OnPush,
220
+ })
221
+ export class ExampleComponent {
222
+ readonly color = input<ButtonColor>('primary');
223
+ readonly disabled = input<boolean>(false);
224
+ readonly buttonText = input<string>('Click Me');
225
+ readonly isVisible = signal(true);
226
+
227
+ handleClick(event: MouseEvent | KeyboardEvent): void {
228
+ console.log('Button clicked:', event);
229
+ }
230
+ }
231
+ ```
232
+
233
+ ### Forbidden Patterns
234
+
235
+ ```typescript
236
+ // WRONG: Generic Tailwind colors
237
+ template: `<div class="bg-blue-500 text-white">`
238
+
239
+ // WRONG: Semantic HTML
240
+ template: `<h1>Title</h1><p>Content</p>`
241
+
242
+ // WRONG: Opacity with / syntax
243
+ template: `<div class="text-foreground/80">`
244
+
245
+ // WRONG: Tailwind border colors
246
+ template: `<div class="border-red-500">`
247
+
248
+ // WRONG: Direct web component usage
249
+ template: `<modus-wc-button>`
250
+
251
+ // WRONG: @Input() decorator
252
+ @Input() color: string;
253
+
254
+ // WRONG: *ngIf directive
255
+ template: `<div *ngIf="condition">`
256
+ ```
257
+
258
+ ## Reference
259
+
260
+ This rule consolidates all essential Modus Angular development guidelines. For detailed patterns, examples, and advanced techniques, refer to the individual rule files:
261
+
262
+ - `modus-angular-20.mdc` - Angular 20 patterns
263
+ - `modus-angular-design-system.mdc` - Colors, opacity, borders
264
+ - `modus-angular-integration.mdc` - Wrapper component patterns
265
+ - `modus-angular-icons.mdc` - Icon usage
266
+ - `modus-angular-accordion-state-management.mdc` - Accordion state
267
+ - `modus-angular-checkbox-value-inversion.mdc` - Checkbox bug handling
268
+ - `modus-angular-button-group-usage.mdc` - Button group patterns
269
+ - `modus-angular-select-vs-dropdown-menu.mdc` - Dropdown patterns
270
+ - `modus-angular-semantic-html.mdc` - Div-only HTML
271
+ - `modus-angular-development-workflow.mdc` - Linting and workflow
272
+ - `modus-angular-chrome-devtools-testing.mdc` - Testing patterns
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: Comprehensive rules for implementing forms and validation in Angular with Modus
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Forms Validation - Short
8
+
9
+ Essential patterns for forms and validation with Modus Web Components.
10
+
11
+ ## Key Rules
12
+
13
+ - **Always use Reactive Forms** - Don't use template-driven forms
14
+ - **Track touched state manually** - Modus components don't integrate with Angular form state
15
+ - **Use computed signals for feedback** - Reactive, efficient validation
16
+ - **Check touched state before showing errors** - Better UX
17
+ - **Handle both inputChange and inputBlur** - Complete interaction tracking
18
+ - **Extract event.detail** - Correct event handling pattern
19
+
20
+ ## Manual Touch Tracking
21
+
22
+ ```typescript
23
+ readonly touchedFields = signal<Set<string>>(new Set());
24
+
25
+ handleFieldChange(event: InputEvent, fieldName: string): void {
26
+ const target = event.target as HTMLInputElement;
27
+ this.form.controls[fieldName].setValue(target.value);
28
+ this.markFieldTouched(fieldName);
29
+ }
30
+
31
+ private markFieldTouched(fieldName: string): void {
32
+ this.touchedFields.update((fields) => {
33
+ const newFields = new Set(fields);
34
+ newFields.add(fieldName);
35
+ return newFields;
36
+ });
37
+ }
38
+ ```
39
+
40
+ ## Validation Feedback
41
+
42
+ ```typescript
43
+ readonly emailFeedback = computed<IInputFeedbackProp | undefined>(() => {
44
+ const control = this.form.controls.email;
45
+ const isTouched = this.touchedFields().has('email');
46
+ if (!isTouched || !control.errors) return undefined;
47
+ if (control.errors['required']) {
48
+ return { level: 'error', message: 'Email is required.' };
49
+ }
50
+ return undefined;
51
+ });
52
+ ```
53
+
54
+ ## Reference
55
+
56
+ For detailed form patterns and validation strategies, fetch the full rule: `modus-angular-forms-validation`
@@ -0,0 +1,124 @@
1
+ ---
2
+ description: Comprehensive rules for implementing forms and validation in Angular with Modus Web Components
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Forms and Validation Rules
8
+
9
+ Comprehensive guide for implementing forms and validation in Angular applications with Modus Web Components.
10
+
11
+ ## Core Principles
12
+
13
+ ### ALWAYS Use Reactive Forms
14
+
15
+ ```typescript
16
+ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
17
+
18
+ @Component({
19
+ imports: [ReactiveFormsModule],
20
+ })
21
+ export class MyFormComponent {
22
+ private readonly fb = new FormBuilder();
23
+
24
+ readonly form = this.fb.group({
25
+ email: ['', [Validators.required, Validators.email]],
26
+ password: ['', [Validators.required, Validators.minLength(8)]],
27
+ });
28
+ }
29
+ ```
30
+
31
+ ## CRITICAL: Track Touched State Manually
32
+
33
+ **Modus Web Components don't automatically track Angular form touched state.** You must manually track which fields have been touched.
34
+
35
+ ```typescript
36
+ export class FormComponent {
37
+ readonly touchedFields = signal<Set<string>>(new Set());
38
+
39
+ handleFieldChange(event: InputEvent, fieldName: string): void {
40
+ const target = event.target as HTMLInputElement;
41
+ const control = this.form.controls[fieldName];
42
+ control.setValue(target.value);
43
+ this.markFieldTouched(fieldName);
44
+ }
45
+
46
+ handleFieldBlur(fieldName: string): void {
47
+ this.markFieldTouched(fieldName);
48
+ }
49
+
50
+ private markFieldTouched(fieldName: string): void {
51
+ this.touchedFields.update((fields) => {
52
+ const newFields = new Set(fields);
53
+ newFields.add(fieldName);
54
+ return newFields;
55
+ });
56
+ }
57
+ }
58
+ ```
59
+
60
+ ## Validation Feedback Pattern
61
+
62
+ ### Use Computed Signals for Validation Feedback
63
+
64
+ ```typescript
65
+ readonly emailFeedback = computed<IInputFeedbackProp | undefined>(() => {
66
+ const control = this.form.controls.email;
67
+ const isTouched = this.touchedFields().has('email');
68
+
69
+ if (!isTouched || !control.errors) return undefined;
70
+
71
+ if (control.errors['required']) {
72
+ return { level: 'error', message: 'Email address is required.' };
73
+ }
74
+ if (control.errors['email']) {
75
+ return { level: 'error', message: 'Please enter a valid email address.' };
76
+ }
77
+ return undefined;
78
+ });
79
+ ```
80
+
81
+ ## Connecting Modus Components to Forms
82
+
83
+ ### Text Inputs
84
+
85
+ ```typescript
86
+ readonly firstNameFeedback = computed<IInputFeedbackProp | undefined>(() => {
87
+ const control = this.form.controls.firstName;
88
+ const isTouched = this.touchedFields().has('firstName');
89
+ if (!isTouched || !control.errors) return undefined;
90
+ if (control.errors['required']) {
91
+ return { level: 'error', message: 'First name is required.' };
92
+ }
93
+ return undefined;
94
+ });
95
+
96
+ handleFirstNameChange(event: InputEvent): void {
97
+ const target = event.target as HTMLInputElement;
98
+ this.form.controls.firstName.setValue(target.value);
99
+ this.markFieldTouched('firstName');
100
+ }
101
+ ```
102
+
103
+ ```html
104
+ <modus-text-input
105
+ inputId="firstName"
106
+ placeholder="Enter first name"
107
+ [required]="true"
108
+ [value]="form.controls.firstName.value ?? ''"
109
+ [feedback]="firstNameFeedback()"
110
+ (inputChange)="handleFirstNameChange($event.detail)"
111
+ (inputBlur)="handleFirstNameBlur()"
112
+ />
113
+ ```
114
+
115
+ ## Best Practices Summary
116
+
117
+ 1. **ALWAYS use Reactive Forms** - Don't use template-driven forms
118
+ 2. **ALWAYS track touched state manually** - Modus components don't integrate automatically
119
+ 3. **ALWAYS use computed signals for feedback** - Reactive, efficient validation
120
+ 4. **ALWAYS check touched state before showing errors** - Better UX
121
+ 5. **ALWAYS use specific error messages** - Helpful, clear feedback
122
+ 6. **ALWAYS handle both inputChange and inputBlur** - Complete interaction tracking
123
+ 7. **ALWAYS extract event.detail** - Correct event handling
124
+ 8. **ALWAYS use null coalescing for value bindings** - `form.controls.field.value ?? ''`
@@ -0,0 +1,70 @@
1
+ ---
2
+ description: Complete list of valid Modus icon names for Angular applications
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ ## Complete Icon Names List
8
+
9
+ **Only these names are allowed** when using Modus icons. Always verify icon names against this list before using them.
10
+
11
+ ### A-C
12
+
13
+ accessibility, accessibility_circle, add, add_bold, add_circle, add_heavy, address, advanced_instructions, alarm_add, alarm_off, alarm_on, alert, alert_outlined, align_bottom, align_center_horiz, align_center_vert, align_left, align_right, align_top, angle_90, antenna, apps, arc, arrow_back, arrow_down, arrow_down_circle, arrow_expand_diagonal_left, arrow_expand_diagonal_right, arrow_left, arrow_left_circle, arrow_next, arrow_right, arrow_right_circle, arrow_up, arrow_up_circle, artificial_intelligence, backup_restore_cloud, backup_restore_file, bar_graph, bar_graph_line, bar_graph_square, barcode, battery_0_horizontal, battery_0_vertical, battery_25_horizontal, battery_25_vertical, battery_50_horizontal, battery_50_vertical, battery_75_horizontal, battery_75_vertical, battery_charging_horizontal, battery_charging_vertical, battery_full_horizontal, battery_full_vertical, between, bolt, bookings, bookings_open, box_select, briefcase, brightness, brush, bug, bug_report, building_corporate, buildings, calculate, calculator, calculator_symbols, calendar, calendar_add, calendar_and_key, calendar_blank, calendar_booking, calendar_cancel, calendar_check, calendar_clock, calendar_event, calendar_loading_unloading, calendar_loading_unloading_date, calendar_plus, calendar_rebook, calendar_reserve, calendar_show, calendar_time_slot, calendar_week, camera, camera_disabled, camera_photo_add, cancel_circle, cancel_square, cancel_square_outlined, caret_down, caret_down_bold, caret_left, caret_left_bold, caret_right, caret_right_bold, caret_up, caret_up_bold, cell_merge, cell_properties, cell_split, certificate, chat, check, check_bold, check_circle, check_circle_outlined, check_heavy, chevron_double_down, chevron_double_left, chevron_double_right, chevron_double_up, chevron_left, chevron_left_bold, chevron_right, chevron_right_bold, circle_notch, circle_outline, clipboard, clipboard_actions, clipboard_check, clipboard_empty, clipboard_planning, clock, clock_add, clock_checkmark, clock_delay_warning, clock_delayed, clock_locked, clock_question_mark, close, close_bold, close_heavy, cloud, cloud_connected, cloud_disconnected, cloud_download, cloud_upload, code, coffee_cup, collapse, collapse_bold, color_picker, column_copy, column_cut, column_delete, column_insert_after, column_insert_before, column_paste_after, column_paste_before, column_properties, columns, combine, comment, comment_add, comment_empty, comment_message, comment_message_disabled, compare_arrows, compass, component, contacts, contrast, copy_content, costs, credit_card, crop, cube, curly_brackets, cursor, cursor_add, cursor_remove
14
+
15
+ ### D-H
16
+
17
+ dashboard, data_missing, data_transfer_off, day_mostly_cloudy, day_partly_cloudy, delete, delivery_truck, delivery_truck_allocate, delivery_truck_motion, document, download, download_line, download_xls, drag_corner, drag_horizontal, drag_indicator, drag_vertical, drivers, drizzle, drone, earnings_statement, edit_combination, email, email_add, envelope, eraser, exclamation_mark, expand, expand_bold, expand_less, expand_less_bold, expand_less_circle, expand_more, expand_more_bold, expand_more_circle, export, factory, fast_forward, fast_rewind, file, file_bar_graph, file_check_in, file_check_out, file_cloud, file_copy, file_edit, file_merge, file_missing, file_new, file_secure, file_table, file_type_bmpf, file_type_csv, file_type_cur, file_type_doc, file_type_ico, file_type_key, file_type_log, file_type_numbers, file_type_pdf, file_type_pem, file_type_rfi, file_type_rfq, file_type_rtf, file_type_text, file_type_tif, file_type_tmp, file_type_xls, filter, filter_list, filter_off, first_page, flag, flag_finish, floorplan, flowchart, fog, folder_closed, folder_locked, folder_new, folder_open, folder_personal, folder_project, folder_public, folder_share, folder_unlocked, footprints, forestry, forklift, frame, freight_market, freight_matching, freight_trolley, full_screen, function, gantt_chart, gavel, gears, greater_than_equal_to, group_items, hail, hail_heavy, hail_light, hammer, hand, hard_hat, headset, heart, helicopter, help, help_outlined, history, home, hourglass
18
+
19
+ ### I-O
20
+
21
+ ice, icons_shapes, image, image_add, image_disabled, image_scene, in_cab_device, in_field_device, info, info_outlined, info_token, inspect, invoice, invoice_euro, invoice_pound, invoice_yen, item_begins_with, item_contains, item_does_not_contain, item_does_not_equal, item_ends_with, item_equals, key, keyboard, keyboard_keys, labs, language, last_page, launch, launch_bold, layer, learn, less_than_equal_to, lightbulb_off, lightbulb_on, lightning, line_diagonal, line_graph, link, link_broken, link_off, list_bulleted, list_numbered, list_shapes, location, location_add, location_add_multiple, location_arrow, location_disabled, location_point, lock, lock_open, magic_wand, manage_accounts, manage_people, map, map_2d, map_marker, map_marker_circle, map_marker_multiple, map_markers, map_poi, master_data, megaphone, menu, menu_circle, mic, mix, mobile_app_version, monetarization, moon, more_circle, more_horizontal, more_vertical, mouse, move, move_last_down, move_last_left, move_last_right, move_last_up, night_mostly_cloudy, night_partly_cloudy, no_package, no_truck, not_synced_bold, notifications, notifications_off, object_mirror, object_outline, object_rotate, offers, overcast
22
+
23
+ ### P-S
24
+
25
+ package, package_delivered, package_delivery, package_missing, package_pickup, package_sent, pager, paint_bucket, palette, pan, paper_plane, paperclip, password, pause_circle, payment_instant, pen, pencil, people_add, people_couple, people_group, person, person_account, person_add, person_clock, person_edit, person_remove, phone, phone_call, phone_hang_up, phone_mobile, pin, pin_add, pin_straight, pin_straight_cancel, play_circle, point_marker_tool, polygon, polygon_area_tool, polygon_concave, polygon_cone, polygon_drag_rectangle, polygon_line_tool, polygon_merge, polygon_select, printer, pulse, qr_code, question, quick_login, rain, rain_heavy, rain_icy, raindrop, redo, redo_bold, refresh, refresh_bold, remove, remove_bold, remove_circle, remove_heavy, reply, rewind, row_add, row_copy, row_cut, row_delete, row_highlighted, row_insert_after, row_insert_before, row_paste_after, row_paste_before, row_properties, row_remove, rows_show_less, rows_show_more, rss_feed, ruler, satellite, save_as, save_disk, scan_barcode, schema, scissors, screen, screenshot, search, server, server_round, settings, share, shield, shopping_cart, shopping_cart_minus, shopping_cart_plus, shortcut, shovel, show_less_caret, show_more_caret, sign_in, sign_out, signal, smiley_dissatisfied, smiley_dissatisfied_outlined, smiley_neutral, smiley_neutral_outlined, smiley_satisfied, smiley_satisfied_outlined, smiley_somewhat_dissatisfied, smiley_somewhat_dissatisfied_outlined, smiley_somewhat_satisfied, smiley_somewhat_satisfied_outlined, snow_heavy, snow_light, snow_particle, snowflake, snowflakes, sort, sort_alpha_down, sort_alpha_up, sort_arrow_down, sort_arrow_up, sort_down, sort_up, star, star_half, star_locked, star_northern, star_outlined, stars, stop_circle, street_measurement, submit_expense, sun, swap, switch_account, switch_left, switch_right, sync, sync_bold, sync_off
26
+
27
+ ### T-Z and Numbers
28
+
29
+ table, tablet, tag, tag_disabled, template, text_align_left, text_align_right, text_bold, text_centered, text_grow, text_input, text_input_long, text_input_short, text_italic, text_marker, text_shrink, text_strikethrough, text_truncated, text_underlined, thermometer_cold, thermometer_hot, thumbs_down, thumbs_up, thunderstorm_heavy, thunderstorm_light, ticket, ticket_plane, time_off_work, time_slot_not_reserved, time_slot_reserved, timer, timer_countdown, timesheet, timesheet_approve, toggle_center, toggle_left_panel, toggle_off, toggle_on, toggle_right_panel, traffic_cone, tree_structure, triangle_down, triangle_left, triangle_right, triangle_up, trimble_logo, truck_add, truck_warning_delay, tune, tune_circle, uncombine, undo, undo_bold, unfold_less, unfold_more, unit_selector, unsorted_arrows, update, upload, upload_xls, user_account, user_active, user_guide, user_inactive, user_passkey, user_permissions, video, video_add, video_disabled, view_grid, view_list, visibility_off, visibility_on, volume_down, volume_mute, volume_up, vr_xr, warehouse, warning, warning_outlined, web, wheelbarrow, widgets, wifi, wifi_no_internet, wifi_off, wind, window, window_dock_undock, window_fit, window_resize, window_side_panel, window_template, window_views, window_wireframe, wintery_mix, wrench, zoom_box, zoom_in, zoom_out, 2_layers, 2_layers_off, 360, add_square, archive_square, auto_target, avoidance_zone, background_dark, background_light, base_station, bullseye, bullseye_off, bullseye_warning, clip, compactor, corner, dashboard_tiles, design_package, device_cb460, device_tsc7, devices_group, devices_status, dozer, easting, edit_mode, electric_meter_off, electric_meter_off_outline, electric_meter_outline_rounded, electric_meter_rounded, electric_meter_rounded_warn, elevation, gnss, gnss_r8, gnss_r8s_base, gnss_rpt, gnss_rts, gnss_sps986, gps, grader, hex, horizontal_accuracy, image_square, image_square_off, image_square_off_outline, image_square_outline, machine, machines, measure_up, northing, orbit, orthogonal, perspective, prism_pole, prism_pole_extend, receiver_generic_error_filled, receiver_generic_error_outline, receiver_generic_filled, receiver_generic_off_filled, receiver_generic_off_outline, receiver_generic_outline, receiver_generic_warn_filled, receiver_generic_warn_outline, ri, rpt, rts, rts_off, rts_rpt, select_area, sx10, sync_filled, todo, todo_add, total_station, total_station_lost, unarchive_square, vertical_accuracy, view_2_rows, view_3_column, visibility_part_outline, workers_queue, x12, x7, x7_card, x7_settings, xr10, zoom_center
30
+
31
+ ## Icon Categories by Usage
32
+
33
+ ### Navigation & UI
34
+
35
+ `arrow_left`, `arrow_right`, `arrow_up`, `arrow_down`, `chevron_left`, `chevron_right`, `menu`, `close`, `home`, `settings`, `search`
36
+
37
+ ### Actions & Operations
38
+
39
+ `add`, `remove`, `edit_combination`, `delete`, `save_disk`, `download`, `upload`, `copy_content`
40
+
41
+ ### Status & Feedback
42
+
43
+ `check`, `check_circle`, `warning`, `alert`, `info`, `cancel_circle`, `help`
44
+
45
+ ### Files & Documents
46
+
47
+ `file`, `folder_open`, `folder_closed`, `document`, `image`, `video`
48
+
49
+ ### Communication
50
+
51
+ `email`, `phone`, `chat`, `comment`, `notifications`
52
+
53
+ ### Time & Calendar
54
+
55
+ `calendar`, `clock`, `timer`, `history`
56
+
57
+ ### User & Account
58
+
59
+ `person`, `people_group`, `user_account`, `key`, `lock`
60
+
61
+ ### Data & Analytics
62
+
63
+ `bar_graph`, `line_graph`, `dashboard`
64
+
65
+ ## Validation
66
+
67
+ ```bash
68
+ # Validate icon names used in templates
69
+ npm run lint:icon-names
70
+ ```
@@ -0,0 +1,40 @@
1
+ ---
2
+ description: Modus Icons usage guide for Angular applications
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Icons - Short
8
+
9
+ Essential icon usage rules for Modus Design System in Angular.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use Modus icons exclusively** - `<i class="modus-icons">icon_name</i>`
14
+ - **Use UNDERSCORES in names** - `save_disk`, `arrow_left`, NOT `save-disk`, `arrow-left`
15
+ - **Never use other icon libraries** - No Font Awesome, Material Icons, Heroicons
16
+ - **Use valid icon names only** - Check modus-angular-icon-names.mdc for valid names
17
+ - **Size with Tailwind classes** - `text-sm`, `text-lg`, `text-xl` for sizing
18
+ - **Color with design system** - `text-primary`, `text-foreground`, `text-muted-foreground`
19
+
20
+ ## Usage Patterns
21
+
22
+ ```html
23
+ <!-- Direct HTML usage -->
24
+ <i class="modus-icons text-lg" aria-hidden="true">save_disk</i>
25
+ <i class="modus-icons text-base" role="img" aria-label="Settings">settings</i>
26
+
27
+ <!-- In buttons -->
28
+ <modus-button icon="save_disk" iconPosition="left">Save</modus-button>
29
+ <modus-button icon="settings" iconPosition="only" ariaLabel="Settings"></modus-button>
30
+ ```
31
+
32
+ ## Common Icons
33
+
34
+ - **Navigation:** `arrow_left`, `arrow_right`, `chevron_left`, `chevron_right`, `menu`, `close`
35
+ - **Actions:** `add`, `add_circle`, `edit`, `delete`, `save_disk`, `download`, `upload`
36
+ - **Status:** `check`, `check_circle`, `error`, `warning`, `info`, `help`
37
+
38
+ ## Reference
39
+
40
+ For complete icon list and accessibility guidelines, fetch the full rule: `modus-angular-icons`