@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,492 @@
1
+ ---
2
+ description: Critical bug fix for ModusWcCheckbox value property inversion
3
+ globs: ["**/components/ModusCheckbox*.tsx", "**/demos/**/page.tsx"]
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # ModusWcCheckbox Value Inversion Bug in React
8
+
9
+ ## 🚨 **CRITICAL BUG: Checkbox Value Inversion**
10
+
11
+ **Problem**: The `ModusWcCheckbox` component has an inverted `value` property that causes unexpected behavior in React applications.
12
+
13
+ **Bug Details**:
14
+
15
+ - When checkbox is **checked**: `target.value` returns `false`
16
+ - When checkbox is **unchecked**: `target.value` returns `true`
17
+ - This is the **opposite** of what developers expect
18
+ - The bug occurs in the `inputChange` event's `target.value` property
19
+
20
+ ## ❌ **The Problem in Action**
21
+
22
+ ### ❌ **Expected vs Actual Behavior**
23
+
24
+ ```tsx
25
+ // ❌ WRONG: This doesn't work as expected
26
+ function CheckboxComponent() {
27
+ const [isChecked, setIsChecked] = useState(false);
28
+
29
+ const handleChange = (event: CustomEvent<InputEvent>) => {
30
+ const value = (event.target as HTMLModusWcCheckboxElement).value; // ❌ This is inverted!
31
+ console.log("Checkbox value:", value); // false when checked, true when unchecked
32
+ setIsChecked(value); // ❌ This sets wrong state
33
+ };
34
+
35
+ return (
36
+ <ModusWcCheckbox value={isChecked} onInputChange={handleChange}>
37
+ Checkbox Label
38
+ </ModusWcCheckbox>
39
+ );
40
+ }
41
+ ```
42
+
43
+ ### ❌ **Common Mistakes**
44
+
45
+ ```tsx
46
+ // ❌ WRONG: Direct value usage
47
+ const handleChange = (event: CustomEvent<InputEvent>) => {
48
+ const value = (event.target as HTMLModusWcCheckboxElement).value; // ❌ Inverted value
49
+ setState(value); // ❌ Wrong state
50
+ };
51
+
52
+ // ❌ WRONG: Assuming value matches checked state
53
+ const handleChange = (event: CustomEvent<InputEvent>) => {
54
+ const value = (event.target as HTMLModusWcCheckboxElement).value; // ❌ false when checked
55
+ const isChecked = value; // ❌ Wrong assumption
56
+ updateUI(isChecked); // ❌ Wrong UI state
57
+ };
58
+ ```
59
+
60
+ ## ✅ **Solution: Invert the Value**
61
+
62
+ ### ✅ **Correct Pattern: Invert the Value**
63
+
64
+ ```tsx
65
+ // ✅ CORRECT: Always invert the value
66
+ function CheckboxComponent() {
67
+ const [isChecked, setIsChecked] = useState(false);
68
+
69
+ const handleChange = (event: CustomEvent<InputEvent>) => {
70
+ const value = (event.target as HTMLModusWcCheckboxElement).value;
71
+ const actualChecked = !value; // ✅ CORRECT: Invert the value
72
+ console.log("Checkbox value:", value); // false when checked
73
+ console.log("Actual checked:", actualChecked); // true when checked
74
+ setIsChecked(actualChecked);
75
+ };
76
+
77
+ return (
78
+ <ModusWcCheckbox value={isChecked} onInputChange={handleChange}>
79
+ Checkbox Label
80
+ </ModusWcCheckbox>
81
+ );
82
+ }
83
+ ```
84
+
85
+ ### ✅ **Reusable Solution Pattern**
86
+
87
+ ```tsx
88
+ // ✅ CORRECT: Create a utility function
89
+ function useModusCheckbox(initialChecked = false) {
90
+ const [isChecked, setIsChecked] = useState(initialChecked);
91
+
92
+ const handleChange = (event: CustomEvent<InputEvent>) => {
93
+ const value = (event.target as HTMLModusWcCheckboxElement).value;
94
+ const actualChecked = !value; // ✅ CORRECT: Always invert
95
+ setIsChecked(actualChecked);
96
+ };
97
+
98
+ return {
99
+ isChecked,
100
+ handleChange,
101
+ setChecked: setIsChecked,
102
+ };
103
+ }
104
+
105
+ // ✅ CORRECT: Use the utility
106
+ function CheckboxComponent() {
107
+ const { isChecked, handleChange } = useModusCheckbox(false);
108
+
109
+ return (
110
+ <ModusWcCheckbox value={isChecked} onInputChange={handleChange}>
111
+ Checkbox Label
112
+ </ModusWcCheckbox>
113
+ );
114
+ }
115
+ ```
116
+
117
+ ### ✅ **Wrapper Component Pattern (Recommended)**
118
+
119
+ ```tsx
120
+ // ✅ CORRECT: Create a wrapper component that handles the inversion
121
+ interface ModusCheckboxProps {
122
+ value?: boolean;
123
+ onValueChange?: (event: CustomEvent<boolean>) => void;
124
+ // ... other props
125
+ }
126
+
127
+ function ModusCheckbox({ value, onValueChange, ...props }: ModusCheckboxProps) {
128
+ const checkboxRef = useRef<HTMLModusWcCheckboxElement>(null);
129
+
130
+ useEffect(() => {
131
+ const checkbox = checkboxRef.current;
132
+ if (!checkbox || !onValueChange) return;
133
+
134
+ const handleValueChange = (event: Event) => {
135
+ const customEvent = event as CustomEvent<InputEvent>;
136
+ // 🚨 CRITICAL: Handle the value inversion bug
137
+ const rawValue = (customEvent.target as HTMLModusWcCheckboxElement).value;
138
+ const actualValue = !rawValue; // ✅ CORRECT: Invert the value
139
+
140
+ // Create a new event with the corrected value
141
+ const correctedEvent = new CustomEvent("valueChange", {
142
+ detail: actualValue,
143
+ bubbles: true,
144
+ cancelable: true,
145
+ });
146
+
147
+ onValueChange(correctedEvent);
148
+ };
149
+
150
+ checkbox.addEventListener("inputChange", handleValueChange);
151
+ return () => checkbox.removeEventListener("inputChange", handleValueChange);
152
+ }, [onValueChange]);
153
+
154
+ return <ModusWcCheckbox ref={checkboxRef} value={value} {...props} />;
155
+ }
156
+
157
+ // ✅ CORRECT: Use the wrapper component
158
+ function MyComponent() {
159
+ const [isChecked, setIsChecked] = useState(false);
160
+
161
+ const handleChange = (event: CustomEvent<boolean>) => {
162
+ const value = event.detail; // ✅ This is now correct!
163
+ setIsChecked(value);
164
+ };
165
+
166
+ return (
167
+ <ModusCheckbox value={isChecked} onValueChange={handleChange}>
168
+ Checkbox Label
169
+ </ModusCheckbox>
170
+ );
171
+ }
172
+ ```
173
+
174
+ ## 🎯 **Advanced Patterns**
175
+
176
+ ### ✅ **Multiple Checkboxes with Inversion**
177
+
178
+ ```tsx
179
+ // ✅ CORRECT: Handle multiple checkboxes
180
+ function MultipleCheckboxes() {
181
+ const [checkboxes, setCheckboxes] = useState({
182
+ option1: false,
183
+ option2: true,
184
+ option3: false,
185
+ });
186
+
187
+ const handleCheckboxChange =
188
+ (key: string) => (event: CustomEvent<InputEvent>) => {
189
+ const value = (event.target as HTMLModusWcCheckboxElement).value;
190
+ const actualChecked = !value; // ✅ CORRECT: Invert value
191
+
192
+ setCheckboxes((prev) => ({
193
+ ...prev,
194
+ [key]: actualChecked,
195
+ }));
196
+ };
197
+
198
+ return (
199
+ <div>
200
+ {Object.entries(checkboxes).map(([key, isChecked]) => (
201
+ <ModusWcCheckbox
202
+ key={key}
203
+ value={isChecked}
204
+ onInputChange={handleCheckboxChange(key)}
205
+ >
206
+ Option {key}
207
+ </ModusWcCheckbox>
208
+ ))}
209
+ </div>
210
+ );
211
+ }
212
+ ```
213
+
214
+ ### ✅ **Form Integration with Inversion**
215
+
216
+ ```tsx
217
+ // ✅ CORRECT: Form with checkbox inversion
218
+ function FormWithCheckbox() {
219
+ const [formData, setFormData] = useState({
220
+ name: "",
221
+ email: "",
222
+ agreeToTerms: false,
223
+ subscribeNewsletter: false,
224
+ });
225
+
226
+ const handleCheckboxChange =
227
+ (field: string) => (event: CustomEvent<InputEvent>) => {
228
+ const value = (event.target as HTMLModusWcCheckboxElement).value;
229
+ const actualChecked = !value; // ✅ CORRECT: Invert value
230
+
231
+ setFormData((prev) => ({
232
+ ...prev,
233
+ [field]: actualChecked,
234
+ }));
235
+ };
236
+
237
+ const handleSubmit = (e: React.FormEvent) => {
238
+ e.preventDefault();
239
+ console.log("Form data:", formData); // ✅ CORRECT: Actual checked states
240
+ };
241
+
242
+ return (
243
+ <form onSubmit={handleSubmit}>
244
+ <input
245
+ type="text"
246
+ value={formData.name}
247
+ onChange={(e) =>
248
+ setFormData((prev) => ({ ...prev, name: e.target.value }))
249
+ }
250
+ placeholder="Name"
251
+ />
252
+
253
+ <ModusWcCheckbox
254
+ value={formData.agreeToTerms}
255
+ onInputChange={handleCheckboxChange("agreeToTerms")}
256
+ >
257
+ I agree to the terms and conditions
258
+ </ModusWcCheckbox>
259
+
260
+ <ModusWcCheckbox
261
+ value={formData.subscribeNewsletter}
262
+ onInputChange={handleCheckboxChange("subscribeNewsletter")}
263
+ >
264
+ Subscribe to newsletter
265
+ </ModusWcCheckbox>
266
+
267
+ <button type="submit">Submit</button>
268
+ </form>
269
+ );
270
+ }
271
+ ```
272
+
273
+ ### ✅ **Checkbox with External State Management**
274
+
275
+ ```tsx
276
+ // ✅ CORRECT: External state with inversion
277
+ function CheckboxWithExternalState() {
278
+ const [externalState, setExternalState] = useState({
279
+ isEnabled: false,
280
+ isVisible: true,
281
+ isRequired: false,
282
+ });
283
+
284
+ const handleCheckboxChange =
285
+ (field: keyof typeof externalState) => (event: CustomEvent) => {
286
+ const value = event.detail;
287
+ const actualChecked = !value; // ✅ CORRECT: Invert value
288
+
289
+ setExternalState((prev) => ({
290
+ ...prev,
291
+ [field]: actualChecked,
292
+ }));
293
+
294
+ // ✅ CORRECT: Use actual checked state for side effects
295
+ if (field === "isEnabled" && actualChecked) {
296
+ console.log("Feature enabled");
297
+ }
298
+ };
299
+
300
+ return (
301
+ <div>
302
+ <ModusWcCheckbox
303
+ checked={externalState.isEnabled}
304
+ onValueChange={handleCheckboxChange("isEnabled")}
305
+ >
306
+ Enable Feature
307
+ </ModusWcCheckbox>
308
+
309
+ <ModusWcCheckbox
310
+ checked={externalState.isVisible}
311
+ onValueChange={handleCheckboxChange("isVisible")}
312
+ >
313
+ Make Visible
314
+ </ModusWcCheckbox>
315
+
316
+ <ModusWcCheckbox
317
+ checked={externalState.isRequired}
318
+ onValueChange={handleCheckboxChange("isRequired")}
319
+ >
320
+ Required Field
321
+ </ModusWcCheckbox>
322
+ </div>
323
+ );
324
+ }
325
+ ```
326
+
327
+ ## 🔧 **Testing the Inversion Bug**
328
+
329
+ ### ✅ **Test Pattern for Checkbox Inversion**
330
+
331
+ ```tsx
332
+ // ✅ CORRECT: Test the inversion behavior
333
+ function TestCheckboxInversion() {
334
+ const [testResults, setTestResults] = useState<string[]>([]);
335
+
336
+ const handleChange = (event: CustomEvent) => {
337
+ const value = event.detail;
338
+ const actualChecked = !value; // ✅ CORRECT: Invert value
339
+
340
+ const result = `Value: ${value}, Actual Checked: ${actualChecked}`;
341
+ setTestResults((prev) => [...prev, result]);
342
+ };
343
+
344
+ return (
345
+ <div>
346
+ <ModusWcCheckbox onValueChange={handleChange}>
347
+ Test Checkbox (Click to see inversion)
348
+ </ModusWcCheckbox>
349
+
350
+ <div>
351
+ <h3>Test Results:</h3>
352
+ {testResults.map((result, index) => (
353
+ <div key={index}>{result}</div>
354
+ ))}
355
+ </div>
356
+ </div>
357
+ );
358
+ }
359
+ ```
360
+
361
+ ### ✅ **Debugging the Inversion**
362
+
363
+ ```tsx
364
+ // ✅ CORRECT: Debug the inversion behavior
365
+ function DebugCheckboxInversion() {
366
+ const [debugInfo, setDebugInfo] = useState<{
367
+ value: boolean | null;
368
+ actualChecked: boolean | null;
369
+ timestamp: string;
370
+ } | null>(null);
371
+
372
+ const handleChange = (event: CustomEvent) => {
373
+ const value = event.detail;
374
+ const actualChecked = !value; // ✅ CORRECT: Invert value
375
+
376
+ setDebugInfo({
377
+ value,
378
+ actualChecked,
379
+ timestamp: new Date().toISOString(),
380
+ });
381
+ };
382
+
383
+ return (
384
+ <div>
385
+ <ModusWcCheckbox onValueChange={handleChange}>
386
+ Debug Checkbox
387
+ </ModusWcCheckbox>
388
+
389
+ {debugInfo && (
390
+ <div className="mt-4 p-4 bg-muted rounded">
391
+ <h3>Debug Info:</h3>
392
+ <p>Raw value: {debugInfo.value?.toString()}</p>
393
+ <p>Actual checked: {debugInfo.actualChecked?.toString()}</p>
394
+ <p>Timestamp: {debugInfo.timestamp}</p>
395
+ </div>
396
+ )}
397
+ </div>
398
+ );
399
+ }
400
+ ```
401
+
402
+ ## 🚫 **What NOT to Do**
403
+
404
+ ### ❌ **Don't Use Raw Value**
405
+
406
+ ```tsx
407
+ // ❌ WRONG: Don't use raw value directly
408
+ const handleChange = (event: CustomEvent) => {
409
+ const value = event.detail; // ❌ This is inverted
410
+ setState(value); // ❌ Wrong state
411
+ };
412
+ ```
413
+
414
+ ### ❌ **Don't Assume Value Matches Checked State**
415
+
416
+ ```tsx
417
+ // ❌ WRONG: Don't assume value is correct
418
+ const handleChange = (event: CustomEvent) => {
419
+ const value = event.detail; // ❌ false when checked
420
+ const isChecked = value; // ❌ Wrong assumption
421
+ updateUI(isChecked); // ❌ Wrong UI
422
+ };
423
+ ```
424
+
425
+ ### ❌ **Don't Ignore the Inversion**
426
+
427
+ ```tsx
428
+ // ❌ WRONG: Don't ignore the inversion bug
429
+ const handleChange = (event: CustomEvent) => {
430
+ const value = event.detail; // ❌ Inverted value
431
+ // This will cause bugs in your application
432
+ setState(value); // ❌ Wrong state
433
+ };
434
+ ```
435
+
436
+ ## 🎯 **Key Takeaways**
437
+
438
+ 1. **Always Invert the Value**: `const actualChecked = !value` where `value` comes from `event.target.value`
439
+ 2. **Use Correct Event**: Listen to `inputChange` event, not `valueChange`
440
+ 3. **Access Target Value**: Use `(event.target as HTMLModusWcCheckboxElement).value`
441
+ 4. **Create Wrapper Components**: Best practice is to handle inversion in a wrapper component
442
+ 5. **Test the Inversion**: Always test checkbox behavior with state management
443
+ 6. **Document the Bug**: Make sure team knows about this issue
444
+ 7. **Use Utility Functions**: Create reusable patterns for checkbox handling
445
+
446
+ ## 🔍 **Affected Components**
447
+
448
+ This bug affects:
449
+
450
+ - ✅ `ModusWcCheckbox` - Primary affected component
451
+ - ✅ Any form with checkboxes
452
+ - ✅ Any state management with checkboxes
453
+ - ✅ Any checkbox validation logic
454
+
455
+ ## 🛠️ **Migration Guide**
456
+
457
+ If you have existing code with this bug:
458
+
459
+ ```tsx
460
+ // ❌ OLD CODE (with bug)
461
+ const handleChange = (event: CustomEvent) => {
462
+ const value = event.detail; // ❌ Wrong event detail
463
+ setState(value); // ❌ Wrong
464
+ };
465
+
466
+ // ✅ NEW CODE (fixed)
467
+ const handleChange = (event: CustomEvent<InputEvent>) => {
468
+ const value = (event.target as HTMLModusWcCheckboxElement).value;
469
+ const actualChecked = !value; // ✅ CORRECT: Invert
470
+ setState(actualChecked); // ✅ Correct
471
+ };
472
+
473
+ // ✅ BEST PRACTICE: Use wrapper component
474
+ function MyComponent() {
475
+ const [isChecked, setIsChecked] = useState(false);
476
+
477
+ const handleChange = (event: CustomEvent<boolean>) => {
478
+ const value = event.detail; // ✅ This is now correct with wrapper!
479
+ setState(value);
480
+ };
481
+
482
+ return (
483
+ <ModusCheckbox value={isChecked} onValueChange={handleChange}>
484
+ Label
485
+ </ModusCheckbox>
486
+ );
487
+ }
488
+ ```
489
+
490
+ ---
491
+
492
+ **Remember: This is a critical bug in the ModusWcCheckbox component. Always invert the value property to get the correct checked state. This bug affects all checkbox implementations in React applications using Modus Web Components.**
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: Essential color usage rules for Modus Design System integration
3
+ globs: ["**/*.tsx", "**/*.ts"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Modus Color Usage - Short
8
+
9
+ Essential color usage rules for Modus Design System integration.
10
+
11
+ ## Key Rules
12
+
13
+ - **Use design system colors only** - `bg-background`, `text-foreground`, `bg-primary`, etc.
14
+ - **Never use generic Tailwind colors** - No `bg-blue-500`, `text-gray-600`, etc.
15
+ - **Never use hardcoded values** - No hex colors, RGB values, or CSS variables
16
+ - **Use semantic color names** - `bg-destructive`, `text-warning`, `bg-success`
17
+ - **Follow color hierarchy** - Background → Card → Primary → Secondary → Muted → Accent
18
+ - **Use hover states** - `hover:bg-primary/90` for interactive elements
19
+ - **Test in all themes** - Ensure colors work in light and dark modes
20
+
21
+ ## Reference
22
+
23
+ For detailed color system mapping, advanced usage patterns, and theme integration, fetch the full rule: `modus-color-usage-react`