@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,215 @@
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 { ModusButtonGroupComponent } from '../../components/modus-button-group.component';
6
+ import { ModusButtonComponent } from '../../components/modus-button.component';
7
+
8
+ /**
9
+ * Demo page showcasing the Modus Button Group component.
10
+ */
11
+ @Component({
12
+ selector: 'app-button-group-demo-page',
13
+ standalone: true,
14
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusButtonGroupComponent, ModusButtonComponent],
15
+ template: `
16
+ <demo-page
17
+ title="Modus Button Group"
18
+ description="Button groups organize multiple buttons together with support for single or multiple selection modes. Use them for toolbar actions, segmented controls, and toggle groups."
19
+ >
20
+ <demo-example title="Button Variants" description="Different visual styles for button groups.">
21
+ <div class="flex flex-col gap-4">
22
+ <div class="flex flex-col gap-2">
23
+ <div class="text-sm text-muted-foreground">Outlined (default)</div>
24
+ <modus-button-group variant="outlined" color="primary">
25
+ <modus-button variant="outlined" color="primary">Button 1</modus-button>
26
+ <modus-button variant="outlined" color="primary">Button 2</modus-button>
27
+ <modus-button variant="outlined" color="primary">Button 3</modus-button>
28
+ </modus-button-group>
29
+ </div>
30
+ <div class="flex flex-col gap-2">
31
+ <div class="text-sm text-muted-foreground">Filled</div>
32
+ <modus-button-group variant="filled" color="primary">
33
+ <modus-button variant="filled" color="primary">Button 1</modus-button>
34
+ <modus-button variant="filled" color="primary">Button 2</modus-button>
35
+ <modus-button variant="filled" color="primary">Button 3</modus-button>
36
+ </modus-button-group>
37
+ </div>
38
+ <div class="flex flex-col gap-2">
39
+ <div class="text-sm text-muted-foreground">Borderless</div>
40
+ <modus-button-group variant="borderless" color="primary">
41
+ <modus-button variant="borderless" color="primary">Button 1</modus-button>
42
+ <modus-button variant="borderless" color="primary">Button 2</modus-button>
43
+ <modus-button variant="borderless" color="primary">Button 3</modus-button>
44
+ </modus-button-group>
45
+ </div>
46
+ </div>
47
+ </demo-example>
48
+
49
+ <demo-example title="Button Colors" description="Apply consistent colors across all buttons in the group.">
50
+ <div class="flex flex-wrap gap-4">
51
+ <modus-button-group variant="outlined" color="primary">
52
+ <modus-button variant="outlined" color="primary">Primary</modus-button>
53
+ <modus-button variant="outlined" color="primary">Buttons</modus-button>
54
+ </modus-button-group>
55
+ <modus-button-group variant="outlined" color="secondary">
56
+ <modus-button variant="outlined" color="secondary">Secondary</modus-button>
57
+ <modus-button variant="outlined" color="secondary">Buttons</modus-button>
58
+ </modus-button-group>
59
+ <modus-button-group variant="outlined" color="tertiary">
60
+ <modus-button variant="outlined" color="tertiary">Tertiary</modus-button>
61
+ <modus-button variant="outlined" color="tertiary">Buttons</modus-button>
62
+ </modus-button-group>
63
+ <modus-button-group variant="outlined" color="warning">
64
+ <modus-button variant="outlined" color="warning">Warning</modus-button>
65
+ <modus-button variant="outlined" color="warning">Buttons</modus-button>
66
+ </modus-button-group>
67
+ <modus-button-group variant="outlined" color="danger">
68
+ <modus-button variant="outlined" color="danger">Danger</modus-button>
69
+ <modus-button variant="outlined" color="danger">Buttons</modus-button>
70
+ </modus-button-group>
71
+ </div>
72
+ </demo-example>
73
+
74
+ <demo-example title="Orientation" description="Button groups can be arranged horizontally or vertically.">
75
+ <div class="flex flex-wrap gap-8">
76
+ <div class="flex flex-col gap-2">
77
+ <div class="text-sm text-muted-foreground">Horizontal (default)</div>
78
+ <modus-button-group orientation="horizontal" variant="outlined">
79
+ <modus-button variant="outlined">Option 1</modus-button>
80
+ <modus-button variant="outlined">Option 2</modus-button>
81
+ <modus-button variant="outlined">Option 3</modus-button>
82
+ </modus-button-group>
83
+ </div>
84
+ <div class="flex flex-col gap-2">
85
+ <div class="text-sm text-muted-foreground">Vertical</div>
86
+ <modus-button-group orientation="vertical" variant="outlined">
87
+ <modus-button variant="outlined">Option 1</modus-button>
88
+ <modus-button variant="outlined">Option 2</modus-button>
89
+ <modus-button variant="outlined">Option 3</modus-button>
90
+ </modus-button-group>
91
+ </div>
92
+ </div>
93
+ </demo-example>
94
+
95
+ <demo-example title="Single Selection (Radio-like)" description="Only one button can be selected at a time.">
96
+ <modus-button-group selectionType="single" variant="outlined" color="primary">
97
+ <modus-button variant="outlined" color="primary" [pressed]="true">Option A</modus-button>
98
+ <modus-button variant="outlined" color="primary">Option B</modus-button>
99
+ <modus-button variant="outlined" color="primary">Option C</modus-button>
100
+ </modus-button-group>
101
+ </demo-example>
102
+
103
+ <demo-example
104
+ title="Multiple Selection (Checkbox-like)"
105
+ description="Multiple buttons can be selected simultaneously."
106
+ >
107
+ <div class="flex flex-col gap-4">
108
+ <modus-button-group
109
+ selectionType="multiple"
110
+ variant="outlined"
111
+ color="primary"
112
+ (buttonSelectionChange)="handleSelectionChange($event)"
113
+ >
114
+ <modus-button variant="outlined" color="primary" [pressed]="true">Bold</modus-button>
115
+ <modus-button variant="outlined" color="primary">Italic</modus-button>
116
+ <modus-button variant="outlined" color="primary" [pressed]="true">Underline</modus-button>
117
+ </modus-button-group>
118
+ <div class="text-sm text-muted-foreground">
119
+ Selected: {{ selectedButtons().length > 0 ? selectedButtons().join(', ') : 'None' }}
120
+ </div>
121
+ </div>
122
+ </demo-example>
123
+
124
+ <demo-example title="Icon-Only Buttons" description="Compact toolbar actions with icon-only buttons.">
125
+ <div class="flex flex-col gap-4">
126
+ <div class="flex flex-col gap-2">
127
+ <div class="text-sm text-muted-foreground">Text Alignment</div>
128
+ <modus-button-group selectionType="single" variant="outlined" color="primary">
129
+ <modus-button
130
+ icon="align_left"
131
+ iconPosition="only"
132
+ ariaLabel="Align left"
133
+ variant="outlined"
134
+ color="primary"
135
+ [pressed]="true"
136
+ />
137
+ <modus-button
138
+ icon="text_centered"
139
+ iconPosition="only"
140
+ ariaLabel="Align center"
141
+ variant="outlined"
142
+ color="primary"
143
+ />
144
+ <modus-button
145
+ icon="align_right"
146
+ iconPosition="only"
147
+ ariaLabel="Align right"
148
+ variant="outlined"
149
+ color="primary"
150
+ />
151
+ </modus-button-group>
152
+ </div>
153
+ <div class="flex flex-col gap-2">
154
+ <div class="text-sm text-muted-foreground">Text Formatting</div>
155
+ <modus-button-group selectionType="multiple" variant="outlined" color="secondary">
156
+ <modus-button
157
+ icon="text_bold"
158
+ iconPosition="only"
159
+ ariaLabel="Bold"
160
+ variant="outlined"
161
+ color="secondary"
162
+ />
163
+ <modus-button
164
+ icon="text_italic"
165
+ iconPosition="only"
166
+ ariaLabel="Italic"
167
+ variant="outlined"
168
+ color="secondary"
169
+ />
170
+ <modus-button
171
+ icon="text_underlined"
172
+ iconPosition="only"
173
+ ariaLabel="Underline"
174
+ variant="outlined"
175
+ color="secondary"
176
+ />
177
+ </modus-button-group>
178
+ </div>
179
+ </div>
180
+ </demo-example>
181
+
182
+ <demo-example title="Disabled State" description="Disable all buttons in the group at once.">
183
+ <modus-button-group variant="outlined" color="primary" [disabled]="true">
184
+ <modus-button variant="outlined" color="primary">Disabled</modus-button>
185
+ <modus-button variant="outlined" color="primary">Button</modus-button>
186
+ <modus-button variant="outlined" color="primary">Group</modus-button>
187
+ </modus-button-group>
188
+ </demo-example>
189
+
190
+ <demo-example title="Mixed Content" description="Button groups can contain buttons with text and icons.">
191
+ <modus-button-group variant="outlined" color="primary">
192
+ <modus-button icon="save_disk" iconPosition="left" variant="outlined" color="primary">
193
+ Save
194
+ </modus-button>
195
+ <modus-button icon="download" iconPosition="left" variant="outlined" color="primary">
196
+ Download
197
+ </modus-button>
198
+ <modus-button icon="share" iconPosition="left" variant="outlined" color="primary">
199
+ Share
200
+ </modus-button>
201
+ </modus-button-group>
202
+ </demo-example>
203
+ </demo-page>
204
+ `,
205
+ })
206
+ export class ButtonGroupDemoPageComponent {
207
+ readonly selectedButtons = signal<string[]>([]);
208
+
209
+ handleSelectionChange(event: { selectedButtons: HTMLElement[] }): void {
210
+ const values = event.selectedButtons
211
+ .map((button) => button.textContent?.trim())
212
+ .filter((value): value is string => Boolean(value));
213
+ this.selectedButtons.set(values);
214
+ }
215
+ }
@@ -0,0 +1,180 @@
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 { ModusCardComponent } from '../../components/modus-card.component';
6
+ import { ModusButtonComponent } from '../../components/modus-button.component';
7
+
8
+ /**
9
+ * Demo page showcasing the Modus Card component.
10
+ *
11
+ * Demonstrates card features including:
12
+ * - Vertical and horizontal layouts
13
+ * - Cards with header images
14
+ * - Background figure cards with overlaid text
15
+ * - Cards with footer slots
16
+ * - Compact padding for dense layouts
17
+ */
18
+ @Component({
19
+ selector: 'app-card-demo-page',
20
+ standalone: true,
21
+ imports: [
22
+ CommonModule,
23
+ DemoPageComponent,
24
+ DemoExampleComponent,
25
+ ModusCardComponent,
26
+ ModusButtonComponent,
27
+ ],
28
+ template: `
29
+ <demo-page
30
+ title="Modus Card"
31
+ description="Cards group related information into a contained surface. Keep each card focused on a single concept and align supporting actions to the bottom."
32
+ >
33
+ <demo-example
34
+ title="Project summary"
35
+ description="Vertical cards are ideal for key metrics or spotlighting a single project."
36
+ >
37
+ <modus-card>
38
+ <div slot="title" class="text-xl font-semibold text-foreground">Atlas Renewal</div>
39
+ <div slot="subtitle" class="text-sm text-foreground-80">Updated 2 hours ago</div>
40
+ <div slot="actions" class="flex gap-2">
41
+ <modus-button color="primary" size="sm">Open project</modus-button>
42
+ <modus-button color="tertiary" size="sm">Share</modus-button>
43
+ </div>
44
+ <div class="flex flex-col gap-3 text-sm text-foreground-80">
45
+ <div>Next milestone: Validate customer insights</div>
46
+ <div>Owner: Priya Malhotra</div>
47
+ <div>Team: Research, Field Ops</div>
48
+ </div>
49
+ </modus-card>
50
+ </demo-example>
51
+
52
+ <demo-example
53
+ title="Horizontal layout"
54
+ description="Use horizontal cards when imagery or a quick status pairs with copy."
55
+ >
56
+ <modus-card [layout]="'horizontal'" [padding]="'compact'" [bordered]="true">
57
+ <div slot="title" class="text-lg font-medium text-foreground">Field kit</div>
58
+ <div slot="subtitle" class="text-sm text-foreground-80">
59
+ Inventory: 18 units available
60
+ </div>
61
+ <div slot="actions">
62
+ <modus-button color="primary" size="sm">Reserve</modus-button>
63
+ </div>
64
+ <div class="text-sm text-foreground-80">
65
+ Includes GPS, survey equipment, and safety checklist. Recommended for teams working on
66
+ remote installs.
67
+ </div>
68
+ </modus-card>
69
+ </demo-example>
70
+
71
+ <demo-example
72
+ title="Card with Header Image"
73
+ description="Add an image or figure in the header slot to provide visual context."
74
+ >
75
+ <modus-card [layout]="'horizontal'" [bordered]="true">
76
+ <figure slot="header" class="w-full md:w-48 h-48 overflow-hidden">
77
+ <img
78
+ src="https://i.pravatar.cc/300?img=12"
79
+ alt="User avatar"
80
+ class="w-full h-full object-cover"
81
+ />
82
+ </figure>
83
+ <div slot="title" class="text-lg font-medium text-foreground">Team Member</div>
84
+ <div slot="subtitle" class="text-sm text-foreground-80">Senior Developer</div>
85
+ <div slot="actions">
86
+ <modus-button color="primary" size="sm">Contact</modus-button>
87
+ </div>
88
+ <div class="text-sm text-foreground-80">
89
+ Specializes in frontend architecture and design systems. Available for new projects
90
+ starting next quarter.
91
+ </div>
92
+ </modus-card>
93
+ </demo-example>
94
+
95
+ <demo-example
96
+ title="Background Figure Card"
97
+ description="Use background-figure to stretch header images across the entire card with overlaid text."
98
+ >
99
+ <modus-card [backgroundFigure]="true">
100
+ <figure slot="header" class="w-full h-64 overflow-hidden">
101
+ <img
102
+ src="https://picsum.photos/id/1045/600/400"
103
+ alt="Scenic view"
104
+ class="w-full h-full object-cover"
105
+ />
106
+ </figure>
107
+ <div
108
+ slot="title"
109
+ class="text-2xl font-semibold text-white [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
110
+ >
111
+ Featured Project
112
+ </div>
113
+ <div
114
+ slot="subtitle"
115
+ class="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
116
+ >
117
+ Launching Q2 2024
118
+ </div>
119
+ <div slot="actions">
120
+ <modus-button color="primary" size="sm">Learn More</modus-button>
121
+ </div>
122
+ <div
123
+ class="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
124
+ >
125
+ This project showcases innovative design patterns and modern user experiences. Join us
126
+ for the launch event.
127
+ </div>
128
+ </modus-card>
129
+ </demo-example>
130
+
131
+ <demo-example
132
+ title="Card with Footer"
133
+ description="Use the footer slot for metadata, tags, or additional information outside the main content area."
134
+ >
135
+ <modus-card [bordered]="true">
136
+ <div slot="title" class="text-xl font-semibold text-foreground">Document Review</div>
137
+ <div slot="subtitle" class="text-sm text-foreground-80">Last updated: 3 days ago</div>
138
+ <div slot="actions">
139
+ <modus-button color="tertiary" size="sm">Edit</modus-button>
140
+ </div>
141
+ <div class="text-sm text-foreground-80">
142
+ This document contains important project specifications and requirements. Please review
143
+ and provide feedback by end of week.
144
+ </div>
145
+ <div slot="footer" class="flex items-center justify-between pt-4 border-t border-border">
146
+ <div class="flex gap-2">
147
+ <span class="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">Draft</span>
148
+ <span class="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">Review</span>
149
+ </div>
150
+ <div class="text-xs text-muted-foreground">3 reviewers</div>
151
+ </div>
152
+ </modus-card>
153
+ </demo-example>
154
+
155
+ <demo-example
156
+ title="Compact Padding"
157
+ description="Use compact padding for dense dashboards or when space is limited."
158
+ >
159
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
160
+ <modus-card [padding]="'compact'" [bordered]="true">
161
+ <div slot="title" class="text-base font-medium text-foreground">Active Users</div>
162
+ <div class="text-2xl font-bold text-foreground">1,234</div>
163
+ <div class="text-xs text-muted-foreground">+12% from last month</div>
164
+ </modus-card>
165
+ <modus-card [padding]="'compact'" [bordered]="true">
166
+ <div slot="title" class="text-base font-medium text-foreground">Revenue</div>
167
+ <div class="text-2xl font-bold text-foreground">$45.6K</div>
168
+ <div class="text-xs text-muted-foreground">+8% from last month</div>
169
+ </modus-card>
170
+ <modus-card [padding]="'compact'" [bordered]="true">
171
+ <div slot="title" class="text-base font-medium text-foreground">Tasks</div>
172
+ <div class="text-2xl font-bold text-foreground">89</div>
173
+ <div class="text-xs text-muted-foreground">12 pending review</div>
174
+ </modus-card>
175
+ </div>
176
+ </demo-example>
177
+ </demo-page>
178
+ `,
179
+ })
180
+ export class CardDemoPageComponent {}
@@ -0,0 +1,71 @@
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 { ModusCheckboxComponent } from '../../components/modus-checkbox.component';
6
+
7
+ /**
8
+ * Demo page showcasing the Modus Checkbox component.
9
+ *
10
+ * Demonstrates checkbox features including:
11
+ * - Checked and unchecked states
12
+ * - Indeterminate state
13
+ * - Different sizes (sm, md, lg)
14
+ * - Disabled state
15
+ * - Required checkbox
16
+ */
17
+ @Component({
18
+ selector: 'app-checkbox-demo-page',
19
+ standalone: true,
20
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusCheckboxComponent],
21
+ template: `
22
+ <demo-page
23
+ title="Modus Checkbox"
24
+ description="Checkboxes allow users to select one or more options from a list. Use checkboxes for multiple selections and when users need to toggle individual options."
25
+ >
26
+ <demo-example
27
+ title="Checkbox States"
28
+ description="Different checkbox states: unchecked, checked, and indeterminate."
29
+ >
30
+ <div class="flex flex-col gap-4">
31
+ <modus-checkbox label="Unchecked" [value]="false" />
32
+ <modus-checkbox label="Checked" [value]="true" />
33
+ <modus-checkbox label="Indeterminate" [indeterminate]="true" />
34
+ </div>
35
+ </demo-example>
36
+
37
+ <demo-example
38
+ title="Checkbox Sizes"
39
+ description="Different sizes for various contexts and visual hierarchy."
40
+ >
41
+ <div class="flex flex-col gap-4">
42
+ <modus-checkbox label="Small checkbox" size="sm" [value]="true" />
43
+ <modus-checkbox label="Medium checkbox (default)" size="md" [value]="true" />
44
+ <modus-checkbox label="Large checkbox" size="lg" [value]="true" />
45
+ </div>
46
+ </demo-example>
47
+
48
+ <demo-example
49
+ title="Disabled State"
50
+ description="Checkboxes in disabled state for unavailable options."
51
+ >
52
+ <div class="flex flex-col gap-4">
53
+ <modus-checkbox label="Disabled unchecked" [disabled]="true" [value]="false" />
54
+ <modus-checkbox label="Disabled checked" [disabled]="true" [value]="true" />
55
+ <modus-checkbox label="Disabled indeterminate" [disabled]="true" [indeterminate]="true" />
56
+ </div>
57
+ </demo-example>
58
+
59
+ <demo-example
60
+ title="Required Checkbox"
61
+ description="Mark checkboxes as required for form validation."
62
+ >
63
+ <div class="flex flex-col gap-4">
64
+ <modus-checkbox label="I agree to the terms (required)" [required]="true" />
65
+ <modus-checkbox label="Confirm email subscription (required)" [required]="true" />
66
+ </div>
67
+ </demo-example>
68
+ </demo-page>
69
+ `,
70
+ })
71
+ export class CheckboxDemoPageComponent {}
@@ -0,0 +1,183 @@
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 { ModusChipComponent } from '../../components/modus-chip.component';
6
+
7
+ /**
8
+ * Demo page showcasing the Modus Chip component.
9
+ *
10
+ * Demonstrates chip features including:
11
+ * - Basic chips with labels
12
+ * - Chip variants (filled, outline)
13
+ * - Different sizes (sm, md, lg)
14
+ * - Active state for selections
15
+ * - Disabled state
16
+ * - Chips with remove button
17
+ * - Error state for validation
18
+ * - Interactive toggle/filter patterns
19
+ * - Deletable tag patterns
20
+ */
21
+ @Component({
22
+ selector: 'app-chip-demo-page',
23
+ standalone: true,
24
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusChipComponent],
25
+ template: `
26
+ <demo-page
27
+ title="Modus Chip"
28
+ description="Compact visual elements for tags, selections, or status pills. Chips support filled/outline variants, three sizes, active/error/disabled states, and optional remove buttons."
29
+ >
30
+ <demo-example
31
+ title="Removable Tags"
32
+ description="Chips with remove buttons for deletable items like tags, filters, or selections."
33
+ >
34
+ <div class="p-6 rounded-lg bg-card border-default">
35
+ <div class="text-base font-semibold mb-2 text-foreground">Applied Tags</div>
36
+ <div class="text-sm text-muted-foreground mb-4">Click the X to remove tags</div>
37
+ @if (activeTags().length > 0) {
38
+ <div class="flex flex-wrap gap-3">
39
+ @for (tag of activeTags(); track tag.id) {
40
+ <modus-chip
41
+ [label]="tag.label"
42
+ [showRemove]="true"
43
+ (chipRemove)="removeTag(tag.id)"
44
+ />
45
+ }
46
+ </div>
47
+ } @else {
48
+ <div class="text-sm text-muted-foreground italic">No tags applied</div>
49
+ }
50
+ @if (removedTags().length > 0) {
51
+ <div class="mt-4 pt-4 border-top-default flex items-center gap-3">
52
+ <div class="text-sm text-muted-foreground">Removed:</div>
53
+ @for (tag of removedTags(); track tag.id) {
54
+ <modus-chip [label]="tag.label" [disabled]="true" size="sm" />
55
+ }
56
+ <button class="text-sm text-primary hover:underline ml-2" (click)="restoreTags()">
57
+ Restore all
58
+ </button>
59
+ </div>
60
+ }
61
+ </div>
62
+ </demo-example>
63
+
64
+ <demo-example
65
+ title="Chip Variants"
66
+ description="Two visual styles: filled (solid background) and outline (transparent with border)."
67
+ >
68
+ <div class="flex flex-col gap-6">
69
+ <div>
70
+ <div class="text-sm font-medium mb-3 text-muted-foreground">Filled (Default)</div>
71
+ <div class="flex flex-wrap gap-3">
72
+ <modus-chip label="Default" variant="filled" />
73
+ <modus-chip label="Active" variant="filled" [active]="true" />
74
+ <modus-chip label="Removable" variant="filled" [showRemove]="true" />
75
+ </div>
76
+ </div>
77
+ <div>
78
+ <div class="text-sm font-medium mb-3 text-muted-foreground">Outline</div>
79
+ <div class="flex flex-wrap gap-3">
80
+ <modus-chip label="Default" variant="outline" />
81
+ <modus-chip label="Active" variant="outline" [active]="true" />
82
+ <modus-chip label="Removable" variant="outline" [showRemove]="true" />
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </demo-example>
87
+
88
+ <demo-example
89
+ title="Chip Sizes"
90
+ description="Three size options: sm (20px), md (24px), and lg (28px) for different contexts."
91
+ >
92
+ <div class="flex flex-wrap items-center gap-4">
93
+ <modus-chip label="Small" size="sm" />
94
+ <modus-chip label="Medium" size="md" />
95
+ <modus-chip label="Large" size="lg" />
96
+ </div>
97
+ <div class="flex flex-wrap items-center gap-4 mt-4">
98
+ <modus-chip label="Small" size="sm" variant="outline" [active]="true" />
99
+ <modus-chip label="Medium" size="md" variant="outline" [active]="true" />
100
+ <modus-chip label="Large" size="lg" variant="outline" [active]="true" />
101
+ </div>
102
+ </demo-example>
103
+
104
+ <demo-example
105
+ title="States"
106
+ description="Active state for selections, disabled state for unavailable options, and error state for validation."
107
+ >
108
+ <div class="flex flex-col gap-6">
109
+ <div>
110
+ <div class="text-sm font-medium mb-3 text-muted-foreground">Active State</div>
111
+ <div class="flex flex-wrap gap-3">
112
+ <modus-chip label="Selected" [active]="true" />
113
+ <modus-chip label="Pressed" [active]="true" variant="outline" />
114
+ </div>
115
+ </div>
116
+ <div>
117
+ <div class="text-sm font-medium mb-3 text-muted-foreground">Disabled State</div>
118
+ <div class="flex flex-wrap gap-3">
119
+ <modus-chip label="Disabled" [disabled]="true" />
120
+ <modus-chip label="Disabled Outline" [disabled]="true" variant="outline" />
121
+ <modus-chip label="Disabled Active" [disabled]="true" [active]="true" />
122
+ </div>
123
+ </div>
124
+ <div>
125
+ <div class="text-sm font-medium mb-3 text-muted-foreground">Error State</div>
126
+ <div class="flex flex-wrap gap-3">
127
+ <modus-chip label="Invalid" [hasError]="true" />
128
+ <modus-chip label="Error" [hasError]="true" variant="outline" />
129
+ <modus-chip label="Remove Error" [hasError]="true" [showRemove]="true" />
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </demo-example>
134
+
135
+ <demo-example
136
+ title="Status Pills"
137
+ description="Use chips as status indicators with appropriate styling."
138
+ >
139
+ <div class="flex flex-col gap-4">
140
+ <div class="flex items-center gap-4">
141
+ <div class="w-24 text-sm text-muted-foreground">Order Status:</div>
142
+ <modus-chip label="Pending" variant="outline" />
143
+ </div>
144
+ <div class="flex items-center gap-4">
145
+ <div class="w-24 text-sm text-muted-foreground">Active:</div>
146
+ <modus-chip label="In Progress" [active]="true" />
147
+ </div>
148
+ <div class="flex items-center gap-4">
149
+ <div class="w-24 text-sm text-muted-foreground">Completed:</div>
150
+ <modus-chip label="Done" variant="filled" />
151
+ </div>
152
+ <div class="flex items-center gap-4">
153
+ <div class="w-24 text-sm text-muted-foreground">Error:</div>
154
+ <modus-chip label="Failed" [hasError]="true" />
155
+ </div>
156
+ </div>
157
+ </demo-example>
158
+ </demo-page>
159
+ `,
160
+ })
161
+ export class ChipDemoPageComponent {
162
+ // Removable tags demo
163
+ readonly activeTags = signal([
164
+ { id: 'urgent', label: 'Urgent' },
165
+ { id: 'review', label: 'Needs Review' },
166
+ { id: 'approved', label: 'Approved' },
167
+ { id: 'archived', label: 'Archived' },
168
+ ]);
169
+ readonly removedTags = signal<Array<{ id: string; label: string }>>([]);
170
+
171
+ removeTag(tagId: string): void {
172
+ const tag = this.activeTags().find((t) => t.id === tagId);
173
+ if (tag) {
174
+ this.activeTags.update((tags) => tags.filter((t) => t.id !== tagId));
175
+ this.removedTags.update((tags) => [...tags, tag]);
176
+ }
177
+ }
178
+
179
+ restoreTags(): void {
180
+ this.activeTags.update((tags) => [...tags, ...this.removedTags()]);
181
+ this.removedTags.set([]);
182
+ }
183
+ }