@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,140 @@
1
+ import { dirname } from "path";
2
+ import { fileURLToPath } from "url";
3
+
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+
7
+ /**
8
+ * Copy bundled template to target directory
9
+ * @param {string} templateName - Name of the template (react, angular)
10
+ * @param {string} targetPath - Target directory path
11
+ * @returns {Promise<boolean>}
12
+ */
13
+ export async function copyTemplate(templateName, targetPath) {
14
+ const fs = await import("fs/promises");
15
+ const path = await import("path");
16
+
17
+ const bundledPath = path.join(
18
+ __dirname,
19
+ "..",
20
+ "..",
21
+ "templates",
22
+ templateName,
23
+ );
24
+
25
+ try {
26
+ await fs.access(bundledPath);
27
+ } catch {
28
+ throw new Error(
29
+ `Template "${templateName}" not found.\n` +
30
+ `Expected at: ${bundledPath}\n\n` +
31
+ `This is a bug in create-trimble-app. Please report it at:\n` +
32
+ `https://github.com/julianoczkowski/create-trimble-app/issues`,
33
+ );
34
+ }
35
+
36
+ await copyDirectory(bundledPath, targetPath);
37
+ return true;
38
+ }
39
+
40
+ /**
41
+ * Copy directory recursively
42
+ * @param {string} src - Source directory
43
+ * @param {string} dest - Destination directory
44
+ */
45
+ async function copyDirectory(src, dest) {
46
+ const fs = await import("fs/promises");
47
+ const path = await import("path");
48
+
49
+ await fs.mkdir(dest, { recursive: true });
50
+
51
+ const entries = await fs.readdir(src, { withFileTypes: true });
52
+
53
+ for (const entry of entries) {
54
+ const srcPath = path.join(src, entry.name);
55
+ const destPath = path.join(dest, entry.name);
56
+
57
+ if (entry.isDirectory()) {
58
+ await copyDirectory(srcPath, destPath);
59
+ } else {
60
+ await fs.copyFile(srcPath, destPath);
61
+ }
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Check if a template exists
67
+ * @param {string} templateName - Name of the template
68
+ * @returns {Promise<boolean>}
69
+ */
70
+ export async function hasTemplate(templateName) {
71
+ const fs = await import("fs/promises");
72
+ const path = await import("path");
73
+
74
+ const bundledPath = path.join(
75
+ __dirname,
76
+ "..",
77
+ "..",
78
+ "templates",
79
+ templateName,
80
+ );
81
+
82
+ try {
83
+ await fs.access(bundledPath);
84
+ return true;
85
+ } catch {
86
+ return false;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Get detailed error message based on error type
92
+ * @param {Error} error - Original error
93
+ * @returns {string}
94
+ */
95
+ export function getDetailedErrorMessage(error) {
96
+ const message = error.message || "";
97
+
98
+ if (message.includes("ENOENT") || message.includes("no such file")) {
99
+ return (
100
+ `Failed to create project directory.\n\n` +
101
+ `Possible causes:\n` +
102
+ ` • Invalid project name\n` +
103
+ ` • Permission denied\n` +
104
+ ` • Disk full\n\n` +
105
+ `Try a different project name or check disk permissions.`
106
+ );
107
+ }
108
+
109
+ if (message.includes("EACCES") || message.includes("permission denied")) {
110
+ return (
111
+ `Permission denied when creating project.\n\n` +
112
+ `Try:\n` +
113
+ ` • Running from a directory you have write access to\n` +
114
+ ` • Checking folder permissions`
115
+ );
116
+ }
117
+
118
+ if (message.includes("ENOSPC")) {
119
+ return (
120
+ `Not enough disk space to create project.\n\n` +
121
+ `Free up some disk space and try again.`
122
+ );
123
+ }
124
+
125
+ if (message.includes("EEXIST")) {
126
+ return (
127
+ `Directory already exists.\n\n` +
128
+ `Try:\n` +
129
+ ` • Using a different project name\n` +
130
+ ` • Using --current-folder to install in the current directory`
131
+ );
132
+ }
133
+
134
+ // Default error message
135
+ return (
136
+ `Failed to create project: ${message}\n\n` +
137
+ `If this problem persists, please report it at:\n` +
138
+ `https://github.com/julianoczkowski/create-trimble-app/issues`
139
+ );
140
+ }
@@ -0,0 +1,25 @@
1
+ import { execa } from "execa";
2
+ import { existsSync } from "fs";
3
+ import { join } from "path";
4
+
5
+ export async function installDependencies(projectPath) {
6
+ const cwd = join(process.cwd(), projectPath);
7
+
8
+ // Detect package manager (or default to npm)
9
+ const packageManager = detectPackageManager(cwd);
10
+
11
+ try {
12
+ await execa(packageManager, ["install"], {
13
+ cwd,
14
+ stdio: "inherit",
15
+ });
16
+ } catch (error) {
17
+ throw new Error(`Failed to install dependencies: ${error.message}`);
18
+ }
19
+ }
20
+
21
+ function detectPackageManager(projectPath) {
22
+ if (existsSync(join(projectPath, "yarn.lock"))) return "yarn";
23
+ if (existsSync(join(projectPath, "pnpm-lock.yaml"))) return "pnpm";
24
+ return "npm";
25
+ }
@@ -0,0 +1,124 @@
1
+ import chalk from "chalk";
2
+
3
+ // Helper function to create clickable terminal links
4
+ function createClickableLink(url, text) {
5
+ // OSC 8 hyperlink format: \u001b]8;;URL\u0007TEXT\u001b]8;;\u0007
6
+ return `\u001b]8;;${url}\u0007${chalk.blue(text)}\u001b]8;;\u0007`;
7
+ }
8
+
9
+ export const logger = {
10
+ info: (message) => console.log(chalk.blue("ℹ"), message),
11
+ success: (message) => console.log(chalk.green("✓"), message),
12
+ warning: (message) => console.log(chalk.yellow("⚠"), message),
13
+ error: (message) => console.log(chalk.red("✗"), message),
14
+
15
+ // Styled messages
16
+ title: (message) => console.log(chalk.cyan.bold(message)),
17
+ subtitle: (message) => console.log(chalk.gray(message)),
18
+ highlight: (message) => console.log(chalk.magenta(message)),
19
+
20
+ // Security notice
21
+ securityNotice: () => {
22
+ console.log(
23
+ chalk.cyan(`
24
+ ╔════════════════════════════════════════════════════════════╗
25
+ ║ CREATE TRIMBLE APP - INFORMATION ║
26
+ ╠════════════════════════════════════════════════════════════╣
27
+ ║ ║
28
+ ║ Templates are bundled directly in this npm package. ║
29
+ ║ No external downloads required - works fully offline. ║
30
+ ║ ║
31
+ ║ Available Templates: ║
32
+ ║ • React - React + Vite + Modus 2.0 Components ║
33
+ ║ • Angular - Angular + Modus 2.0 Web Components ║
34
+ ║ ║
35
+ ║ Security: ║
36
+ ║ • No runtime network dependencies ║
37
+ ║ • Templates verified at publish time ║
38
+ ║ • Published with npm provenance ║
39
+ ║ ║
40
+ ║ Source repositories: ║
41
+ ║ • github.com/julianoczkowski/react-app ║
42
+ ║ • github.com/julianoczkowski/angular-app ║
43
+ ║ ║
44
+ ║ Report issues: ║
45
+ ║ https://github.com/julianoczkowski/create-trimble-app ║
46
+ ║ ║
47
+ ╚════════════════════════════════════════════════════════════╝
48
+ `),
49
+ );
50
+ },
51
+
52
+ // Special formatting
53
+ welcome: () => {
54
+ console.log(
55
+ chalk.cyan(`
56
+ + ════════════════════════════════════════════════════════════╗
57
+ ║ ║
58
+ ║ ████████╗██████╗ ██╗███╗ ███╗██████╗ ██╗ ███████╗ ║
59
+ ║ ╚══██╔══╝██╔══██╗██║████╗ ████║██╔══██╗██║ ██╔════╝ ║
60
+ ║ ██║ ██████╔╝██║██╔████╔██║██████╔╝██║ █████╗ ║
61
+ ║ ██║ ██╔══██╗██║██║╚██╔╝██║██╔══██╗██║ ██╔══╝ ║
62
+ ║ ██║ ██║ ██║██║██║ ╚═╝ ██║██████╔╝███████╗███████╗ ║
63
+ ║ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝ ║
64
+ ║ ║
65
+ ║ Create Your Trimble Application v1.0.0 ║
66
+ ║ Modus 2 Web Components ║
67
+ ║ Icons + Theming + MCP + Rules + Skills ║
68
+ ║ ║
69
+ ║ by Julian Oczkowski ║
70
+ ║ ║
71
+ ╚════════════════════════════════════════════════════════════ +
72
+ `),
73
+ );
74
+ },
75
+
76
+ nextSteps: (
77
+ projectName,
78
+ framework,
79
+ shouldInstall,
80
+ isCurrentFolder = false,
81
+ ) => {
82
+ const projectPath = isCurrentFolder ? "current directory" : projectName;
83
+ const openCommand = isCurrentFolder
84
+ ? "open current directory in your code editor"
85
+ : `open: '${projectName}' in your code editor`;
86
+
87
+ console.log(
88
+ chalk.green(`
89
+ 🎉 Success! Your ${framework} project is ready!
90
+
91
+ 📁 Project created at: ${chalk.cyan(projectPath)}
92
+
93
+ ${chalk.gray("═".repeat(60))}
94
+ ${chalk.gray("Next steps:")}
95
+ ${chalk.cyan(openCommand)}
96
+ ${!shouldInstall ? chalk.cyan(`run: npm install`) + "\n" : ""}${chalk.cyan(
97
+ `run: ${framework === "Angular" ? "npm run start" : "npm run dev"}`,
98
+ )}
99
+
100
+ ${chalk.gray("═".repeat(60))}
101
+ ${chalk.gray("How to use this project:")} ${createClickableLink(
102
+ "https://youtube.com",
103
+ "Watch Tutorial on YouTube",
104
+ )}
105
+ ${chalk.gray("═".repeat(60))}
106
+ ${chalk.gray("Additional Links:")}
107
+ ${chalk.gray("Modus 2.0 Storybook:")} ${createClickableLink(
108
+ "https://trimble-oss.github.io/modus-wc-2.0/main/?path=/docs/documentation-getting-started--docs",
109
+ "Modus 2.0 Storybook",
110
+ )}
111
+ ${chalk.gray("Modus Icons:")} ${createClickableLink(
112
+ "https://modus-icons.trimble.com/",
113
+ "Modus Icons",
114
+ )}
115
+ ${chalk.gray("Figma Modus MCP:")} ${createClickableLink(
116
+ "https://trimble-oss.github.io/modus-wc-2.0/main/?path=/docs/documentation-modus-figma-mcp-integration-guide--docs",
117
+ "Figma Modus MCP",
118
+ )}
119
+ ${chalk.gray("═".repeat(60))}
120
+
121
+ `),
122
+ );
123
+ },
124
+ };
@@ -0,0 +1,394 @@
1
+ # Remove Dev Content
2
+
3
+ Remove all development and exploration content from this Modus Angular app, preparing it for production use while keeping all core Modus wrapper components intact.
4
+
5
+ ## Overview
6
+
7
+ This command removes:
8
+ - Dev Panel (floating development panel with toggle button)
9
+ - All 44 component demo pages
10
+ - Reference pages (colors, icons, components gallery)
11
+ - Dev-only helper components and data files
12
+ - Icon reference data (`data/modusIcons.ts` and `src/app/data/`)
13
+
14
+ And updates:
15
+ - Icon names validation script to handle missing icon reference file gracefully
16
+
17
+ While preserving:
18
+ - All 48 Modus wrapper components
19
+ - Theme system (ThemeService)
20
+ - Core infrastructure (main.ts, styles.css, app.config.ts)
21
+
22
+ ---
23
+
24
+ ## Step 1: Delete Entire Directories
25
+
26
+ Remove these directories completely:
27
+
28
+ ```
29
+ src/app/demos/ # 44 component demo pages + shared/
30
+ src/app/dev/ # Dev panel infrastructure (service, component, config)
31
+ src/app/dev-pages/ # Colors, Icons, Components gallery pages
32
+ src/app/data/ # component-demos.ts, modus-icons.ts (dev-only data)
33
+ data/ # modusIcons.ts (root level, used by dev IconsPage)
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Step 2: Delete Dev-Only Files from src/app/components/
39
+
40
+ Remove this file from `src/app/components/`:
41
+
42
+ ```
43
+ src/app/components/theme-demo.component.ts
44
+ ```
45
+
46
+ Keep all other files - the 48 modus-*.component.ts wrappers, index.ts, and README.md.
47
+
48
+ ---
49
+
50
+ ## Step 3: Update src/app/app.ts
51
+
52
+ Remove all dev panel imports and usage. The file should become:
53
+
54
+ ```typescript
55
+ import { Component, OnInit, inject } from '@angular/core';
56
+ import { RouterOutlet } from '@angular/router';
57
+ import { ThemeService } from './services/theme.service';
58
+
59
+ /**
60
+ * Main Application Component.
61
+ *
62
+ * Structure:
63
+ * - Router outlet for application pages
64
+ *
65
+ * Getting Started:
66
+ * 1. Edit src/app/pages/home/home.component.ts for your landing page
67
+ * 2. Add new pages in src/app/pages/
68
+ * 3. Add routes in src/app/app.routes.ts
69
+ */
70
+ @Component({
71
+ selector: 'app-root',
72
+ imports: [RouterOutlet],
73
+ template: `<router-outlet />`,
74
+ host: {
75
+ class: 'min-h-screen flex flex-col',
76
+ },
77
+ })
78
+ export class App implements OnInit {
79
+ private readonly themeService = inject(ThemeService);
80
+
81
+ ngOnInit(): void {
82
+ // Initialize theme service - loads theme from localStorage
83
+ this.themeService.getThemeConfig();
84
+ }
85
+ }
86
+ ```
87
+
88
+ **What was removed:**
89
+ - Import: `import { DevPanelService, DevPanelComponent } from './dev';`
90
+ - Component import: `DevPanelComponent` from imports array
91
+ - Property: `readonly devPanelService = inject(DevPanelService);`
92
+ - Template: `@if (devPanelService.isEnabled()) { <app-dev-panel /> }`
93
+ - Comments referencing Dev Panel
94
+
95
+ ---
96
+
97
+ ## Step 4: Update src/app/app.routes.ts
98
+
99
+ Remove all dev routes and the conditional spread logic:
100
+
101
+ ```typescript
102
+ import { Routes } from '@angular/router';
103
+
104
+ /**
105
+ * Application routes.
106
+ *
107
+ * Getting Started:
108
+ * 1. Add your application routes below the home route
109
+ * 2. Use lazy loading with loadComponent for optimal performance
110
+ */
111
+ export const routes: Routes = [
112
+ // User routes - add your application routes here
113
+ {
114
+ path: '',
115
+ loadComponent: () =>
116
+ import('./pages/home/home.component').then((m) => m.HomeComponent),
117
+ title: 'Home',
118
+ },
119
+ // Example: Add more routes here
120
+ // {
121
+ // path: 'about',
122
+ // loadComponent: () =>
123
+ // import('./pages/about/about.component').then((m) => m.AboutComponent),
124
+ // title: 'About',
125
+ // },
126
+ ];
127
+ ```
128
+
129
+ **What was removed:**
130
+ - Import: `import { environment } from '../environments/environment.development';`
131
+ - The entire conditional spread: `...(environment.devPanel ? [...] : [])`
132
+ - All dev route definitions (colors, icons, components, demos/*)
133
+
134
+ ---
135
+
136
+ ## Step 5: Update src/app/pages/home/home.component.ts
137
+
138
+ Remove all Dev Panel references from the HomePage. Specifically remove:
139
+
140
+ 1. The "Open Dev Panel" button (the modus-button that dispatches a keyboard event)
141
+ 2. The `openDevPanel()` method
142
+ 3. The "Use the Dev Panel" getting started item mentioning Ctrl+Shift+D
143
+ 4. The `ModusButtonComponent` import (if no longer needed)
144
+ 5. The `CommonModule` import (if no longer needed)
145
+
146
+ Keep the overall page structure as a starting template for the user's app.
147
+
148
+ **Example of cleaned HomePage structure:**
149
+
150
+ ```typescript
151
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
152
+
153
+ /**
154
+ * Home page component.
155
+ *
156
+ * This is the main landing page for the user's application.
157
+ * Edit this component to create your own home page.
158
+ *
159
+ * Getting Started:
160
+ * 1. Customize the hero section with your app's branding
161
+ * 2. Add your own features and content
162
+ */
163
+ @Component({
164
+ selector: 'app-home',
165
+ standalone: true,
166
+ imports: [],
167
+ changeDetection: ChangeDetectionStrategy.OnPush,
168
+ template: `
169
+ <div class="min-h-screen flex flex-col bg-background">
170
+ <div class="flex-1 flex flex-col items-center p-8">
171
+ <div class="max-w-4xl w-full space-y-8">
172
+ <!-- Header -->
173
+ <div class="text-center space-y-4">
174
+ <div class="flex items-center justify-center gap-3">
175
+ <i class="modus-icons text-5xl text-primary">launch</i>
176
+ </div>
177
+ <div class="text-4xl font-bold text-foreground">Modus Angular App</div>
178
+ <div class="text-xl text-foreground-60">
179
+ A production-ready Angular boilerplate with Modus Design System integration.
180
+ </div>
181
+ </div>
182
+
183
+ <!-- Getting Started - without Dev Panel references -->
184
+ <div class="bg-card border-default rounded-lg p-6 space-y-4">
185
+ <div class="text-lg font-semibold text-foreground">Getting Started</div>
186
+ <div class="space-y-4 text-foreground-80">
187
+ <div class="flex gap-3">
188
+ <div
189
+ class="flex-shrink-0 w-6 h-6 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-sm font-bold"
190
+ >
191
+ 1
192
+ </div>
193
+ <div>
194
+ <div class="font-medium text-foreground">Build Your App</div>
195
+ <div class="text-sm text-foreground-60">
196
+ Start developing in
197
+ <code class="px-1 py-0.5 bg-muted rounded text-sm">src/app/pages/</code>
198
+ - add your routes in
199
+ <code class="px-1 py-0.5 bg-muted rounded text-sm">app.routes.ts</code>.
200
+ </div>
201
+ </div>
202
+ </div>
203
+ <div class="flex gap-3">
204
+ <div
205
+ class="flex-shrink-0 w-6 h-6 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-sm font-bold"
206
+ >
207
+ 2
208
+ </div>
209
+ <div>
210
+ <div class="font-medium text-foreground">Use Modus Components</div>
211
+ <div class="text-sm text-foreground-60">
212
+ Import components from
213
+ <code class="px-1 py-0.5 bg-muted rounded text-sm">src/app/components/</code>
214
+ to build your UI.
215
+ </div>
216
+ </div>
217
+ </div>
218
+ <div class="flex gap-3">
219
+ <div
220
+ class="flex-shrink-0 w-6 h-6 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-sm font-bold"
221
+ >
222
+ 3
223
+ </div>
224
+ <div>
225
+ <div class="font-medium text-foreground">Deploy</div>
226
+ <div class="text-sm text-foreground-60">
227
+ Run
228
+ <code class="px-1 py-0.5 bg-muted rounded text-sm">npm run build</code>
229
+ for a production-ready bundle.
230
+ </div>
231
+ </div>
232
+ </div>
233
+ </div>
234
+ </div>
235
+
236
+ <!-- Keep MCP Servers section -->
237
+ <div class="bg-card border-default rounded-lg p-6 space-y-4">
238
+ <div class="text-lg font-semibold text-foreground">MCP Servers Included</div>
239
+ <div class="text-sm text-foreground-60 mb-4">
240
+ Pre-configured Model Context Protocol servers for AI-assisted development.
241
+ </div>
242
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
243
+ <div class="p-4 bg-muted rounded-lg">
244
+ <div class="font-medium text-foreground mb-1">Modus Docs MCP</div>
245
+ <div class="text-sm text-foreground-60">
246
+ Access Modus Web Components documentation directly in your AI assistant. Get
247
+ component props, usage examples, and best practices.
248
+ </div>
249
+ </div>
250
+ <div class="p-4 bg-muted rounded-lg">
251
+ <div class="font-medium text-foreground mb-1">Context7 MCP</div>
252
+ <div class="text-sm text-foreground-60">
253
+ Up-to-date library documentation for Angular, Vite, Tailwind, and other
254
+ dependencies.
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </div>
259
+
260
+ <!-- Keep other sections as needed -->
261
+ </div>
262
+ </div>
263
+ </div>
264
+ `,
265
+ })
266
+ export class HomeComponent {}
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Step 6: Update Icon Names Validation Script
272
+
273
+ Since `data/modusIcons.ts` is deleted (it was only used by the dev panel's IconsPage), we need to update the icon names validation script to handle the missing file gracefully.
274
+
275
+ Update `scripts/check-icon-names.js` to check if the file exists before reading it:
276
+
277
+ **Find this section near the top of the file (lines 12-33):**
278
+
279
+ ```javascript
280
+ import fs from 'fs';
281
+ import path from 'path';
282
+ import { createRequire } from 'module';
283
+ const require = createRequire(import.meta.url);
284
+ const { glob } = require('glob');
285
+
286
+ // Read and parse the Modus icons data from TypeScript file
287
+ const iconsContent = fs.readFileSync(path.join(process.cwd(), 'data/modusIcons.ts'), 'utf8');
288
+ ```
289
+
290
+ **Replace it with:**
291
+
292
+ ```javascript
293
+ import fs from 'fs';
294
+ import path from 'path';
295
+ import { createRequire } from 'module';
296
+ const require = createRequire(import.meta.url);
297
+ const { glob } = require('glob');
298
+
299
+ // Colors for console output (moved to top)
300
+ const colors = {
301
+ red: '\x1b[31m',
302
+ green: '\x1b[32m',
303
+ yellow: '\x1b[33m',
304
+ blue: '\x1b[34m',
305
+ magenta: '\x1b[35m',
306
+ cyan: '\x1b[36m',
307
+ white: '\x1b[37m',
308
+ reset: '\x1b[0m',
309
+ bold: '\x1b[1m',
310
+ dim: '\x1b[2m',
311
+ };
312
+
313
+ // Check if modusIcons.ts exists (it may have been removed in production builds)
314
+ const iconsFilePath = path.join(process.cwd(), 'data/modusIcons.ts');
315
+ if (!fs.existsSync(iconsFilePath)) {
316
+ console.log(
317
+ `${colors.bold}${colors.yellow}Icon names validation skipped:${colors.reset}`
318
+ );
319
+ console.log(
320
+ `${colors.dim}The icon reference file (data/modusIcons.ts) is not present.${colors.reset}`
321
+ );
322
+ console.log(
323
+ `${colors.dim}This is normal if dev content has been removed.${colors.reset}\n`
324
+ );
325
+ process.exit(0);
326
+ }
327
+
328
+ // Read and parse the Modus icons data from TypeScript file
329
+ const iconsContent = fs.readFileSync(iconsFilePath, 'utf8');
330
+ ```
331
+
332
+ **Also remove the duplicate colors definition** that appears later in the file (around lines 38-49), since we've moved it to the top.
333
+
334
+ **What this does:**
335
+ - Moves the `colors` object definition to the top (before it's used)
336
+ - Checks if `modusIcons.ts` exists before trying to read it
337
+ - Gracefully skips validation with an informative message if the file is missing
338
+ - Exits with code 0 (success) so `npm run lint:all` continues without errors
339
+
340
+ ---
341
+
342
+ ## Files to KEEP (Do Not Touch)
343
+
344
+ These are core production files that must remain:
345
+
346
+ ### Modus Wrapper Components (48 files in src/app/components/)
347
+ - `modus-accordion.component.ts` through `modus-utility-panel.component.ts`
348
+ - `index.ts` (barrel exports)
349
+ - `README.md`
350
+
351
+ ### Theme System
352
+ - `src/app/services/theme.service.ts`
353
+
354
+ ### Core Infrastructure
355
+ - `src/main.ts`
356
+ - `src/styles.css`
357
+ - `src/app/app.config.ts`
358
+ - `src/app/app.css`
359
+ - `src/app/app.html`
360
+ - `src/app/app.spec.ts`
361
+
362
+ ### Configuration
363
+ - `angular.json`
364
+ - `package.json`
365
+ - `tsconfig.json` and related
366
+ - `src/environments/environment.ts`
367
+ - `src/environments/environment.development.ts`
368
+
369
+ ### Cursor Rules
370
+ - `.cursor/rules/` (all files)
371
+
372
+ ---
373
+
374
+ ## Verification Checklist
375
+
376
+ After removal, verify:
377
+
378
+ - [ ] `npm start` starts without errors
379
+ - [ ] `npm run build` completes successfully
380
+ - [ ] `npm run type-check` passes without errors
381
+ - [ ] `npm run lint:all` completes successfully (icon names validation will skip gracefully)
382
+ - [ ] No import errors in app.ts or app.routes.ts
383
+ - [ ] HomePage renders without Dev Panel button
384
+ - [ ] All Modus wrapper components are still present
385
+ - [ ] Theme switching still works via ThemeService
386
+
387
+ ---
388
+
389
+ ## Notes
390
+
391
+ - The Dev Panel is automatically hidden in production builds anyway (controlled by `environment.devPanel` flag)
392
+ - This command is for users who want a clean codebase without any dev exploration code
393
+ - All Modus wrapper components remain fully functional for building your app
394
+ - The environment files are kept but no longer referenced in routes (they can still be used for other purposes)
@@ -0,0 +1,13 @@
1
+ {
2
+ "mcpServers": {
3
+ "context7": {
4
+ "url": "https://mcp.context7.com/mcp",
5
+ "headers": {}
6
+ },
7
+
8
+ "modus-docs": {
9
+ "command": "npx",
10
+ "args": ["-y", "@julianoczkowski/mcp-modus"]
11
+ }
12
+ }
13
+ }