@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,151 @@
1
+ ---
2
+ description: Modus Table component usage patterns for Angular
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Modus Table Usage Rules
8
+
9
+ Comprehensive guide for using the Modus Table component in Angular applications.
10
+
11
+ ## Basic Usage
12
+
13
+ ```typescript
14
+ import { ModusTableComponent } from '../modus-table.component';
15
+ import type { ITableColumn } from '@trimble-oss/moduswebcomponents';
16
+
17
+ const columns: ITableColumn[] = [
18
+ { id: 'name', header: 'Name', accessor: 'name', width: '40%' },
19
+ { id: 'role', header: 'Role', accessor: 'role' },
20
+ { id: 'status', header: 'Status', accessor: 'status' },
21
+ ];
22
+
23
+ const data = [
24
+ { id: '1', name: 'Alex Rivera', role: 'Lead', status: 'Active' },
25
+ { id: '2', name: 'Chris Patel', role: 'Developer', status: 'Active' },
26
+ ];
27
+ ```
28
+
29
+ ```html
30
+ <modus-table
31
+ [columns]="columns"
32
+ [data]="data"
33
+ density="comfortable"
34
+ [zebra]="true"
35
+ [hover]="true"
36
+ />
37
+ ```
38
+
39
+ ## CRITICAL: Editable Tables with Custom Editors
40
+
41
+ For editable tables, you MUST use `editor: 'custom'` with `customEditorRenderer` functions.
42
+
43
+ ### DO: Use Custom Editor Renderer Functions
44
+
45
+ ```typescript
46
+ function createTextEditor(value: unknown, onCommit: (value: unknown) => void): HTMLElement {
47
+ const input = document.createElement('input');
48
+ input.type = 'text';
49
+ input.value = String(value || '');
50
+ input.style.width = '100%';
51
+ input.style.border = '1px solid var(--border)';
52
+ input.style.padding = '4px 8px';
53
+ input.style.borderRadius = '4px';
54
+ input.style.fontSize = '14px';
55
+ input.style.backgroundColor = 'var(--background)';
56
+ input.style.color = 'var(--foreground)';
57
+
58
+ setTimeout(() => {
59
+ input.focus();
60
+ input.select();
61
+ }, 0);
62
+
63
+ const commitValue = () => onCommit(input.value);
64
+
65
+ input.addEventListener('keydown', (e) => {
66
+ if (e.key === 'Enter') {
67
+ e.preventDefault();
68
+ commitValue();
69
+ }
70
+ if (e.key === 'Escape') {
71
+ e.preventDefault();
72
+ onCommit(value);
73
+ }
74
+ });
75
+ input.addEventListener('blur', commitValue);
76
+
77
+ return input;
78
+ }
79
+
80
+ const taskColumns: ITableColumn[] = [
81
+ { id: 'id', header: 'ID', accessor: 'id', width: '60px' },
82
+ {
83
+ id: 'task',
84
+ header: 'Task',
85
+ accessor: 'task',
86
+ editor: 'custom',
87
+ customEditorRenderer: (value, onCommit) => createTextEditor(value, onCommit),
88
+ },
89
+ ];
90
+ ```
91
+
92
+ ## Event Handling
93
+
94
+ ### Cell Edit Events
95
+
96
+ ```typescript
97
+ readonly taskData = signal<Record<string, unknown>[]>([...initialTaskData]);
98
+
99
+ handleCellEditCommit(event: {
100
+ rowIndex: number;
101
+ colId: string;
102
+ newValue: unknown;
103
+ updatedRow: Record<string, unknown>;
104
+ }): void {
105
+ this.taskData.update((prevData) => {
106
+ const newData = [...prevData];
107
+ newData[event.rowIndex] = { ...newData[event.rowIndex], [event.colId]: event.newValue };
108
+ return newData;
109
+ });
110
+ }
111
+ ```
112
+
113
+ ```html
114
+ <modus-table
115
+ [columns]="taskColumns"
116
+ [data]="taskData()"
117
+ [editable]="true"
118
+ (cellEditCommit)="handleCellEditCommit($event)"
119
+ />
120
+ ```
121
+
122
+ ## Selection Events
123
+
124
+ ```typescript
125
+ readonly selectedIds = signal<string[]>([]);
126
+
127
+ handleRowSelectionChange(event: {
128
+ selectedRows: Record<string, unknown>[];
129
+ selectedRowIds: string[];
130
+ }): void {
131
+ this.selectedIds.set(event.selectedRowIds);
132
+ }
133
+ ```
134
+
135
+ ```html
136
+ <modus-table
137
+ [columns]="columns"
138
+ [data]="data"
139
+ selectable="multi"
140
+ [selectedRowIds]="selectedIds()"
141
+ (rowSelectionChange)="handleRowSelectionChange($event)"
142
+ />
143
+ ```
144
+
145
+ ## Key Takeaways
146
+
147
+ 1. **Custom editors are required** for reliable cell editing
148
+ 2. **Use design system CSS variables** in custom editors (`--border`, `--background`, `--foreground`)
149
+ 3. **Handle keyboard events** (Enter to commit, Escape to cancel)
150
+ 4. **Use immutable updates** with signals for change detection
151
+ 5. **Import types** from `@trimble-oss/moduswebcomponents`
@@ -0,0 +1,44 @@
1
+ ---
2
+ description: Tailwind CSS v4 with Modus Design System integration in Angular + Vite
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Tailwind Usage - Short
8
+
9
+ Tailwind CSS v4 with Modus Design System integration.
10
+
11
+ ## Key Rules
12
+
13
+ - **Tailwind v4 with design system** - Uses CSS imports, reads variables from `src/styles.css`
14
+ - **No generic Tailwind colors** - Never use `bg-blue-500`, `text-gray-600`, etc.
15
+ - **Use design system colors** - `bg-background`, `text-foreground`, `bg-primary`, etc.
16
+ - **Custom utilities for borders** - Use `border-default`, `border-success`, `border-warning`, etc.
17
+ - **Custom utilities for opacity** - Use `text-foreground-80`, not `text-foreground/80`
18
+ - **Test in all themes** - Ensure Tailwind classes work in all 6 themes
19
+
20
+ ## Correct Usage
21
+
22
+ ```html
23
+ <!-- CORRECT: Design system colors -->
24
+ <div class="bg-background text-foreground"></div>
25
+ <div class="bg-card text-card-foreground border-default"></div>
26
+ <div class="bg-primary text-primary-foreground"></div>
27
+ ```
28
+
29
+ ## Forbidden Patterns
30
+
31
+ ```html
32
+ <!-- WRONG: Generic Tailwind colors -->
33
+ <div class="bg-blue-500 text-white border-gray-300"></div>
34
+
35
+ <!-- WRONG: Hardcoded colors -->
36
+ <div class="bg-[#ffffff] text-[#000000]"></div>
37
+
38
+ <!-- WRONG: Raw Modus variables -->
39
+ <div class="bg-[var(--modus-wc-color-base-page)]"></div>
40
+ ```
41
+
42
+ ## Reference
43
+
44
+ For detailed Tailwind patterns and styling examples, fetch the full rule: `modus-angular-tailwind-usage`
@@ -0,0 +1,242 @@
1
+ ---
2
+ description: Tailwind CSS v4 with Modus Design System integration in Angular + Vite
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Tailwind CSS Usage in Angular + Vite
8
+
9
+ ## Tailwind v4 Integration
10
+
11
+ This Angular + Vite application uses **Tailwind CSS v4** with Modus Design System integration.
12
+
13
+ **Configuration**: Tailwind v4 reads CSS variables directly from `src/styles.css`. No separate `tailwind.config.js` is required for basic color mapping.
14
+
15
+ ## FORBIDDEN: Generic Tailwind Colors
16
+
17
+ ### Never Use Generic Tailwind Color Classes
18
+
19
+ ```html
20
+ <!-- WRONG: Generic Tailwind color classes -->
21
+ <div class="bg-blue-500 text-white border-gray-300"></div>
22
+ <div class="bg-red-400 text-yellow-200 border-green-500"></div>
23
+ <div class="bg-gray-100 text-black border-purple-300"></div>
24
+ ```
25
+
26
+ ### Never Use Hardcoded Colors
27
+
28
+ ```html
29
+ <!-- WRONG: Hardcoded colors -->
30
+ <div class="bg-[#ffffff] text-[#000000] border-[#e5e5e5]"></div>
31
+ <div [style.background-color]="'#ffffff'"></div>
32
+ ```
33
+
34
+ ### Never Use Raw Modus Variables
35
+
36
+ ```html
37
+ <!-- WRONG: Raw Modus CSS variables -->
38
+ <div class="bg-[var(--modus-wc-color-base-page)]"></div>
39
+ <div [style.background-color]="'var(--modus-wc-color-base-page)'"></div>
40
+ ```
41
+
42
+ ## CORRECT: Design System Colors
43
+
44
+ ### Use Design System Tailwind Classes
45
+
46
+ ```html
47
+ <!-- CORRECT: Design system colors -->
48
+ <div class="bg-background text-foreground"></div>
49
+ <div class="bg-card text-card-foreground border-default"></div>
50
+ <div class="bg-primary text-primary-foreground"></div>
51
+ <div class="bg-secondary text-secondary-foreground"></div>
52
+ <div class="bg-muted text-muted-foreground"></div>
53
+ <div class="bg-destructive text-destructive-foreground"></div>
54
+ <div class="bg-warning text-warning-foreground"></div>
55
+ <div class="bg-success text-success-foreground"></div>
56
+ ```
57
+
58
+ ### Available Design System Colors
59
+
60
+ ```typescript
61
+ // Background colors
62
+ bg-background, bg-card, bg-muted, bg-secondary
63
+
64
+ // Text colors
65
+ text-foreground, text-card-foreground, text-muted-foreground
66
+
67
+ // Primary colors
68
+ bg-primary, text-primary-foreground
69
+
70
+ // Status colors
71
+ bg-destructive, text-destructive-foreground
72
+ bg-warning, text-warning-foreground
73
+ bg-success, text-success-foreground
74
+
75
+ // Border colors
76
+ border-border, border-default, border-primary, border-success, border-warning, border-destructive
77
+ ```
78
+
79
+ ## Component Styling Patterns
80
+
81
+ ### Card Components
82
+
83
+ ```typescript
84
+ @Component({
85
+ template: `
86
+ <div class="bg-card text-card-foreground border-default rounded-lg p-6">
87
+ <div class="text-2xl font-semibold mb-2">{{ title() }}</div>
88
+ <div class="text-muted-foreground">{{ content() }}</div>
89
+ </div>
90
+ `,
91
+ })
92
+ export class CardComponent {
93
+ readonly title = input.required<string>();
94
+ readonly content = input<string>('');
95
+ }
96
+ ```
97
+
98
+ ### Form Components
99
+
100
+ ```typescript
101
+ @Component({
102
+ template: `
103
+ <div class="space-y-4">
104
+ <div class="flex flex-col gap-2">
105
+ <div class="text-sm font-medium text-foreground">{{ label() }}</div>
106
+ <modus-text-input
107
+ [value]="value()"
108
+ (inputChange)="handleChange($event)"
109
+ />
110
+ </div>
111
+ </div>
112
+ `,
113
+ })
114
+ export class FormFieldComponent {
115
+ readonly label = input.required<string>();
116
+ readonly value = input<string>('');
117
+ readonly valueChange = output<string>();
118
+
119
+ handleChange(event: string): void {
120
+ this.valueChange.emit(event);
121
+ }
122
+ }
123
+ ```
124
+
125
+ ### Status Indicators
126
+
127
+ ```typescript
128
+ @Component({
129
+ template: `
130
+ <div [class]="statusClasses()">
131
+ {{ status() }}
132
+ </div>
133
+ `,
134
+ })
135
+ export class StatusIndicatorComponent {
136
+ readonly status = input<'success' | 'warning' | 'error' | 'info'>('info');
137
+
138
+ readonly statusClasses = computed(() => {
139
+ const base = 'px-3 py-1 rounded border';
140
+ const variants = {
141
+ success: 'bg-success text-success-foreground border-success',
142
+ warning: 'bg-warning text-warning-foreground border-warning',
143
+ error: 'bg-destructive text-destructive-foreground border-destructive',
144
+ info: 'bg-primary text-primary-foreground border-primary',
145
+ };
146
+ return `${base} ${variants[this.status()]}`;
147
+ });
148
+ }
149
+ ```
150
+
151
+ ## Typography Patterns
152
+
153
+ ### Typography with Design System Colors
154
+
155
+ ```html
156
+ <div class="space-y-4">
157
+ <div class="text-4xl font-bold text-foreground">Heading 1</div>
158
+ <div class="text-3xl font-semibold text-foreground">Heading 2</div>
159
+ <div class="text-2xl font-medium text-foreground">Heading 3</div>
160
+ <div class="text-xl font-medium text-foreground">Heading 4</div>
161
+ <div class="text-lg font-medium text-foreground">Heading 5</div>
162
+ <div class="text-base font-medium text-foreground">Heading 6</div>
163
+
164
+ <div class="text-base text-foreground">Regular paragraph text</div>
165
+ <div class="text-sm text-muted-foreground">Small text</div>
166
+ <div class="text-xs text-muted-foreground">Extra small text</div>
167
+ </div>
168
+ ```
169
+
170
+ ## Custom Utilities
171
+
172
+ ### Border Utilities
173
+
174
+ ```html
175
+ <!-- Default borders -->
176
+ <div class="border-default">Default border</div>
177
+ <div class="border-thick">Thick border</div>
178
+ <div class="border-dashed">Dashed border</div>
179
+
180
+ <!-- Semantic borders -->
181
+ <div class="border-success">Success border</div>
182
+ <div class="border-warning">Warning border</div>
183
+ <div class="border-destructive">Destructive border</div>
184
+ <div class="border-primary">Primary border</div>
185
+
186
+ <!-- Directional borders -->
187
+ <div class="border-top-default">Top border</div>
188
+ <div class="border-bottom-default">Bottom border</div>
189
+ <div class="border-left-default">Left border</div>
190
+ <div class="border-right-default">Right border</div>
191
+ ```
192
+
193
+ ### Elevation Utilities
194
+
195
+ ```html
196
+ <div class="shadow-sm">Small elevation</div>
197
+ <div class="shadow-md">Medium elevation</div>
198
+ <div class="shadow-lg">Large elevation</div>
199
+ <div class="shadow-xl">Extra large elevation</div>
200
+ ```
201
+
202
+ ## Common Anti-Patterns
203
+
204
+ ### Don't Mix Color Systems
205
+
206
+ ```html
207
+ <!-- WRONG: Mixing design system and generic colors -->
208
+ <div class="bg-background text-blue-500 border-red-300">
209
+ Mixed color systems
210
+ </div>
211
+
212
+ <!-- CORRECT: Consistent design system -->
213
+ <div class="bg-background text-foreground border-default">
214
+ Consistent design system
215
+ </div>
216
+ ```
217
+
218
+ ## Validation
219
+
220
+ ### Linting Commands
221
+
222
+ ```bash
223
+ # Check for color violations
224
+ npm run lint:colors
225
+
226
+ # Check for inline styles
227
+ npm run lint:styles
228
+
229
+ # Check for border violations
230
+ npm run lint:borders
231
+
232
+ # Check for opacity violations
233
+ npm run lint:opacity
234
+ ```
235
+
236
+ ## Key Takeaways
237
+
238
+ 1. **Use Design System Colors**: Always use design system Tailwind classes
239
+ 2. **Never Use Generic Colors**: No generic Tailwind color classes
240
+ 3. **Never Use Hardcoded Colors**: No hex, RGB, or hardcoded values
241
+ 4. **Use Custom Utilities**: Leverage custom border and opacity utilities from `src/styles.css`
242
+ 5. **Tailwind v4**: Uses CSS imports, reads variables directly from `src/styles.css`
@@ -0,0 +1,54 @@
1
+ ---
2
+ description: 6 Modus themes with proper switching and persistence in Angular + Vite
3
+ globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Themes - Short
8
+
9
+ 6 Modus themes with proper switching and persistence.
10
+
11
+ ## Key Rules
12
+
13
+ - **6 Modus themes supported** - Classic Light/Dark, Modern Light/Dark, Connect Light/Dark
14
+ - **Use ThemeService with inject()** - Proper Angular service pattern
15
+ - **Theme persistence** - Save to localStorage and restore on page load
16
+ - **Official data-theme attribute** - Use `data-theme` for theme switching
17
+ - **Theme-aware components** - Use computed signals for conditional styling
18
+ - **Test all themes** - Verify components work in all 6 themes
19
+
20
+ ## Available Themes
21
+
22
+ - `modus-classic-light` / `modus-classic-dark`
23
+ - `modus-modern-light` / `modus-modern-dark`
24
+ - `connect-light` / `connect-dark`
25
+
26
+ ## Usage Pattern
27
+
28
+ ```typescript
29
+ @Component({
30
+ template: `
31
+ <div class="bg-background text-foreground">
32
+ Theme: {{ themeService.currentTheme() }}
33
+ Mode: {{ themeService.isDark() ? 'Dark' : 'Light' }}
34
+ </div>
35
+ `,
36
+ })
37
+ export class ThemedComponent {
38
+ readonly themeService = inject(ThemeService);
39
+ }
40
+ ```
41
+
42
+ ## Theme Switching
43
+
44
+ ```typescript
45
+ // Set theme via service
46
+ this.themeService.setTheme('modus-modern-dark');
47
+
48
+ // Document attribute is set automatically
49
+ // document.documentElement.setAttribute('data-theme', theme);
50
+ ```
51
+
52
+ ## Reference
53
+
54
+ For detailed theme implementation and service patterns, fetch the full rule: `modus-angular-themes`