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