@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,483 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Border Violations Linting Script for Vite + React
5
+ *
6
+ * This script checks for usage of incorrect border patterns that violate
7
+ * Tailwind 3 + Modus design system rules.
8
+ *
9
+ * It flags Tailwind color classes in borders and suggests
10
+ * proper design system color alternatives.
11
+ */
12
+
13
+ import fs from "fs";
14
+ import { glob } from "glob";
15
+
16
+ // Border violation patterns to detect (Tailwind 3 + Design System)
17
+ const BORDER_VIOLATION_PATTERNS = [
18
+ // Border with Tailwind color classes (should use design system colors)
19
+ {
20
+ pattern:
21
+ /className="[^"]*\bborder-(red|blue|green|yellow|purple|pink|indigo|gray|slate|zinc|neutral|stone|orange|amber|lime|emerald|teal|cyan|sky|violet|fuchsia|rose)-(\d{2,3}|50)\b[^"]*"/g,
22
+ type: "tailwind-border-color",
23
+ description:
24
+ "Tailwind border with color classes (should use design system colors)",
25
+ },
26
+
27
+ // Border-t, border-b, border-l, border-r with Tailwind colors
28
+ {
29
+ pattern:
30
+ /className="[^"]*\bborder-[tblr]-(red|blue|green|yellow|purple|pink|indigo|gray|slate|zinc|neutral|stone|orange|amber|lime|emerald|teal|cyan|sky|violet|fuchsia|rose)-(\d{2,3}|50)\b[^"]*"/g,
31
+ type: "tailwind-border-side-color",
32
+ description:
33
+ "Tailwind directional border with color classes (should use design system)",
34
+ exclude: /border-(?:top|bottom|left|right)-default/,
35
+ },
36
+
37
+ // Border with hardcoded colors
38
+ {
39
+ pattern: /className="[^"]*\bborder-[^"]*#[0-9a-fA-F]{3,6}[^"]*"/g,
40
+ type: "hardcoded-border-color",
41
+ description: "Border with hardcoded hex colors (should use design system)",
42
+ },
43
+
44
+ // Inline border styles that should use utility classes
45
+ {
46
+ pattern:
47
+ /style=\{\{\s*border:\s*["']1px\s+solid\s+var\(--border\)["']\s*\}\}/g,
48
+ type: "inline-border-style",
49
+ description: "Inline border style should use border-default utility class",
50
+ },
51
+
52
+ // Inline border styles with different widths
53
+ {
54
+ pattern:
55
+ /style=\{\{\s*border:\s*["']2px\s+solid\s+var\(--border\)["']\s*\}\}/g,
56
+ type: "inline-border-thick",
57
+ description:
58
+ "Inline thick border style should use border-thick utility class",
59
+ },
60
+
61
+ // Inline border styles with dashed
62
+ {
63
+ pattern:
64
+ /style=\{\{\s*border:\s*["']1px\s+dashed\s+var\(--border\)["']\s*\}\}/g,
65
+ type: "inline-border-dashed",
66
+ description:
67
+ "Inline dashed border style should use border-dashed utility class",
68
+ },
69
+
70
+ // Inline border styles with thick dashed
71
+ {
72
+ pattern:
73
+ /style=\{\{\s*border:\s*["']2px\s+dashed\s+var\(--border\)["']\s*\}\}/g,
74
+ type: "inline-border-thick-dashed",
75
+ description:
76
+ "Inline thick dashed border style should use border-thick-dashed utility class",
77
+ },
78
+
79
+ // Inline border styles for specific sides
80
+ {
81
+ pattern:
82
+ /style=\{\{\s*borderTop:\s*["']1px\s+solid\s+var\(--border\)["']\s*\}\}/g,
83
+ type: "inline-border-top",
84
+ description:
85
+ "Inline top border style should use border-top-default utility class",
86
+ },
87
+
88
+ {
89
+ pattern:
90
+ /style=\{\{\s*borderBottom:\s*["']1px\s+solid\s+var\(--border\)["']\s*\}\}/g,
91
+ type: "inline-border-bottom",
92
+ description:
93
+ "Inline bottom border style should use border-bottom-default utility class",
94
+ },
95
+
96
+ {
97
+ pattern:
98
+ /style=\{\{\s*borderLeft:\s*["']1px\s+solid\s+var\(--border\)["']\s*\}\}/g,
99
+ type: "inline-border-left",
100
+ description:
101
+ "Inline left border style should use border-left-default utility class",
102
+ },
103
+
104
+ {
105
+ pattern:
106
+ /style=\{\{\s*borderRight:\s*["']1px\s+solid\s+var\(--border\)["']\s*\}\}/g,
107
+ type: "inline-border-right",
108
+ description:
109
+ "Inline right border style should use border-right-default utility class",
110
+ },
111
+ ];
112
+
113
+ // Correct border patterns (for suggestions) - Now using our new utility classes!
114
+ const CORRECT_BORDER_PATTERNS = {
115
+ // Tailwind border violations → Our utility classes
116
+ "border border-border": 'className="border-default"',
117
+ "border-2 border-border": 'className="border-thick-border"',
118
+ "border-4 border-border": 'className="border-thick-border"',
119
+ border: 'className="border-default"',
120
+ "border-2": 'className="border-thick-border"',
121
+ "border-4": 'className="border-thick-border"',
122
+ "border-t border-border": 'className="border-top-default"',
123
+ "border-b border-border": 'className="border-bottom-default"',
124
+ "border-l border-border": 'className="border-left-default"',
125
+ "border-r border-border": 'className="border-right-default"',
126
+ "border-t": 'className="border-top-default"',
127
+ "border-b": 'className="border-bottom-default"',
128
+ "border-l": 'className="border-left-default"',
129
+ "border-r": 'className="border-right-default"',
130
+
131
+ // Tailwind color classes → Our design system colors
132
+ "border border-red-500": 'className="border-destructive"',
133
+ "border border-green-500": 'className="border-success"',
134
+ "border border-yellow-500": 'className="border-warning"',
135
+ "border border-blue-500": 'className="border-primary"',
136
+ "border-2 border-red-500": 'className="border-thick-destructive"',
137
+ "border-2 border-green-500": 'className="border-thick-success"',
138
+ "border-2 border-yellow-500": 'className="border-thick-warning"',
139
+ "border-2 border-blue-500": 'className="border-thick-primary"',
140
+
141
+ // Inline border styles → Our utility classes
142
+ 'style={{ border: "1px solid var(--border)" }}': 'className="border-default"',
143
+ 'style={{ border: "2px solid var(--border)" }}':
144
+ 'className="border-thick-border"',
145
+ 'style={{ border: "1px dashed var(--border)" }}': 'className="border-dashed"',
146
+ 'style={{ border: "2px dashed var(--border)" }}':
147
+ 'className="border-thick-dashed"',
148
+ 'style={{ borderTop: "1px solid var(--border)" }}':
149
+ 'className="border-top-default"',
150
+ 'style={{ borderBottom: "1px solid var(--border)" }}':
151
+ 'className="border-bottom-default"',
152
+ 'style={{ borderLeft: "1px solid var(--border)" }}':
153
+ 'className="border-left-default"',
154
+ 'style={{ borderRight: "1px solid var(--border)" }}':
155
+ 'className="border-right-default"',
156
+
157
+ // Fallback for any other border patterns
158
+ default: 'className="border-default"',
159
+ };
160
+
161
+ // Files to check
162
+ const FILE_PATTERNS = [
163
+ "src/**/*.tsx",
164
+ "src/**/*.ts",
165
+ "src/**/*.jsx",
166
+ "src/**/*.js",
167
+ ];
168
+
169
+ // Files to exclude
170
+ const EXCLUDE_PATTERNS = [
171
+ "**/node_modules/**",
172
+ "**/dist/**",
173
+ "**/build/**",
174
+ "**/*.d.ts",
175
+ "scripts/**",
176
+ ];
177
+
178
+ async function findBorderViolations() {
179
+ console.log("🎨 Checking for border violations in Vite + React app...\n");
180
+
181
+ let totalViolations = 0;
182
+ const violations = [];
183
+
184
+ try {
185
+ // Get all files to check
186
+ const allFiles = [];
187
+ for (const pattern of FILE_PATTERNS) {
188
+ const files = await glob(pattern, { ignore: EXCLUDE_PATTERNS });
189
+ allFiles.push(...files);
190
+ }
191
+
192
+ // Remove duplicates
193
+ const uniqueFiles = [...new Set(allFiles)];
194
+
195
+ console.log(
196
+ `🔍 Scanning ${uniqueFiles.length} files for border violations...\n`
197
+ );
198
+
199
+ for (const filePath of uniqueFiles) {
200
+ if (!fs.existsSync(filePath)) continue;
201
+
202
+ const content = fs.readFileSync(filePath, "utf8");
203
+ const fileViolations = [];
204
+
205
+ // Check for border violations
206
+ for (const violationRule of BORDER_VIOLATION_PATTERNS) {
207
+ const matches = content.match(violationRule.pattern);
208
+ if (matches) {
209
+ for (const match of matches) {
210
+ // Skip if this match should be excluded (our utility classes)
211
+ if (violationRule.exclude && violationRule.exclude.test(match)) {
212
+ continue;
213
+ }
214
+
215
+ const lines = content
216
+ .substring(0, content.indexOf(match))
217
+ .split("\n");
218
+ const lineNumber = lines.length;
219
+ const columnNumber = lines[lines.length - 1].length + 1;
220
+
221
+ fileViolations.push({
222
+ line: lineNumber,
223
+ column: columnNumber,
224
+ match: match,
225
+ type: violationRule.type,
226
+ description: violationRule.description,
227
+ suggestion: getSuggestion(match, violationRule.type),
228
+ });
229
+ }
230
+ }
231
+ }
232
+
233
+ if (fileViolations.length > 0) {
234
+ violations.push({
235
+ file: filePath,
236
+ violations: fileViolations,
237
+ });
238
+ totalViolations += fileViolations.length;
239
+ }
240
+ }
241
+
242
+ if (totalViolations === 0) {
243
+ console.log("✅ All files are using correct border patterns!");
244
+ console.log(
245
+ "📝 Note: Border violations are avoided to ensure design system compliance"
246
+ );
247
+ return;
248
+ }
249
+
250
+ // Report violations
251
+ console.log(`❌ Found ${totalViolations} border violation(s):\n`);
252
+
253
+ for (const { file, violations: fileViolations } of violations) {
254
+ console.log(`📄 ${file}:`);
255
+ for (const violation of fileViolations) {
256
+ console.log(
257
+ ` ${violation.line}:${violation.column} - ${violation.description}`
258
+ );
259
+ console.log(` ❌ Found: ${violation.match}`);
260
+ console.log(` ✅ Use instead: ${violation.suggestion}\n`);
261
+ }
262
+ }
263
+
264
+ console.log("🔧 Border Violation Resolution - Use Design System Colors:");
265
+ console.log(
266
+ " ✅ RECOMMENDED: Use custom border utilities with design system colors"
267
+ );
268
+ console.log(' • border → className="border-default"');
269
+ console.log(' • border-2 → className="border-thick"');
270
+ console.log(' • border-t → className="border-top-default"');
271
+ console.log(' • border-b → className="border-bottom-default"');
272
+ console.log(
273
+ ' • For dashed borders → className="border-dashed" or "border-thick-dashed"'
274
+ );
275
+ console.log("");
276
+ console.log(" 🎨 Context-Specific Design System Colors:");
277
+ console.log(" • Success: border-success + border-thick-success");
278
+ console.log(" • Warning: border-warning + border-thick-warning");
279
+ console.log(" • Error: border-destructive + border-thick-destructive");
280
+ console.log(" • Primary: border-primary + border-thick-primary");
281
+ console.log(" • Default: border-default + border-thick-border");
282
+ console.log("");
283
+ console.log(" 💡 Benefits of our utility classes:");
284
+ console.log(
285
+ " • Theme-aware (automatically adapts to light/dark themes)"
286
+ );
287
+ console.log(" • Uses design system colors (var(--border))");
288
+ console.log(" • Linting compliant");
289
+ console.log(" • No inline styles needed");
290
+ console.log(" • Consistent with project patterns");
291
+ console.log("");
292
+ console.log(" ⚠️ Why avoid Tailwind color classes:");
293
+ console.log(" • Tailwind color classes don't use our design system");
294
+ console.log(
295
+ " • Our utilities are more maintainable and theme-consistent"
296
+ );
297
+ console.log(" • Ensures consistent branding across the application");
298
+ console.log("");
299
+ console.log(
300
+ " 📖 Documentation: See index.css for all available border utilities"
301
+ );
302
+
303
+ process.exit(1);
304
+ } catch (error) {
305
+ console.error("❌ Error checking border violations:", error.message);
306
+ process.exit(1);
307
+ }
308
+ }
309
+
310
+ function getSuggestion(violation, violationType) {
311
+ // Check if it's an inline style violation first
312
+ if (violation.includes("style={{")) {
313
+ // Extract the style content
314
+ const styleMatch = violation.match(/style=\{\{([^}]+)\}\}/);
315
+ if (styleMatch) {
316
+ const styleContent = styleMatch[1].trim();
317
+
318
+ // Map inline styles to utility classes
319
+ if (styleContent.includes('border: "1px solid var(--border)"')) {
320
+ return CORRECT_BORDER_PATTERNS[
321
+ 'style={{ border: "1px solid var(--border)" }}'
322
+ ];
323
+ }
324
+ if (styleContent.includes('border: "2px solid var(--border)"')) {
325
+ return CORRECT_BORDER_PATTERNS[
326
+ 'style={{ border: "2px solid var(--border)" }}'
327
+ ];
328
+ }
329
+ if (styleContent.includes('border: "1px dashed var(--border)"')) {
330
+ return CORRECT_BORDER_PATTERNS[
331
+ 'style={{ border: "1px dashed var(--border)" }}'
332
+ ];
333
+ }
334
+ if (styleContent.includes('border: "2px dashed var(--border)"')) {
335
+ return CORRECT_BORDER_PATTERNS[
336
+ 'style={{ border: "2px dashed var(--border)" }}'
337
+ ];
338
+ }
339
+ if (styleContent.includes('borderTop: "1px solid var(--border)"')) {
340
+ return CORRECT_BORDER_PATTERNS[
341
+ 'style={{ borderTop: "1px solid var(--border)" }}'
342
+ ];
343
+ }
344
+ if (styleContent.includes('borderBottom: "1px solid var(--border)"')) {
345
+ return CORRECT_BORDER_PATTERNS[
346
+ 'style={{ borderBottom: "1px solid var(--border)" }}'
347
+ ];
348
+ }
349
+ if (styleContent.includes('borderLeft: "1px solid var(--border)"')) {
350
+ return CORRECT_BORDER_PATTERNS[
351
+ 'style={{ borderLeft: "1px solid var(--border)" }}'
352
+ ];
353
+ }
354
+ if (styleContent.includes('borderRight: "1px solid var(--border)"')) {
355
+ return CORRECT_BORDER_PATTERNS[
356
+ 'style={{ borderRight: "1px solid var(--border)" }}'
357
+ ];
358
+ }
359
+ }
360
+ }
361
+
362
+ // Extract the border classes from the className attribute
363
+ const classNameMatch = violation.match(/className="([^"]*)"/);
364
+ if (!classNameMatch) return CORRECT_BORDER_PATTERNS.default;
365
+
366
+ const classNames = classNameMatch[1];
367
+
368
+ // Map common patterns to our utility classes
369
+ if (classNames.includes("border border-border")) {
370
+ return CORRECT_BORDER_PATTERNS["border border-border"];
371
+ }
372
+ if (
373
+ classNames.includes("border-2 border-border") ||
374
+ classNames.includes("border-2")
375
+ ) {
376
+ return CORRECT_BORDER_PATTERNS["border-2"];
377
+ }
378
+ if (
379
+ classNames.includes("border-t border-border") ||
380
+ classNames.includes("border-t")
381
+ ) {
382
+ return CORRECT_BORDER_PATTERNS["border-t"];
383
+ }
384
+ if (
385
+ classNames.includes("border-b border-border") ||
386
+ classNames.includes("border-b")
387
+ ) {
388
+ return CORRECT_BORDER_PATTERNS["border-b"];
389
+ }
390
+ if (
391
+ classNames.includes("border-l border-border") ||
392
+ classNames.includes("border-l")
393
+ ) {
394
+ return CORRECT_BORDER_PATTERNS["border-l"];
395
+ }
396
+ if (
397
+ classNames.includes("border-r border-border") ||
398
+ classNames.includes("border-r")
399
+ ) {
400
+ return CORRECT_BORDER_PATTERNS["border-r"];
401
+ }
402
+ if (classNames.includes("border-4")) {
403
+ return CORRECT_BORDER_PATTERNS["border-4"];
404
+ }
405
+
406
+ // Handle Tailwind color classes with our design system colors
407
+ if (classNames.includes("border border-red-500")) {
408
+ return CORRECT_BORDER_PATTERNS["border border-red-500"];
409
+ }
410
+ if (classNames.includes("border border-green-500")) {
411
+ return CORRECT_BORDER_PATTERNS["border border-green-500"];
412
+ }
413
+ if (classNames.includes("border border-yellow-500")) {
414
+ return CORRECT_BORDER_PATTERNS["border border-yellow-500"];
415
+ }
416
+ if (classNames.includes("border border-blue-500")) {
417
+ return CORRECT_BORDER_PATTERNS["border border-blue-500"];
418
+ }
419
+ if (classNames.includes("border-2 border-red-500")) {
420
+ return CORRECT_BORDER_PATTERNS["border-2 border-red-500"];
421
+ }
422
+ if (classNames.includes("border-2 border-green-500")) {
423
+ return CORRECT_BORDER_PATTERNS["border-2 border-green-500"];
424
+ }
425
+ if (classNames.includes("border-2 border-yellow-500")) {
426
+ return CORRECT_BORDER_PATTERNS["border-2 border-yellow-500"];
427
+ }
428
+ if (classNames.includes("border-2 border-blue-500")) {
429
+ return CORRECT_BORDER_PATTERNS["border-2 border-blue-500"];
430
+ }
431
+
432
+ if (classNames.includes("border ") || classNames.endsWith("border")) {
433
+ return CORRECT_BORDER_PATTERNS["border"];
434
+ }
435
+
436
+ // Default suggestion based on violation type
437
+ switch (violationType) {
438
+ case "tailwind-border-border":
439
+ case "tailwind-border-alone":
440
+ return CORRECT_BORDER_PATTERNS["border"];
441
+ case "tailwind-border-width":
442
+ return CORRECT_BORDER_PATTERNS["border-2"];
443
+ case "tailwind-border-side":
444
+ return CORRECT_BORDER_PATTERNS["border-b"]; // Most common side border
445
+ case "inline-border-style":
446
+ return CORRECT_BORDER_PATTERNS[
447
+ 'style={{ border: "1px solid var(--border)" }}'
448
+ ];
449
+ case "inline-border-thick":
450
+ return CORRECT_BORDER_PATTERNS[
451
+ 'style={{ border: "2px solid var(--border)" }}'
452
+ ];
453
+ case "inline-border-dashed":
454
+ return CORRECT_BORDER_PATTERNS[
455
+ 'style={{ border: "1px dashed var(--border)" }}'
456
+ ];
457
+ case "inline-border-thick-dashed":
458
+ return CORRECT_BORDER_PATTERNS[
459
+ 'style={{ border: "2px dashed var(--border)" }}'
460
+ ];
461
+ case "inline-border-top":
462
+ return CORRECT_BORDER_PATTERNS[
463
+ 'style={{ borderTop: "1px solid var(--border)" }}'
464
+ ];
465
+ case "inline-border-bottom":
466
+ return CORRECT_BORDER_PATTERNS[
467
+ 'style={{ borderBottom: "1px solid var(--border)" }}'
468
+ ];
469
+ case "inline-border-left":
470
+ return CORRECT_BORDER_PATTERNS[
471
+ 'style={{ borderLeft: "1px solid var(--border)" }}'
472
+ ];
473
+ case "inline-border-right":
474
+ return CORRECT_BORDER_PATTERNS[
475
+ 'style={{ borderRight: "1px solid var(--border)" }}'
476
+ ];
477
+ default:
478
+ return CORRECT_BORDER_PATTERNS.default;
479
+ }
480
+ }
481
+
482
+ // Run the check
483
+ findBorderViolations();