@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,231 @@
1
+ import { useState } from "react";
2
+ import DemoExample from "../../components/DemoExample";
3
+ import DemoPage from "../../components/DemoPage";
4
+ import ModusButtonGroup from "../../components/ModusButtonGroup";
5
+ import ModusButton from "../../components/ModusButton";
6
+
7
+ export default function ButtonGroupDemoPage() {
8
+ const [selectedButtons, setSelectedButtons] = useState<string[]>([]);
9
+
10
+ return (
11
+ <DemoPage
12
+ title="Modus Button Group"
13
+ 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."
14
+ >
15
+ <DemoExample
16
+ title="Button Variants"
17
+ description="Different visual styles for button groups."
18
+ >
19
+ <div className="flex flex-col gap-4">
20
+ <div className="flex flex-col gap-2">
21
+ <div className="text-sm text-muted-foreground">
22
+ Outlined (default)
23
+ </div>
24
+ <ModusButtonGroup variant="outlined" color="primary">
25
+ <ModusButton>Button 1</ModusButton>
26
+ <ModusButton>Button 2</ModusButton>
27
+ <ModusButton>Button 3</ModusButton>
28
+ </ModusButtonGroup>
29
+ </div>
30
+ <div className="flex flex-col gap-2">
31
+ <div className="text-sm text-muted-foreground">Filled</div>
32
+ <ModusButtonGroup variant="filled" color="primary">
33
+ <ModusButton>Button 1</ModusButton>
34
+ <ModusButton>Button 2</ModusButton>
35
+ <ModusButton>Button 3</ModusButton>
36
+ </ModusButtonGroup>
37
+ </div>
38
+ <div className="flex flex-col gap-2">
39
+ <div className="text-sm text-muted-foreground">Borderless</div>
40
+ <ModusButtonGroup variant="borderless" color="primary">
41
+ <ModusButton>Button 1</ModusButton>
42
+ <ModusButton>Button 2</ModusButton>
43
+ <ModusButton>Button 3</ModusButton>
44
+ </ModusButtonGroup>
45
+ </div>
46
+ </div>
47
+ </DemoExample>
48
+
49
+ <DemoExample
50
+ title="Button Colors"
51
+ description="Apply consistent colors across all buttons in the group."
52
+ >
53
+ <div className="flex flex-wrap gap-4">
54
+ <ModusButtonGroup variant="outlined" color="primary">
55
+ <ModusButton>Primary</ModusButton>
56
+ <ModusButton>Buttons</ModusButton>
57
+ </ModusButtonGroup>
58
+ <ModusButtonGroup variant="outlined" color="secondary">
59
+ <ModusButton>Secondary</ModusButton>
60
+ <ModusButton>Buttons</ModusButton>
61
+ </ModusButtonGroup>
62
+ <ModusButtonGroup variant="outlined" color="tertiary">
63
+ <ModusButton>Tertiary</ModusButton>
64
+ <ModusButton>Buttons</ModusButton>
65
+ </ModusButtonGroup>
66
+ <ModusButtonGroup variant="outlined" color="warning">
67
+ <ModusButton>Warning</ModusButton>
68
+ <ModusButton>Buttons</ModusButton>
69
+ </ModusButtonGroup>
70
+ <ModusButtonGroup variant="outlined" color="danger">
71
+ <ModusButton>Danger</ModusButton>
72
+ <ModusButton>Buttons</ModusButton>
73
+ </ModusButtonGroup>
74
+ </div>
75
+ </DemoExample>
76
+
77
+ <DemoExample
78
+ title="Orientation"
79
+ description="Button groups can be arranged horizontally or vertically."
80
+ >
81
+ <div className="flex flex-wrap gap-8">
82
+ <div className="flex flex-col gap-2">
83
+ <div className="text-sm text-muted-foreground">
84
+ Horizontal (default)
85
+ </div>
86
+ <ModusButtonGroup orientation="horizontal" variant="outlined">
87
+ <ModusButton>Option 1</ModusButton>
88
+ <ModusButton>Option 2</ModusButton>
89
+ <ModusButton>Option 3</ModusButton>
90
+ </ModusButtonGroup>
91
+ </div>
92
+ <div className="flex flex-col gap-2">
93
+ <div className="text-sm text-muted-foreground">Vertical</div>
94
+ <ModusButtonGroup orientation="vertical" variant="outlined">
95
+ <ModusButton>Option 1</ModusButton>
96
+ <ModusButton>Option 2</ModusButton>
97
+ <ModusButton>Option 3</ModusButton>
98
+ </ModusButtonGroup>
99
+ </div>
100
+ </div>
101
+ </DemoExample>
102
+
103
+ <DemoExample
104
+ title="Single Selection (Radio-like)"
105
+ description="Only one button can be selected at a time, similar to radio buttons."
106
+ >
107
+ <ModusButtonGroup
108
+ selectionType="single"
109
+ variant="outlined"
110
+ color="primary"
111
+ >
112
+ <ModusButton pressed>Option A</ModusButton>
113
+ <ModusButton>Option B</ModusButton>
114
+ <ModusButton>Option C</ModusButton>
115
+ </ModusButtonGroup>
116
+ </DemoExample>
117
+
118
+ <DemoExample
119
+ title="Multiple Selection (Checkbox-like)"
120
+ description="Multiple buttons can be selected simultaneously, similar to checkboxes."
121
+ >
122
+ <div className="flex flex-col gap-4">
123
+ <ModusButtonGroup
124
+ selectionType="multiple"
125
+ variant="outlined"
126
+ color="primary"
127
+ onButtonSelectionChange={(e) => {
128
+ const buttons = e.detail.selectedButtons;
129
+ setSelectedButtons(
130
+ buttons.map((btn) => btn.textContent?.trim() || ""),
131
+ );
132
+ }}
133
+ >
134
+ <ModusButton pressed>Bold</ModusButton>
135
+ <ModusButton>Italic</ModusButton>
136
+ <ModusButton pressed>Underline</ModusButton>
137
+ </ModusButtonGroup>
138
+ <div className="text-sm text-muted-foreground">
139
+ Selected:{" "}
140
+ {selectedButtons.length > 0 ? selectedButtons.join(", ") : "None"}
141
+ </div>
142
+ </div>
143
+ </DemoExample>
144
+
145
+ <DemoExample
146
+ title="Icon-Only Buttons"
147
+ description="Button groups with icon-only buttons for compact toolbar actions."
148
+ >
149
+ <div className="flex flex-col gap-4">
150
+ <div className="flex flex-col gap-2">
151
+ <div className="text-sm text-muted-foreground">Text Alignment</div>
152
+ <ModusButtonGroup
153
+ selectionType="single"
154
+ variant="outlined"
155
+ color="primary"
156
+ >
157
+ <ModusButton
158
+ icon="align_left"
159
+ iconPosition="only"
160
+ ariaLabel="Align left"
161
+ pressed
162
+ />
163
+ <ModusButton
164
+ icon="text_centered"
165
+ iconPosition="only"
166
+ ariaLabel="Align center"
167
+ />
168
+ <ModusButton
169
+ icon="align_right"
170
+ iconPosition="only"
171
+ ariaLabel="Align right"
172
+ />
173
+ </ModusButtonGroup>
174
+ </div>
175
+ <div className="flex flex-col gap-2">
176
+ <div className="text-sm text-muted-foreground">Text Formatting</div>
177
+ <ModusButtonGroup
178
+ selectionType="multiple"
179
+ variant="outlined"
180
+ color="secondary"
181
+ >
182
+ <ModusButton
183
+ icon="text_bold"
184
+ iconPosition="only"
185
+ ariaLabel="Bold"
186
+ />
187
+ <ModusButton
188
+ icon="text_italic"
189
+ iconPosition="only"
190
+ ariaLabel="Italic"
191
+ />
192
+ <ModusButton
193
+ icon="text_underlined"
194
+ iconPosition="only"
195
+ ariaLabel="Underline"
196
+ />
197
+ </ModusButtonGroup>
198
+ </div>
199
+ </div>
200
+ </DemoExample>
201
+
202
+ <DemoExample
203
+ title="Disabled State"
204
+ description="Disable all buttons in the group at once."
205
+ >
206
+ <ModusButtonGroup variant="outlined" color="primary" disabled>
207
+ <ModusButton>Disabled</ModusButton>
208
+ <ModusButton>Button</ModusButton>
209
+ <ModusButton>Group</ModusButton>
210
+ </ModusButtonGroup>
211
+ </DemoExample>
212
+
213
+ <DemoExample
214
+ title="Mixed Content"
215
+ description="Button groups can contain buttons with both text and icons."
216
+ >
217
+ <ModusButtonGroup variant="outlined" color="primary">
218
+ <ModusButton icon="save_disk" iconPosition="left">
219
+ Save
220
+ </ModusButton>
221
+ <ModusButton icon="download" iconPosition="left">
222
+ Download
223
+ </ModusButton>
224
+ <ModusButton icon="share" iconPosition="left">
225
+ Share
226
+ </ModusButton>
227
+ </ModusButtonGroup>
228
+ </DemoExample>
229
+ </DemoPage>
230
+ );
231
+ }
@@ -0,0 +1,241 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusButton from "../../components/ModusButton";
6
+ import ModusCard from "../../components/ModusCard";
7
+
8
+ export default function CardDemoPage() {
9
+ return (
10
+ <DemoPage
11
+ title="Modus Card"
12
+ description="Cards group related information into a contained surface. Keep each card focused on a single concept and align supporting actions to the bottom."
13
+ >
14
+ <DemoExample
15
+ title="Project summary"
16
+ description="Vertical cards are ideal for key metrics or spotlighting a single project."
17
+ >
18
+ <ModusCard
19
+ title={
20
+ <div className="text-xl font-semibold text-foreground">
21
+ Atlas Renewal
22
+ </div>
23
+ }
24
+ subtitle={
25
+ <div className="text-sm text-foreground-80">
26
+ Updated 2 hours ago
27
+ </div>
28
+ }
29
+ actions={
30
+ <div className="flex gap-2">
31
+ <ModusButton color="primary" size="sm">
32
+ Open project
33
+ </ModusButton>
34
+ <ModusButton variant="outlined" size="sm">
35
+ Share
36
+ </ModusButton>
37
+ </div>
38
+ }
39
+ >
40
+ <div className="flex flex-col gap-3 text-sm text-foreground-80">
41
+ <div>Next milestone: Validate customer insights</div>
42
+ <div>Owner: Priya Malhotra</div>
43
+ <div>Team: Research, Field Ops</div>
44
+ </div>
45
+ </ModusCard>
46
+ </DemoExample>
47
+
48
+ <DemoExample
49
+ title="Horizontal layout"
50
+ description="Use horizontal cards when imagery or a quick status pairs with copy."
51
+ >
52
+ <ModusCard
53
+ layout="horizontal"
54
+ padding="compact"
55
+ bordered
56
+ title={
57
+ <div className="text-lg font-medium text-foreground">Field kit</div>
58
+ }
59
+ subtitle={
60
+ <div className="text-sm text-foreground-80">
61
+ Inventory: 18 units available
62
+ </div>
63
+ }
64
+ actions={
65
+ <ModusButton color="primary" size="sm">
66
+ Reserve
67
+ </ModusButton>
68
+ }
69
+ >
70
+ <div className="text-sm text-foreground-80">
71
+ Includes GPS, survey equipment, and safety checklist. Recommended
72
+ for teams working on remote installs.
73
+ </div>
74
+ </ModusCard>
75
+ </DemoExample>
76
+
77
+ <DemoExample
78
+ title="Card with Header Image"
79
+ description="Add an image or figure in the header slot to provide visual context."
80
+ >
81
+ <ModusCard
82
+ layout="horizontal"
83
+ bordered
84
+ header={
85
+ <div className="w-full md:w-48 h-48 overflow-hidden">
86
+ <img
87
+ src="https://i.pravatar.cc/300?img=12"
88
+ alt="User avatar"
89
+ className="w-full h-full object-cover"
90
+ />
91
+ </div>
92
+ }
93
+ title={
94
+ <div className="text-lg font-medium text-foreground">
95
+ Team Member
96
+ </div>
97
+ }
98
+ subtitle={
99
+ <div className="text-sm text-foreground-80">Senior Developer</div>
100
+ }
101
+ actions={
102
+ <ModusButton color="primary" size="sm">
103
+ Contact
104
+ </ModusButton>
105
+ }
106
+ >
107
+ <div className="text-sm text-foreground-80">
108
+ Specializes in frontend architecture and design systems. Available for
109
+ new projects starting next quarter.
110
+ </div>
111
+ </ModusCard>
112
+ </DemoExample>
113
+
114
+ <DemoExample
115
+ title="Background Figure Card"
116
+ description="Use background-figure to stretch header images across the entire card with overlaid text."
117
+ >
118
+ <ModusCard
119
+ backgroundFigure
120
+ header={
121
+ <div className="w-full h-64 overflow-hidden">
122
+ <img
123
+ src="https://picsum.photos/id/1045/600/400"
124
+ alt="Scenic view"
125
+ className="w-full h-full object-cover"
126
+ />
127
+ </div>
128
+ }
129
+ title={
130
+ <div className="text-2xl font-semibold text-white [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
131
+ Featured Project
132
+ </div>
133
+ }
134
+ subtitle={
135
+ <div className="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
136
+ Launching Q2 2024
137
+ </div>
138
+ }
139
+ actions={
140
+ <ModusButton color="primary" size="sm">
141
+ Learn More
142
+ </ModusButton>
143
+ }
144
+ >
145
+ <div className="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
146
+ This project showcases innovative design patterns and modern user
147
+ experiences. Join us for the launch event.
148
+ </div>
149
+ </ModusCard>
150
+ </DemoExample>
151
+
152
+ <DemoExample
153
+ title="Card with Footer"
154
+ description="Use the footer slot for metadata, tags, or additional information outside the main content area."
155
+ >
156
+ <ModusCard
157
+ bordered
158
+ title={
159
+ <div className="text-xl font-semibold text-foreground">
160
+ Document Review
161
+ </div>
162
+ }
163
+ subtitle={
164
+ <div className="text-sm text-foreground-80">
165
+ Last updated: 3 days ago
166
+ </div>
167
+ }
168
+ actions={
169
+ <ModusButton variant="outlined" size="sm">
170
+ Edit
171
+ </ModusButton>
172
+ }
173
+ footer={
174
+ <div className="flex items-center justify-between pt-4 border-t border-border">
175
+ <div className="flex gap-2">
176
+ <div className="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">
177
+ Draft
178
+ </div>
179
+ <div className="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">
180
+ Review
181
+ </div>
182
+ </div>
183
+ <div className="text-xs text-muted-foreground">3 reviewers</div>
184
+ </div>
185
+ }
186
+ >
187
+ <div className="text-sm text-foreground-80">
188
+ This document contains important project specifications and
189
+ requirements. Please review and provide feedback by end of week.
190
+ </div>
191
+ </ModusCard>
192
+ </DemoExample>
193
+
194
+ <DemoExample
195
+ title="Compact Padding"
196
+ description="Use compact padding for dense dashboards or when space is limited."
197
+ >
198
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
199
+ <ModusCard
200
+ padding="compact"
201
+ bordered
202
+ title={
203
+ <div className="text-base font-medium text-foreground">
204
+ Active Users
205
+ </div>
206
+ }
207
+ >
208
+ <div className="text-2xl font-bold text-foreground">1,234</div>
209
+ <div className="text-xs text-muted-foreground">
210
+ +12% from last month
211
+ </div>
212
+ </ModusCard>
213
+ <ModusCard
214
+ padding="compact"
215
+ bordered
216
+ title={
217
+ <div className="text-base font-medium text-foreground">
218
+ Revenue
219
+ </div>
220
+ }
221
+ >
222
+ <div className="text-2xl font-bold text-foreground">$45.6K</div>
223
+ <div className="text-xs text-muted-foreground">
224
+ +8% from last month
225
+ </div>
226
+ </ModusCard>
227
+ <ModusCard
228
+ padding="compact"
229
+ bordered
230
+ title={
231
+ <div className="text-base font-medium text-foreground">Tasks</div>
232
+ }
233
+ >
234
+ <div className="text-2xl font-bold text-foreground">89</div>
235
+ <div className="text-xs text-muted-foreground">12 pending review</div>
236
+ </ModusCard>
237
+ </div>
238
+ </DemoExample>
239
+ </DemoPage>
240
+ );
241
+ }
@@ -0,0 +1,79 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusCheckbox from "../../components/ModusCheckbox";
6
+
7
+ export default function CheckboxDemoPage() {
8
+ return (
9
+ <DemoPage
10
+ title="Modus Checkbox"
11
+ 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."
12
+ >
13
+ <DemoExample
14
+ title="Checkbox States"
15
+ description="Different checkbox states: unchecked, checked, and indeterminate."
16
+ >
17
+ <div className="flex flex-col gap-4">
18
+ <ModusCheckbox label="Unchecked" value={false} />
19
+ <ModusCheckbox label="Checked" value={true} />
20
+ <ModusCheckbox label="Indeterminate" indeterminate={true} />
21
+ </div>
22
+ </DemoExample>
23
+
24
+ <DemoExample
25
+ title="Checkbox Sizes"
26
+ description="Different sizes for various contexts and visual hierarchy."
27
+ >
28
+ <div className="flex flex-col gap-4">
29
+ <ModusCheckbox label="Small checkbox" size="sm" value={true} />
30
+ <ModusCheckbox
31
+ label="Medium checkbox (default)"
32
+ size="md"
33
+ value={true}
34
+ />
35
+ <ModusCheckbox label="Large checkbox" size="lg" value={true} />
36
+ </div>
37
+ </DemoExample>
38
+
39
+ <DemoExample
40
+ title="Disabled State"
41
+ description="Checkboxes in disabled state for unavailable options."
42
+ >
43
+ <div className="flex flex-col gap-4">
44
+ <ModusCheckbox
45
+ label="Disabled unchecked"
46
+ disabled={true}
47
+ value={false}
48
+ />
49
+ <ModusCheckbox
50
+ label="Disabled checked"
51
+ disabled={true}
52
+ value={true}
53
+ />
54
+ <ModusCheckbox
55
+ label="Disabled indeterminate"
56
+ disabled={true}
57
+ indeterminate={true}
58
+ />
59
+ </div>
60
+ </DemoExample>
61
+
62
+ <DemoExample
63
+ title="Required Checkbox"
64
+ description="Mark checkboxes as required for form validation."
65
+ >
66
+ <div className="flex flex-col gap-4">
67
+ <ModusCheckbox
68
+ label="I agree to the terms (required)"
69
+ required={true}
70
+ />
71
+ <ModusCheckbox
72
+ label="Confirm email subscription (required)"
73
+ required={true}
74
+ />
75
+ </div>
76
+ </DemoExample>
77
+ </DemoPage>
78
+ );
79
+ }