@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,82 @@
1
+ ---
2
+ applyTo: "src/components/**/*.tsx"
3
+ ---
4
+
5
+ # Modus Wrapper Component Patterns
6
+
7
+ These are wrapper components that wrap `@trimble-oss/moduswebcomponents-react` web components.
8
+
9
+ ## Event Handling Pattern
10
+
11
+ Always use `useRef` + `useEffect` for web component events:
12
+
13
+ ```tsx
14
+ const componentRef = useRef<HTMLModusWcButtonElement>(null);
15
+
16
+ useEffect(() => {
17
+ const element = componentRef.current;
18
+ if (!element) return;
19
+
20
+ const handleEvent = (event: Event) => {
21
+ const customEvent = event as CustomEvent<EventDetail>;
22
+ // Handle event
23
+ };
24
+
25
+ element.addEventListener('eventName', handleEvent);
26
+ return () => element.removeEventListener('eventName', handleEvent);
27
+ }, []);
28
+ ```
29
+
30
+ ## State Management
31
+
32
+ - Let Modus components manage their own internal state
33
+ - Don't control accordion/modal expanded state from React useState
34
+ - Use refs for programmatic control when needed
35
+
36
+ ## Props Pattern
37
+
38
+ Use conditional prop spreading to avoid overriding defaults:
39
+
40
+ ```tsx
41
+ <ModusWcButton
42
+ {...(color && { color })}
43
+ {...(variant && { variant })}
44
+ size={size}
45
+ >
46
+ {children}
47
+ </ModusWcButton>
48
+ ```
49
+
50
+ ## Modal Implementation
51
+
52
+ Use `forwardRef` with `useImperativeHandle`:
53
+
54
+ ```tsx
55
+ const ModusModal = forwardRef<ModusModalRef, Props>((props, ref) => {
56
+ const modalRef = useRef<HTMLModusWcModalElement>(null);
57
+
58
+ const openModal = () => {
59
+ const dialog = modalRef.current?.querySelector("dialog");
60
+ dialog?.showModal();
61
+ };
62
+
63
+ useImperativeHandle(ref, () => ({ openModal, closeModal }));
64
+ // ...
65
+ });
66
+ ```
67
+
68
+ ## Checkbox Bug
69
+
70
+ The `value` property is inverted. Always invert:
71
+
72
+ ```tsx
73
+ const actualChecked = !event.detail.value;
74
+ ```
75
+
76
+ ## Select Component
77
+
78
+ Use `ModusDropdownMenu` instead of `ModusSelect` for reliable event handling.
79
+
80
+ ## Button Group
81
+
82
+ Don't set default `variant` or `color` on buttons inside groups - let the group control styling.
@@ -0,0 +1,82 @@
1
+ ---
2
+ applyTo: "src/demos/**/*.tsx"
3
+ ---
4
+
5
+ # Demo Page Patterns
6
+
7
+ Demo pages showcase Modus components with interactive examples.
8
+
9
+ ## Page Structure
10
+
11
+ ```tsx
12
+ export default function ComponentDemo() {
13
+ return (
14
+ <div className="space-y-8 p-6">
15
+ <div className="text-2xl font-bold text-foreground">Component Name</div>
16
+ <div className="text-foreground-60">Description of the component.</div>
17
+
18
+ {/* Demo sections */}
19
+ <DemoSection title="Basic Usage">
20
+ {/* Examples */}
21
+ </DemoSection>
22
+
23
+ <DemoSection title="Variants">
24
+ {/* Variant examples */}
25
+ </DemoSection>
26
+ </div>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ## Demo Section Pattern
32
+
33
+ ```tsx
34
+ <div className="space-y-4">
35
+ <div className="text-lg font-semibold text-foreground">Section Title</div>
36
+ <div className="flex flex-wrap gap-4">
37
+ {/* Component examples */}
38
+ </div>
39
+ </div>
40
+ ```
41
+
42
+ ## Styling Rules
43
+
44
+ - Use design system colors: `bg-background`, `text-foreground`, `bg-card`
45
+ - Use opacity utilities: `text-foreground-60` (not `text-foreground/60`)
46
+ - Use custom border utilities: `border-default`, `border-bottom-default`
47
+ - Use `<div>` elements only (no semantic HTML)
48
+
49
+ ## Interactive Examples
50
+
51
+ Show multiple states and variants:
52
+
53
+ ```tsx
54
+ <div className="flex flex-wrap gap-4">
55
+ <ModusButton color="primary">Primary</ModusButton>
56
+ <ModusButton color="secondary">Secondary</ModusButton>
57
+ <ModusButton color="danger">Danger</ModusButton>
58
+ </div>
59
+ ```
60
+
61
+ ## Event Handling Demos
62
+
63
+ Demonstrate event handling with visible feedback:
64
+
65
+ ```tsx
66
+ const [lastAction, setLastAction] = useState<string>("");
67
+
68
+ <ModusButton onClick={() => setLastAction("Button clicked")}>
69
+ Click Me
70
+ </ModusButton>
71
+ <div className="text-foreground-60">Last action: {lastAction}</div>
72
+ ```
73
+
74
+ ## Icons in Demos
75
+
76
+ Use Modus icons only with underscore naming:
77
+
78
+ ```tsx
79
+ <i className="modus-icons">check_circle</i>
80
+ <i className="modus-icons">warning</i>
81
+ <i className="modus-icons">info</i>
82
+ ```
@@ -0,0 +1,76 @@
1
+ ---
2
+ applyTo: "src/pages/**/*.tsx"
3
+ ---
4
+
5
+ # Application Page Patterns
6
+
7
+ Pages are user-facing application screens in `src/pages/`.
8
+
9
+ ## Page Structure
10
+
11
+ ```tsx
12
+ export default function PageName() {
13
+ return (
14
+ <div className="min-h-screen bg-background">
15
+ {/* Page content */}
16
+ <div className="container mx-auto p-6">
17
+ <div className="text-2xl font-bold text-foreground mb-6">
18
+ Page Title
19
+ </div>
20
+ {/* Content sections */}
21
+ </div>
22
+ </div>
23
+ );
24
+ }
25
+ ```
26
+
27
+ ## Layout Patterns
28
+
29
+ Use Tailwind utilities with design system colors:
30
+
31
+ ```tsx
32
+ // Card layout
33
+ <div className="bg-card border-default rounded-lg p-6">
34
+ {/* Card content */}
35
+ </div>
36
+
37
+ // Grid layout
38
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
39
+ {/* Grid items */}
40
+ </div>
41
+ ```
42
+
43
+ ## Navigation
44
+
45
+ Add routes in `src/App.tsx`:
46
+
47
+ ```tsx
48
+ <Route path="/your-page" element={<YourPage />} />
49
+ ```
50
+
51
+ ## Styling Rules
52
+
53
+ - Use design system colors only: `bg-background`, `text-foreground`, `bg-card`
54
+ - Use opacity utilities: `text-foreground-80` (not `text-foreground/80`)
55
+ - Use border utilities: `border-default`, `border-bottom-default`
56
+ - Use `<div>` elements only (no `h1`, `p`, `section`)
57
+
58
+ ## Theme Awareness
59
+
60
+ Pages automatically adapt to the active theme. Use theme context if needed:
61
+
62
+ ```tsx
63
+ import { useTheme } from "@/contexts/ThemeContext";
64
+
65
+ const { theme, setTheme } = useTheme();
66
+ ```
67
+
68
+ ## Component Usage
69
+
70
+ Always use wrapper components from `src/components/`:
71
+
72
+ ```tsx
73
+ import { ModusButton, ModusAlert, ModusCard } from "@/components";
74
+ ```
75
+
76
+ Never import `ModusWc*` components directly.
@@ -0,0 +1,77 @@
1
+ ---
2
+ applyTo: "**/*.css"
3
+ ---
4
+
5
+ # CSS and Design System Patterns
6
+
7
+ This project uses Tailwind CSS 3 with a custom 9-color design system.
8
+
9
+ ## Color Variables
10
+
11
+ Modus provides 9 CSS variables mapped to Tailwind utilities:
12
+
13
+ ```css
14
+ /* Base colors */
15
+ --modus-wc-color-base-page /* bg-background */
16
+ --modus-wc-color-base-100 /* bg-card */
17
+ --modus-wc-color-base-200 /* bg-muted */
18
+ --modus-wc-color-base-300 /* bg-secondary */
19
+ --modus-wc-color-base-content /* text-foreground */
20
+
21
+ /* Semantic colors */
22
+ --modus-wc-color-info /* bg-primary, text-primary */
23
+ --modus-wc-color-success /* bg-success, text-success */
24
+ --modus-wc-color-warning /* bg-warning, text-warning */
25
+ --modus-wc-color-error /* bg-destructive, text-destructive */
26
+ ```
27
+
28
+ ## Custom Border Utilities
29
+
30
+ Tailwind's border-color doesn't work with CSS variables. Use custom utilities:
31
+
32
+ ```css
33
+ /* Standard borders */
34
+ .border-default { border: 1px solid var(--modus-wc-color-base-200); }
35
+ .border-primary { border: 1px solid var(--modus-wc-color-info); }
36
+ .border-success { border: 1px solid var(--modus-wc-color-success); }
37
+ .border-warning { border: 1px solid var(--modus-wc-color-warning); }
38
+ .border-destructive { border: 1px solid var(--modus-wc-color-error); }
39
+
40
+ /* Directional borders */
41
+ .border-bottom-default { border-bottom: 1px solid var(--modus-wc-color-base-200); }
42
+ .border-top-default { border-top: 1px solid var(--modus-wc-color-base-200); }
43
+ ```
44
+
45
+ ## Custom Opacity Utilities
46
+
47
+ Tailwind's `/80` syntax doesn't work with CSS variables. Use color-mix():
48
+
49
+ ```css
50
+ /* Text opacity */
51
+ .text-foreground-80 {
52
+ color: color-mix(in srgb, var(--modus-wc-color-base-content) 80%, transparent);
53
+ }
54
+ .text-foreground-60 {
55
+ color: color-mix(in srgb, var(--modus-wc-color-base-content) 60%, transparent);
56
+ }
57
+
58
+ /* Background opacity */
59
+ .bg-primary-20 {
60
+ background-color: color-mix(in srgb, var(--modus-wc-color-info) 20%, transparent);
61
+ }
62
+ ```
63
+
64
+ ## Forbidden Patterns
65
+
66
+ ```css
67
+ /* NEVER use hardcoded colors */
68
+ .wrong { color: #000000; }
69
+ .wrong { background-color: rgb(0, 0, 0); }
70
+
71
+ /* NEVER use generic Tailwind colors in CSS */
72
+ /* Use the design system utilities instead */
73
+ ```
74
+
75
+ ## Theme Support
76
+
77
+ All CSS variables automatically update when the `data-theme` attribute changes on `<html>`. No additional CSS is needed for theme switching.
@@ -0,0 +1,101 @@
1
+ ---
2
+ applyTo: "**/*.ts,**/*.tsx"
3
+ ---
4
+
5
+ # TypeScript Patterns for Modus Components
6
+
7
+ ## Event Type Casting
8
+
9
+ Modus web components emit CustomEvents. Cast them properly:
10
+
11
+ ```tsx
12
+ const handleEvent = (event: Event) => {
13
+ const customEvent = event as CustomEvent<EventDetailType>;
14
+ const detail = customEvent.detail;
15
+ // Use detail
16
+ };
17
+ ```
18
+
19
+ ## Common Event Types
20
+
21
+ ```tsx
22
+ // Button click
23
+ (event: Event) => {
24
+ const customEvent = event as CustomEvent<MouseEvent | KeyboardEvent>;
25
+ }
26
+
27
+ // Input change
28
+ (event: Event) => {
29
+ const customEvent = event as CustomEvent<InputEvent>;
30
+ const value = (customEvent.target as HTMLInputElement).value;
31
+ }
32
+
33
+ // Checkbox (remember value is inverted!)
34
+ (event: Event) => {
35
+ const customEvent = event as CustomEvent<InputEvent>;
36
+ const rawValue = (customEvent.target as HTMLModusWcCheckboxElement).value;
37
+ const actualChecked = !rawValue; // Invert the value
38
+ }
39
+ ```
40
+
41
+ ## Component Ref Types
42
+
43
+ ```tsx
44
+ import type { HTMLModusWcButtonElement } from "@trimble-oss/moduswebcomponents-react";
45
+
46
+ const buttonRef = useRef<HTMLModusWcButtonElement>(null);
47
+ const modalRef = useRef<HTMLModusWcModalElement>(null);
48
+ const checkboxRef = useRef<HTMLModusWcCheckboxElement>(null);
49
+ ```
50
+
51
+ ## Modal Ref Pattern
52
+
53
+ ```tsx
54
+ interface ModusModalRef {
55
+ openModal: () => void;
56
+ closeModal: () => void;
57
+ }
58
+
59
+ const modalRef = useRef<ModusModalRef>(null);
60
+ modalRef.current?.openModal();
61
+ ```
62
+
63
+ ## Props Interfaces
64
+
65
+ ```tsx
66
+ interface ComponentProps {
67
+ color?: "primary" | "secondary" | "danger";
68
+ variant?: "filled" | "outlined" | "borderless";
69
+ size?: "sm" | "md" | "lg";
70
+ disabled?: boolean;
71
+ children?: React.ReactNode;
72
+ }
73
+ ```
74
+
75
+ ## Import Patterns
76
+
77
+ ```tsx
78
+ // Use wrapper components
79
+ import { ModusButton, ModusAlert } from "@/components";
80
+
81
+ // Import types from the web components package
82
+ import type {
83
+ HTMLModusWcButtonElement,
84
+ HTMLModusWcModalElement
85
+ } from "@trimble-oss/moduswebcomponents-react";
86
+ ```
87
+
88
+ ## Design System Types
89
+
90
+ ```tsx
91
+ type ThemeName =
92
+ | "modus-classic-light"
93
+ | "modus-classic-dark"
94
+ | "modus-modern-light"
95
+ | "modus-modern-dark"
96
+ | "connect-light"
97
+ | "connect-dark";
98
+
99
+ type ButtonColor = "primary" | "secondary" | "danger";
100
+ type ButtonVariant = "filled" | "outlined" | "borderless";
101
+ ```
@@ -0,0 +1,188 @@
1
+ # Pull Request
2
+
3
+ ## 📝 Description
4
+
5
+ <!-- Provide a brief description of the changes in this PR -->
6
+
7
+ ## 🔗 Related Issue
8
+
9
+ <!-- Link to the issue this PR addresses -->
10
+
11
+ Fixes #(issue number)
12
+
13
+ ## 🎯 Type of Change
14
+
15
+ <!-- Mark the relevant option with an "x" -->
16
+
17
+ - [ ] 🐛 Bug fix (non-breaking change that fixes an issue)
18
+ - [ ] ✨ New feature (non-breaking change that adds functionality)
19
+ - [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
20
+ - [ ] 📚 Documentation update
21
+ - [ ] 🎨 Style/UI changes
22
+ - [ ] ♻️ Code refactoring (no functional changes)
23
+ - [ ] ⚡ Performance improvement
24
+ - [ ] 🧪 Adding or updating tests
25
+ - [ ] 🔧 Build/CI changes
26
+ - [ ] 🏗️ Infrastructure changes
27
+
28
+ ## 🧪 Testing
29
+
30
+ <!-- Describe the tests you ran and provide instructions for reviewers -->
31
+
32
+ ### Manual Testing Checklist
33
+
34
+ - [ ] **Development server starts** without errors (`npm run dev`)
35
+ - [ ] **All demo pages load** correctly
36
+ - [ ] **Theme switching works** for all 6 themes (Classic/Modern/Connect, Light/Dark)
37
+ - [ ] **Icons display properly** with valid names
38
+ - [ ] **Colors follow Modus standards** (`npm run lint:colors` passes)
39
+ - [ ] **Modus styles are followed** (`npm run lint:styles` passes)
40
+ - [ ] **No semantic HTML is used** (`npm run lint:semantic` passes)
41
+ - [ ] **Modus icons are used correctly** (`npm run lint:icons` passes)
42
+ - [ ] **Border usage follows guidelines** (`npm run lint:borders` passes)
43
+ - [ ] **Responsive design** works on mobile and desktop
44
+ - [ ] **Accessibility** - tested with keyboard navigation
45
+ - [ ] **Build succeeds** (`npm run build`)
46
+ - [ ] **TypeScript compilation** passes (`npm run type-check`)
47
+
48
+ ### Browser Testing
49
+
50
+ Tested in the following browsers:
51
+
52
+ - [ ] Chrome (latest)
53
+ - [ ] Firefox (latest)
54
+ - [ ] Safari (latest)
55
+ - [ ] Edge (latest)
56
+
57
+ ### Component-Specific Testing (if applicable)
58
+
59
+ - [ ] **Modus Web Components** render correctly
60
+ - [ ] **React components** work as expected
61
+ - [ ] **Event handling** functions properly
62
+ - [ ] **Props and attributes** are properly typed
63
+ - [ ] **Accessibility attributes** are present (ARIA labels, roles)
64
+ - [ ] **Vite build process** works correctly
65
+ - [ ] **Tailwind CSS** integration works properly
66
+
67
+ ## 📸 Screenshots
68
+
69
+ <!-- Add screenshots for UI changes -->
70
+
71
+ ### Before
72
+
73
+ <!-- Screenshot of the current state -->
74
+
75
+ ### After
76
+
77
+ <!-- Screenshot of the changes -->
78
+
79
+ ## 🎨 Design System Compliance
80
+
81
+ <!-- Confirm compliance with Modus Design System -->
82
+
83
+ - [ ] **Uses only approved Modus colors** (9 total: 5 base + 4 semantic)
84
+ - [ ] **Uses valid Modus icon names** from the official list
85
+ - [ ] **Follows React + Vite component creation rules** (Tailwind classes, TypeScript interfaces)
86
+ - [ ] **Uses Tailwind classes instead of inline styles** (no `style={{}}` syntax)
87
+ - [ ] **Uses div elements instead of semantic HTML** (no `<h1>`, `<section>`, etc.)
88
+ - [ ] **Maintains theme compatibility** across all 6 Modus themes
89
+ - [ ] **Follows accessibility guidelines** (WCAG 2.1 AA compliance)
90
+
91
+ ## 📋 Code Quality
92
+
93
+ <!-- Confirm code quality standards -->
94
+
95
+ - [ ] **Code follows project conventions** and style guide
96
+ - [ ] **TypeScript strict mode** compliance
97
+ - [ ] **ESLint rules** pass without warnings
98
+ - [ ] **No hardcoded values** - uses Modus design tokens
99
+ - [ ] **Proper error handling** implemented
100
+ - [ ] **Code is well-documented** with comments where needed
101
+
102
+ ## 🔄 Breaking Changes
103
+
104
+ <!-- If this PR introduces breaking changes, describe them here -->
105
+
106
+ - [ ] This PR introduces breaking changes
107
+ - [ ] Migration guide provided (if applicable)
108
+ - [ ] Version bump required
109
+
110
+ **Breaking changes description:**
111
+
112
+ <!-- Describe any breaking changes and how to migrate -->
113
+
114
+ ## 📚 Documentation
115
+
116
+ <!-- Confirm documentation updates -->
117
+
118
+ - [ ] **README.md** updated (if needed)
119
+ - [ ] **Code comments** added for complex logic
120
+ - [ ] **TypeScript definitions** updated (if needed)
121
+ - [ ] **Examples** provided for new features
122
+ - [ ] **Development rules** updated (if needed)
123
+
124
+ ## 🔍 Review Checklist
125
+
126
+ <!-- For reviewers -->
127
+
128
+ ### Code Review
129
+
130
+ - [ ] Code follows project patterns and conventions
131
+ - [ ] Logic is sound and handles edge cases
132
+ - [ ] Performance considerations addressed
133
+ - [ ] Security considerations addressed
134
+ - [ ] No code duplication or unnecessary complexity
135
+
136
+ ### Design System Review
137
+
138
+ - [ ] Uses approved Modus colors and components
139
+ - [ ] Maintains visual consistency
140
+ - [ ] Responsive design implemented correctly
141
+ - [ ] Accessibility standards met
142
+
143
+ ### Testing Review
144
+
145
+ - [ ] Adequate test coverage (manual or automated)
146
+ - [ ] Edge cases considered and tested
147
+ - [ ] Cross-browser compatibility verified
148
+ - [ ] Performance impact assessed
149
+
150
+ ## 💬 Additional Notes
151
+
152
+ <!-- Add any additional context, concerns, or notes for reviewers -->
153
+
154
+ ## 📝 Reviewer Instructions
155
+
156
+ <!-- Specific instructions for reviewers -->
157
+
158
+ 1. **Pull and test locally:**
159
+
160
+ ```bash
161
+ git checkout [branch-name]
162
+ npm install
163
+ npm run dev
164
+ ```
165
+
166
+ 2. **Test the specific changes:**
167
+
168
+ - Navigate to affected pages/components
169
+ - Test functionality described in this PR
170
+ - Verify no regressions in existing features
171
+
172
+ 3. **Check compliance:**
173
+ - Run `npm run lint:colors` to verify color usage
174
+ - Run `npm run lint:styles` to verify no inline styles
175
+ - Run `npm run lint:semantic` to verify no semantic HTML
176
+ - Run `npm run lint:icons` to verify Modus icons usage
177
+ - Run `npm run lint:borders` to verify border usage
178
+ - Test theme switching if UI changes were made
179
+ - Verify accessibility with keyboard navigation
180
+
181
+ ---
182
+
183
+ **By submitting this PR, I confirm that:**
184
+
185
+ - [ ] I have read and followed the [Contributing Guidelines](CONTRIBUTING.md)
186
+ - [ ] I have tested my changes thoroughly
187
+ - [ ] I have considered the impact on existing users
188
+ - [ ] I am willing to address feedback and make necessary changes
@@ -0,0 +1,43 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build-and-test:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout repository
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Use Node.js 20
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: "20"
21
+ cache: "npm"
22
+
23
+ - name: Install dependencies
24
+ run: npm ci
25
+
26
+ - name: Run linting
27
+ run: npm run lint
28
+
29
+ - name: Run type checks
30
+ run: npm run type-check
31
+
32
+ - name: Run Modus linting suite
33
+ run: |
34
+ npm run lint:colors
35
+ npm run lint:icons
36
+ npm run lint:semantic
37
+ npm run lint:styles
38
+ npm run lint:borders
39
+ npm run lint:opacity
40
+ npm run lint:icon-names
41
+
42
+ - name: Build application
43
+ run: npm run build
@@ -0,0 +1,44 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, ready_for_review, reopened]
6
+ # Optional: Only run on specific file changes
7
+ # paths:
8
+ # - "src/**/*.ts"
9
+ # - "src/**/*.tsx"
10
+ # - "src/**/*.js"
11
+ # - "src/**/*.jsx"
12
+
13
+ jobs:
14
+ claude-review:
15
+ # Optional: Filter by PR author
16
+ # if: |
17
+ # github.event.pull_request.user.login == 'external-contributor' ||
18
+ # github.event.pull_request.user.login == 'new-developer' ||
19
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20
+
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+ pull-requests: read
25
+ issues: read
26
+ id-token: write
27
+
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@v4
31
+ with:
32
+ fetch-depth: 1
33
+
34
+ - name: Run Claude Code Review
35
+ id: claude-review
36
+ uses: anthropics/claude-code-action@v1
37
+ with:
38
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39
+ plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
40
+ plugins: 'code-review@claude-code-plugins'
41
+ prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
42
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
43
+ # or https://code.claude.com/docs/en/cli-reference for available options
44
+