@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,138 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusLoader from "../../components/ModusLoader";
6
+
7
+ export default function LoaderDemoPage() {
8
+ return (
9
+ <DemoPage
10
+ title="Modus Loader"
11
+ description="Loaders communicate that content is on the way. Select a variant that fits the space and avoid pairing multiple animations together."
12
+ >
13
+ <DemoExample
14
+ title="All Variants"
15
+ description="Six different animation styles to choose from based on your use case."
16
+ >
17
+ <div className="grid grid-cols-2 md:grid-cols-3 gap-6">
18
+ <div className="flex flex-col items-center gap-2">
19
+ <ModusLoader variant="spinner" size="md" />
20
+ <div className="text-sm text-foreground opacity-80">Spinner</div>
21
+ </div>
22
+ <div className="flex flex-col items-center gap-2">
23
+ <ModusLoader variant="ball" size="md" />
24
+ <div className="text-sm text-foreground opacity-80">Ball</div>
25
+ </div>
26
+ <div className="flex flex-col items-center gap-2">
27
+ <ModusLoader variant="bars" size="md" />
28
+ <div className="text-sm text-foreground opacity-80">Bars</div>
29
+ </div>
30
+ <div className="flex flex-col items-center gap-2">
31
+ <ModusLoader variant="dots" size="md" />
32
+ <div className="text-sm text-foreground opacity-80">Dots</div>
33
+ </div>
34
+ <div className="flex flex-col items-center gap-2">
35
+ <ModusLoader variant="infinity" size="md" />
36
+ <div className="text-sm text-foreground opacity-80">Infinity</div>
37
+ </div>
38
+ <div className="flex flex-col items-center gap-2">
39
+ <ModusLoader variant="ring" size="md" />
40
+ <div className="text-sm text-foreground opacity-80">Ring</div>
41
+ </div>
42
+ </div>
43
+ </DemoExample>
44
+
45
+ <DemoExample
46
+ title="Color Options"
47
+ description="Theme-aware colors that automatically adapt to light and dark themes."
48
+ >
49
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-6">
50
+ <div className="flex flex-col items-center gap-2">
51
+ <ModusLoader variant="spinner" color="primary" size="md" />
52
+ <div className="text-sm text-foreground opacity-80">Primary</div>
53
+ </div>
54
+ <div className="flex flex-col items-center gap-2">
55
+ <ModusLoader variant="spinner" color="secondary" size="md" />
56
+ <div className="text-sm text-foreground opacity-80">Secondary</div>
57
+ </div>
58
+ <div className="flex flex-col items-center gap-2">
59
+ <ModusLoader variant="spinner" color="accent" size="md" />
60
+ <div className="text-sm text-foreground opacity-80">Accent</div>
61
+ </div>
62
+ <div className="flex flex-col items-center gap-2">
63
+ <ModusLoader variant="spinner" color="success" size="md" />
64
+ <div className="text-sm text-foreground opacity-80">Success</div>
65
+ </div>
66
+ <div className="flex flex-col items-center gap-2">
67
+ <ModusLoader variant="spinner" color="warning" size="md" />
68
+ <div className="text-sm text-foreground opacity-80">Warning</div>
69
+ </div>
70
+ <div className="flex flex-col items-center gap-2">
71
+ <ModusLoader variant="spinner" color="error" size="md" />
72
+ <div className="text-sm text-foreground opacity-80">Error</div>
73
+ </div>
74
+ <div className="flex flex-col items-center gap-2">
75
+ <ModusLoader variant="spinner" color="info" size="md" />
76
+ <div className="text-sm text-foreground opacity-80">Info</div>
77
+ </div>
78
+ </div>
79
+ </DemoExample>
80
+
81
+ <DemoExample
82
+ title="Size Options"
83
+ description="Four size tokens from extra small to large for different contexts."
84
+ >
85
+ <div className="flex items-center justify-center gap-8">
86
+ <div className="flex flex-col items-center gap-2">
87
+ <ModusLoader variant="spinner" size="xs" />
88
+ <div className="text-sm text-foreground opacity-80">XS (16px)</div>
89
+ </div>
90
+ <div className="flex flex-col items-center gap-2">
91
+ <ModusLoader variant="spinner" size="sm" />
92
+ <div className="text-sm text-foreground opacity-80">SM (20px)</div>
93
+ </div>
94
+ <div className="flex flex-col items-center gap-2">
95
+ <ModusLoader variant="spinner" size="md" />
96
+ <div className="text-sm text-foreground opacity-80">MD (24px)</div>
97
+ </div>
98
+ <div className="flex flex-col items-center gap-2">
99
+ <ModusLoader variant="spinner" size="lg" />
100
+ <div className="text-sm text-foreground opacity-80">LG (32px)</div>
101
+ </div>
102
+ </div>
103
+ </DemoExample>
104
+
105
+ <DemoExample
106
+ title="Usage Examples"
107
+ description="Common patterns for using loaders in real applications."
108
+ >
109
+ <div className="space-y-6">
110
+ <div className="flex items-center gap-3">
111
+ <ModusLoader variant="spinner" size="md" />
112
+ <div className="text-sm text-foreground opacity-80">
113
+ Syncing records…
114
+ </div>
115
+ </div>
116
+ <div className="flex items-center gap-2">
117
+ <ModusLoader variant="dots" size="sm" color="secondary" />
118
+ <div className="text-sm text-foreground opacity-80">
119
+ Preparing report
120
+ </div>
121
+ </div>
122
+ <div className="flex items-center gap-3">
123
+ <ModusLoader variant="bars" size="sm" color="success" />
124
+ <div className="text-sm text-foreground opacity-80">
125
+ Upload complete
126
+ </div>
127
+ </div>
128
+ <div className="flex items-center gap-3">
129
+ <ModusLoader variant="ring" size="lg" color="warning" />
130
+ <div className="text-lg text-foreground">
131
+ Processing large dataset…
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </DemoExample>
136
+ </DemoPage>
137
+ );
138
+ }
@@ -0,0 +1,292 @@
1
+ import DemoExample from "../../components/DemoExample";
2
+ import DemoPage from "../../components/DemoPage";
3
+ import ModusLogo, { type LogoName } from "../../components/ModusLogo";
4
+
5
+ // Trimble Products (19 logos)
6
+ const trimbleLogos: { name: LogoName; displayName: string }[] = [
7
+ { name: "trimble", displayName: "Trimble" },
8
+ { name: "siteworks", displayName: "Trimble Siteworks" },
9
+ { name: "earthworks", displayName: "Trimble Earthworks" },
10
+ { name: "financials", displayName: "Trimble Financials" },
11
+ { name: "worksmanager", displayName: "Trimble WorksManager" },
12
+ { name: "connect", displayName: "Trimble Connect" },
13
+ { name: "unity_construct", displayName: "Trimble Unity Construct" },
14
+ { name: "trade_servicelive", displayName: "Trade ServiceLive" },
15
+ { name: "buildable", displayName: "Buildable" },
16
+ { name: "livecount", displayName: "LiveCount" },
17
+ { name: "supplier_xchange", displayName: "Supplier Xchange" },
18
+ { name: "app_xchange", displayName: "App Xchange" },
19
+ { name: "trimble_unity", displayName: "Trimble Unity" },
20
+ { name: "sketchup", displayName: "SketchUp" },
21
+ { name: "pc_miler", displayName: "PC Miler" },
22
+ { name: "copilot", displayName: "CoPilot" },
23
+ { name: "trimble_pay", displayName: "Trimble Pay" },
24
+ { name: "projectsight", displayName: "ProjectSight" },
25
+ { name: "demand_planning", displayName: "Demand Planning" },
26
+ ];
27
+
28
+ // Viewpoint Products (17 logos)
29
+ const viewpointLogos: { name: LogoName; displayName: string }[] = [
30
+ { name: "viewpoint", displayName: "Viewpoint" },
31
+ { name: "viewpoint_analytics", displayName: "Viewpoint Analytics" },
32
+ { name: "viewpoint_epayments", displayName: "Viewpoint ePayments" },
33
+ { name: "viewpoint_estimating", displayName: "Viewpoint Estimating" },
34
+ {
35
+ name: "viewpoint_field_management",
36
+ displayName: "Viewpoint Field Management",
37
+ },
38
+ { name: "viewpoint_field_time", displayName: "Viewpoint Field Time" },
39
+ {
40
+ name: "viewpoint_financial_controls",
41
+ displayName: "Viewpoint Financial Controls",
42
+ },
43
+ { name: "viewpoint_hr_management", displayName: "Viewpoint HR Management" },
44
+ { name: "viewpoint_jobpac_connect", displayName: "Viewpoint Jobpac Connect" },
45
+ { name: "viewpoint_procontractor", displayName: "Viewpoint ProContractor" },
46
+ { name: "viewpoint_spectrum", displayName: "Viewpoint Spectrum" },
47
+ { name: "viewpoint_team", displayName: "Viewpoint Team" },
48
+ { name: "viewpoint_vista", displayName: "Viewpoint Vista" },
49
+ {
50
+ name: "viewpoint_spectrum_service_tech",
51
+ displayName: "Viewpoint Spectrum Service Tech",
52
+ },
53
+ { name: "viewpoint_for_projects", displayName: "Viewpoint For Projects" },
54
+ {
55
+ name: "viewpoint_vista_field_service",
56
+ displayName: "Viewpoint Vista Field Service",
57
+ },
58
+ { name: "viewpoint_field_view", displayName: "Viewpoint Field View" },
59
+ ];
60
+
61
+ // Sample logos for emblems and sizes
62
+ const sampleLogos: LogoName[] = ["trimble", "connect", "viewpoint", "sketchup"];
63
+
64
+ export default function LogoDemoPage() {
65
+ return (
66
+ <DemoPage
67
+ title="Modus Logo"
68
+ description="Logo component displays Trimble and Viewpoint product logos with automatic theme-aware light/dark switching. Use the component for consistent branding across applications."
69
+ >
70
+ <DemoExample
71
+ title="Trimble Product Logos (19)"
72
+ description="All available Trimble product logos."
73
+ >
74
+ <div className="grid grid-cols-2 gap-8">
75
+ {trimbleLogos.map((logo) => (
76
+ <div
77
+ key={logo.name}
78
+ className="flex flex-col items-center gap-4 p-6 bg-muted rounded-lg"
79
+ >
80
+ <div className="h-20 flex items-center justify-center">
81
+ <ModusLogo name={logo.name} customClass="max-h-20 max-w-64" />
82
+ </div>
83
+ <div className="text-sm text-muted-foreground text-center">
84
+ {logo.displayName}
85
+ </div>
86
+ <code className="text-xs bg-background px-2 py-1 rounded">
87
+ {logo.name}
88
+ </code>
89
+ </div>
90
+ ))}
91
+ </div>
92
+ </DemoExample>
93
+
94
+ <DemoExample
95
+ title="Viewpoint Product Logos (17)"
96
+ description="All available Viewpoint product logos."
97
+ >
98
+ <div className="grid grid-cols-2 gap-8">
99
+ {viewpointLogos.map((logo) => (
100
+ <div
101
+ key={logo.name}
102
+ className="flex flex-col items-center gap-4 p-6 bg-muted rounded-lg"
103
+ >
104
+ <div className="h-20 flex items-center justify-center">
105
+ <ModusLogo name={logo.name} customClass="max-h-20 max-w-64" />
106
+ </div>
107
+ <div className="text-sm text-muted-foreground text-center">
108
+ {logo.displayName}
109
+ </div>
110
+ <code className="text-xs bg-background px-2 py-1 rounded">
111
+ {logo.name}
112
+ </code>
113
+ </div>
114
+ ))}
115
+ </div>
116
+ </DemoExample>
117
+
118
+ <DemoExample
119
+ title="Emblem Variants (Icon-Only)"
120
+ description="Compact emblem versions of logos for use in limited space."
121
+ >
122
+ <div className="flex flex-wrap gap-8 items-end">
123
+ {sampleLogos.map((logoName) => (
124
+ <div
125
+ key={`emblem-${logoName}`}
126
+ className="flex flex-col items-center gap-2"
127
+ >
128
+ <div className="h-16 w-16 flex items-center justify-center bg-muted rounded-lg p-2">
129
+ <ModusLogo name={logoName} emblem />
130
+ </div>
131
+ <code className="text-xs text-muted-foreground">{logoName}</code>
132
+ </div>
133
+ ))}
134
+ </div>
135
+ </DemoExample>
136
+
137
+ <DemoExample
138
+ title="Logo Sizes"
139
+ description="Control logo size using custom CSS classes."
140
+ >
141
+ <div className="flex flex-col gap-8">
142
+ <div className="flex flex-col gap-2">
143
+ <div className="text-sm text-muted-foreground">Small (w-20)</div>
144
+ <div className="flex flex-wrap gap-4 items-center">
145
+ <ModusLogo name="trimble" customClass="w-20" />
146
+ <ModusLogo name="connect" customClass="w-20" />
147
+ <ModusLogo name="viewpoint" customClass="w-20" />
148
+ </div>
149
+ </div>
150
+ <div className="flex flex-col gap-2">
151
+ <div className="text-sm text-muted-foreground">Medium (w-32)</div>
152
+ <div className="flex flex-wrap gap-4 items-center">
153
+ <ModusLogo name="trimble" customClass="w-32" />
154
+ <ModusLogo name="connect" customClass="w-32" />
155
+ <ModusLogo name="viewpoint" customClass="w-32" />
156
+ </div>
157
+ </div>
158
+ <div className="flex flex-col gap-2">
159
+ <div className="text-sm text-muted-foreground">Large (w-48)</div>
160
+ <div className="flex flex-wrap gap-4 items-center">
161
+ <ModusLogo name="trimble" customClass="w-48" />
162
+ <ModusLogo name="connect" customClass="w-48" />
163
+ <ModusLogo name="viewpoint" customClass="w-48" />
164
+ </div>
165
+ </div>
166
+ </div>
167
+ </DemoExample>
168
+
169
+ <DemoExample
170
+ title="Emblem Sizes"
171
+ description="Sized emblem variants for different use cases."
172
+ >
173
+ <div className="flex flex-wrap gap-8 items-end">
174
+ <div className="flex flex-col items-center gap-2">
175
+ <div className="h-8 w-8 flex items-center justify-center bg-muted rounded p-1">
176
+ <ModusLogo name="trimble" emblem customClass="w-6 h-6" />
177
+ </div>
178
+ <div className="text-xs text-muted-foreground">Small</div>
179
+ </div>
180
+ <div className="flex flex-col items-center gap-2">
181
+ <div className="h-12 w-12 flex items-center justify-center bg-muted rounded-lg p-2">
182
+ <ModusLogo name="trimble" emblem customClass="w-8 h-8" />
183
+ </div>
184
+ <div className="text-xs text-muted-foreground">Medium</div>
185
+ </div>
186
+ <div className="flex flex-col items-center gap-2">
187
+ <div className="h-16 w-16 flex items-center justify-center bg-muted rounded-lg p-2">
188
+ <ModusLogo name="trimble" emblem customClass="w-12 h-12" />
189
+ </div>
190
+ <div className="text-xs text-muted-foreground">Large</div>
191
+ </div>
192
+ <div className="flex flex-col items-center gap-2">
193
+ <div className="h-24 w-24 flex items-center justify-center bg-muted rounded-lg p-2">
194
+ <ModusLogo name="trimble" emblem customClass="w-20 h-20" />
195
+ </div>
196
+ <div className="text-xs text-muted-foreground">Extra Large</div>
197
+ </div>
198
+ </div>
199
+ </DemoExample>
200
+
201
+ <DemoExample
202
+ title="Custom Alt Text"
203
+ description="Provide custom alt text for better accessibility."
204
+ >
205
+ <div className="flex flex-wrap gap-6">
206
+ <div className="flex flex-col items-center gap-2">
207
+ <ModusLogo
208
+ name="connect"
209
+ alt="Trimble Connect - Cloud-based collaboration platform"
210
+ customClass="w-32"
211
+ />
212
+ <div className="text-xs text-muted-foreground">Custom alt text</div>
213
+ </div>
214
+ <div className="flex flex-col items-center gap-2">
215
+ <ModusLogo name="viewpoint_vista" customClass="w-32" />
216
+ <div className="text-xs text-muted-foreground">
217
+ Default alt (logo name)
218
+ </div>
219
+ </div>
220
+ </div>
221
+ </DemoExample>
222
+
223
+ <DemoExample
224
+ title="Theme Awareness"
225
+ description="Logos automatically switch between light and dark variants based on the current theme."
226
+ >
227
+ <div className="p-6 bg-muted rounded-lg">
228
+ <div className="text-sm text-foreground mb-4">
229
+ The logo component observes the{" "}
230
+ <code className="bg-background px-2 py-1 rounded">data-theme</code>{" "}
231
+ attribute on the{" "}
232
+ <code className="bg-background px-2 py-1 rounded">
233
+ &lt;html&gt;
234
+ </code>{" "}
235
+ element and automatically updates when the theme changes. Try
236
+ switching themes using the theme toggle in the header.
237
+ </div>
238
+ <div className="flex flex-wrap gap-6">
239
+ <ModusLogo name="trimble" customClass="w-32" />
240
+ <ModusLogo name="viewpoint" customClass="w-32" />
241
+ <ModusLogo name="sketchup" customClass="w-32" />
242
+ </div>
243
+ </div>
244
+ </DemoExample>
245
+
246
+ <DemoExample
247
+ title="Full Logo vs Emblem Comparison"
248
+ description="Side-by-side comparison of full logos and their emblem variants."
249
+ >
250
+ <div className="overflow-x-auto">
251
+ <table className="w-full text-sm">
252
+ <thead>
253
+ <tr className="border-b border-border">
254
+ <th className="text-left py-3 px-4 font-medium text-foreground">
255
+ Product
256
+ </th>
257
+ <th className="text-center py-3 px-4 font-medium text-foreground">
258
+ Full Logo
259
+ </th>
260
+ <th className="text-center py-3 px-4 font-medium text-foreground">
261
+ Emblem
262
+ </th>
263
+ </tr>
264
+ </thead>
265
+ <tbody>
266
+ {sampleLogos.map((logoName) => (
267
+ <tr
268
+ key={`compare-${logoName}`}
269
+ className="border-b border-border"
270
+ >
271
+ <td className="py-4 px-4 text-muted-foreground capitalize">
272
+ {logoName.replace(/_/g, " ")}
273
+ </td>
274
+ <td className="py-4 px-4 text-center">
275
+ <div className="flex justify-center">
276
+ <ModusLogo name={logoName} customClass="h-8" />
277
+ </div>
278
+ </td>
279
+ <td className="py-4 px-4 text-center">
280
+ <div className="flex justify-center">
281
+ <ModusLogo name={logoName} emblem customClass="h-8 w-8" />
282
+ </div>
283
+ </td>
284
+ </tr>
285
+ ))}
286
+ </tbody>
287
+ </table>
288
+ </div>
289
+ </DemoExample>
290
+ </DemoPage>
291
+ );
292
+ }
@@ -0,0 +1,70 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusMenu from "../../components/ModusMenu";
7
+
8
+ export default function MenuDemoPage() {
9
+ const [selectedMenu, setSelectedMenu] = useState<string>("all");
10
+
11
+ // Vertical Menu items
12
+ const verticalMenuItems = [
13
+ { label: "Dashboard", value: "dashboard", selected: true },
14
+ { label: "Projects", value: "projects" },
15
+ { label: "Reports", value: "reports" },
16
+ { label: "Settings", value: "settings" },
17
+ ];
18
+
19
+ // Horizontal Menu items
20
+ const horizontalMenuItems = [
21
+ { label: "Home", value: "home" },
22
+ { label: "Products", value: "products" },
23
+ { label: "About", value: "about" },
24
+ { label: "Contact", value: "contact" },
25
+ ];
26
+
27
+ // Selected Menu Items
28
+ const selectedMenuItems = [
29
+ { label: "All Projects", value: "all", selected: selectedMenu === "all" },
30
+ { label: "Active", value: "active", selected: selectedMenu === "active" },
31
+ { label: "Archived", value: "archived", selected: selectedMenu === "archived" },
32
+ { label: "Deleted", value: "deleted", selected: selectedMenu === "deleted" },
33
+ ];
34
+
35
+ const handleSelectedMenuChange = (item: { label: string; value: string }) => {
36
+ setSelectedMenu(item.value);
37
+ };
38
+
39
+ return (
40
+ <DemoPage
41
+ title="Modus Menu"
42
+ description="Menus provide navigation and action lists. Use menus to organize related actions or navigation items in a consistent, accessible way."
43
+ >
44
+ <DemoExample
45
+ title="Vertical Menu"
46
+ description="Default vertical menu orientation for navigation lists."
47
+ >
48
+ <ModusMenu items={verticalMenuItems} bordered />
49
+ </DemoExample>
50
+
51
+ <DemoExample
52
+ title="Horizontal Menu"
53
+ description="Horizontal menu orientation for top navigation."
54
+ >
55
+ <ModusMenu items={horizontalMenuItems} orientation="horizontal" />
56
+ </DemoExample>
57
+
58
+ <DemoExample
59
+ title="Selected Menu Items"
60
+ description="Menu with selected items to indicate current state."
61
+ >
62
+ <ModusMenu
63
+ items={selectedMenuItems}
64
+ bordered
65
+ onItemSelect={handleSelectedMenuChange}
66
+ />
67
+ </DemoExample>
68
+ </DemoPage>
69
+ );
70
+ }