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