@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,472 @@
1
+ ---
2
+ description: Best practices for Modus Web Components in Angular
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Angular Best Practices
8
+
9
+ ## Component Architecture
10
+
11
+ ### Single Configurable Component Pattern
12
+
13
+ **CRITICAL**: Create **one configurable component** instead of multiple specific components.
14
+
15
+ ```typescript
16
+ // CORRECT: Single configurable component
17
+ @Component({
18
+ selector: 'app-button',
19
+ template: `
20
+ <modus-button
21
+ [color]="color()"
22
+ [variant]="variant()"
23
+ [size]="size()"
24
+ [disabled]="disabled()"
25
+ (buttonClick)="buttonClick.emit($event)"
26
+ >
27
+ <ng-content />
28
+ </modus-button>
29
+ `,
30
+ changeDetection: ChangeDetectionStrategy.OnPush,
31
+ })
32
+ export class AppButtonComponent {
33
+ readonly color = input<ButtonColor>('primary');
34
+ readonly variant = input<ButtonVariant>('filled');
35
+ readonly size = input<ButtonSize>('md');
36
+ readonly disabled = input<boolean>(false);
37
+ readonly buttonClick = output<MouseEvent | KeyboardEvent>();
38
+ }
39
+
40
+ // WRONG: Multiple specific components
41
+ @Component({ selector: 'app-primary-button', ... })
42
+ export class PrimaryButtonComponent { /* ... */ }
43
+
44
+ @Component({ selector: 'app-secondary-button', ... })
45
+ export class SecondaryButtonComponent { /* ... */ }
46
+
47
+ @Component({ selector: 'app-danger-button', ... })
48
+ export class DangerButtonComponent { /* ... */ }
49
+ ```
50
+
51
+ ### Component Composition Pattern
52
+
53
+ ```typescript
54
+ // CORRECT: Component composition
55
+ @Component({
56
+ selector: 'app-card',
57
+ template: `
58
+ <div class="bg-card text-foreground border-default rounded-lg" [class]="customClass()">
59
+ <ng-content />
60
+ </div>
61
+ `,
62
+ changeDetection: ChangeDetectionStrategy.OnPush,
63
+ })
64
+ export class CardComponent {
65
+ readonly customClass = input<string>('');
66
+ }
67
+
68
+ @Component({
69
+ selector: 'app-card-header',
70
+ template: `
71
+ <div class="flex flex-col space-y-1.5 p-6" [class]="customClass()">
72
+ <ng-content />
73
+ </div>
74
+ `,
75
+ changeDetection: ChangeDetectionStrategy.OnPush,
76
+ })
77
+ export class CardHeaderComponent {
78
+ readonly customClass = input<string>('');
79
+ }
80
+
81
+ @Component({
82
+ selector: 'app-card-title',
83
+ template: `
84
+ <div class="text-2xl font-semibold leading-none tracking-tight" [class]="customClass()">
85
+ <ng-content />
86
+ </div>
87
+ `,
88
+ changeDetection: ChangeDetectionStrategy.OnPush,
89
+ })
90
+ export class CardTitleComponent {
91
+ readonly customClass = input<string>('');
92
+ }
93
+
94
+ @Component({
95
+ selector: 'app-card-content',
96
+ template: `
97
+ <div class="p-6 pt-0" [class]="customClass()">
98
+ <ng-content />
99
+ </div>
100
+ `,
101
+ changeDetection: ChangeDetectionStrategy.OnPush,
102
+ })
103
+ export class CardContentComponent {
104
+ readonly customClass = input<string>('');
105
+ }
106
+
107
+ // Usage
108
+ template: `
109
+ <app-card>
110
+ <app-card-header>
111
+ <app-card-title>Card Title</app-card-title>
112
+ </app-card-header>
113
+ <app-card-content>
114
+ <div>Card content</div>
115
+ </app-card-content>
116
+ </app-card>
117
+ `
118
+ ```
119
+
120
+ ## Styling Architecture
121
+
122
+ ### Design System Integration
123
+
124
+ ```typescript
125
+ // CORRECT: Design system color usage
126
+ @Component({
127
+ template: `
128
+ <div class="bg-background text-foreground">
129
+ <div class="bg-card text-foreground border-default rounded-lg p-4">
130
+ <div class="text-primary">Primary text</div>
131
+ <div class="text-secondary">Secondary text</div>
132
+ <div class="text-foreground-60">Muted text</div>
133
+ </div>
134
+ </div>
135
+ `,
136
+ })
137
+ export class ThemedComponent {}
138
+
139
+ // WRONG: Generic Tailwind colors
140
+ template: `<div class="bg-blue-500 text-white border-gray-300">Generic colors</div>`
141
+ ```
142
+
143
+ ### Responsive Design Patterns
144
+
145
+ ```typescript
146
+ // CORRECT: Responsive design with design system
147
+ @Component({
148
+ template: `
149
+ <div class="
150
+ grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4
151
+ p-4 md:p-6 lg:p-8
152
+ bg-background text-foreground
153
+ ">
154
+ <div class="bg-card text-foreground border-default rounded-lg p-4">
155
+ <div class="text-lg font-semibold mb-2">Card Title</div>
156
+ <div class="text-sm text-foreground-60">Card description</div>
157
+ </div>
158
+ </div>
159
+ `,
160
+ })
161
+ export class ResponsiveComponent {}
162
+ ```
163
+
164
+ ### Interactive States
165
+
166
+ ```typescript
167
+ // CORRECT: Interactive states with design system
168
+ @Component({
169
+ template: `
170
+ <div class="
171
+ bg-card text-foreground border-default rounded-lg p-4
172
+ hover:bg-card/80 hover:shadow-lg
173
+ focus:ring-2 focus:ring-primary focus:ring-offset-2
174
+ active:bg-card/90
175
+ transition-all duration-200
176
+ cursor-pointer
177
+ ">
178
+ Interactive content
179
+ </div>
180
+ `,
181
+ })
182
+ export class InteractiveComponent {}
183
+ ```
184
+
185
+ ## Modus Web Components Integration
186
+
187
+ ### Event Handling Patterns
188
+
189
+ ```typescript
190
+ // CORRECT: Event handling with signals
191
+ @Component({
192
+ template: `
193
+ <modus-button
194
+ [color]="color()"
195
+ [disabled]="disabled()"
196
+ (buttonClick)="handleClick($event)"
197
+ >
198
+ Click me
199
+ </modus-button>
200
+ `,
201
+ changeDetection: ChangeDetectionStrategy.OnPush,
202
+ })
203
+ export class ModusButtonExampleComponent {
204
+ readonly color = input<ButtonColor>('primary');
205
+ readonly disabled = input<boolean>(false);
206
+
207
+ handleClick(event: MouseEvent | KeyboardEvent): void {
208
+ console.log('Button clicked:', event);
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### State Management Patterns
214
+
215
+ ```typescript
216
+ // CORRECT: State management with Modus components
217
+ @Component({
218
+ template: `
219
+ <modus-button (buttonClick)="openModal()">Open Modal</modus-button>
220
+
221
+ <modus-modal
222
+ id="example-modal"
223
+ [headline]="'Modal Title'"
224
+ >
225
+ <div slot="content">Modal content</div>
226
+ <div slot="footer">
227
+ <modus-button (buttonClick)="closeModal()">Close</modus-button>
228
+ </div>
229
+ </modus-modal>
230
+ `,
231
+ changeDetection: ChangeDetectionStrategy.OnPush,
232
+ })
233
+ export class StatefulComponent {
234
+ openModal(): void {
235
+ const dialog = document.getElementById('example-modal') as HTMLDialogElement | null;
236
+ if (dialog && typeof dialog.showModal === 'function') {
237
+ dialog.showModal();
238
+ }
239
+ }
240
+
241
+ closeModal(): void {
242
+ const dialog = document.getElementById('example-modal') as HTMLDialogElement | null;
243
+ if (dialog && typeof dialog.close === 'function') {
244
+ dialog.close();
245
+ }
246
+ }
247
+ }
248
+ ```
249
+
250
+ ## Angular + Vite Specific Patterns
251
+
252
+ ### Environment Variables
253
+
254
+ ```typescript
255
+ // CORRECT: Environment variables in Angular
256
+ @Component({
257
+ template: `
258
+ <div>
259
+ <div>Environment: {{ isDevelopment ? 'Development' : 'Production' }}</div>
260
+ </div>
261
+ `,
262
+ })
263
+ export class ApiComponent {
264
+ readonly isDevelopment = !environment.production;
265
+ }
266
+ ```
267
+
268
+ ### Lazy Loading
269
+
270
+ ```typescript
271
+ // CORRECT: Lazy loading routes
272
+ export const routes: Routes = [
273
+ {
274
+ path: 'demos',
275
+ loadChildren: () => import('./demos/demos.routes').then(m => m.DEMO_ROUTES),
276
+ },
277
+ {
278
+ path: 'settings',
279
+ loadComponent: () => import('./settings/settings.component').then(m => m.SettingsComponent),
280
+ },
281
+ ];
282
+ ```
283
+
284
+ ## Theme Integration
285
+
286
+ ### Theme-Aware Components
287
+
288
+ ```typescript
289
+ // CORRECT: Theme-aware component
290
+ @Component({
291
+ template: `
292
+ <div class="
293
+ bg-background text-foreground
294
+ transition-colors duration-200
295
+ ">
296
+ <div class="text-foreground">Current theme: {{ currentTheme() }}</div>
297
+ <div class="text-foreground-60">
298
+ Mode: {{ isDarkTheme() ? 'Dark' : 'Light' }}
299
+ </div>
300
+ </div>
301
+ `,
302
+ changeDetection: ChangeDetectionStrategy.OnPush,
303
+ })
304
+ export class ThemedComponent {
305
+ private themeService = inject(ThemeService);
306
+
307
+ readonly currentTheme = this.themeService.currentTheme;
308
+
309
+ readonly isDarkTheme = computed(() =>
310
+ this.currentTheme().includes('dark')
311
+ );
312
+ }
313
+ ```
314
+
315
+ ### Conditional Theming
316
+
317
+ ```typescript
318
+ // CORRECT: Conditional theming
319
+ @Component({
320
+ template: `
321
+ <div class="bg-background text-foreground p-4 rounded border-default">
322
+ <div class="text-lg font-semibold">{{ themeSpecificContent() }}</div>
323
+ </div>
324
+ `,
325
+ changeDetection: ChangeDetectionStrategy.OnPush,
326
+ })
327
+ export class ConditionalThemedComponent {
328
+ private themeService = inject(ThemeService);
329
+ readonly currentTheme = this.themeService.currentTheme;
330
+
331
+ readonly themeSpecificContent = computed(() => {
332
+ switch (this.currentTheme()) {
333
+ case 'modus-classic-light':
334
+ return 'Classic Light Theme';
335
+ case 'modus-classic-dark':
336
+ return 'Classic Dark Theme';
337
+ case 'modus-modern-light':
338
+ return 'Modern Light Theme';
339
+ case 'modus-modern-dark':
340
+ return 'Modern Dark Theme';
341
+ case 'connect-light':
342
+ return 'Connect Light Theme';
343
+ case 'connect-dark':
344
+ return 'Connect Dark Theme';
345
+ default:
346
+ return 'Default Theme';
347
+ }
348
+ });
349
+ }
350
+ ```
351
+
352
+ ## Performance Optimization
353
+
354
+ ### Computed Signals for Derived State
355
+
356
+ ```typescript
357
+ // CORRECT: Use computed for derived state
358
+ @Component({
359
+ template: `
360
+ <div class="space-y-2">
361
+ @for (item of processedData(); track item.id) {
362
+ <div class="bg-card text-foreground p-2 rounded">
363
+ {{ item.processed }}
364
+ </div>
365
+ }
366
+ </div>
367
+ `,
368
+ changeDetection: ChangeDetectionStrategy.OnPush,
369
+ })
370
+ export class ExpensiveComponent {
371
+ readonly data = input.required<DataItem[]>();
372
+
373
+ readonly processedData = computed(() =>
374
+ this.data().map(item => ({
375
+ ...item,
376
+ processed: item.value * 2,
377
+ }))
378
+ );
379
+ }
380
+ ```
381
+
382
+ ### Lazy Loading Components
383
+
384
+ ```typescript
385
+ // CORRECT: Lazy loading with @defer
386
+ @Component({
387
+ template: `
388
+ <div>
389
+ @defer (on viewport) {
390
+ <heavy-component />
391
+ } @placeholder {
392
+ <modus-skeleton height="200px" />
393
+ } @loading {
394
+ <modus-loader />
395
+ }
396
+ </div>
397
+ `,
398
+ })
399
+ export class LazyLoadingComponent {}
400
+ ```
401
+
402
+ ## Common Anti-Patterns
403
+
404
+ ### Don't Create Multiple Specific Components
405
+
406
+ ```typescript
407
+ // WRONG: Multiple specific components
408
+ @Component({ selector: 'app-primary-button' })
409
+ export class PrimaryButtonComponent { /* ... */ }
410
+
411
+ @Component({ selector: 'app-secondary-button' })
412
+ export class SecondaryButtonComponent { /* ... */ }
413
+
414
+ // CORRECT: Single configurable component
415
+ @Component({ selector: 'app-button' })
416
+ export class ButtonComponent {
417
+ readonly variant = input<'primary' | 'secondary'>('primary');
418
+ }
419
+ ```
420
+
421
+ ### Don't Use Generic Tailwind Colors
422
+
423
+ ```html
424
+ <!-- WRONG: Generic Tailwind colors -->
425
+ <div class="bg-blue-500 text-white border-gray-300">
426
+ Generic colors
427
+ </div>
428
+
429
+ <!-- CORRECT: Design system colors -->
430
+ <div class="bg-primary text-white border-default">
431
+ Design system colors
432
+ </div>
433
+ ```
434
+
435
+ ### Don't Mix Color Systems
436
+
437
+ ```html
438
+ <!-- WRONG: Mixing color systems -->
439
+ <div class="bg-background text-blue-500 border-red-300">
440
+ Mixed color systems
441
+ </div>
442
+
443
+ <!-- CORRECT: Consistent design system -->
444
+ <div class="bg-background text-foreground border-default">
445
+ Consistent design system
446
+ </div>
447
+ ```
448
+
449
+ ## Key Takeaways
450
+
451
+ 1. **Single Configurable Components**: Create one configurable component instead of multiple specific ones
452
+ 2. **Design System Colors**: Always use design system colors, never generic Tailwind colors
453
+ 3. **Signal-Based State**: Use signals for reactive state management
454
+ 4. **Event Handling**: Use proper event handling patterns with outputs
455
+ 5. **Theme Integration**: Use theme context for conditional styling and content
456
+ 6. **Performance**: Use computed signals and lazy loading for optimization
457
+ 7. **OnPush Change Detection**: Always use `ChangeDetectionStrategy.OnPush`
458
+
459
+ ## Best Practices Checklist
460
+
461
+ - [ ] **Single Configurable Components**: One component with variants, not multiple specific components
462
+ - [ ] **Design System Colors**: Using design system colors exclusively
463
+ - [ ] **Signal-Based API**: Using `input()`, `output()`, `signal()`, `computed()`
464
+ - [ ] **OnPush Change Detection**: All components use `ChangeDetectionStrategy.OnPush`
465
+ - [ ] **Theme Integration**: Theme-aware components with conditional styling
466
+ - [ ] **Performance**: Computed signals and lazy loading where appropriate
467
+ - [ ] **Accessibility**: Proper accessibility with ARIA attributes
468
+ - [ ] **Consistency**: Consistent patterns across all components
469
+
470
+ ---
471
+
472
+ **Remember: This Angular + Vite application follows a single configurable component pattern with design system integration. Always use design system colors, signal-based state management, and OnPush change detection. Never use generic Tailwind colors or create multiple specific components.**
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Essential border usage rules for Modus Design System integration in Angular + Vite
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Border Usage Guidelines - Short
8
+
9
+ Essential border usage rules for Modus Design System integration.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use design system border utilities only** - `border-default`, `border-success`, `border-warning`, `border-destructive`, `border-primary`
14
+ - **Never use Tailwind color classes in borders** - No `border-blue-500`, `border-gray-300`, etc.
15
+ - **Use `border-thick` for emphasis** - For important borders and separators
16
+ - **Use directional borders** - `border-top-default`, `border-bottom-default`, etc.
17
+ - **No inline styles for borders** - Use Tailwind classes exclusively
18
+
19
+ ## Correct Patterns
20
+
21
+ ```html
22
+ <!-- CORRECT: Design system utilities -->
23
+ <div class="border-default">Default border</div>
24
+ <div class="border-success">Success border</div>
25
+ <div class="border-warning">Warning border</div>
26
+ <div class="border-destructive">Error border</div>
27
+ <div class="border-primary">Primary border</div>
28
+
29
+ <!-- CORRECT: Thick borders -->
30
+ <div class="border-thick-success">Important success</div>
31
+
32
+ <!-- CORRECT: Directional borders -->
33
+ <div class="border-bottom-default">Bottom border</div>
34
+ ```
35
+
36
+ ## Forbidden Patterns
37
+
38
+ ```html
39
+ <!-- WRONG: Tailwind color classes -->
40
+ <div class="border border-red-500">Error</div>
41
+
42
+ <!-- WRONG: Inline styles -->
43
+ <div [style.border]="'1px solid var(--border)'">Content</div>
44
+ ```
45
+
46
+ ## Reference
47
+
48
+ For detailed border utilities and patterns, fetch the full rule: `modus-angular-border-usage`