@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,489 @@
1
+ import { useState } from "react";
2
+ import { Link } from "react-router-dom";
3
+ import ModusButton from "../components/ModusButton";
4
+ import ModusBadge from "../components/ModusBadge";
5
+
6
+ interface ComponentDemo {
7
+ name: string;
8
+ description: string;
9
+ url: string;
10
+ category: string;
11
+ status: "ready" | "demo";
12
+ }
13
+
14
+ const componentDemos: ComponentDemo[] = [
15
+ {
16
+ name: "Accordion",
17
+ description:
18
+ "Collapsible content sections with expand/collapse functionality",
19
+ url: "/dev/demos/accordion-demo",
20
+ category: "Layout",
21
+ status: "demo",
22
+ },
23
+ {
24
+ name: "Alert",
25
+ description:
26
+ "Notifications and messages with different variants and dismissible options",
27
+ url: "/dev/demos/alert-demo",
28
+ category: "Feedback",
29
+ status: "demo",
30
+ },
31
+ {
32
+ name: "Autocomplete",
33
+ description: "Input field with suggestions and multi-select capabilities",
34
+ url: "/dev/demos/autocomplete-demo",
35
+ category: "Forms",
36
+ status: "demo",
37
+ },
38
+ {
39
+ name: "Avatar",
40
+ description: "User profile images with different sizes and shapes",
41
+ url: "/dev/demos/avatar-demo",
42
+ category: "Display",
43
+ status: "demo",
44
+ },
45
+ {
46
+ name: "Badge",
47
+ description: "Labels and counters for status indicators and notifications",
48
+ url: "/dev/demos/badge-demo",
49
+ category: "Display",
50
+ status: "demo",
51
+ },
52
+ {
53
+ name: "Breadcrumbs",
54
+ description: "Navigation breadcrumb trails for hierarchical navigation",
55
+ url: "/dev/demos/breadcrumbs-demo",
56
+ category: "Navigation",
57
+ status: "demo",
58
+ },
59
+ {
60
+ name: "Button",
61
+ description: "Action buttons with various styles, sizes, and states",
62
+ url: "/dev/demos/button-demo",
63
+ category: "Forms",
64
+ status: "demo",
65
+ },
66
+ {
67
+ name: "Button Group",
68
+ description:
69
+ "Groups multiple buttons with single or multiple selection modes for toolbars and segmented controls",
70
+ url: "/dev/demos/button-group-demo",
71
+ category: "Forms",
72
+ status: "demo",
73
+ },
74
+ {
75
+ name: "Card",
76
+ description: "Content containers with headers, content, and action areas",
77
+ url: "/dev/demos/card-demo",
78
+ category: "Layout",
79
+ status: "demo",
80
+ },
81
+ {
82
+ name: "Checkbox",
83
+ description: "Form controls for multiple selections and boolean inputs",
84
+ url: "/dev/demos/checkbox-demo",
85
+ category: "Forms",
86
+ status: "demo",
87
+ },
88
+ {
89
+ name: "Chip",
90
+ description: "Compact elements for tags, filters, and removable items",
91
+ url: "/dev/demos/chip-demo",
92
+ category: "Display",
93
+ status: "demo",
94
+ },
95
+ {
96
+ name: "Date",
97
+ description: "Date input controls with validation and formatting",
98
+ url: "/dev/demos/date-demo",
99
+ category: "Forms",
100
+ status: "demo",
101
+ },
102
+ {
103
+ name: "Dropdown Menu",
104
+ description: "Contextual menus with various placement and sizing options",
105
+ url: "/dev/demos/dropdown-demo",
106
+ category: "Navigation",
107
+ status: "demo",
108
+ },
109
+ {
110
+ name: "File Dropzone",
111
+ description:
112
+ "Drag-and-drop file upload with validation for file types, sizes, and counts",
113
+ url: "/dev/demos/file-dropzone-demo",
114
+ category: "Forms",
115
+ status: "demo",
116
+ },
117
+ {
118
+ name: "Handle",
119
+ description:
120
+ "Draggable resize handle for panels with bar and button styles, supports keyboard navigation",
121
+ url: "/dev/demos/handle-demo",
122
+ category: "Layout",
123
+ status: "demo",
124
+ },
125
+ {
126
+ name: "Icon",
127
+ description:
128
+ "Icon component with various sizes, accessibility options, and styling",
129
+ url: "/dev/demos/icon-demo",
130
+ category: "Display",
131
+ status: "demo",
132
+ },
133
+ {
134
+ name: "Input Feedback",
135
+ description:
136
+ "Contextual feedback for form fields with error, success, warning, and info messages",
137
+ url: "/dev/demos/input-feedback-demo",
138
+ category: "Forms",
139
+ status: "demo",
140
+ },
141
+ {
142
+ name: "Input Label",
143
+ description:
144
+ "Labels for form controls with sub-labels, required indicators, and custom content",
145
+ url: "/dev/demos/input-label-demo",
146
+ category: "Forms",
147
+ status: "demo",
148
+ },
149
+ {
150
+ name: "Loader",
151
+ description:
152
+ "Visual loading indicators with 6 animation variants, 4 sizes, and 8 colors",
153
+ url: "/dev/demos/loader-demo",
154
+ category: "Feedback",
155
+ status: "demo",
156
+ },
157
+ {
158
+ name: "Logo",
159
+ description:
160
+ "Trimble and Viewpoint product logos with theme-aware light/dark switching and emblem variants",
161
+ url: "/dev/demos/logo-demo",
162
+ category: "Branding",
163
+ status: "demo",
164
+ },
165
+ {
166
+ name: "Menu",
167
+ description:
168
+ "Integrated menu system with container and menu items for navigation and toolbars",
169
+ url: "/dev/demos/menu-demo",
170
+ category: "Navigation",
171
+ status: "demo",
172
+ },
173
+ {
174
+ name: "Modal",
175
+ description:
176
+ "Blocking dialog overlays for forms, confirmations, and detailed content",
177
+ url: "/dev/demos/modal-demo",
178
+ category: "Overlays",
179
+ status: "demo",
180
+ },
181
+ {
182
+ name: "Navbar",
183
+ description:
184
+ "Full-width application bar with navigation menus, search, notifications, apps launcher, AI button and user profile controls",
185
+ url: "/dev/demos/navbar-demo",
186
+ category: "Navigation",
187
+ status: "demo",
188
+ },
189
+ {
190
+ name: "Number Input",
191
+ description:
192
+ "Numeric input controls with validation, currency support, range sliders, and comprehensive form integration",
193
+ url: "/dev/demos/number-input-demo",
194
+ category: "Forms",
195
+ status: "demo",
196
+ },
197
+ {
198
+ name: "Pagination",
199
+ description:
200
+ "Page navigation control with first, previous, number, next, and last actions plus accessibility customization",
201
+ url: "/dev/demos/pagination-demo",
202
+ category: "Navigation",
203
+ status: "demo",
204
+ },
205
+ {
206
+ name: "Panel",
207
+ description:
208
+ "Structured layout component with header, body, and footer slots for side navigation and content sections",
209
+ url: "/dev/demos/panel-demo",
210
+ category: "Layout",
211
+ status: "demo",
212
+ },
213
+ {
214
+ name: "Progress",
215
+ description:
216
+ "Linear and radial progress indicators for task completion and live updates",
217
+ url: "/dev/demos/progress-demo",
218
+ category: "Feedback",
219
+ status: "demo",
220
+ },
221
+ {
222
+ name: "Radio",
223
+ description:
224
+ "Exclusive choice control with multiple sizes, required state, and layout customization",
225
+ url: "/dev/demos/radio-demo",
226
+ category: "Forms",
227
+ status: "demo",
228
+ },
229
+ {
230
+ name: "Rating",
231
+ description:
232
+ "Star, smiley, heart, and thumb ratings with events, half-steps, and accessibility helpers",
233
+ url: "/dev/demos/rating-demo",
234
+ category: "Forms",
235
+ status: "demo",
236
+ },
237
+ {
238
+ name: "Select",
239
+ description:
240
+ "Single-select dropdown with dynamic options arrays, validation feedback, and async loading patterns",
241
+ url: "/dev/demos/select-demo",
242
+ category: "Forms",
243
+ status: "demo",
244
+ },
245
+ {
246
+ name: "Side Navigation",
247
+ description:
248
+ "Collapsible left navigation with controlled expansion and Modus navbar integration",
249
+ url: "/dev/demos/side-navigation-demo",
250
+ category: "Navigation",
251
+ status: "demo",
252
+ },
253
+ {
254
+ name: "Skeleton",
255
+ description:
256
+ "Animated loading placeholders for typography, cards, and dashboards",
257
+ url: "/dev/demos/skeleton-demo",
258
+ category: "Feedback",
259
+ status: "demo",
260
+ },
261
+ {
262
+ name: "Slider",
263
+ description:
264
+ "Interactive range input with min/max bounds, step control, and live feedback",
265
+ url: "/dev/demos/slider-demo",
266
+ category: "Forms",
267
+ status: "demo",
268
+ },
269
+ {
270
+ name: "Stepper",
271
+ description:
272
+ "Progress indicator for multi-step workflows with horizontal and vertical orientations",
273
+ url: "/dev/demos/stepper-demo",
274
+ category: "Navigation",
275
+ status: "demo",
276
+ },
277
+ {
278
+ name: "Switch",
279
+ description:
280
+ "Binary toggle control with required, disabled, and indeterminate states",
281
+ url: "/dev/demos/switch-demo",
282
+ category: "Forms",
283
+ status: "demo",
284
+ },
285
+ {
286
+ name: "Table",
287
+ description: "Data tables with sorting, pagination, and selection",
288
+ url: "/dev/demos/table-demo",
289
+ category: "Data",
290
+ status: "demo",
291
+ },
292
+ {
293
+ name: "Tabs",
294
+ description:
295
+ "Tab navigation with icons, disabled states, and multiple visual styles",
296
+ url: "/dev/demos/tabs-demo",
297
+ category: "Navigation",
298
+ status: "demo",
299
+ },
300
+ {
301
+ name: "Textarea",
302
+ description:
303
+ "Multi-line text field with helper messages, validation, and clearable controls",
304
+ url: "/dev/demos/textarea-demo",
305
+ category: "Forms",
306
+ status: "demo",
307
+ },
308
+ {
309
+ name: "Text Input",
310
+ description:
311
+ "Single-line text fields with various types, validation, and interactive features",
312
+ url: "/dev/demos/text-input-demo",
313
+ category: "Forms",
314
+ status: "demo",
315
+ },
316
+ {
317
+ name: "Theme Switcher",
318
+ description:
319
+ "Toggle between light and dark Modus themes with persisted preferences",
320
+ url: "/dev/demos/theme-switcher-demo",
321
+ category: "Appearance",
322
+ status: "demo",
323
+ },
324
+ {
325
+ name: "Time Input",
326
+ description:
327
+ "Single-field time picker with min/max limits, seconds support, and datalist suggestions",
328
+ url: "/dev/demos/time-input-demo",
329
+ category: "Forms",
330
+ status: "demo",
331
+ },
332
+ {
333
+ name: "Toast",
334
+ description:
335
+ "Transient notifications that stack by position and pair with alerts for content",
336
+ url: "/dev/demos/toast-demo",
337
+ category: "Feedback",
338
+ status: "demo",
339
+ },
340
+ {
341
+ name: "Toolbar",
342
+ description:
343
+ "Three-slot layout container for building application headers and action bars",
344
+ url: "/dev/demos/toolbar-demo",
345
+ category: "Layout",
346
+ status: "demo",
347
+ },
348
+ {
349
+ name: "Tooltip",
350
+ description:
351
+ "Contextual helper messages that appear on hover or focus around any trigger",
352
+ url: "/dev/demos/tooltip-demo",
353
+ category: "Feedback",
354
+ status: "demo",
355
+ },
356
+ {
357
+ name: "Utility Panel",
358
+ description:
359
+ "Collapsible side panel for contextual filters, tools, and secondary content with optional push layout",
360
+ url: "/dev/demos/utility-panel-demo",
361
+ category: "Layout",
362
+ status: "demo",
363
+ },
364
+ ];
365
+
366
+ const categories = [
367
+ { name: "All", value: "all" },
368
+ { name: "Forms", value: "forms" },
369
+ { name: "Layout", value: "layout" },
370
+ { name: "Navigation", value: "navigation" },
371
+ { name: "Display", value: "display" },
372
+ { name: "Feedback", value: "feedback" },
373
+ { name: "Overlays", value: "overlays" },
374
+ { name: "Data", value: "data" },
375
+ { name: "Branding", value: "branding" },
376
+ { name: "Appearance", value: "appearance" },
377
+ ];
378
+
379
+ /**
380
+ * Renders a gallery of component demos.
381
+ * @returns {JSX.Element} The rendered component gallery page.
382
+ */
383
+ export default function ComponentsGalleryPage() {
384
+ const [selectedCategory, setSelectedCategory] = useState<string>("all");
385
+
386
+ const filteredComponents =
387
+ selectedCategory === "all"
388
+ ? componentDemos
389
+ : componentDemos.filter(
390
+ (component) => component.category.toLowerCase() === selectedCategory,
391
+ );
392
+
393
+ return (
394
+ <div className="max-w-6xl mx-auto p-8">
395
+ <div className="text-center mb-12">
396
+ <div className="text-4xl font-semibold mb-4 text-foreground">
397
+ Modus Web Components
398
+ </div>
399
+ <div className="text-lg leading-relaxed text-foreground text-center">
400
+ Explore all available React Modus Web Components.
401
+ </div>
402
+ </div>
403
+
404
+ {/* Category Filter */}
405
+ <div className="mb-12 p-8 bg-card rounded-lg border-default">
406
+ <div className="text-2xl font-semibold mb-4 text-foreground">
407
+ Filter by Category
408
+ </div>
409
+ <div className="flex flex-wrap gap-2">
410
+ {categories.map((category) => (
411
+ <ModusButton
412
+ key={category.value}
413
+ color={
414
+ selectedCategory === category.value ? "secondary" : "secondary"
415
+ }
416
+ variant={
417
+ selectedCategory === category.value ? "filled" : "outlined"
418
+ }
419
+ size="md"
420
+ onButtonClick={() => setSelectedCategory(category.value)}
421
+ >
422
+ {category.name}
423
+ </ModusButton>
424
+ ))}
425
+ </div>
426
+ </div>
427
+
428
+ {/* Components Grid */}
429
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
430
+ {filteredComponents.map((component) => (
431
+ <div
432
+ key={component.url}
433
+ className="bg-card rounded-lg p-6 hover:shadow-lg transition-all duration-200 border-default"
434
+ >
435
+ <div className="flex items-start justify-between mb-4">
436
+ <div>
437
+ <div className="text-xl font-semibold text-foreground mb-2">
438
+ {component.name}
439
+ </div>
440
+ <div className="text-sm text-muted-foreground mb-2">
441
+ {component.category}
442
+ </div>
443
+ </div>
444
+ <div className="flex items-center gap-2">
445
+ <ModusBadge
446
+ color={component.status === "ready" ? "success" : "warning"}
447
+ variant="filled"
448
+ size="md"
449
+ >
450
+ {component.status === "ready" ? "Ready" : "Demo"}
451
+ </ModusBadge>
452
+ </div>
453
+ </div>
454
+
455
+ <div className="text-foreground mb-4 text-sm leading-relaxed">
456
+ {component.description}
457
+ </div>
458
+
459
+ <div className="flex gap-2">
460
+ <Link to={component.url} className="flex-1">
461
+ <ModusButton
462
+ color="primary"
463
+ variant="filled"
464
+ size="md"
465
+ fullWidth
466
+ >
467
+ View Demo
468
+ </ModusButton>
469
+ </Link>
470
+ </div>
471
+ </div>
472
+ ))}
473
+ </div>
474
+
475
+ {/* Footer */}
476
+ <div className="text-center pt-8 box-content">
477
+ <div className="flex items-center justify-center gap-3 mb-3">
478
+ <img src="/vite.svg" alt="Vite" className="h-6 w-6" />
479
+ <div className="text-foreground-40">+</div>
480
+ <img src="/react.svg" alt="React" className="h-6 w-6" />
481
+ </div>
482
+ <div className="text-sm font-mono text-foreground-40">
483
+ 2026 Modus React App v1.0.0 + React 19 + Vite + Tailwind CSS -
484
+ Created by Julian Oczkowski
485
+ </div>
486
+ </div>
487
+ </div>
488
+ );
489
+ }
@@ -0,0 +1,137 @@
1
+ import { useState } from "react";
2
+ import DemoExample from "../components/DemoExample";
3
+ import ModusAlert from "../components/ModusAlert";
4
+ import { modusIcons, totalIconCount, categoryCount } from "../data/modusIcons";
5
+
6
+ /**
7
+ * Renders a comprehensive page that displays all available Modus icons.
8
+ *
9
+ * This page provides a complete showcase of the Modus icon library with
10
+ * interactive features for browsing, searching, and copying icon names.
11
+ * Icons are organized by category and displayed in a grid layout with
12
+ * hover effects and click-to-copy functionality.
13
+ *
14
+ * @example
15
+ * // The page automatically displays all icons from modusIcons data
16
+ * <IconsPage />
17
+ *
18
+ * @returns {JSX.Element} The rendered icons page with search and category filtering
19
+ * @see {@link modusIcons} - Source data for all available icons
20
+ * @see {@link totalIconCount} - Total number of icons displayed
21
+ * @see {@link categoryCount} - Number of icon categories
22
+ */
23
+ export default function IconsPage() {
24
+ const [showAlert, setShowAlert] = useState(false);
25
+
26
+ const copyIconName = (iconName: string) => {
27
+ navigator.clipboard.writeText(iconName).then(
28
+ () => {
29
+ // Show alert notification
30
+ setShowAlert(true);
31
+ // Hide alert after delay
32
+ setTimeout(() => {
33
+ setShowAlert(false);
34
+ }, 2000);
35
+ },
36
+ (err) => {
37
+ console.error("Failed to copy:", err);
38
+ },
39
+ );
40
+ };
41
+
42
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
+ const hideAlert = (_: CustomEvent<void>) => {
44
+ setShowAlert(false);
45
+ };
46
+
47
+ return (
48
+ <div className="max-w-6xl mx-auto p-8">
49
+ <div className="text-center mb-12">
50
+ <div className="text-4xl font-semibold mb-4 text-foreground">
51
+ Modus Icons Gallery
52
+ </div>
53
+ <div className="text-lg leading-relaxed text-foreground text-center">
54
+ Complete showcase of all available Modus icons organized by category. Click on any icon to copy its name.
55
+ </div>
56
+ </div>
57
+
58
+ <div className="flex flex-col gap-6">
59
+ <DemoExample
60
+ title="Icon Usage"
61
+ description="All icons use the modus-icons class with kebab-case names. Size with Tailwind classes and color with design system colors."
62
+ >
63
+ <div className="flex flex-col gap-4">
64
+ <div className="text-sm text-muted-foreground">
65
+ Total Icons:{" "}
66
+ <div className="font-semibold text-foreground inline">
67
+ {totalIconCount}
68
+ </div>
69
+ </div>
70
+ <div className="text-sm text-muted-foreground">
71
+ Categories:{" "}
72
+ <div className="font-semibold text-foreground inline">
73
+ {categoryCount}
74
+ </div>
75
+ </div>
76
+ <div className="text-xs text-muted-foreground mt-2">
77
+ Click on any icon below to copy its name to your clipboard.
78
+ </div>
79
+ </div>
80
+ </DemoExample>
81
+
82
+ {Object.entries(modusIcons).map(([categoryName, icons]) => (
83
+ <DemoExample
84
+ key={categoryName}
85
+ title={categoryName}
86
+ description={`${icons.length} icons in this category`}
87
+ >
88
+ <div className="grid grid-cols-5 gap-4">
89
+ {icons.map((iconName) => (
90
+ <div
91
+ key={iconName}
92
+ className="flex flex-col items-center gap-2 p-3 rounded-lg border border-border hover:border-primary hover:scale-105 hover:shadow-md transition-all cursor-pointer group"
93
+ onClick={() => copyIconName(iconName)}
94
+ title={`Click to copy: ${iconName}`}
95
+ >
96
+ <i
97
+ className={`modus-icons text-2xl text-foreground group-hover:text-primary transition-colors`}
98
+ >
99
+ {iconName}
100
+ </i>
101
+ <div className="text-xs text-muted-foreground group-hover:text-foreground text-center break-all leading-tight transition-colors">
102
+ {iconName}
103
+ </div>
104
+ </div>
105
+ ))}
106
+ </div>
107
+ </DemoExample>
108
+ ))}
109
+ </div>
110
+
111
+ {/* Footer */}
112
+ <div className="text-center pt-8 box-content">
113
+ <div className="flex items-center justify-center gap-3 mb-3">
114
+ <img src="/vite.svg" alt="Vite" className="h-6 w-6" />
115
+ <div className="text-foreground-40">+</div>
116
+ <img src="/react.svg" alt="React" className="h-6 w-6" />
117
+ </div>
118
+ <div className="text-sm font-mono text-foreground-40">
119
+ 2026 Modus React App v1.0.0 + React 19 + Vite + Tailwind CSS -
120
+ Created by Julian Oczkowski
121
+ </div>
122
+ </div>
123
+
124
+ {/* Alert notification for copy feedback - fixed at bottom */}
125
+ {showAlert && (
126
+ <div className="fixed bottom-4 left-1/2 -translate-x-1/2 z-50">
127
+ <ModusAlert
128
+ alertTitle="Icon name copied!"
129
+ variant="success"
130
+ dismissible={true}
131
+ onDismissClick={hideAlert}
132
+ />
133
+ </div>
134
+ )}
135
+ </div>
136
+ );
137
+ }
@@ -0,0 +1,3 @@
1
+ export { default as ColorPalettePage } from "./ColorPalettePage";
2
+ export { default as IconsPage } from "./IconsPage";
3
+ export { default as ComponentsGalleryPage } from "./ComponentsGalleryPage";
@@ -0,0 +1,15 @@
1
+ import { useContext } from "react";
2
+ import { ThemeContext } from "../contexts/ThemeContextData";
3
+
4
+ /**
5
+ * A custom hook that provides access to the theme context.
6
+ * @returns {object} The theme context.
7
+ * @throws {Error} If used outside of a ThemeProvider.
8
+ */
9
+ export function useTheme() {
10
+ const context = useContext(ThemeContext);
11
+ if (context === undefined) {
12
+ throw new Error('useTheme must be used within a ThemeProvider');
13
+ }
14
+ return context;
15
+ }