@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,185 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusProgress from "../../components/ModusProgress";
7
+ import ModusButton from "../../components/ModusButton";
8
+
9
+ /**
10
+ * Demo page showcasing the Modus Progress component.
11
+ *
12
+ * Demonstrates progress features including:
13
+ * - Basic progress bars
14
+ * - Different values
15
+ * - Radial progress
16
+ * - Indeterminate progress
17
+ * - With labels
18
+ */
19
+ export default function ProgressDemoPage() {
20
+ const [progressValue, setProgressValue] = useState(0);
21
+ const [progressLabel, setProgressLabel] = useState("0%");
22
+ const [progressInterval, setProgressInterval] = useState<ReturnType<
23
+ typeof setInterval
24
+ > | null>(null);
25
+
26
+ const startProgress = () => {
27
+ if (progressInterval) {
28
+ clearInterval(progressInterval);
29
+ }
30
+
31
+ setProgressValue(0);
32
+ setProgressLabel("0%");
33
+
34
+ const interval = setInterval(() => {
35
+ setProgressValue((value) => {
36
+ const newValue = Math.min(value + 5, 100);
37
+ setProgressLabel(`${newValue}%`);
38
+ if (newValue >= 100 && interval) {
39
+ clearInterval(interval);
40
+ setProgressInterval(null);
41
+ }
42
+ return newValue;
43
+ });
44
+ }, 200);
45
+
46
+ setProgressInterval(interval);
47
+ };
48
+
49
+ const resetProgress = () => {
50
+ if (progressInterval) {
51
+ clearInterval(progressInterval);
52
+ setProgressInterval(null);
53
+ }
54
+ setProgressValue(0);
55
+ setProgressLabel("0%");
56
+ };
57
+
58
+ // Cleanup interval on unmount
59
+ useEffect(() => {
60
+ return () => {
61
+ if (progressInterval) {
62
+ clearInterval(progressInterval);
63
+ }
64
+ };
65
+ }, [progressInterval]);
66
+
67
+ return (
68
+ <DemoPage
69
+ title="Modus Progress"
70
+ description="Progress components indicate the completion status of a task or process. Use progress bars for file uploads, form completion, or any process with measurable progress."
71
+ >
72
+ <DemoExample
73
+ title="Basic Progress Bar"
74
+ description="Simple progress bars with different values."
75
+ >
76
+ <div className="flex flex-col gap-6">
77
+ <div className="flex flex-col gap-2">
78
+ <div className="text-sm text-muted-foreground">0%</div>
79
+ <ModusProgress value={0} />
80
+ </div>
81
+
82
+ <div className="flex flex-col gap-2">
83
+ <div className="text-sm text-muted-foreground">25%</div>
84
+ <ModusProgress value={25} />
85
+ </div>
86
+
87
+ <div className="flex flex-col gap-2">
88
+ <div className="text-sm text-muted-foreground">50%</div>
89
+ <ModusProgress value={50} />
90
+ </div>
91
+
92
+ <div className="flex flex-col gap-2">
93
+ <div className="text-sm text-muted-foreground">75%</div>
94
+ <ModusProgress value={75} />
95
+ </div>
96
+
97
+ <div className="flex flex-col gap-2">
98
+ <div className="text-sm text-muted-foreground">100%</div>
99
+ <ModusProgress value={100} />
100
+ </div>
101
+ </div>
102
+ </DemoExample>
103
+
104
+ <DemoExample
105
+ title="Progress with Labels"
106
+ description="Progress bars with custom labels."
107
+ >
108
+ <div className="flex flex-col gap-6">
109
+ <ModusProgress value={45} label="45% complete" />
110
+ <ModusProgress value={72} label="72%" />
111
+ <ModusProgress value={90} label="Almost done" />
112
+ </div>
113
+ </DemoExample>
114
+
115
+ <DemoExample
116
+ title="Radial Progress"
117
+ description="Radial progress indicators for compact spaces."
118
+ >
119
+ <div className="flex flex-wrap gap-6">
120
+ <div className="flex flex-col gap-2">
121
+ <div className="text-sm text-muted-foreground">25%</div>
122
+ <ModusProgress variant="radial" value={25} label="25%" />
123
+ </div>
124
+
125
+ <div className="flex flex-col gap-2">
126
+ <div className="text-sm text-muted-foreground">50%</div>
127
+ <ModusProgress variant="radial" value={50} label="50%" />
128
+ </div>
129
+
130
+ <div className="flex flex-col gap-2">
131
+ <div className="text-sm text-muted-foreground">75%</div>
132
+ <ModusProgress variant="radial" value={75} label="75%" />
133
+ </div>
134
+
135
+ <div className="flex flex-col gap-2">
136
+ <div className="text-sm text-muted-foreground">100%</div>
137
+ <ModusProgress variant="radial" value={100} label="100%" />
138
+ </div>
139
+ </div>
140
+ </DemoExample>
141
+
142
+ <DemoExample
143
+ title="Indeterminate Progress"
144
+ description="Progress bars for tasks with unknown duration."
145
+ >
146
+ <div className="flex flex-col gap-6">
147
+ <ModusProgress indeterminate />
148
+ <div className="text-sm text-muted-foreground">
149
+ Use indeterminate progress when the duration of a task is unknown.
150
+ </div>
151
+ </div>
152
+ </DemoExample>
153
+
154
+ <DemoExample
155
+ title="Interactive Example"
156
+ description="Dynamic progress bar that updates over time."
157
+ >
158
+ <div className="flex flex-col gap-6">
159
+ <ModusProgress value={progressValue} label={progressLabel} />
160
+ <div className="flex gap-2">
161
+ <ModusButton
162
+ color="primary"
163
+ size="sm"
164
+ onButtonClick={startProgress}
165
+ >
166
+ Start Progress
167
+ </ModusButton>
168
+ <ModusButton
169
+ color="secondary"
170
+ size="sm"
171
+ onButtonClick={resetProgress}
172
+ >
173
+ Reset
174
+ </ModusButton>
175
+ </div>
176
+ <div className="p-4 rounded-lg bg-card border-default">
177
+ <div className="text-sm text-foreground">
178
+ <strong>Current Value:</strong> {progressValue}%
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </DemoExample>
183
+ </DemoPage>
184
+ );
185
+ }
@@ -0,0 +1,242 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusRadio from "../../components/ModusRadio";
7
+ import ModusInputLabel from "../../components/ModusInputLabel";
8
+
9
+ /**
10
+ * Demo page showcasing the Modus Radio component.
11
+ *
12
+ * Demonstrates radio button features including:
13
+ * - Basic radio groups
14
+ * - Sizes
15
+ * - Disabled state
16
+ * - Required fields
17
+ * - With labels
18
+ */
19
+ export default function RadioDemoPage() {
20
+ const [selectedOption, setSelectedOption] = useState<string | null>(null);
21
+
22
+ const handleRadioChange = (value: string) => {
23
+ setSelectedOption(value);
24
+ };
25
+
26
+ return (
27
+ <DemoPage
28
+ title="Modus Radio"
29
+ description="Radio buttons allow users to select a single option from a group. Use radio buttons when only one option can be selected at a time."
30
+ >
31
+ <DemoExample
32
+ title="Basic Radio Group"
33
+ description="Simple radio button group with multiple options."
34
+ >
35
+ <div className="flex flex-col gap-6">
36
+ <div className="flex flex-col gap-2">
37
+ <ModusInputLabel forId="option-a" labelText="Select Option" />
38
+ <div className="flex flex-col gap-2">
39
+ <ModusRadio
40
+ inputId="option-a"
41
+ label="Option A"
42
+ name="basic-group"
43
+ value={true}
44
+ />
45
+ <ModusRadio
46
+ inputId="option-b"
47
+ label="Option B"
48
+ name="basic-group"
49
+ value={false}
50
+ />
51
+ <ModusRadio
52
+ inputId="option-c"
53
+ label="Option C"
54
+ name="basic-group"
55
+ value={false}
56
+ />
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </DemoExample>
61
+
62
+ <DemoExample
63
+ title="Radio Button Sizes"
64
+ description="Radio buttons in different sizes."
65
+ >
66
+ <div className="flex flex-col gap-6">
67
+ <div className="flex flex-col gap-2">
68
+ <ModusInputLabel forId="small-radio" labelText="Small" />
69
+ <div className="flex flex-col gap-2">
70
+ <ModusRadio
71
+ inputId="small-radio"
72
+ label="Small Option"
73
+ name="small-group"
74
+ size="sm"
75
+ value={true}
76
+ />
77
+ <ModusRadio
78
+ inputId="small-radio-b"
79
+ label="Another Small Option"
80
+ name="small-group"
81
+ size="sm"
82
+ value={false}
83
+ />
84
+ </div>
85
+ </div>
86
+
87
+ <div className="flex flex-col gap-2">
88
+ <ModusInputLabel
89
+ forId="medium-radio"
90
+ labelText="Medium (Default)"
91
+ />
92
+ <div className="flex flex-col gap-2">
93
+ <ModusRadio
94
+ inputId="medium-radio"
95
+ label="Medium Option"
96
+ name="medium-group"
97
+ size="md"
98
+ value={true}
99
+ />
100
+ <ModusRadio
101
+ inputId="medium-radio-b"
102
+ label="Another Medium Option"
103
+ name="medium-group"
104
+ size="md"
105
+ value={false}
106
+ />
107
+ </div>
108
+ </div>
109
+
110
+ <div className="flex flex-col gap-2">
111
+ <ModusInputLabel forId="large-radio" labelText="Large" />
112
+ <div className="flex flex-col gap-2">
113
+ <ModusRadio
114
+ inputId="large-radio"
115
+ label="Large Option"
116
+ name="large-group"
117
+ size="lg"
118
+ value={true}
119
+ />
120
+ <ModusRadio
121
+ inputId="large-radio-b"
122
+ label="Another Large Option"
123
+ name="large-group"
124
+ size="lg"
125
+ value={false}
126
+ />
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </DemoExample>
131
+
132
+ <DemoExample
133
+ title="Required Radio Group"
134
+ description="Radio buttons marked as required."
135
+ >
136
+ <div className="flex flex-col gap-6">
137
+ <div className="flex flex-col gap-2">
138
+ <ModusInputLabel
139
+ forId="required-a"
140
+ labelText="Required Selection"
141
+ required={true}
142
+ />
143
+ <div className="flex flex-col gap-2">
144
+ <ModusRadio
145
+ inputId="required-a"
146
+ label="Yes"
147
+ name="required-group"
148
+ required={true}
149
+ value={true}
150
+ />
151
+ <ModusRadio
152
+ inputId="required-b"
153
+ label="No"
154
+ name="required-group"
155
+ required={true}
156
+ value={false}
157
+ />
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </DemoExample>
162
+
163
+ <DemoExample
164
+ title="Disabled Radio Buttons"
165
+ description="Radio buttons in disabled state."
166
+ >
167
+ <div className="flex flex-col gap-6">
168
+ <div className="flex flex-col gap-2">
169
+ <ModusInputLabel forId="disabled-a" labelText="Disabled Options" />
170
+ <div className="flex flex-col gap-2">
171
+ <ModusRadio
172
+ inputId="disabled-a"
173
+ label="Disabled Option 1"
174
+ name="disabled-group"
175
+ disabled={true}
176
+ value={true}
177
+ />
178
+ <ModusRadio
179
+ inputId="disabled-b"
180
+ label="Disabled Option 2"
181
+ name="disabled-group"
182
+ disabled={true}
183
+ value={false}
184
+ />
185
+ <ModusRadio
186
+ inputId="disabled-c"
187
+ label="Enabled Option"
188
+ name="disabled-group"
189
+ disabled={false}
190
+ value={false}
191
+ />
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </DemoExample>
196
+
197
+ <DemoExample
198
+ title="Interactive Example"
199
+ description="Radio buttons with two-way binding and event handling."
200
+ >
201
+ <div className="flex flex-col gap-6">
202
+ <div className="flex flex-col gap-2">
203
+ <ModusInputLabel
204
+ forId="interactive-a"
205
+ labelText="Choose Your Plan"
206
+ />
207
+ <div className="flex flex-col gap-2">
208
+ <ModusRadio
209
+ inputId="interactive-a"
210
+ label="Free Plan"
211
+ name="interactive-group"
212
+ value={selectedOption === "free"}
213
+ onInputChange={() => handleRadioChange("free")}
214
+ />
215
+ <ModusRadio
216
+ inputId="interactive-b"
217
+ label="Pro Plan"
218
+ name="interactive-group"
219
+ value={selectedOption === "pro"}
220
+ onInputChange={() => handleRadioChange("pro")}
221
+ />
222
+ <ModusRadio
223
+ inputId="interactive-c"
224
+ label="Enterprise Plan"
225
+ name="interactive-group"
226
+ value={selectedOption === "enterprise"}
227
+ onInputChange={() => handleRadioChange("enterprise")}
228
+ />
229
+ </div>
230
+ </div>
231
+ {selectedOption && (
232
+ <div className="p-4 rounded-lg bg-card border-default">
233
+ <div className="text-sm text-foreground">
234
+ <strong>Selected Option:</strong> {selectedOption}
235
+ </div>
236
+ </div>
237
+ )}
238
+ </div>
239
+ </DemoExample>
240
+ </DemoPage>
241
+ );
242
+ }
@@ -0,0 +1,97 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusRating from "../../components/ModusRating";
6
+
7
+ export default function RatingDemoPage() {
8
+ return (
9
+ <DemoPage
10
+ title="Modus Rating"
11
+ description="Rating components allow users to provide feedback through visual ratings. Use ratings for reviews, surveys, or any scenario requiring user opinion."
12
+ >
13
+ <DemoExample title="Star Rating" description="Star-based rating system.">
14
+ <div className="flex flex-col gap-6">
15
+ <ModusRating variant="star" value={0} count={5} />
16
+ <ModusRating variant="star" value={2.5} count={5} />
17
+ <ModusRating variant="star" value={5} count={5} />
18
+ </div>
19
+ </DemoExample>
20
+
21
+ <DemoExample
22
+ title="Star Rating with Half Steps"
23
+ description="Star ratings that allow half-step increments."
24
+ >
25
+ <div className="flex flex-col gap-6">
26
+ <ModusRating variant="star" value={2.5} count={5} allowHalf />
27
+ <ModusRating variant="star" value={3.5} count={5} allowHalf />
28
+ <ModusRating variant="star" value={4.5} count={5} allowHalf />
29
+ </div>
30
+ </DemoExample>
31
+
32
+ <DemoExample
33
+ title="Smiley Rating"
34
+ description="Smiley face-based rating system."
35
+ >
36
+ <div className="flex flex-col gap-6">
37
+ <ModusRating variant="smiley" value={1} count={5} />
38
+ <ModusRating variant="smiley" value={3} count={5} />
39
+ <ModusRating variant="smiley" value={5} count={5} />
40
+ </div>
41
+ </DemoExample>
42
+
43
+ <DemoExample
44
+ title="Rating Sizes"
45
+ description="Ratings in different sizes."
46
+ >
47
+ <div className="flex flex-col gap-6">
48
+ <div className="flex flex-col gap-2">
49
+ <div className="text-sm text-muted-foreground">Small</div>
50
+ <ModusRating variant="star" value={3} count={5} size="sm" />
51
+ </div>
52
+
53
+ <div className="flex flex-col gap-2">
54
+ <div className="text-sm text-muted-foreground">
55
+ Medium (Default)
56
+ </div>
57
+ <ModusRating variant="star" value={3} count={5} size="md" />
58
+ </div>
59
+
60
+ <div className="flex flex-col gap-2">
61
+ <div className="text-sm text-muted-foreground">Large</div>
62
+ <ModusRating variant="star" value={3} count={5} size="lg" />
63
+ </div>
64
+ </div>
65
+ </DemoExample>
66
+
67
+ <DemoExample
68
+ title="Custom Rating Count"
69
+ description="Ratings with custom number of items."
70
+ >
71
+ <div className="flex flex-col gap-6">
72
+ <div className="flex flex-col gap-2">
73
+ <div className="text-sm text-muted-foreground">3 Stars</div>
74
+ <ModusRating variant="star" value={2} count={3} />
75
+ </div>
76
+
77
+ <div className="flex flex-col gap-2">
78
+ <div className="text-sm text-muted-foreground">10 Stars</div>
79
+ <ModusRating variant="star" value={7} count={10} />
80
+ </div>
81
+ </div>
82
+ </DemoExample>
83
+
84
+ <DemoExample
85
+ title="Disabled Rating"
86
+ description="Read-only rating display."
87
+ >
88
+ <div className="flex flex-col gap-6">
89
+ <ModusRating variant="star" value={4} count={5} disabled />
90
+ <div className="text-sm text-muted-foreground">
91
+ Disabled ratings are useful for displaying read-only ratings.
92
+ </div>
93
+ </div>
94
+ </DemoExample>
95
+ </DemoPage>
96
+ );
97
+ }
@@ -0,0 +1,111 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusSelect from "../../components/ModusSelect";
6
+
7
+ const countryOptions = [
8
+ { label: "United States", value: "us" },
9
+ { label: "Canada", value: "ca" },
10
+ { label: "Mexico", value: "mx" },
11
+ { label: "United Kingdom", value: "uk" },
12
+ { label: "Germany", value: "de" },
13
+ { label: "France", value: "fr" },
14
+ { label: "Japan", value: "jp" },
15
+ ];
16
+
17
+ const languageOptions = [
18
+ { label: "English", value: "en" },
19
+ { label: "Spanish", value: "es" },
20
+ { label: "French", value: "fr" },
21
+ { label: "German", value: "de" },
22
+ { label: "Japanese", value: "ja" },
23
+ ];
24
+
25
+ const sizeOptions = [
26
+ { label: "Option 1", value: "1" },
27
+ { label: "Option 2", value: "2" },
28
+ { label: "Option 3", value: "3" },
29
+ ];
30
+
31
+ export default function SelectDemoPage() {
32
+ return (
33
+ <DemoPage
34
+ title="Modus Select"
35
+ description="Select components provide a dropdown menu for choosing from a list of options. Use selects when you have multiple options and want to save space compared to radio buttons."
36
+ >
37
+ <DemoExample
38
+ title="Basic Select"
39
+ description="Simple select dropdown with options."
40
+ >
41
+ <div className="flex flex-col gap-6">
42
+ <div className="flex flex-col gap-2">
43
+ <ModusSelect
44
+ inputId="country-select"
45
+ label="Choose a country"
46
+ options={countryOptions}
47
+ />
48
+ </div>
49
+
50
+ <div className="flex flex-col gap-2">
51
+ <ModusSelect
52
+ inputId="language-select"
53
+ label="Select Language"
54
+ options={languageOptions}
55
+ />
56
+ </div>
57
+ </div>
58
+ </DemoExample>
59
+
60
+ <DemoExample
61
+ title="Select Sizes"
62
+ description="Select dropdowns in different sizes."
63
+ >
64
+ <div className="flex flex-col gap-6">
65
+ <div className="flex flex-col gap-2">
66
+ <ModusSelect
67
+ inputId="small-select"
68
+ label="Small"
69
+ options={sizeOptions}
70
+ size="sm"
71
+ />
72
+ </div>
73
+
74
+ <div className="flex flex-col gap-2">
75
+ <ModusSelect
76
+ inputId="medium-select"
77
+ label="Medium"
78
+ options={sizeOptions}
79
+ size="md"
80
+ />
81
+ </div>
82
+
83
+ <div className="flex flex-col gap-2">
84
+ <ModusSelect
85
+ inputId="large-select"
86
+ label="Large"
87
+ options={sizeOptions}
88
+ size="lg"
89
+ />
90
+ </div>
91
+ </div>
92
+ </DemoExample>
93
+
94
+ <DemoExample
95
+ title="Disabled Select"
96
+ description="Select dropdowns in disabled state."
97
+ >
98
+ <div className="flex flex-col gap-6">
99
+ <div className="flex flex-col gap-2">
100
+ <ModusSelect
101
+ inputId="disabled-select"
102
+ label="Disabled"
103
+ options={countryOptions}
104
+ disabled
105
+ />
106
+ </div>
107
+ </div>
108
+ </DemoExample>
109
+ </DemoPage>
110
+ );
111
+ }