@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,23 @@
1
+ ---
2
+ description: Critical integration patterns for Modus Navbar with Side Navigation in React
3
+ globs: ["**/components/ModusNavbar*.tsx", "**/components/ModusSideNavigation*.tsx", "**/demos/**/page.tsx"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Navbar + Side Navigation - Short
8
+
9
+ Critical integration patterns for Modus Navbar with Side Navigation in React.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use ModusNavbar wrapper component** - Never use `ModusWcNavbar` directly
14
+ - **Pass props as native React objects** - Wrapper handles serialization
15
+ - **Sync via ref and state** - Set `expanded` on ref AND track in React state
16
+ - **Position side navigation absolutely** - Use `position: absolute`, `z-index: 999`
17
+ - **Account for collapsed width** - Add `margin-left: 4rem` to panel content
18
+ - **Listen for expandedChange events** - Keep React state in sync with web component
19
+ - **Collapse sub-menus when nav closes** - Reset sub-menu states on collapse
20
+
21
+ ## Reference
22
+
23
+ For detailed patterns, layout structure, and common pitfalls, fetch the full rule: `modus-navbar-side-navigation-react`
@@ -0,0 +1,247 @@
1
+ ---
2
+ description: Critical integration patterns for Modus Navbar with Side Navigation in React
3
+ globs: ["**/components/ModusNavbar*.tsx", "**/components/ModusSideNavigation*.tsx", "**/demos/**/page.tsx"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Modus Navbar + Side Navigation Integration
8
+
9
+ Critical patterns for integrating `ModusWcNavbar` with `ModusWcSideNavigation` in React applications.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use the ModusNavbar wrapper component** - Never use `ModusWcNavbar` directly
14
+ - **Pass props as native React objects** - Wrapper handles serialization
15
+ - **Sync navbar hamburger menu with side navigation** - Use `onMainMenuOpenChange` callback
16
+ - **Position side navigation absolutely** - Required for proper layering
17
+ - **Set explicit z-index** - Ensure side navigation renders above content
18
+
19
+ ---
20
+
21
+ ## DO: Use ModusNavbar Wrapper Component
22
+
23
+ The `ModusNavbar` wrapper component handles prop serialization and event binding correctly.
24
+
25
+ ```tsx
26
+ // DO: Use the wrapper component
27
+ import ModusNavbar from "../../components/ModusNavbar";
28
+
29
+ <ModusNavbar
30
+ userCard={userCard}
31
+ visibility={{ mainMenu: true, user: true }}
32
+ onMainMenuOpenChange={handleNavbarMenuOpenChange}
33
+ />;
34
+ ```
35
+
36
+ ## DON'T: Use ModusWcNavbar Directly
37
+
38
+ Direct usage causes prop serialization issues.
39
+
40
+ ```tsx
41
+ // DON'T: Direct usage won't work properly
42
+ import { ModusWcNavbar } from "@trimble-oss/moduswebcomponents-react";
43
+
44
+ <ModusWcNavbar
45
+ user-card={JSON.stringify(userCard)} // Won't work!
46
+ visibility={JSON.stringify({ mainMenu: true })} // Won't work!
47
+ />;
48
+ ```
49
+
50
+ ---
51
+
52
+ ## DO: Sync Navbar with Side Navigation via Ref
53
+
54
+ Use a ref to directly set the `expanded` property on the side navigation.
55
+
56
+ ```tsx
57
+ const [navbarMenuExpanded, setNavbarMenuExpanded] = useState(false);
58
+ const sideNavRef = useRef<any>(null);
59
+
60
+ const handleNavbarMenuOpenChange = useCallback((isOpen: boolean) => {
61
+ setNavbarMenuExpanded(isOpen);
62
+
63
+ // Directly set expanded property on the web component
64
+ const sideNav = sideNavRef.current;
65
+ if (sideNav) {
66
+ sideNav.expanded = isOpen;
67
+ }
68
+ }, []);
69
+
70
+ <ModusNavbar
71
+ onMainMenuOpenChange={handleNavbarMenuOpenChange}
72
+ />
73
+
74
+ <ModusWcSideNavigation
75
+ ref={sideNavRef}
76
+ expanded={navbarMenuExpanded}
77
+ />
78
+ ```
79
+
80
+ ## DON'T: Rely Only on React State
81
+
82
+ React state alone won't trigger the web component to expand.
83
+
84
+ ```tsx
85
+ // DON'T: This alone won't work
86
+ const [expanded, setExpanded] = useState(false);
87
+
88
+ const handleMenuOpen = (isOpen: boolean) => {
89
+ setExpanded(isOpen); // Web component won't update!
90
+ };
91
+
92
+ <ModusWcSideNavigation expanded={expanded} />; // May not respond
93
+ ```
94
+
95
+ ---
96
+
97
+ ## DO: Position Side Navigation Absolutely with Z-Index
98
+
99
+ Side navigation uses `position: absolute` internally. Set proper CSS.
100
+
101
+ ```css
102
+ .main-content-row {
103
+ display: flex;
104
+ flex: 1;
105
+ position: relative; /* Creates positioning context */
106
+ min-height: 500px;
107
+ }
108
+
109
+ .side-navigation {
110
+ position: absolute;
111
+ left: 0;
112
+ top: 0;
113
+ height: 100%;
114
+ z-index: 999; /* Ensure above content */
115
+ }
116
+
117
+ .panel-content {
118
+ flex: 1;
119
+ padding: 1.5rem;
120
+ margin-left: 4rem; /* Account for collapsed nav width */
121
+ }
122
+ ```
123
+
124
+ ## DON'T: Use Relative Positioning
125
+
126
+ Relative positioning causes the side navigation to be hidden by other content.
127
+
128
+ ```css
129
+ /* DON'T: Side nav will be hidden */
130
+ .side-navigation {
131
+ position: relative; /* Wrong! */
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## DO: Listen for expandedChange Events
138
+
139
+ Keep React state in sync with web component state changes.
140
+
141
+ ```tsx
142
+ useEffect(() => {
143
+ const sideNav = sideNavRef.current;
144
+ if (!sideNav) return;
145
+
146
+ const handleExpandedChange = (e: Event) => {
147
+ const customEvent = e as CustomEvent<boolean>;
148
+ setNavbarMenuExpanded(customEvent.detail);
149
+ };
150
+
151
+ sideNav.addEventListener("expandedChange", handleExpandedChange);
152
+
153
+ return () => {
154
+ sideNav.removeEventListener("expandedChange", handleExpandedChange);
155
+ };
156
+ }, []);
157
+ ```
158
+
159
+ ---
160
+
161
+ ## DO: Use Correct User Card Structure
162
+
163
+ ```tsx
164
+ const userCard = {
165
+ name: "John Doe",
166
+ email: "john.doe@example.com",
167
+ avatarSrc: "", // Optional
168
+ avatarAlt: "User Avatar", // Optional
169
+ };
170
+ ```
171
+
172
+ ---
173
+
174
+ ## DO: Handle Sub-Menu State When Side Nav Collapses
175
+
176
+ Collapse all sub-menus when the side navigation closes.
177
+
178
+ ```tsx
179
+ const [subMenuStates, setSubMenuStates] = useState<Record<string, boolean>>({
180
+ charts: false,
181
+ maps: false,
182
+ });
183
+
184
+ const collapseAllSubMenus = () => {
185
+ setSubMenuStates({
186
+ charts: false,
187
+ maps: false,
188
+ });
189
+ };
190
+
191
+ const handleNavbarMenuOpenChange = useCallback((isOpen: boolean) => {
192
+ setNavbarMenuExpanded(isOpen);
193
+
194
+ if (!isOpen) {
195
+ collapseAllSubMenus(); // Reset sub-menus when collapsing
196
+ }
197
+ }, []);
198
+ ```
199
+
200
+ ---
201
+
202
+ ## Required Layout Structure
203
+
204
+ ```tsx
205
+ <div className="layout-with-navbar">
206
+ <ModusNavbar
207
+ userCard={userCard}
208
+ visibility={{ mainMenu: true, user: true }}
209
+ onMainMenuOpenChange={handleNavbarMenuOpenChange}
210
+ />
211
+
212
+ <div className="main-content-row">
213
+ <ModusWcSideNavigation
214
+ ref={sideNavRef}
215
+ expanded={navbarMenuExpanded}
216
+ collapse-on-click-outside={true}
217
+ max-width="256px"
218
+ mode="push"
219
+ className="side-navigation"
220
+ >
221
+ <ModusWcMenu>
222
+ <ModusWcMenuItem label="Home" value="home">
223
+ <ModusWcIcon slot="start-icon" name="home" decorative={true} />
224
+ </ModusWcMenuItem>
225
+ </ModusWcMenu>
226
+ </ModusWcSideNavigation>
227
+
228
+ <div className="panel-content">{/* Main content here */}</div>
229
+ </div>
230
+ </div>
231
+ ```
232
+
233
+ ---
234
+
235
+ ## Common Pitfalls
236
+
237
+ 1. **Hamburger menu not visible** - Use `ModusNavbar` wrapper, not `ModusWcNavbar` directly
238
+ 2. **Side nav expands then immediately collapses** - Bind `expanded` prop to React state and set via ref
239
+ 3. **Side nav hidden by content** - Use `position: absolute` and `z-index: 999`
240
+ 4. **Events not firing** - Use `addEventListener` for web component custom events
241
+ 5. **Props not updating** - Set properties directly on the ref for web components
242
+
243
+ ---
244
+
245
+ ## Reference Implementation
246
+
247
+ See `/src/demos/side-navigation-demo/page.tsx` for complete working examples.
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: Strict prohibition of emojis in React + Vite application
3
+ globs: ["**/*.tsx", "**/*.ts", "**/*.md"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus No Emojis - Short
8
+
9
+ Strict prohibition of emojis in React + Vite application.
10
+
11
+ ## Key Rules
12
+
13
+ - **Never use emojis in code** - No emoji characters in any code files
14
+ - **Never use emojis in components** - No emoji in JSX, content, or UI elements
15
+ - **Never use emojis in content** - No emoji in text, descriptions, or user-facing content
16
+ - **Use Modus icons instead** - Replace emojis with appropriate Modus icons
17
+ - **Use Unicode characters for symbols** - Use proper Unicode symbols when needed
18
+ - **Check all content** - Verify no emojis in comments, strings, or documentation
19
+ - **Use linting to catch violations** - Automated checks for emoji usage
20
+
21
+ ## Reference
22
+
23
+ For detailed emoji prohibition guidelines, icon replacement patterns, and linting setup, fetch the full rule: `modus-no-emojis-react`
@@ -0,0 +1,70 @@
1
+ ---
2
+ description: Essential opacity utilities for Modus Design System colors in React + Vite
3
+ globs: ["**/*.tsx", "**/*.css"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Opacity Utilities - Short
8
+
9
+ Essential opacity utilities for Modus Design System colors in React + Vite.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use custom opacity utilities, not Tailwind /80 syntax** - `text-foreground-80` not `text-foreground/80`
14
+ - **CSS variables don't work with Tailwind opacity modifiers** - Tailwind needs actual color values
15
+ - **Use color-mix() for opacity variants** - Modern CSS function for proper opacity calculation
16
+ - **All utilities defined in index.css** - No Tailwind config changes needed
17
+ - **Respects theme switching** - Works in all 6 Modus themes
18
+ - **Use semantic color names** - `foreground`, `primary`, `destructive`, etc.
19
+
20
+ ## Available Utilities
21
+
22
+ ### Opacity Levels
23
+
24
+ - **80%** - `text-foreground-80`, `bg-primary-80`, `border-destructive-80`
25
+ - **60%** - `text-foreground-60`, `bg-primary-60`, `border-destructive-60`
26
+ - **40%** - `text-foreground-40`, `bg-primary-40`, `border-destructive-40`
27
+ - **20%** - `text-foreground-20`, `bg-primary-20`, `border-destructive-20`
28
+
29
+ ### Colors
30
+
31
+ - **foreground** - `text-foreground-80`, `bg-foreground-80`, `border-foreground-80`
32
+ - **muted-foreground** - `text-muted-foreground-80`, `bg-muted-foreground-80`
33
+ - **primary** - `text-primary-80`, `bg-primary-80`, `border-primary-80`
34
+ - **secondary** - `text-secondary-80`, `bg-secondary-80`
35
+ - **destructive** - `text-destructive-80`, `bg-destructive-80`, `border-destructive-80`
36
+ - **warning** - `text-warning-80`, `bg-warning-80`, `border-warning-80`
37
+ - **success** - `text-success-80`, `bg-success-80`, `border-success-80`
38
+
39
+ ## Usage Examples
40
+
41
+ ```tsx
42
+ // ❌ This doesn't work with CSS variables
43
+ <div className="text-foreground/80">Text with 80% opacity</div>
44
+
45
+ // ✅ Use custom opacity utilities
46
+ <div className="text-foreground-80">Text with 80% opacity</div>
47
+ <div className="bg-primary-60">Primary background with 60% opacity</div>
48
+ <div className="border border-destructive-40">Destructive border with 40% opacity</div>
49
+ ```
50
+
51
+ ## Common Patterns
52
+
53
+ ```tsx
54
+ // Text hierarchy
55
+ <div className="text-foreground">Main heading (100%)</div>
56
+ <div className="text-foreground-80">Subheading (80%)</div>
57
+ <div className="text-muted-foreground-60">Description (60%)</div>
58
+
59
+ // Interactive states
60
+ <button className="bg-primary hover:bg-primary-80 transition-colors">
61
+ Hover with opacity
62
+ </button>
63
+
64
+ // Overlay effects
65
+ <div className="bg-foreground-20 absolute inset-0 rounded-lg"></div>
66
+ ```
67
+
68
+ ## Reference
69
+
70
+ For detailed implementation patterns, migration guide, and advanced techniques, fetch the full rule: `modus-opacity-utilities-react`
@@ -0,0 +1,208 @@
1
+ ---
2
+ description: Essential opacity utilities for Modus Design System colors in React + Vite
3
+ globs: ["**/*.tsx", "**/*.css"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Modus Opacity Utilities - React
8
+
9
+ Essential opacity utilities for Modus Design System colors in React + Vite.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use custom opacity utilities, not Tailwind /80 syntax** - `text-foreground-80` not `text-foreground/80`
14
+ - **CSS variables don't work with Tailwind opacity modifiers** - Tailwind needs actual color values
15
+ - **Use color-mix() for opacity variants** - Modern CSS function for proper opacity calculation
16
+ - **All utilities defined in index.css** - No Tailwind config changes needed
17
+ - **Respects theme switching** - Works in all 6 Modus themes
18
+ - **Use semantic color names** - `foreground`, `primary`, `destructive`, etc.
19
+
20
+ ## Available Opacity Levels
21
+
22
+ - **80%** - `text-foreground-80`, `bg-primary-80`, `border-destructive-80`
23
+ - **60%** - `text-foreground-60`, `bg-primary-60`, `border-destructive-60`
24
+ - **40%** - `text-foreground-40`, `bg-primary-40`, `border-destructive-40`
25
+ - **20%** - `text-foreground-20`, `bg-primary-20`, `border-destructive-20`
26
+
27
+ ## Available Colors
28
+
29
+ - **foreground** - `text-foreground-80`, `bg-foreground-80`, `border-foreground-80`
30
+ - **muted-foreground** - `text-muted-foreground-80`, `bg-muted-foreground-80`
31
+ - **primary** - `text-primary-80`, `bg-primary-80`, `border-primary-80`
32
+ - **secondary** - `text-secondary-80`, `bg-secondary-80`
33
+ - **destructive** - `text-destructive-80`, `bg-destructive-80`, `border-destructive-80`
34
+ - **warning** - `text-warning-80`, `bg-warning-80`, `border-warning-80`
35
+ - **success** - `text-success-80`, `bg-success-80`, `border-success-80`
36
+
37
+ ## Usage Examples
38
+
39
+ ### Text Opacity
40
+
41
+ ```tsx
42
+ // ❌ This doesn't work with CSS variables
43
+ <div className="text-foreground/80">Text with 80% opacity</div>
44
+
45
+ // ✅ Use custom opacity utilities
46
+ <div className="text-foreground-80">Text with 80% opacity</div>
47
+ <div className="text-primary-60">Primary text with 60% opacity</div>
48
+ <div className="text-muted-foreground-40">Muted text with 40% opacity</div>
49
+ ```
50
+
51
+ ### Background Opacity
52
+
53
+ ```tsx
54
+ // ✅ Background opacity utilities
55
+ <div className="bg-primary-80">Primary background with 80% opacity</div>
56
+ <div className="bg-destructive-60">Destructive background with 60% opacity</div>
57
+ <div className="bg-warning-40">Warning background with 40% opacity</div>
58
+ ```
59
+
60
+ ### Border Opacity
61
+
62
+ ```tsx
63
+ // ✅ Border opacity utilities
64
+ <div className="border border-primary-80">Primary border with 80% opacity</div>
65
+ <div className="border border-destructive-60">Destructive border with 60% opacity</div>
66
+ <div className="border border-success-40">Success border with 40% opacity</div>
67
+ ```
68
+
69
+ ### Combined Usage
70
+
71
+ ```tsx
72
+ // ✅ Mix opacity utilities with other classes
73
+ <div className="p-4 bg-card border border-primary-40 rounded-lg">
74
+ <div className="text-foreground-80 mb-2">Title with 80% opacity</div>
75
+ <div className="text-muted-foreground-60">Description with 60% opacity</div>
76
+ </div>
77
+ ```
78
+
79
+ ## Implementation Details
80
+
81
+ ### CSS Custom Properties
82
+
83
+ ```css
84
+ /* Opacity variants for design system colors */
85
+ --foreground-80: color-mix(in srgb, var(--foreground) 80%, transparent);
86
+ --foreground-60: color-mix(in srgb, var(--foreground) 60%, transparent);
87
+ --foreground-40: color-mix(in srgb, var(--foreground) 40%, transparent);
88
+ --foreground-20: color-mix(in srgb, var(--foreground) 20%, transparent);
89
+ ```
90
+
91
+ ### Tailwind Utilities
92
+
93
+ ```css
94
+ .text-foreground-80 {
95
+ color: var(--foreground-80);
96
+ }
97
+ .text-foreground-60 {
98
+ color: var(--foreground-60);
99
+ }
100
+ .text-foreground-40 {
101
+ color: var(--foreground-40);
102
+ }
103
+ .text-foreground-20 {
104
+ color: var(--foreground-20);
105
+ }
106
+ ```
107
+
108
+ ## Common Patterns
109
+
110
+ ### Subtle Text Hierarchy
111
+
112
+ ```tsx
113
+ <div className="space-y-2">
114
+ <div className="text-foreground">Main heading (100%)</div>
115
+ <div className="text-foreground-80">Subheading (80%)</div>
116
+ <div className="text-muted-foreground-60">Description (60%)</div>
117
+ <div className="text-muted-foreground-40">Caption (40%)</div>
118
+ </div>
119
+ ```
120
+
121
+ ### Interactive States
122
+
123
+ ```tsx
124
+ <button className="bg-primary hover:bg-primary-80 transition-colors">
125
+ Hover with opacity
126
+ </button>
127
+ ```
128
+
129
+ ### Overlay Effects
130
+
131
+ ```tsx
132
+ <div className="relative">
133
+ <div className="bg-foreground-20 absolute inset-0 rounded-lg"></div>
134
+ <div className="relative z-10 p-4">Content with overlay</div>
135
+ </div>
136
+ ```
137
+
138
+ ## Browser Support
139
+
140
+ - **color-mix()** - Supported in all modern browsers (Chrome 111+, Firefox 113+, Safari 16.2+)
141
+ - **Fallback** - Gracefully degrades to full opacity in older browsers
142
+ - **Progressive enhancement** - Works without JavaScript
143
+
144
+ ## Performance
145
+
146
+ - **CSS-only solution** - No JavaScript overhead
147
+ - **Efficient rendering** - Uses native CSS color-mix() function
148
+ - **Theme-aware** - Automatically updates with theme changes
149
+ - **No runtime calculations** - Pre-computed opacity values
150
+
151
+ ## Migration Guide
152
+
153
+ ### From Tailwind /80 syntax
154
+
155
+ ```tsx
156
+ // ❌ Old (doesn't work with CSS variables)
157
+ <div className="text-foreground/80">Text</div>
158
+ <div className="bg-primary/60">Background</div>
159
+ <div className="border-destructive/40">Border</div>
160
+
161
+ // ✅ New (works with design system)
162
+ <div className="text-foreground-80">Text</div>
163
+ <div className="bg-primary-60">Background</div>
164
+ <div className="border-destructive-40">Border</div>
165
+ ```
166
+
167
+ ### From inline styles
168
+
169
+ ```tsx
170
+ // ❌ Old (not theme-aware)
171
+ <div style={{ color: 'rgba(0, 0, 0, 0.8)' }}>Text</div>
172
+
173
+ // ✅ New (theme-aware)
174
+ <div className="text-foreground-80">Text</div>
175
+ ```
176
+
177
+ ## Best Practices
178
+
179
+ - **Use semantic colors** - `foreground`, `primary`, `destructive` instead of generic colors
180
+ - **Maintain contrast ratios** - Ensure accessibility with opacity levels
181
+ - **Test in all themes** - Verify opacity works in light and dark modes
182
+ - **Use consistent opacity levels** - Stick to 80%, 60%, 40%, 20% for consistency
183
+ - **Combine with other utilities** - Mix with spacing, sizing, and layout classes
184
+ - **Document opacity choices** - Explain why specific opacity levels are used
185
+
186
+ ## Troubleshooting
187
+
188
+ ### Opacity not working
189
+
190
+ - Check if using custom utilities (`text-foreground-80`) not Tailwind syntax (`text-foreground/80`)
191
+ - Verify CSS custom properties are defined in `index.css`
192
+ - Ensure browser supports `color-mix()` function
193
+
194
+ ### Theme switching issues
195
+
196
+ - Opacity utilities automatically respect theme changes
197
+ - No additional configuration needed for theme switching
198
+ - Test in both light and dark modes
199
+
200
+ ### Performance concerns
201
+
202
+ - Opacity utilities are CSS-only and highly performant
203
+ - No JavaScript calculations or runtime overhead
204
+ - Uses native browser color-mix() function
205
+
206
+ ## Reference
207
+
208
+ This rule provides comprehensive opacity utilities for Modus Design System colors, ensuring consistent and theme-aware opacity effects throughout the React application.
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: Core React best practices for Modus Design System integration
3
+ globs: ["**/*.tsx", "**/*.ts"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus React Best Practices - Short
8
+
9
+ Core React best practices for Modus Design System integration.
10
+
11
+ ## Key Rules
12
+
13
+ - **Single configurable components** - One component with variants, not multiple specific components
14
+ - **Use design system colors only** - Never use generic Tailwind colors or hardcoded values
15
+ - **Component composition pattern** - Build complex components from smaller, reusable pieces
16
+ - **Event handling with refs** - Use refs and event listeners for Modus Web Components
17
+ - **Theme-aware components** - Use theme context for conditional styling and content
18
+ - **Performance optimization** - Use memoization and lazy loading where appropriate
19
+ - **Vite-specific patterns** - Use environment variables, dynamic imports, and asset imports
20
+
21
+ ## Reference
22
+
23
+ For detailed component patterns, styling architecture, and advanced React techniques, fetch the full rule: `modus-react-best-practices`