@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,133 @@
1
+ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ModusWcAlert } from '@trimble-oss/moduswebcomponents-angular';
4
+
5
+ /**
6
+ * Configuration options for the ModusAlertComponent.
7
+ */
8
+ export interface ModusAlertProps {
9
+ /**
10
+ * The title text displayed at the top of the alert.
11
+ */
12
+ alertTitle: string;
13
+ /**
14
+ * Optional description text providing additional context for the alert.
15
+ */
16
+ alertDescription?: string;
17
+ /**
18
+ * Custom CSS class applied to the alert container for advanced styling needs.
19
+ */
20
+ className?: string;
21
+ /**
22
+ * Number of milliseconds before the alert automatically dismisses. When undefined, the alert remains visible.
23
+ */
24
+ delay?: number;
25
+ /**
26
+ * Enables a close button to allow the user to dismiss the alert manually.
27
+ */
28
+ dismissible?: boolean;
29
+ /**
30
+ * The Modus icon name rendered alongside the alert content.
31
+ */
32
+ icon?: string;
33
+ /**
34
+ * Visual variant that controls the alert color and semantics.
35
+ */
36
+ variant?: 'error' | 'info' | 'success' | 'warning';
37
+ /**
38
+ * ARIA role for the alert element.
39
+ */
40
+ role?: 'alert' | 'log' | 'marquee' | 'status' | 'timer';
41
+ /**
42
+ * Accessible label describing the purpose of the alert when no visible text is provided.
43
+ */
44
+ ariaLabel?: string;
45
+ /**
46
+ * Callback executed after the alert dispatches its dismiss event.
47
+ */
48
+ onDismiss?: () => void;
49
+ }
50
+
51
+ /**
52
+ * Angular wrapper for the Modus Web Component alert.
53
+ *
54
+ * This component exposes a typed, signal-based API that mirrors the Stencil component while
55
+ * providing a familiar Angular template syntax. Consumers can declaratively control the alert
56
+ * content, attach to dismiss events, and project arbitrary HTML via the default slot.
57
+ *
58
+ * @example
59
+ * ```html
60
+ * <modus-alert
61
+ * alertTitle="Changes saved"
62
+ * alertDescription="Updates were applied successfully."
63
+ * variant="success"
64
+ * dismissible
65
+ * (dismiss)="handleDismiss()"
66
+ * />
67
+ * ```
68
+ */
69
+ @Component({
70
+ selector: 'modus-alert',
71
+ imports: [CommonModule, ModusWcAlert],
72
+ changeDetection: ChangeDetectionStrategy.OnPush,
73
+ template: `
74
+ <modus-wc-alert
75
+ [alertTitle]="alertTitle()"
76
+ [alertDescription]="alertDescription()"
77
+ [customClass]="className()"
78
+ [delay]="delay()"
79
+ [dismissible]="dismissible()"
80
+ [icon]="icon()"
81
+ [variant]="variant()"
82
+ [attr.role]="role()"
83
+ [attr.aria-label]="ariaLabel()"
84
+ (dismissClick)="handleDismissClick()"
85
+ >
86
+ <ng-content select="[slot='content']" slot="content" />
87
+ <ng-content select="[slot='button']" slot="button" />
88
+ </modus-wc-alert>
89
+ `,
90
+ })
91
+ export class ModusAlertComponent {
92
+ /** The title text displayed at the top of the alert. */
93
+ readonly alertTitle = input.required<string>();
94
+
95
+ /** Optional description text providing additional context for the alert. */
96
+ readonly alertDescription = input<string | undefined>();
97
+
98
+ /** Custom CSS class applied to the alert container for advanced styling needs. */
99
+ readonly className = input<string | undefined>();
100
+
101
+ /** Number of milliseconds before the alert automatically dismisses. */
102
+ readonly delay = input<number | undefined>();
103
+
104
+ /** Enables a close button to allow the user to dismiss the alert manually. */
105
+ readonly dismissible = input<boolean>(false);
106
+
107
+ /** The Modus icon name rendered alongside the alert content. */
108
+ readonly icon = input<string | undefined>();
109
+
110
+ /** Visual variant that controls the alert color and semantics. */
111
+ readonly variant = input<'error' | 'info' | 'success' | 'warning'>('info');
112
+
113
+ /** ARIA role for the alert element. */
114
+ readonly role = input<'alert' | 'log' | 'marquee' | 'status' | 'timer' | undefined>();
115
+
116
+ /** Accessible label describing the purpose of the alert when no visible text is provided. */
117
+ readonly ariaLabel = input<string | undefined>();
118
+
119
+ /** Callback executed after the alert dispatches its dismiss event. */
120
+ readonly onDismiss = input<(() => void) | undefined>();
121
+
122
+ /** Notifies consumers when the alert is dismissed. */
123
+ readonly dismiss = output<void>();
124
+
125
+ /** Handles the dismiss event emitted by the Modus Web Component. */
126
+ handleDismissClick(): void {
127
+ const callback = this.onDismiss();
128
+ if (callback) {
129
+ callback();
130
+ }
131
+ this.dismiss.emit();
132
+ }
133
+ }
@@ -0,0 +1,262 @@
1
+ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ModusWcAutocomplete } from '@trimble-oss/moduswebcomponents-angular';
4
+ import type {
5
+ Components,
6
+ IAutocompleteItem,
7
+ IAutocompleteNoResults,
8
+ ModusSize,
9
+ } from '@trimble-oss/moduswebcomponents';
10
+
11
+ /**
12
+ * Props supported by the {@link ModusAutocompleteComponent}.
13
+ */
14
+ export interface ModusAutocompleteProps {
15
+ /** Indicates that the autocomplete should have a border. */
16
+ bordered?: Components.ModusWcAutocomplete['bordered'];
17
+ /** Custom CSS class applied to the host element. */
18
+ className?: Components.ModusWcAutocomplete['customClass'];
19
+ /** The debounce timeout in milliseconds. Set to 0 to disable debouncing. */
20
+ debounceMs?: Components.ModusWcAutocomplete['debounceMs'];
21
+ /** Disables the autocomplete. */
22
+ disabled?: Components.ModusWcAutocomplete['disabled'];
23
+ /** Show the clear button within the input field. */
24
+ includeClear?: Components.ModusWcAutocomplete['includeClear'];
25
+ /** Show the search icon within the input field. */
26
+ includeSearch?: Components.ModusWcAutocomplete['includeSearch'];
27
+ /** The ID of the input element. */
28
+ inputId?: Components.ModusWcAutocomplete['inputId'];
29
+ /** Tab index applied to the input. */
30
+ inputTabIndex?: Components.ModusWcAutocomplete['inputTabIndex'];
31
+ /** The items to display in the menu. */
32
+ items?: IAutocompleteItem[];
33
+ /** Label text displayed above the autocomplete. */
34
+ label?: Components.ModusWcAutocomplete['label'];
35
+ /** Whether the menu should remain open after an item is selected. */
36
+ leaveMenuOpen?: Components.ModusWcAutocomplete['leaveMenuOpen'];
37
+ /** The minimum number of characters required to render the menu. */
38
+ minChars?: Components.ModusWcAutocomplete['minChars'];
39
+ /** Whether the input allows multiple items to be selected. */
40
+ multiSelect?: Components.ModusWcAutocomplete['multiSelect'];
41
+ /** Name attribute submitted in forms. */
42
+ name?: Components.ModusWcAutocomplete['name'];
43
+ /** The content to display when no results are found. */
44
+ noResults?: IAutocompleteNoResults;
45
+ /** Placeholder text displayed when empty. */
46
+ placeholder?: Components.ModusWcAutocomplete['placeholder'];
47
+ /** Prevents editing when true. */
48
+ readOnly?: Components.ModusWcAutocomplete['readOnly'];
49
+ /** Marks the field as required. */
50
+ required?: Components.ModusWcAutocomplete['required'];
51
+ /** Whether to show the menu whenever the input has focus. */
52
+ showMenuOnFocus?: Components.ModusWcAutocomplete['showMenuOnFocus'];
53
+ /** The size of the autocomplete (input and menu). */
54
+ size?: ModusSize;
55
+ /** A spinner that appears when set to true. */
56
+ showSpinner?: Components.ModusWcAutocomplete['showSpinner'];
57
+ /** Current input value. */
58
+ value?: Components.ModusWcAutocomplete['value'];
59
+ /** Maximum number of chips to display. */
60
+ maxChips?: Components.ModusWcAutocomplete['maxChips'];
61
+ /** Custom item selection handler. */
62
+ customItemSelect?: Components.ModusWcAutocomplete['customItemSelect'];
63
+ /** Custom input change handler. */
64
+ customInputChange?: Components.ModusWcAutocomplete['customInputChange'];
65
+ /** Custom key down handler. */
66
+ customKeyDown?: Components.ModusWcAutocomplete['customKeyDown'];
67
+ /** Custom blur handler. */
68
+ customBlur?: Components.ModusWcAutocomplete['customBlur'];
69
+ /** Minimum width for the text input in pixels. */
70
+ minInputWidth?: Components.ModusWcAutocomplete['minInputWidth'];
71
+ }
72
+
73
+ /**
74
+ * Angular wrapper for the Modus autocomplete web component.
75
+ *
76
+ * The autocomplete component supports custom menu items and custom icons via slots:
77
+ * - `menu-items` slot: For custom menu item content
78
+ * - `custom-icon` slot: For custom icon in the input field
79
+ *
80
+ * @example
81
+ * ```html
82
+ * <modus-autocomplete
83
+ * label="Search"
84
+ * [items]="searchItems"
85
+ * [value]="searchValue()"
86
+ * (itemSelect)="handleItemSelect($event)"
87
+ * />
88
+ * ```
89
+ */
90
+ @Component({
91
+ selector: 'modus-autocomplete',
92
+ imports: [CommonModule, ModusWcAutocomplete],
93
+ changeDetection: ChangeDetectionStrategy.OnPush,
94
+ template: `
95
+ <modus-wc-autocomplete
96
+ [bordered]="bordered()"
97
+ [customClass]="className()"
98
+ [debounceMs]="debounceMs()"
99
+ [disabled]="disabled()"
100
+ [includeClear]="includeClear()"
101
+ [includeSearch]="includeSearch()"
102
+ [inputId]="inputId()"
103
+ [inputTabIndex]="inputTabIndex()"
104
+ [items]="items()"
105
+ [label]="label()"
106
+ [leaveMenuOpen]="leaveMenuOpen()"
107
+ [minChars]="minChars()"
108
+ [multiSelect]="multiSelect()"
109
+ [name]="name()"
110
+ [noResults]="noResults()"
111
+ [placeholder]="placeholder()"
112
+ [readOnly]="readOnly()"
113
+ [required]="required()"
114
+ [showMenuOnFocus]="showMenuOnFocus()"
115
+ [size]="size()"
116
+ [showSpinner]="showSpinner()"
117
+ [value]="value()"
118
+ [maxChips]="maxChips()"
119
+ [customItemSelect]="customItemSelect()"
120
+ [customInputChange]="customInputChange()"
121
+ [customKeyDown]="customKeyDown()"
122
+ [customBlur]="customBlur()"
123
+ [minInputWidth]="minInputWidth()"
124
+ (chipRemove)="handleChipRemove($event)"
125
+ (chipsExpansionChange)="handleChipsExpansionChange($event)"
126
+ (inputBlur)="handleBlur($event)"
127
+ (inputChange)="handleChange($event)"
128
+ (inputFocus)="handleFocus($event)"
129
+ (itemSelect)="handleItemSelect($event)"
130
+ >
131
+ <ng-content select="[slot='menu-items']" slot="menu-items" />
132
+ <ng-content select="[slot='custom-icon']" slot="custom-icon" />
133
+ </modus-wc-autocomplete>
134
+ `,
135
+ })
136
+ export class ModusAutocompleteComponent {
137
+ /** Indicates that the autocomplete should have a border. */
138
+ readonly bordered = input<boolean | undefined>(true);
139
+
140
+ /** Custom CSS class applied to the host element. */
141
+ readonly className = input<string | undefined>();
142
+
143
+ /** The debounce timeout in milliseconds. Set to 0 to disable debouncing. */
144
+ readonly debounceMs = input<number | undefined>(300);
145
+
146
+ /** Disables the autocomplete. */
147
+ readonly disabled = input<boolean | undefined>(false);
148
+
149
+ /** Show the clear button within the input field. */
150
+ readonly includeClear = input<boolean | undefined>(false);
151
+
152
+ /** Show the search icon within the input field. */
153
+ readonly includeSearch = input<boolean | undefined>(false);
154
+
155
+ /** The ID of the input element. */
156
+ readonly inputId = input<string | undefined>();
157
+
158
+ /** Tab index applied to the input. */
159
+ readonly inputTabIndex = input<number | undefined>();
160
+
161
+ /** The items to display in the menu. */
162
+ readonly items = input<IAutocompleteItem[] | undefined>([]);
163
+
164
+ /** Label text displayed above the autocomplete. */
165
+ readonly label = input<string | undefined>();
166
+
167
+ /** Whether the menu should remain open after an item is selected. */
168
+ readonly leaveMenuOpen = input<boolean | undefined>(false);
169
+
170
+ /** The minimum number of characters required to render the menu. */
171
+ readonly minChars = input<number>(0);
172
+
173
+ /** Whether the input allows multiple items to be selected. */
174
+ readonly multiSelect = input<boolean | undefined>(false);
175
+
176
+ /** Name attribute submitted in forms. */
177
+ readonly name = input<string | undefined>();
178
+
179
+ /** The content to display when no results are found. */
180
+ readonly noResults = input<IAutocompleteNoResults | undefined>();
181
+
182
+ /** Placeholder text displayed when empty. */
183
+ readonly placeholder = input<string>('');
184
+
185
+ /** Prevents editing when true. */
186
+ readonly readOnly = input<boolean | undefined>(false);
187
+
188
+ /** Marks the field as required. */
189
+ readonly required = input<boolean | undefined>(false);
190
+
191
+ /** Whether to show the menu whenever the input has focus. */
192
+ readonly showMenuOnFocus = input<boolean | undefined>(false);
193
+
194
+ /** The size of the autocomplete (input and menu). */
195
+ readonly size = input<ModusSize | undefined>('md');
196
+
197
+ /** A spinner that appears when set to true. */
198
+ readonly showSpinner = input<boolean | undefined>(false);
199
+
200
+ /** Current input value. */
201
+ readonly value = input<string>('');
202
+
203
+ /** Maximum number of chips to display. */
204
+ readonly maxChips = input<number | undefined>(-1);
205
+
206
+ /** Custom item selection handler. */
207
+ readonly customItemSelect = input<((item: IAutocompleteItem) => void) | undefined>();
208
+
209
+ /** Custom input change handler. */
210
+ readonly customInputChange = input<((value: string) => void) | undefined>();
211
+
212
+ /** Custom key down handler. */
213
+ readonly customKeyDown = input<((event: KeyboardEvent) => void) | undefined>();
214
+
215
+ /** Custom blur handler. */
216
+ readonly customBlur = input<((event: FocusEvent) => void) | undefined>();
217
+
218
+ /** Minimum width for the text input in pixels. */
219
+ readonly minInputWidth = input<number | undefined>(10);
220
+
221
+ /** Emits when a selected item chip is removed. */
222
+ readonly chipRemove = output<IAutocompleteItem>();
223
+
224
+ /** Emits when chips expansion state changes. */
225
+ readonly chipsExpansionChange = output<{ expanded: boolean }>();
226
+
227
+ /** Emits when the input loses focus. */
228
+ readonly inputBlur = output<FocusEvent>();
229
+
230
+ /** Emits when the input value changes. */
231
+ readonly inputChange = output<Event>();
232
+
233
+ /** Emits when the input gains focus. */
234
+ readonly inputFocus = output<FocusEvent>();
235
+
236
+ /** Emits when a menu item is selected. */
237
+ readonly itemSelect = output<IAutocompleteItem>();
238
+
239
+ handleChipRemove(event: CustomEvent<IAutocompleteItem>): void {
240
+ this.chipRemove.emit(event.detail);
241
+ }
242
+
243
+ handleChipsExpansionChange(event: CustomEvent<{ expanded: boolean }>): void {
244
+ this.chipsExpansionChange.emit(event.detail);
245
+ }
246
+
247
+ handleBlur(event: CustomEvent<FocusEvent>): void {
248
+ this.inputBlur.emit(event.detail);
249
+ }
250
+
251
+ handleChange(event: CustomEvent<Event>): void {
252
+ this.inputChange.emit(event.detail);
253
+ }
254
+
255
+ handleFocus(event: CustomEvent<FocusEvent>): void {
256
+ this.inputFocus.emit(event.detail);
257
+ }
258
+
259
+ handleItemSelect(event: CustomEvent<IAutocompleteItem>): void {
260
+ this.itemSelect.emit(event.detail);
261
+ }
262
+ }
@@ -0,0 +1,75 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ModusWcAvatar } from '@trimble-oss/moduswebcomponents-angular';
4
+ import type { Components, DaisySize } from '@trimble-oss/moduswebcomponents';
5
+
6
+ /**
7
+ * Props supported by the {@link ModusAvatarComponent}.
8
+ */
9
+ export interface ModusAvatarProps {
10
+ /** Accessible description for the avatar image or initials. */
11
+ alt: Components.ModusWcAvatar['alt'];
12
+ /** Optional CSS class applied to the host element. */
13
+ className?: Components.ModusWcAvatar['customClass'];
14
+ /** Optional image source displayed inside the avatar. */
15
+ imgSrc?: Components.ModusWcAvatar['imgSrc'];
16
+ /** Initials displayed when no image source is provided. */
17
+ initials?: Components.ModusWcAvatar['initials'];
18
+ /** Shape of the avatar container. */
19
+ shape?: Components.ModusWcAvatar['shape'];
20
+ /** Size token applied to the avatar. */
21
+ size?: DaisySize;
22
+ }
23
+
24
+ /**
25
+ * Angular wrapper for the Modus avatar web component.
26
+ *
27
+ * The avatar supports projecting arbitrary content and can display an image or initials.
28
+ * Use the `shape` and `size` inputs to control the appearance.
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <modus-avatar
33
+ * alt="Ada Lovelace"
34
+ * imgSrc="/assets/ada.png"
35
+ * shape="circle"
36
+ * size="lg"
37
+ * />
38
+ * ```
39
+ */
40
+ @Component({
41
+ selector: 'modus-avatar',
42
+ imports: [CommonModule, ModusWcAvatar],
43
+ changeDetection: ChangeDetectionStrategy.OnPush,
44
+ template: `
45
+ <modus-wc-avatar
46
+ [alt]="alt()"
47
+ [customClass]="className()"
48
+ [imgSrc]="imgSrc()"
49
+ [initials]="initials()"
50
+ [shape]="shape()"
51
+ [size]="size()"
52
+ >
53
+ <ng-content />
54
+ </modus-wc-avatar>
55
+ `,
56
+ })
57
+ export class ModusAvatarComponent {
58
+ /** Accessible description for the avatar image or initials. */
59
+ readonly alt = input.required<string>();
60
+
61
+ /** Optional CSS class applied to the host element. */
62
+ readonly className = input<string | undefined>();
63
+
64
+ /** Optional image source displayed inside the avatar. */
65
+ readonly imgSrc = input<string>('');
66
+
67
+ /** Initials displayed when no image source is provided. */
68
+ readonly initials = input<string>('');
69
+
70
+ /** Shape of the avatar container. */
71
+ readonly shape = input<'circle' | 'square'>('circle');
72
+
73
+ /** Size token applied to the avatar. */
74
+ readonly size = input<DaisySize>('md');
75
+ }
@@ -0,0 +1,84 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ModusWcBadge } from '@trimble-oss/moduswebcomponents-angular';
4
+
5
+ /**
6
+ * Available color tokens for the Modus badge component.
7
+ */
8
+ export type ModusBadgeColor =
9
+ | 'primary'
10
+ | 'secondary'
11
+ | 'tertiary'
12
+ | 'high-contrast'
13
+ | 'success'
14
+ | 'warning'
15
+ | 'danger';
16
+
17
+ /**
18
+ * Badge sizing tokens supported by the underlying web component.
19
+ */
20
+ export type ModusBadgeSize = 'sm' | 'md' | 'lg';
21
+
22
+ /**
23
+ * Render variants that control badge appearance.
24
+ */
25
+ export type ModusBadgeVariant = 'counter' | 'filled' | 'outlined' | 'text';
26
+
27
+ /**
28
+ * Input properties for the ModusBadgeComponent wrapper.
29
+ */
30
+ export interface ModusBadgeProps {
31
+ /** Sets the badge color palette. */
32
+ color?: ModusBadgeColor;
33
+ /** Custom CSS class applied to the badge element. */
34
+ className?: string;
35
+ /** Controls the badge size token. */
36
+ size?: ModusBadgeSize;
37
+ /** Selects the badge visual variant. */
38
+ variant?: ModusBadgeVariant;
39
+ /** Accessible label describing the badge when used without text. */
40
+ ariaLabel?: string;
41
+ }
42
+
43
+ /**
44
+ * Angular wrapper for the Modus Web Component badge.
45
+ *
46
+ * Consumers can bind to the strongly typed inputs and project arbitrary content inside the badge slot.
47
+ *
48
+ * @example
49
+ * ```html
50
+ * <modus-badge color="success" variant="filled">Ready</modus-badge>
51
+ * ```
52
+ */
53
+ @Component({
54
+ selector: 'modus-badge',
55
+ imports: [CommonModule, ModusWcBadge],
56
+ changeDetection: ChangeDetectionStrategy.OnPush,
57
+ template: `
58
+ <modus-wc-badge
59
+ [color]="color()"
60
+ [customClass]="className()"
61
+ [size]="size()"
62
+ [variant]="variant()"
63
+ [attr.aria-label]="ariaLabel()"
64
+ >
65
+ <ng-content />
66
+ </modus-wc-badge>
67
+ `,
68
+ })
69
+ export class ModusBadgeComponent {
70
+ /** Sets the badge color palette. */
71
+ readonly color = input<ModusBadgeColor>('primary');
72
+
73
+ /** Custom CSS class applied to the badge element. */
74
+ readonly className = input<string | undefined>();
75
+
76
+ /** Controls the badge size token. */
77
+ readonly size = input<ModusBadgeSize>('md');
78
+
79
+ /** Selects the badge visual variant. */
80
+ readonly variant = input<ModusBadgeVariant>('filled');
81
+
82
+ /** Accessible label describing the badge when used without text. */
83
+ readonly ariaLabel = input<string | undefined>();
84
+ }
@@ -0,0 +1,65 @@
1
+ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ModusWcBreadcrumbs } from '@trimble-oss/moduswebcomponents-angular';
4
+ import type { Components, IBreadcrumb, ModusSize } from '@trimble-oss/moduswebcomponents';
5
+
6
+ /**
7
+ * Props supported by the {@link ModusBreadcrumbsComponent}.
8
+ */
9
+ export interface ModusBreadcrumbsProps {
10
+ /** CSS class applied to the breadcrumbs host element. */
11
+ className?: Components.ModusWcBreadcrumbs['customClass'];
12
+ /** Items describing each breadcrumb entry. */
13
+ items: IBreadcrumb[];
14
+ /** Size token applied to the breadcrumb links. */
15
+ size?: ModusSize;
16
+ }
17
+
18
+ /**
19
+ * Angular wrapper for the Modus breadcrumbs web component.
20
+ *
21
+ * Use this component to render navigational breadcrumbs with Modus styling.
22
+ * Each breadcrumb item can define text, href, icon, and click handlers.
23
+ *
24
+ * @example
25
+ * ```html
26
+ * <modus-breadcrumbs
27
+ * [items]="[
28
+ * { label: 'Home', href: '/' },
29
+ * { label: 'Library', href: '/library' },
30
+ * { label: 'Data', current: true }
31
+ * ]"
32
+ * />
33
+ * ```
34
+ */
35
+ @Component({
36
+ selector: 'modus-breadcrumbs',
37
+ imports: [CommonModule, ModusWcBreadcrumbs],
38
+ changeDetection: ChangeDetectionStrategy.OnPush,
39
+ template: `
40
+ <modus-wc-breadcrumbs
41
+ [customClass]="className()"
42
+ [items]="items()"
43
+ [size]="size()"
44
+ (breadcrumbClick)="handleBreadcrumbClick($event)"
45
+ />
46
+ `,
47
+ })
48
+ export class ModusBreadcrumbsComponent {
49
+ /** CSS class applied to the breadcrumbs host element. */
50
+ readonly className = input<string | undefined>();
51
+
52
+ /** Items describing each breadcrumb entry. */
53
+ readonly items = input.required<IBreadcrumb[]>();
54
+
55
+ /** Size token applied to the breadcrumb links. */
56
+ readonly size = input<ModusSize | undefined>();
57
+
58
+ /** Emits when a breadcrumb item is activated. */
59
+ readonly breadcrumbClick = output<IBreadcrumb>();
60
+
61
+ /** Handles the breadcrumb click event from the web component. */
62
+ handleBreadcrumbClick(event: CustomEvent<IBreadcrumb>): void {
63
+ this.breadcrumbClick.emit(event.detail);
64
+ }
65
+ }