@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,642 @@
1
+ ---
2
+ description: Tailwind CSS v3 with Modus Design System integration
3
+ globs: ["**/*.tsx", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Tailwind CSS Usage in React + Vite
8
+
9
+ ## 🎨 **Tailwind v3 Integration**
10
+
11
+ **CRITICAL**: This React + Vite application uses **Tailwind CSS v3** (not v4) with Modus Design System integration.
12
+
13
+ **Configuration**: Tailwind v3 with design system colors mapped in `tailwind.config.js` and custom utilities in `src/index.css`
14
+
15
+ ## ❌ **FORBIDDEN: Generic Tailwind Colors**
16
+
17
+ ### ❌ **Never Use Generic Tailwind Color Classes**
18
+
19
+ ```tsx
20
+ // ❌ WRONG: Generic Tailwind color classes
21
+ className = "bg-blue-500 text-white border-gray-300";
22
+ className = "bg-red-400 text-yellow-200 border-green-500";
23
+ className = "bg-gray-100 text-black border-purple-300";
24
+ className = "bg-indigo-600 text-orange-100 border-pink-400";
25
+ ```
26
+
27
+ ### ❌ **Never Use Hardcoded Colors**
28
+
29
+ ```tsx
30
+ // ❌ WRONG: Hardcoded colors
31
+ className="bg-[#ffffff] text-[#000000] border-[#e5e5e5]"
32
+ className="bg-[#3b82f6] text-[#ffffff] border-[#1d4ed8]"
33
+ style={{ backgroundColor: "#ffffff", color: "#000000" }}
34
+ ```
35
+
36
+ ### ❌ **Never Use Raw Modus Variables**
37
+
38
+ ```tsx
39
+ // ❌ WRONG: Raw Modus CSS variables
40
+ className="bg-[var(--modus-wc-color-base-page)]"
41
+ className="text-[var(--modus-wc-color-base-content)]"
42
+ style={{ backgroundColor: "var(--modus-wc-color-base-page)" }}
43
+ ```
44
+
45
+ ## ✅ **CORRECT: Design System Colors**
46
+
47
+ ### ✅ **Use Design System Tailwind Classes**
48
+
49
+ ```tsx
50
+ // ✅ CORRECT: Design system colors
51
+ className = "bg-background text-foreground";
52
+ className = "bg-card text-card-foreground border border-border";
53
+ className = "bg-primary text-primary-foreground hover:bg-primary/90";
54
+ className = "bg-secondary text-secondary-foreground hover:bg-secondary/90";
55
+ className = "bg-muted text-muted-foreground";
56
+ className = "bg-accent text-accent-foreground";
57
+ className = "bg-destructive text-destructive-foreground";
58
+ className = "bg-warning text-warning-foreground";
59
+ className = "bg-success text-success-foreground";
60
+ ```
61
+
62
+ ### ✅ **Available Design System Colors**
63
+
64
+ ```tsx
65
+ // ✅ CORRECT: All available design system colors
66
+ const designSystemColors = {
67
+ // Background colors
68
+ background: "bg-background",
69
+ card: "bg-card",
70
+ popover: "bg-popover",
71
+ sidebar: "bg-sidebar",
72
+
73
+ // Text colors
74
+ foreground: "text-foreground",
75
+ "card-foreground": "text-card-foreground",
76
+ "popover-foreground": "text-popover-foreground",
77
+ "sidebar-foreground": "text-sidebar-foreground",
78
+
79
+ // Primary colors
80
+ primary: "bg-primary",
81
+ "primary-foreground": "text-primary-foreground",
82
+
83
+ // Secondary colors
84
+ secondary: "bg-secondary",
85
+ "secondary-foreground": "text-secondary-foreground",
86
+
87
+ // Muted colors
88
+ muted: "bg-muted",
89
+ "muted-foreground": "text-muted-foreground",
90
+
91
+ // Accent colors
92
+ accent: "bg-accent",
93
+ "accent-foreground": "text-accent-foreground",
94
+
95
+ // Status colors
96
+ destructive: "bg-destructive",
97
+ "destructive-foreground": "text-destructive-foreground",
98
+ warning: "bg-warning",
99
+ "warning-foreground": "text-warning-foreground",
100
+ success: "bg-success",
101
+ "success-foreground": "text-success-foreground",
102
+
103
+ // Border colors
104
+ border: "border-border",
105
+ input: "border-input",
106
+ "sidebar-border": "border-sidebar-border",
107
+
108
+ // Ring colors
109
+ ring: "ring-ring",
110
+ "sidebar-ring": "ring-sidebar-ring",
111
+
112
+ // Chart colors
113
+ "chart-1": "bg-chart-1",
114
+ "chart-2": "bg-chart-2",
115
+ "chart-3": "bg-chart-3",
116
+ "chart-4": "bg-chart-4",
117
+ "chart-5": "bg-chart-5",
118
+
119
+ // Sidebar colors
120
+ sidebar: "bg-sidebar",
121
+ "sidebar-foreground": "text-sidebar-foreground",
122
+ "sidebar-primary": "bg-sidebar-primary",
123
+ "sidebar-primary-foreground": "text-sidebar-primary-foreground",
124
+ "sidebar-accent": "bg-sidebar-accent",
125
+ "sidebar-accent-foreground": "text-sidebar-accent-foreground",
126
+ "sidebar-border": "border-sidebar-border",
127
+ "sidebar-ring": "ring-sidebar-ring",
128
+ };
129
+ ```
130
+
131
+ ## 🎯 **Component Styling Patterns**
132
+
133
+ ### ✅ **Button Components**
134
+
135
+ ```tsx
136
+ // ✅ CORRECT: Button with design system colors
137
+ function Button({
138
+ variant = "primary",
139
+ size = "md",
140
+ children,
141
+ ...props
142
+ }: ButtonProps) {
143
+ const baseClasses =
144
+ "inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50";
145
+
146
+ const variantClasses = {
147
+ primary: "bg-primary text-primary-foreground hover:bg-primary/90",
148
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/90",
149
+ destructive:
150
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90",
151
+ outline:
152
+ "border border-border bg-background hover:bg-muted hover:text-muted-foreground",
153
+ ghost: "hover:bg-muted hover:text-muted-foreground",
154
+ link: "text-primary underline-offset-4 hover:underline",
155
+ };
156
+
157
+ const sizeClasses = {
158
+ sm: "h-9 px-3 text-sm",
159
+ md: "h-10 px-4 py-2",
160
+ lg: "h-11 px-8",
161
+ icon: "h-10 w-10",
162
+ };
163
+
164
+ return (
165
+ <button
166
+ className={`${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]}`}
167
+ {...props}
168
+ >
169
+ {children}
170
+ </button>
171
+ );
172
+ }
173
+ ```
174
+
175
+ ### ✅ **Card Components**
176
+
177
+ ```tsx
178
+ // ✅ CORRECT: Card with design system colors
179
+ function Card({ children, className, ...props }: CardProps) {
180
+ return (
181
+ <div
182
+ className={`bg-card text-card-foreground border border-border rounded-lg ${className}`}
183
+ {...props}
184
+ >
185
+ {children}
186
+ </div>
187
+ );
188
+ }
189
+
190
+ function CardHeader({ children, className, ...props }: CardHeaderProps) {
191
+ return (
192
+ <div className={`flex flex-col space-y-1.5 p-6 ${className}`} {...props}>
193
+ {children}
194
+ </div>
195
+ );
196
+ }
197
+
198
+ function CardTitle({ children, className, ...props }: CardTitleProps) {
199
+ return (
200
+ <div
201
+ className={`text-2xl font-semibold leading-none tracking-tight ${className}`}
202
+ {...props}
203
+ >
204
+ {children}
205
+ </div>
206
+ );
207
+ }
208
+
209
+ function CardContent({ children, className, ...props }: CardContentProps) {
210
+ return (
211
+ <div className={`p-6 pt-0 ${className}`} {...props}>
212
+ {children}
213
+ </div>
214
+ );
215
+ }
216
+ ```
217
+
218
+ ### ✅ **Form Components**
219
+
220
+ ```tsx
221
+ // ✅ CORRECT: Form with design system colors
222
+ function Input({ className, ...props }: InputProps) {
223
+ return (
224
+ <input
225
+ className={`flex h-10 w-full rounded-md border border-input bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${className}`}
226
+ {...props}
227
+ />
228
+ );
229
+ }
230
+
231
+ function Label({ className, ...props }: LabelProps) {
232
+ return (
233
+ <div
234
+ className={`text-sm font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70 ${className}`}
235
+ {...props}
236
+ />
237
+ );
238
+ }
239
+
240
+ function Textarea({ className, ...props }: TextareaProps) {
241
+ return (
242
+ <textarea
243
+ className={`flex min-h-[80px] w-full rounded-md border border-input bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${className}`}
244
+ {...props}
245
+ />
246
+ );
247
+ }
248
+ ```
249
+
250
+ ## 📝 **Typography Patterns**
251
+
252
+ ### ✅ **Typography with Design System Colors**
253
+
254
+ ```tsx
255
+ // ✅ CORRECT: Typography using design system colors
256
+ function TypographyExample() {
257
+ return (
258
+ <div className="space-y-4">
259
+ <div className="text-4xl font-bold text-foreground">Heading 1</div>
260
+ <div className="text-3xl font-semibold text-foreground">Heading 2</div>
261
+ <div className="text-2xl font-medium text-foreground">Heading 3</div>
262
+ <div className="text-xl font-medium text-foreground">Heading 4</div>
263
+ <div className="text-lg font-medium text-foreground">Heading 5</div>
264
+ <div className="text-base font-medium text-foreground">Heading 6</div>
265
+
266
+ <div className="text-base text-foreground">Regular paragraph text</div>
267
+ <div className="text-sm text-muted-foreground">Small text</div>
268
+ <div className="text-xs text-muted-foreground">Extra small text</div>
269
+ </div>
270
+ );
271
+ }
272
+ ```
273
+
274
+ ### ✅ **Typography in Cards**
275
+
276
+ ```tsx
277
+ // ✅ CORRECT: Typography within card components
278
+ function CardWithTypography() {
279
+ return (
280
+ <div className="bg-card text-card-foreground border border-border rounded-lg p-6">
281
+ <div className="text-2xl font-semibold text-card-foreground mb-2">
282
+ Card Title
283
+ </div>
284
+ <div className="text-base text-card-foreground mb-4">
285
+ Card description with proper typography hierarchy
286
+ </div>
287
+ <div className="text-sm text-muted-foreground">
288
+ Additional information
289
+ </div>
290
+ </div>
291
+ );
292
+ }
293
+ ```
294
+
295
+ ### ✅ **Typography with Status Colors**
296
+
297
+ ```tsx
298
+ // ✅ CORRECT: Typography with status colors
299
+ function StatusTypography() {
300
+ return (
301
+ <div className="space-y-2">
302
+ <div className="text-sm font-medium text-success">Success message</div>
303
+ <div className="text-sm font-medium text-warning">Warning message</div>
304
+ <div className="text-sm font-medium text-destructive">Error message</div>
305
+ <div className="text-sm font-medium text-primary">Info message</div>
306
+ </div>
307
+ );
308
+ }
309
+ ```
310
+
311
+ ## 🎨 **Advanced Styling Patterns**
312
+
313
+ ### ✅ **Responsive Design**
314
+
315
+ ```tsx
316
+ // ✅ CORRECT: Responsive design with design system colors
317
+ function ResponsiveComponent() {
318
+ return (
319
+ <div
320
+ className="
321
+ grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4
322
+ p-4 md:p-6 lg:p-8
323
+ bg-background text-foreground
324
+ "
325
+ >
326
+ <div className="bg-card text-card-foreground border border-border rounded-lg p-4">
327
+ <div className="text-lg font-semibold mb-2">Card Title</div>
328
+ <div className="text-sm text-muted-foreground">Card description</div>
329
+ </div>
330
+ </div>
331
+ );
332
+ }
333
+ ```
334
+
335
+ ### ✅ **Interactive States**
336
+
337
+ ```tsx
338
+ // ✅ CORRECT: Interactive states with design system colors
339
+ function InteractiveComponent() {
340
+ return (
341
+ <div
342
+ className="
343
+ bg-card text-card-foreground border border-border rounded-lg p-4
344
+ hover:bg-card/80 hover:shadow-lg
345
+ focus:ring-2 focus:ring-ring focus:ring-offset-2
346
+ active:bg-card/90
347
+ transition-all duration-200
348
+ cursor-pointer
349
+ "
350
+ >
351
+ Interactive content
352
+ </div>
353
+ );
354
+ }
355
+ ```
356
+
357
+ ### ✅ **Status Indicators**
358
+
359
+ ```tsx
360
+ // ✅ CORRECT: Status indicators with design system colors
361
+ function StatusIndicator({
362
+ status,
363
+ }: {
364
+ status: "success" | "warning" | "error" | "info";
365
+ }) {
366
+ const statusClasses = {
367
+ success: "bg-success text-success-foreground border-success",
368
+ warning: "bg-warning text-warning-foreground border-warning",
369
+ error: "bg-destructive text-destructive-foreground border-destructive",
370
+ info: "bg-primary text-primary-foreground border-primary",
371
+ };
372
+
373
+ return (
374
+ <div className={`px-3 py-1 rounded border ${statusClasses[status]}`}>
375
+ {status}
376
+ </div>
377
+ );
378
+ }
379
+ ```
380
+
381
+ ### ✅ **Sidebar Components**
382
+
383
+ ```tsx
384
+ // ✅ CORRECT: Sidebar with design system colors
385
+ function SidebarComponent() {
386
+ return (
387
+ <div className="bg-sidebar text-sidebar-foreground border-sidebar-border">
388
+ <div className="p-4 border-b border-sidebar-border">
389
+ <div className="text-lg font-semibold text-sidebar-foreground">
390
+ Sidebar Title
391
+ </div>
392
+ </div>
393
+ <div className="p-4">
394
+ <div className="text-sm text-sidebar-foreground mb-2">Navigation</div>
395
+ <div className="space-y-1">
396
+ <div className="text-sm text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground p-2 rounded cursor-pointer">
397
+ Menu Item 1
398
+ </div>
399
+ <div className="text-sm text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground p-2 rounded cursor-pointer">
400
+ Menu Item 2
401
+ </div>
402
+ </div>
403
+ </div>
404
+ </div>
405
+ );
406
+ }
407
+ ```
408
+
409
+ ### ✅ **Chart Components**
410
+
411
+ ```tsx
412
+ // ✅ CORRECT: Chart components with design system colors
413
+ function ChartComponent() {
414
+ const chartData = [
415
+ { label: "Series 1", value: 100, color: "bg-chart-1" },
416
+ { label: "Series 2", value: 80, color: "bg-chart-2" },
417
+ { label: "Series 3", value: 60, color: "bg-chart-3" },
418
+ { label: "Series 4", value: 40, color: "bg-chart-4" },
419
+ ];
420
+
421
+ return (
422
+ <div className="bg-card text-card-foreground border border-border rounded-lg p-6">
423
+ <div className="text-lg font-semibold text-card-foreground mb-4">
424
+ Chart Title
425
+ </div>
426
+ <div className="space-y-2">
427
+ {chartData.map((item, index) => (
428
+ <div key={index} className="flex items-center space-x-3">
429
+ <div className={`w-4 h-4 rounded ${item.color}`}></div>
430
+ <div className="text-sm text-card-foreground">{item.label}</div>
431
+ <div className="text-sm text-muted-foreground">{item.value}%</div>
432
+ </div>
433
+ ))}
434
+ </div>
435
+ </div>
436
+ );
437
+ }
438
+ ```
439
+
440
+ ## 🔧 **Custom Utilities**
441
+
442
+ ### ✅ **Border Utilities (Already Defined)**
443
+
444
+ ```tsx
445
+ // ✅ CORRECT: Use custom border utilities from src/index.css
446
+ <div className="border-default">Default border</div>
447
+ <div className="border-thick">Thick border</div>
448
+ <div className="border-dashed">Dashed border</div>
449
+ <div className="border-success">Success border</div>
450
+ <div className="border-warning">Warning border</div>
451
+ <div className="border-destructive">Destructive border</div>
452
+ <div className="border-primary">Primary border</div>
453
+ ```
454
+
455
+ ### ✅ **Directional Borders**
456
+
457
+ ```tsx
458
+ // ✅ CORRECT: Directional border utilities
459
+ <div className="border-top-default">Top border</div>
460
+ <div className="border-bottom-default">Bottom border</div>
461
+ <div className="border-left-default">Left border</div>
462
+ <div className="border-right-default">Right border</div>
463
+ <div className="border-top-success">Top success border</div>
464
+ <div className="border-bottom-warning">Bottom warning border</div>
465
+ ```
466
+
467
+ ### ✅ **Elevation Utilities**
468
+
469
+ ```tsx
470
+ // ✅ CORRECT: Use elevation utilities from src/index.css
471
+ <div className="shadow-sm">Small elevation</div>
472
+ <div className="shadow-md">Medium elevation</div>
473
+ <div className="shadow-lg">Large elevation</div>
474
+ <div className="shadow-xl">Extra large elevation</div>
475
+
476
+ // ✅ CORRECT: Custom elevation with design system
477
+ <div className="bg-card text-card-foreground border border-border rounded-lg shadow-sm">
478
+ Card with small elevation
479
+ </div>
480
+ <div className="bg-card text-card-foreground border border-border rounded-lg shadow-md">
481
+ Card with medium elevation
482
+ </div>
483
+ <div className="bg-card text-card-foreground border border-border rounded-lg shadow-lg">
484
+ Card with large elevation
485
+ </div>
486
+ ```
487
+
488
+ ## 🚫 **Common Anti-Patterns**
489
+
490
+ ### ❌ **Don't Mix Color Systems**
491
+
492
+ ```tsx
493
+ // ❌ WRONG: Mixing design system and generic colors
494
+ <div className="bg-background text-blue-500 border-red-300">
495
+ Mixed color systems
496
+ </div>
497
+
498
+ // ✅ CORRECT: Consistent design system
499
+ <div className="bg-background text-foreground border-border">
500
+ Consistent design system
501
+ </div>
502
+ ```
503
+
504
+ ### ❌ **Don't Use Generic Tailwind Colors**
505
+
506
+ ```tsx
507
+ // ❌ WRONG: Generic Tailwind colors
508
+ <div className="bg-blue-500 text-white border-gray-300">
509
+ Generic colors
510
+ </div>
511
+
512
+ // ✅ CORRECT: Design system colors
513
+ <div className="bg-primary text-primary-foreground border-border">
514
+ Design system colors
515
+ </div>
516
+ ```
517
+
518
+ ### ❌ **Don't Use Hardcoded Colors**
519
+
520
+ ```tsx
521
+ // ❌ WRONG: Hardcoded colors
522
+ <div className="bg-[#ffffff] text-[#000000] border-[#e5e5e5]">
523
+ Hardcoded colors
524
+ </div>
525
+
526
+ // ✅ CORRECT: Design system colors
527
+ <div className="bg-background text-foreground border-border">
528
+ Design system colors
529
+ </div>
530
+ ```
531
+
532
+ ## 🎯 **Tailwind v3 Specific Patterns**
533
+
534
+ ### ✅ **CSS Import Order**
535
+
536
+ ```css
537
+ /* ✅ CORRECT: CSS import order in src/index.css */
538
+ @import url("https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.17.0/dist/field-systems/fonts/modus-icons.css");
539
+ @import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap");
540
+ @tailwind base;
541
+ @tailwind components;
542
+ @tailwind utilities;
543
+ ```
544
+
545
+ ### ✅ **Tailwind Configuration**
546
+
547
+ ```js
548
+ // ✅ CORRECT: tailwind.config.js
549
+ export default {
550
+ content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
551
+ theme: {
552
+ extend: {
553
+ colors: {
554
+ background: "var(--background)",
555
+ foreground: "var(--foreground)",
556
+ card: "var(--card)",
557
+ "card-foreground": "var(--card-foreground)",
558
+ // ... other design system colors
559
+ },
560
+ fontFamily: {
561
+ sans: ["Open Sans", "sans-serif"],
562
+ },
563
+ },
564
+ },
565
+ plugins: [],
566
+ };
567
+ ```
568
+
569
+ ## 🔧 **Validation**
570
+
571
+ ### ✅ **Linting Commands**
572
+
573
+ ```bash
574
+ # Check for color violations
575
+ npm run lint:colors
576
+
577
+ # Check for inline styles
578
+ npm run lint:styles
579
+
580
+ # Check for border violations
581
+ npm run lint:borders
582
+ ```
583
+
584
+ ### ✅ **Color Testing**
585
+
586
+ ```tsx
587
+ // ✅ CORRECT: Test design system colors
588
+ function ColorTest() {
589
+ const colorCombinations = [
590
+ { bg: "bg-background", text: "text-foreground" },
591
+ { bg: "bg-card", text: "text-card-foreground" },
592
+ { bg: "bg-primary", text: "text-primary-foreground" },
593
+ { bg: "bg-secondary", text: "text-secondary-foreground" },
594
+ { bg: "bg-muted", text: "text-muted-foreground" },
595
+ { bg: "bg-accent", text: "text-accent-foreground" },
596
+ { bg: "bg-destructive", text: "text-destructive-foreground" },
597
+ { bg: "bg-warning", text: "text-warning-foreground" },
598
+ { bg: "bg-success", text: "text-success-foreground" },
599
+ { bg: "bg-sidebar", text: "text-sidebar-foreground" },
600
+ { bg: "bg-chart-1", text: "text-foreground" },
601
+ { bg: "bg-chart-2", text: "text-foreground" },
602
+ { bg: "bg-chart-3", text: "text-foreground" },
603
+ { bg: "bg-chart-4", text: "text-foreground" },
604
+ ];
605
+
606
+ return (
607
+ <div className="space-y-4">
608
+ {colorCombinations.map((combo, index) => (
609
+ <div key={index} className={`${combo.bg} ${combo.text} p-4 rounded`}>
610
+ {combo.bg} + {combo.text}
611
+ </div>
612
+ ))}
613
+ </div>
614
+ );
615
+ }
616
+ ```
617
+
618
+ ## 🎯 **Key Takeaways**
619
+
620
+ 1. **Use Design System Colors**: Always use design system Tailwind classes
621
+ 2. **Never Use Generic Colors**: No generic Tailwind color classes
622
+ 3. **Never Use Hardcoded Colors**: No hex, RGB, or hardcoded values
623
+ 4. **Use Custom Utilities**: Leverage custom border utilities from `src/index.css`
624
+ 5. **Tailwind v3**: This is Tailwind v3, not v4
625
+
626
+ ## 🔍 **Tailwind Usage Checklist**
627
+
628
+ - [ ] ✅ **Design System Colors**: Using design system Tailwind classes exclusively
629
+ - [ ] ✅ **No Generic Colors**: No generic Tailwind color classes
630
+ - [ ] ✅ **No Hardcoded Colors**: No hex, RGB, or hardcoded values
631
+ - [ ] ✅ **Custom Utilities**: Using custom border utilities from `src/index.css`
632
+ - [ ] ✅ **Typography**: Using design system colors for typography
633
+ - [ ] ✅ **Sidebar Colors**: Using sidebar-specific design system colors
634
+ - [ ] ✅ **Chart Colors**: Using chart color utilities for data visualization
635
+ - [ ] ✅ **Elevation**: Using shadow utilities for depth and hierarchy
636
+ - [ ] ✅ **Tailwind v3**: Using Tailwind v3 patterns and configuration
637
+ - [ ] ✅ **CSS Import Order**: Proper CSS import order in `src/index.css`
638
+ - [ ] ✅ **Responsive Design**: Using responsive design patterns with design system colors
639
+
640
+ ---
641
+
642
+ **Remember: This React + Vite application uses Tailwind CSS v3 with Modus Design System integration. Always use design system Tailwind classes, never generic Tailwind colors or hardcoded values. Use custom border utilities from `src/index.css` and maintain proper CSS import order.**
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: 6 Modus themes with proper switching and persistence
3
+ globs: ["**/*.tsx", "**/*.ts"]
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 ThemeProvider and useTheme hook** - Proper theme context setup
15
+ - **Hydration safety** - Handle SSR/hydration with `mounted` state
16
+ - **Theme persistence** - Save to localStorage and restore on page load
17
+ - **Official data-theme attribute** - Use `data-theme` for theme switching
18
+ - **Theme-aware components** - Use theme context for conditional styling
19
+ - **Test all themes** - Verify components work in all 6 themes
20
+
21
+ ## Reference
22
+
23
+ For detailed theme implementation, context patterns, and advanced theming techniques, fetch the full rule: `modus-themes-react`