@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,212 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DemoPageComponent } from '../shared/demo-page.component';
4
+ import { DemoExampleComponent } from '../shared/demo-example.component';
5
+ import { ModusAccordionComponent } from '../../components/modus-accordion.component';
6
+ import { ModusCollapseComponent, type ICollapseOptions } from '../../components/modus-collapse.component';
7
+
8
+ /**
9
+ * Demo page showcasing the Modus Accordion component.
10
+ *
11
+ * Demonstrates accordion features including:
12
+ * - Basic accordion with multiple panels
13
+ * - Bordered vs non-bordered variants
14
+ * - Different sizes (xs, sm, md, lg)
15
+ * - Icons and descriptions in headers
16
+ * - Expanded/collapsed states
17
+ * - Event handling examples
18
+ */
19
+ @Component({
20
+ selector: 'app-accordion-demo-page',
21
+ standalone: true,
22
+ imports: [
23
+ CommonModule,
24
+ DemoPageComponent,
25
+ DemoExampleComponent,
26
+ ModusAccordionComponent,
27
+ ModusCollapseComponent,
28
+ ],
29
+ template: `
30
+ <demo-page
31
+ title="Modus Accordion"
32
+ description="Accordions organize and display collapsible content in a compact space. Use accordions to group related information and allow users to expand or collapse sections as needed."
33
+ >
34
+ <demo-example
35
+ title="Basic Accordion"
36
+ description="Simple accordion with multiple collapsible panels."
37
+ >
38
+ <modus-accordion>
39
+ <modus-collapse
40
+ [options]="{
41
+ title: 'Getting Started',
42
+ description: 'Learn the basics'
43
+ }"
44
+ >
45
+ <div slot="content" class="p-4 text-foreground">
46
+ This is the content for the getting started section. You can include any content here.
47
+ </div>
48
+ </modus-collapse>
49
+ <modus-collapse
50
+ [options]="{
51
+ title: 'Components',
52
+ description: 'Explore available components'
53
+ }"
54
+ >
55
+ <div slot="content" class="p-4 text-foreground">
56
+ Discover all the available components in the Modus design system.
57
+ </div>
58
+ </modus-collapse>
59
+ <modus-collapse
60
+ [options]="{
61
+ title: 'Styling',
62
+ description: 'Customize your design'
63
+ }"
64
+ >
65
+ <div slot="content" class="p-4 text-foreground">
66
+ Learn how to style and customize components to match your brand.
67
+ </div>
68
+ </modus-collapse>
69
+ </modus-accordion>
70
+ </demo-example>
71
+
72
+ <demo-example
73
+ title="Accordion Sizes"
74
+ description="Different sizes for various contexts and spacing needs."
75
+ >
76
+ <div class="flex flex-col gap-6">
77
+ <div>
78
+ <h4 class="text-base font-semibold mb-3 text-foreground">Extra Small (xs)</h4>
79
+ <modus-accordion>
80
+ <modus-collapse
81
+ [options]="{
82
+ title: 'Extra Small Panel',
83
+ description: 'Compact size for tight spaces',
84
+ size: 'xs'
85
+ }"
86
+ >
87
+ <div slot="content" class="p-4 text-foreground">Extra small accordion content.</div>
88
+ </modus-collapse>
89
+ </modus-accordion>
90
+ </div>
91
+ <div>
92
+ <h4 class="text-base font-semibold mb-3 text-foreground">Small (sm)</h4>
93
+ <modus-accordion>
94
+ <modus-collapse
95
+ [options]="{
96
+ title: 'Small Panel',
97
+ description: 'Standard small size',
98
+ size: 'sm'
99
+ }"
100
+ >
101
+ <div slot="content" class="p-4 text-foreground">Small accordion content.</div>
102
+ </modus-collapse>
103
+ </modus-accordion>
104
+ </div>
105
+ <div>
106
+ <h4 class="text-base font-semibold mb-3 text-foreground">Medium (md)</h4>
107
+ <modus-accordion>
108
+ <modus-collapse
109
+ [options]="{
110
+ title: 'Medium Panel',
111
+ description: 'Default medium size',
112
+ size: 'md'
113
+ }"
114
+ >
115
+ <div slot="content" class="p-4 text-foreground">Medium accordion content.</div>
116
+ </modus-collapse>
117
+ </modus-accordion>
118
+ </div>
119
+ <div>
120
+ <h4 class="text-base font-semibold mb-3 text-foreground">Large (lg)</h4>
121
+ <modus-accordion>
122
+ <modus-collapse
123
+ [options]="{
124
+ title: 'Large Panel',
125
+ description: 'Prominent large size',
126
+ size: 'lg'
127
+ }"
128
+ >
129
+ <div slot="content" class="p-4 text-foreground">Large accordion content.</div>
130
+ </modus-collapse>
131
+ </modus-accordion>
132
+ </div>
133
+ </div>
134
+ </demo-example>
135
+
136
+ <demo-example
137
+ title="Icons in Headers"
138
+ description="Enhance accordion headers with icons for better visual communication."
139
+ >
140
+ <modus-accordion>
141
+ <modus-collapse
142
+ [options]="{
143
+ title: 'Settings',
144
+ description: 'Configure your preferences',
145
+ icon: 'settings',
146
+ iconAriaLabel: 'Settings icon'
147
+ }"
148
+ >
149
+ <div slot="content" class="p-4 text-foreground">
150
+ Settings panel with icon in the header.
151
+ </div>
152
+ </modus-collapse>
153
+ <modus-collapse
154
+ [options]="{
155
+ title: 'Notifications',
156
+ description: 'Manage your notifications',
157
+ icon: 'notifications',
158
+ iconAriaLabel: 'Notifications icon'
159
+ }"
160
+ >
161
+ <div slot="content" class="p-4 text-foreground">
162
+ Notifications panel with icon in the header.
163
+ </div>
164
+ </modus-collapse>
165
+ <modus-collapse
166
+ [options]="{
167
+ title: 'Security',
168
+ description: 'Security and privacy settings',
169
+ icon: 'lock',
170
+ iconAriaLabel: 'Security icon'
171
+ }"
172
+ >
173
+ <div slot="content" class="p-4 text-foreground">
174
+ Security panel with icon in the header.
175
+ </div>
176
+ </modus-collapse>
177
+ </modus-accordion>
178
+ </demo-example>
179
+
180
+ <demo-example
181
+ title="Default Expanded State"
182
+ description="Start with specific panels expanded by default."
183
+ >
184
+ <modus-accordion>
185
+ <modus-collapse
186
+ [expanded]="true"
187
+ [options]="{
188
+ title: 'Expanded by Default',
189
+ description: 'This panel starts expanded'
190
+ }"
191
+ >
192
+ <div slot="content" class="p-4 text-foreground">
193
+ This panel is expanded by default when the page loads.
194
+ </div>
195
+ </modus-collapse>
196
+ <modus-collapse
197
+ [expanded]="false"
198
+ [options]="{
199
+ title: 'Collapsed by Default',
200
+ description: 'This panel starts collapsed'
201
+ }"
202
+ >
203
+ <div slot="content" class="p-4 text-foreground">
204
+ This panel is collapsed by default when the page loads.
205
+ </div>
206
+ </modus-collapse>
207
+ </modus-accordion>
208
+ </demo-example>
209
+ </demo-page>
210
+ `,
211
+ })
212
+ export class AccordionDemoPageComponent {}
@@ -0,0 +1,108 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DemoPageComponent } from '../shared/demo-page.component';
4
+ import { DemoExampleComponent } from '../shared/demo-example.component';
5
+ import { ModusAlertComponent } from '../../components/modus-alert.component';
6
+
7
+ /**
8
+ * Demo page showcasing the Modus Alert component.
9
+ *
10
+ * Demonstrates alert features including:
11
+ * - Alert variants (info, success, warning, error)
12
+ * - Dismissible vs persistent alerts
13
+ * - With and without custom icons
14
+ * - Different roles (alert, status, etc.)
15
+ * - Interactive examples with dismiss handling
16
+ */
17
+ @Component({
18
+ selector: 'app-alert-demo-page',
19
+ standalone: true,
20
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAlertComponent],
21
+ template: `
22
+ <demo-page
23
+ title="Modus Alert"
24
+ description="Alerts communicate important messages to users. Use alerts to notify users about success, warnings, errors, or informational messages."
25
+ >
26
+ <demo-example
27
+ title="Alert Variants"
28
+ description="Different alert variants for various message types and contexts."
29
+ >
30
+ <div class="flex flex-col gap-4">
31
+ <modus-alert
32
+ alertTitle="Info Alert"
33
+ alertDescription="This is an informational message."
34
+ variant="info"
35
+ />
36
+ <modus-alert
37
+ alertTitle="Success Alert"
38
+ alertDescription="Your action was completed successfully."
39
+ variant="success"
40
+ />
41
+ <modus-alert
42
+ alertTitle="Warning Alert"
43
+ alertDescription="Please review this important warning."
44
+ variant="warning"
45
+ />
46
+ <modus-alert
47
+ alertTitle="Error Alert"
48
+ alertDescription="An error occurred. Please try again."
49
+ variant="error"
50
+ />
51
+ </div>
52
+ </demo-example>
53
+
54
+ <demo-example
55
+ title="Dismissible Alerts"
56
+ description="Alerts that can be dismissed by users with a close button."
57
+ >
58
+ <div class="flex flex-col gap-4">
59
+ <modus-alert
60
+ alertTitle="Dismissible Info Alert"
61
+ alertDescription="You can close this alert."
62
+ variant="info"
63
+ [dismissible]="true"
64
+ />
65
+ <modus-alert
66
+ alertTitle="Dismissible Success Alert"
67
+ alertDescription="This alert can be dismissed."
68
+ variant="success"
69
+ [dismissible]="true"
70
+ />
71
+ <modus-alert
72
+ alertTitle="Dismissible Warning Alert"
73
+ alertDescription="Close this alert when you're done."
74
+ variant="warning"
75
+ [dismissible]="true"
76
+ />
77
+ <modus-alert
78
+ alertTitle="Dismissible Error Alert"
79
+ alertDescription="Dismiss this error alert after reviewing."
80
+ variant="error"
81
+ [dismissible]="true"
82
+ />
83
+ </div>
84
+ </demo-example>
85
+
86
+ <demo-example
87
+ title="Alerts with Custom Icons"
88
+ description="Enhance alerts with custom icons for better visual communication."
89
+ >
90
+ <div class="flex flex-col gap-4">
91
+ <modus-alert
92
+ alertTitle="Notification"
93
+ alertDescription="You have new messages."
94
+ variant="info"
95
+ icon="notifications"
96
+ />
97
+ <modus-alert
98
+ alertTitle="File Uploaded"
99
+ alertDescription="Your file has been uploaded successfully."
100
+ variant="success"
101
+ icon="upload"
102
+ />
103
+ </div>
104
+ </demo-example>
105
+ </demo-page>
106
+ `,
107
+ })
108
+ export class AlertDemoPageComponent {}
@@ -0,0 +1,174 @@
1
+ import { Component, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DemoPageComponent } from '../shared/demo-page.component';
4
+ import { DemoExampleComponent } from '../shared/demo-example.component';
5
+ import { ModusAutocompleteComponent } from '../../components/modus-autocomplete.component';
6
+ import type { IAutocompleteItem } from '@trimble-oss/moduswebcomponents';
7
+
8
+ /**
9
+ * Demo page showcasing the Modus Autocomplete component.
10
+ *
11
+ * Demonstrates autocomplete features including:
12
+ * - Basic single-select autocomplete
13
+ * - Multi-select with chips
14
+ * - Different sizes and states
15
+ * - Custom no-results content
16
+ * - Loading states with spinner
17
+ * - Debounce and minimum character examples
18
+ */
19
+ @Component({
20
+ selector: 'app-autocomplete-demo-page',
21
+ standalone: true,
22
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAutocompleteComponent],
23
+ template: `
24
+ <demo-page
25
+ title="Modus Autocomplete"
26
+ description="Autocomplete provides input suggestions as users type. Use autocomplete to help users find and select from a list of options quickly and efficiently."
27
+ >
28
+ <demo-example
29
+ title="Basic Autocomplete"
30
+ description="Simple single-select autocomplete with a list of options."
31
+ >
32
+ <modus-autocomplete
33
+ label="Search Countries"
34
+ placeholder="Type to search..."
35
+ [items]="countryItems()"
36
+ [value]="selectedCountry()"
37
+ (itemSelect)="handleCountrySelect($event)"
38
+ />
39
+ </demo-example>
40
+
41
+ <demo-example
42
+ title="Multi-Select Autocomplete"
43
+ description="Allow users to select multiple items with chips displayed for selected values."
44
+ >
45
+ <modus-autocomplete
46
+ label="Select Skills"
47
+ placeholder="Type to search skills..."
48
+ [items]="skillItems()"
49
+ [multiSelect]="true"
50
+ (itemSelect)="handleSkillSelect($event)"
51
+ />
52
+ @if (selectedSkills().length > 0) {
53
+ <div class="mt-4 p-4 rounded-lg bg-muted text-muted-foreground">
54
+ <div class="font-semibold mb-2">Selected Skills:</div>
55
+ <div class="text-sm">{{ selectedSkills().join(', ') }}</div>
56
+ </div>
57
+ }
58
+ </demo-example>
59
+
60
+ <demo-example
61
+ title="Autocomplete Sizes"
62
+ description="Different sizes for various contexts and visual hierarchy."
63
+ >
64
+ <div class="flex flex-col gap-4">
65
+ <modus-autocomplete
66
+ label="Small Autocomplete"
67
+ placeholder="Small size..."
68
+ [items]="sizeItems()"
69
+ size="sm"
70
+ />
71
+ <modus-autocomplete
72
+ label="Medium Autocomplete"
73
+ placeholder="Medium size..."
74
+ [items]="sizeItems()"
75
+ size="md"
76
+ />
77
+ <modus-autocomplete
78
+ label="Large Autocomplete"
79
+ placeholder="Large size..."
80
+ [items]="sizeItems()"
81
+ size="lg"
82
+ />
83
+ </div>
84
+ </demo-example>
85
+
86
+ <demo-example
87
+ title="Disabled and Read-Only States"
88
+ description="Autocomplete in disabled and read-only states."
89
+ >
90
+ <div class="flex flex-col gap-4">
91
+ <modus-autocomplete
92
+ label="Disabled Autocomplete"
93
+ placeholder="This is disabled"
94
+ [items]="stateItems()"
95
+ [disabled]="true"
96
+ />
97
+ <modus-autocomplete
98
+ label="Read-Only Autocomplete"
99
+ placeholder="This is read-only"
100
+ [items]="stateItems()"
101
+ value="Read-only value"
102
+ [readOnly]="true"
103
+ />
104
+ </div>
105
+ </demo-example>
106
+
107
+ <demo-example
108
+ title="Loading State"
109
+ description="Show a spinner while fetching or processing autocomplete results."
110
+ >
111
+ <modus-autocomplete
112
+ label="Search with Loading"
113
+ placeholder="Type to search..."
114
+ [items]="loadingItems()"
115
+ />
116
+ </demo-example>
117
+ </demo-page>
118
+ `,
119
+ })
120
+ export class AutocompleteDemoPageComponent {
121
+ readonly selectedCountry = signal<string>('');
122
+ readonly selectedSkills = signal<string[]>([]);
123
+
124
+ readonly countryItems = signal<IAutocompleteItem[]>([
125
+ { label: 'United States', value: 'us', visibleInMenu: true },
126
+ { label: 'Canada', value: 'ca', visibleInMenu: true },
127
+ { label: 'United Kingdom', value: 'uk', visibleInMenu: true },
128
+ { label: 'Australia', value: 'au', visibleInMenu: true },
129
+ { label: 'Germany', value: 'de', visibleInMenu: true },
130
+ { label: 'France', value: 'fr', visibleInMenu: true },
131
+ { label: 'Japan', value: 'jp', visibleInMenu: true },
132
+ ]);
133
+
134
+ readonly skillItems = signal<IAutocompleteItem[]>([
135
+ { label: 'Angular', value: 'angular', visibleInMenu: true },
136
+ { label: 'React', value: 'react', visibleInMenu: true },
137
+ { label: 'Vue.js', value: 'vue', visibleInMenu: true },
138
+ { label: 'TypeScript', value: 'typescript', visibleInMenu: true },
139
+ { label: 'JavaScript', value: 'javascript', visibleInMenu: true },
140
+ { label: 'Node.js', value: 'nodejs', visibleInMenu: true },
141
+ { label: 'Python', value: 'python', visibleInMenu: true },
142
+ ]);
143
+
144
+ readonly sizeItems = signal<IAutocompleteItem[]>([
145
+ { label: 'Option 1', value: '1', visibleInMenu: true },
146
+ { label: 'Option 2', value: '2', visibleInMenu: true },
147
+ { label: 'Option 3', value: '3', visibleInMenu: true },
148
+ ]);
149
+
150
+ readonly stateItems = signal<IAutocompleteItem[]>([
151
+ { label: 'Option A', value: 'a', visibleInMenu: true },
152
+ { label: 'Option B', value: 'b', visibleInMenu: true },
153
+ ]);
154
+
155
+ readonly loadingItems = signal<IAutocompleteItem[]>([
156
+ { label: 'Result 1', value: '1', visibleInMenu: true },
157
+ { label: 'Result 2', value: '2', visibleInMenu: true },
158
+ ]);
159
+
160
+ handleCountrySelect(item: IAutocompleteItem): void {
161
+ this.selectedCountry.set(item.value);
162
+ console.log('Selected country:', item);
163
+ }
164
+
165
+ handleSkillSelect(item: IAutocompleteItem): void {
166
+ const current = this.selectedSkills();
167
+ if (current.includes(item.value)) {
168
+ this.selectedSkills.set(current.filter((v) => v !== item.value));
169
+ } else {
170
+ this.selectedSkills.set([...current, item.value]);
171
+ }
172
+ console.log('Selected skills:', this.selectedSkills());
173
+ }
174
+ }
@@ -0,0 +1,149 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DemoPageComponent } from '../shared/demo-page.component';
4
+ import { DemoExampleComponent } from '../shared/demo-example.component';
5
+ import { ModusAvatarComponent } from '../../components/modus-avatar.component';
6
+
7
+ /**
8
+ * Demo page showcasing the Modus Avatar component.
9
+ *
10
+ * Demonstrates avatar features including:
11
+ * - Different sizes (xs, sm, md, lg)
12
+ * - Shapes (circle, square)
13
+ * - With and without image sources
14
+ * - Fallback behavior demonstration
15
+ * - Custom styling examples
16
+ */
17
+ @Component({
18
+ selector: 'app-avatar-demo-page',
19
+ standalone: true,
20
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAvatarComponent],
21
+ template: `
22
+ <demo-page
23
+ title="Modus Avatar"
24
+ description="Avatars represent users or entities in the interface. Use avatars to personalize user experiences and provide visual identity."
25
+ >
26
+ <demo-example
27
+ title="Avatar Sizes"
28
+ description="Different sizes for various contexts and display needs."
29
+ >
30
+ <div class="flex flex-wrap items-center gap-6">
31
+ <div class="flex flex-col items-center gap-2">
32
+ <modus-avatar alt="Extra Small Avatar" size="xs" initials="X S" />
33
+ <span class="text-xs text-muted-foreground">Extra Small (xs)</span>
34
+ </div>
35
+ <div class="flex flex-col items-center gap-2">
36
+ <modus-avatar alt="Small Avatar" size="sm" initials="SM" />
37
+ <span class="text-xs text-muted-foreground">Small (sm)</span>
38
+ </div>
39
+ <div class="flex flex-col items-center gap-2">
40
+ <modus-avatar alt="Medium Avatar" size="md" initials="MD" />
41
+ <span class="text-xs text-muted-foreground">Medium (md)</span>
42
+ </div>
43
+ <div class="flex flex-col items-center gap-2">
44
+ <modus-avatar alt="Large Avatar" size="lg" initials="LG" />
45
+ <span class="text-xs text-muted-foreground">Large (lg)</span>
46
+ </div>
47
+ </div>
48
+ </demo-example>
49
+
50
+ <demo-example
51
+ title="Avatar Shapes"
52
+ description="Circle and square shapes for different design styles."
53
+ >
54
+ <div class="flex flex-wrap items-center gap-6">
55
+ <div class="flex flex-col items-center gap-2">
56
+ <modus-avatar alt="Circle Avatar" shape="circle" initials="C" size="md" />
57
+ <span class="text-xs text-muted-foreground">Circle</span>
58
+ </div>
59
+ <div class="flex flex-col items-center gap-2">
60
+ <modus-avatar alt="Square Avatar" shape="square" initials="S" size="md" />
61
+ <span class="text-xs text-muted-foreground">Square</span>
62
+ </div>
63
+ </div>
64
+ </demo-example>
65
+
66
+ <demo-example
67
+ title="Avatars with Images"
68
+ description="Avatars displaying user profile images."
69
+ >
70
+ <div class="flex flex-wrap items-center gap-6">
71
+ <modus-avatar
72
+ alt="User Avatar"
73
+ imgSrc="https://i.pravatar.cc/150?img=1"
74
+ size="md"
75
+ shape="circle"
76
+ />
77
+ <modus-avatar
78
+ alt="User Avatar"
79
+ imgSrc="https://i.pravatar.cc/150?img=2"
80
+ size="md"
81
+ shape="circle"
82
+ />
83
+ <modus-avatar
84
+ alt="User Avatar"
85
+ imgSrc="https://i.pravatar.cc/150?img=3"
86
+ size="md"
87
+ shape="circle"
88
+ />
89
+ </div>
90
+ </demo-example>
91
+
92
+ <demo-example
93
+ title="Avatars with Initials"
94
+ description="Avatars displaying user initials when no image is available."
95
+ >
96
+ <div class="flex flex-wrap items-center gap-6">
97
+ <modus-avatar alt="John Doe" initials="J D" size="md" shape="circle" />
98
+ <modus-avatar alt="Jane Smith" initials="J S" size="md" shape="circle" />
99
+ <modus-avatar alt="Bob Johnson" initials="B J" size="md" shape="circle" />
100
+ <modus-avatar alt="Alice Brown" initials="A B" size="md" shape="circle" />
101
+ </div>
102
+ </demo-example>
103
+
104
+ <demo-example
105
+ title="Fallback Behavior"
106
+ description="Avatars automatically fall back to initials when image fails to load."
107
+ >
108
+ <div class="flex flex-wrap items-center gap-6">
109
+ <modus-avatar
110
+ alt="User Avatar"
111
+ imgSrc="https://invalid-url.com/image.jpg"
112
+ initials="F B"
113
+ size="md"
114
+ shape="circle"
115
+ />
116
+ <div class="text-sm text-muted-foreground">
117
+ <div class="font-semibold mb-1">Fallback to Initials</div>
118
+ <div>When an image fails to load, the avatar automatically displays initials.</div>
119
+ </div>
120
+ </div>
121
+ </demo-example>
122
+
123
+ <demo-example
124
+ title="Size Comparison"
125
+ description="Visual comparison of all avatar sizes side by side."
126
+ >
127
+ <div class="flex flex-wrap items-end gap-8">
128
+ <div class="flex flex-col items-center gap-2">
129
+ <modus-avatar alt="XS Avatar" size="xs" initials="XS" shape="circle" />
130
+ <span class="text-xs text-muted-foreground">xs</span>
131
+ </div>
132
+ <div class="flex flex-col items-center gap-2">
133
+ <modus-avatar alt="SM Avatar" size="sm" initials="SM" shape="circle" />
134
+ <span class="text-xs text-muted-foreground">sm</span>
135
+ </div>
136
+ <div class="flex flex-col items-center gap-2">
137
+ <modus-avatar alt="MD Avatar" size="md" initials="MD" shape="circle" />
138
+ <span class="text-xs text-muted-foreground">md</span>
139
+ </div>
140
+ <div class="flex flex-col items-center gap-2">
141
+ <modus-avatar alt="LG Avatar" size="lg" initials="LG" shape="circle" />
142
+ <span class="text-xs text-muted-foreground">lg</span>
143
+ </div>
144
+ </div>
145
+ </demo-example>
146
+ </demo-page>
147
+ `,
148
+ })
149
+ export class AvatarDemoPageComponent {}